From peter.senna at gmail.com Thu Apr 25 09:23:24 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:23:24 -0000 Subject: [vmkit-commits] [vmkit] r180270 - Testing commit Message-ID: <20130425162141.034782A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:21:40 2013 New Revision: 180270 URL: http://llvm.org/viewvc/llvm-project?rev=180270&view=rev Log: Testing commit Modified: vmkit/trunk/CREDITS.TXT Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180270&r1=180269&r2=180270&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:21:40 2013 @@ -35,4 +35,3 @@ N: Gael Thomas E: gael.thomas at lip6.fr W: http://lip6.fr/Gael.Thomas/ D: Primary architect of JnJVM - From peter.senna at gmail.com Thu Apr 25 09:29:58 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:29:58 -0000 Subject: [vmkit-commits] [vmkit] r180269 - Testing commit Message-ID: <20130425162105.473802A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:21:05 2013 New Revision: 180269 URL: http://llvm.org/viewvc/llvm-project?rev=180269&view=rev Log: Testing commit Modified: vmkit/trunk/CREDITS.TXT Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180269&r1=180268&r2=180269&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:21:05 2013 @@ -35,3 +35,4 @@ N: Gael Thomas E: gael.thomas at lip6.fr W: http://lip6.fr/Gael.Thomas/ D: Primary architect of JnJVM + From peter.senna at gmail.com Thu Apr 25 09:45:57 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:45:57 -0000 Subject: [vmkit-commits] [vmkit] r180272 - Initial state for migration. Checkout of commit 81b8d38763defcf2a71a10490d12923c6f176eb2 Message-ID: <20130425164416.67DC42A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:44:13 2013 New Revision: 180272 URL: http://llvm.org/viewvc/llvm-project?rev=180272&view=rev Log: Initial state for migration. Checkout of commit 81b8d38763defcf2a71a10490d12923c6f176eb2 Added: vmkit/trunk/.gitignore vmkit/trunk/www-orig-llvm/ vmkit/trunk/www-orig-llvm/OpenProjects.html - copied, changed from r180270, vmkit/trunk/www/OpenProjects.html vmkit/trunk/www-orig-llvm/content.css - copied, changed from r180270, vmkit/trunk/www/content.css vmkit/trunk/www-orig-llvm/get_involved.html - copied, changed from r180270, vmkit/trunk/www/get_involved.html vmkit/trunk/www-orig-llvm/get_started.html - copied, changed from r180270, vmkit/trunk/www/get_started.html vmkit/trunk/www-orig-llvm/index.html - copied, changed from r180270, vmkit/trunk/www/index.html vmkit/trunk/www-orig-llvm/menu.css - copied, changed from r180270, vmkit/trunk/www/menu.css vmkit/trunk/www-orig-llvm/menu.html.incl - copied, changed from r180270, vmkit/trunk/www/menu.html.incl vmkit/trunk/www-orig-llvm/publications/ vmkit/trunk/www-orig-llvm/publications/ladyvm.html - copied, changed from r180270, vmkit/trunk/www/publications/ladyvm.html vmkit/trunk/www-orig-llvm/publications/osgi_dsn.html - copied, changed from r180270, vmkit/trunk/www/publications/osgi_dsn.html vmkit/trunk/www-orig-llvm/publications/osgi_iies.html - copied, changed from r180270, vmkit/trunk/www/publications/osgi_iies.html vmkit/trunk/www-orig-llvm/publications/thesis.html - copied, changed from r180270, vmkit/trunk/www/publications/thesis.html vmkit/trunk/www-orig-llvm/publications/vmkit.html - copied, changed from r180270, vmkit/trunk/www/publications/vmkit.html vmkit/trunk/www-orig-llvm/pubs.html - copied, changed from r180270, vmkit/trunk/www/pubs.html vmkit/trunk/www-orig-llvm/releases/ vmkit/trunk/www-orig-llvm/releases/index.html - copied, changed from r180270, vmkit/trunk/www/releases/index.html vmkit/trunk/www/Makefile vmkit/trunk/www/common.php vmkit/trunk/www/index.php vmkit/trunk/www/index.php.orig (with props) vmkit/trunk/www/involved.php vmkit/trunk/www/lip6.gif vmkit/trunk/www/ls.php vmkit/trunk/www/publis/ vmkit/trunk/www/publis/.biblio vmkit/trunk/www/publis/Makefile vmkit/trunk/www/publis/Publications.php vmkit/trunk/www/publis/Publications_abstracts.php vmkit/trunk/www/publis/Publications_bib.php vmkit/trunk/www/publis/ab-full.bib vmkit/trunk/www/publis/generate-biblio.sh (with props) vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf vmkit/trunk/www/publis/root.php vmkit/trunk/www/publis/vmkit.bib vmkit/trunk/www/root.php vmkit/trunk/www/start.php - copied, changed from r180270, vmkit/trunk/www/get_started.html vmkit/trunk/www/stylesheet.css Removed: vmkit/trunk/www/OpenProjects.html vmkit/trunk/www/content.css vmkit/trunk/www/get_involved.html vmkit/trunk/www/get_started.html vmkit/trunk/www/index.html vmkit/trunk/www/menu.css vmkit/trunk/www/menu.html.incl vmkit/trunk/www/publications/ladyvm.html vmkit/trunk/www/publications/osgi_dsn.html vmkit/trunk/www/publications/osgi_iies.html vmkit/trunk/www/publications/thesis.html vmkit/trunk/www/publications/vmkit.html vmkit/trunk/www/pubs.html vmkit/trunk/www/releases/index.html Modified: vmkit/trunk/autoconf/configure.ac vmkit/trunk/configure vmkit/trunk/include/j3/JavaLLVMCompiler.h vmkit/trunk/include/vmkit/JIT.h vmkit/trunk/lib/j3/ClassLib/Makefile vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.h vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.h vmkit/trunk/lib/j3/VMCore/Jni.cpp vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp vmkit/trunk/lib/vmkit/Compiler/JIT.cpp vmkit/trunk/lib/vmkit/JITGCPass/JITGCPass.cpp vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp vmkit/trunk/mmtk/inline/InlineMethods.cpp vmkit/trunk/mmtk/magic/LowerJavaRT.cpp vmkit/trunk/mmtk/magic/LowerMagic.cpp vmkit/trunk/tools/j3/Makefile vmkit/trunk/tools/precompiler/Makefile vmkit/trunk/tools/vmjc/vmjc.cpp Added: vmkit/trunk/.gitignore URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.gitignore?rev=180272&view=auto ============================================================================== --- vmkit/trunk/.gitignore (added) +++ vmkit/trunk/.gitignore Thu Apr 25 11:44:13 2013 @@ -0,0 +1 @@ +*~ Modified: vmkit/trunk/autoconf/configure.ac URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/autoconf/configure.ac?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/autoconf/configure.ac (original) +++ vmkit/trunk/autoconf/configure.ac Thu Apr 25 11:44:13 2013 @@ -31,12 +31,12 @@ dnl=== dnl===-----------------------------------------------------------------------=== dnl Initialize autoconf and define the package name, version number and dnl email address for reporting bugs. -AC_INIT([vmkit],[0.33svn],[nicolas.geoffray at gmail.com]) +AC_INIT([vmkit],[0.31svn],[nicolas.geoffray at gmail.com]) dnl Provide a copyright substitution and ensure the copyright notice is included dnl in the output of --version option of the generated configure script. -AC_SUBST(VMKIT_COPYRIGHT,["Copyright (c) 2003-2012 Universite Pierre et Marie Curie."]) -AC_COPYRIGHT([Copyright (c) 2003-2012 Universite Pierre et Marie Curie.]) +AC_SUBST(VMKIT_COPYRIGHT,["Copyright (c) 2003-2011 Universite Pierre et Marie Curie."]) +AC_COPYRIGHT([Copyright (c) 2003-2011 Universite Pierre et Marie Curie.]) dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we dnl use some autoconf macros only available in 2.59. Modified: vmkit/trunk/configure URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/configure?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/configure (original) +++ vmkit/trunk/configure Thu Apr 25 11:44:13 2013 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for vmkit 0.33svn. +# Generated by GNU Autoconf 2.68 for vmkit 0.31svn. # # Report bugs to . # @@ -13,7 +13,7 @@ # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (c) 2003-2012 Universite Pierre et Marie Curie. +# Copyright (c) 2003-2011 Universite Pierre et Marie Curie. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -562,8 +562,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='vmkit' PACKAGE_TARNAME='vmkit' -PACKAGE_VERSION='0.33svn' -PACKAGE_STRING='vmkit 0.33svn' +PACKAGE_VERSION='0.31svn' +PACKAGE_STRING='vmkit 0.31svn' PACKAGE_BUGREPORT='nicolas.geoffray at gmail.com' PACKAGE_URL='' @@ -1269,7 +1269,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures vmkit 0.33svn to adapt to many kinds of systems. +\`configure' configures vmkit 0.31svn to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1335,7 +1335,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of vmkit 0.33svn:";; + short | recursive ) echo "Configuration of vmkit 0.31svn:";; esac cat <<\_ACEOF @@ -1435,14 +1435,14 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -vmkit configure 0.33svn +vmkit configure 0.31svn generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (c) 2003-2012 Universite Pierre et Marie Curie. +Copyright (c) 2003-2011 Universite Pierre et Marie Curie. _ACEOF exit fi @@ -1898,7 +1898,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by vmkit $as_me 0.33svn, which was +It was created by vmkit $as_me 0.31svn, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2247,7 +2247,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -VMKIT_COPYRIGHT="Copyright (c) 2003-2012 Universite Pierre et Marie Curie." +VMKIT_COPYRIGHT="Copyright (c) 2003-2011 Universite Pierre et Marie Curie." @@ -6323,7 +6323,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by vmkit $as_me 0.33svn, which was +This file was extended by vmkit $as_me 0.31svn, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6389,7 +6389,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -vmkit config.status 0.33svn +vmkit config.status 0.31svn configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Modified: vmkit/trunk/include/j3/JavaLLVMCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaLLVMCompiler.h?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaLLVMCompiler.h (original) +++ vmkit/trunk/include/j3/JavaLLVMCompiler.h Thu Apr 25 11:44:13 2013 @@ -15,8 +15,8 @@ #include "j3/LLVMInfo.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" +#include "llvm/LLVMContext.h" +#include "llvm/Module.h" #include @@ -51,7 +51,7 @@ protected: llvm::Module* TheModule; llvm::DIBuilder* DebugFactory; J3Intrinsics JavaIntrinsics; - const llvm::DataLayout* TheDataLayout; + const llvm::TargetData* TheTargetData; private: bool enabledException; Modified: vmkit/trunk/include/vmkit/JIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/JIT.h?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/JIT.h (original) +++ vmkit/trunk/include/vmkit/JIT.h Thu Apr 25 11:44:13 2013 @@ -33,7 +33,7 @@ namespace llvm { class JIT; class Module; class PointerType; - class DataLayout; + class TargetData; class TargetMachine; class Type; } Modified: vmkit/trunk/lib/j3/ClassLib/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Makefile?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/Makefile (original) +++ vmkit/trunk/lib/j3/ClassLib/Makefile Thu Apr 25 11:44:13 2013 @@ -13,8 +13,6 @@ EXTRA_DIST = ArrayCopy.inc \ ClasspathConstructor.inc \ ClasspathField.inc \ ClasspathMethod.inc \ - DefineClass.inc \ - Reflect.inc \ SetProperties.inc \ Unsafe.inc Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 11:44:13 2013 @@ -7,10 +7,10 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/Constants.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" +#include "llvm/Constants.h" +#include "llvm/DerivedTypes.h" +#include "llvm/LLVMContext.h" +#include "llvm/Module.h" #include "vmkit/JIT.h" Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:44:13 2013 @@ -7,15 +7,15 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/BasicBlock.h" -#include "llvm/IR/Constants.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" +#include "llvm/BasicBlock.h" +#include "llvm/Constants.h" +#include "llvm/Instructions.h" +#include "llvm/LLVMContext.h" +#include "llvm/Module.h" #include "llvm/PassManager.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/TargetRegistry.h" -#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetData.h" #include "vmkit/UTF8.h" #include "vmkit/Thread.h" @@ -1808,8 +1808,8 @@ JavaAOTCompiler::JavaAOTCompiler(const s options.NoFramePointerElim = true; TargetMachine* TM = TheTarget->createTargetMachine( vmkit::VmkitModule::getHostTriple(), "", "", options); - TheDataLayout = TM->getDataLayout(); - TheModule->setDataLayout(TheDataLayout->getStringRepresentation()); + TheTargetData = TM->getTargetData(); + TheModule->setDataLayout(TheTargetData->getStringRepresentation()); TheModule->setTargetTriple(TM->getTargetTriple()); JavaIntrinsics.init(TheModule); initialiseAssessorInfo(); @@ -1896,7 +1896,7 @@ void JavaAOTCompiler::printStats() { Module* Mod = getLLVMModule(); for (Module::const_global_iterator i = Mod->global_begin(), e = Mod->global_end(); i != e; ++i) { - size += TheDataLayout->getTypeAllocSize(i->getType()); + size += TheTargetData->getTypeAllocSize(i->getType()); } fprintf(stdout, "%lluB\n", (unsigned long long int)size); } Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:44:13 2013 @@ -14,12 +14,14 @@ #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include "llvm/Analysis/DIBuilder.h" #include #include "vmkit/JIT.h" @@ -1259,8 +1261,7 @@ llvm::Function* JavaJIT::javaCompile() { const UTF8* name = compilingClass->ctpInfo->UTF8At(AR.AnnotationNameIndex); if (name->equals(TheCompiler->InlinePragma)) { - llvmFunction->removeFnAttr( - Attribute::get(*llvmContext, Attribute::NoInline)); + llvmFunction->removeFnAttr(Attribute::NoInline); llvmFunction->addFnAttr(Attribute::AlwaysInline); } else if (name->equals(TheCompiler->NoInlinePragma)) { llvmFunction->addFnAttr(Attribute::NoInline); Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.h?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.h (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.h Thu Apr 25 11:44:13 2013 @@ -13,16 +13,15 @@ #include #include -#include "llvm/IR/BasicBlock.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Metadata.h" -#include "llvm/IR/Type.h" -#include "llvm/IR/Value.h" -#include "llvm/DIBuilder.h" -#include "llvm/DebugInfo.h" +#include "llvm/BasicBlock.h" +#include "llvm/Function.h" +#include "llvm/Instructions.h" +#include "llvm/LLVMContext.h" +#include "llvm/Metadata.h" +#include "llvm/Type.h" +#include "llvm/Value.h" #include "llvm/Support/DebugLoc.h" +#include "llvm/Analysis/DebugInfo.h" #include "types.h" Modified: vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp Thu Apr 25 11:44:13 2013 @@ -7,13 +7,13 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/Constants.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" -#include "llvm/DebugInfo.h" +#include "llvm/Constants.h" +#include "llvm/DerivedTypes.h" +#include "llvm/Function.h" +#include "llvm/Instructions.h" +#include "llvm/LLVMContext.h" +#include "llvm/Module.h" +#include "llvm/Analysis/DebugInfo.h" #include "llvm/CodeGen/GCStrategy.h" #include #include "llvm/CodeGen/MachineFunction.h" @@ -22,7 +22,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetData.h" #include <../lib/ExecutionEngine/JIT/JIT.h> #include "VmkitGC.h" @@ -166,8 +166,8 @@ JavaJITCompiler::JavaJITCompiler(const s executionEngine = engine.create(); executionEngine->RegisterJITEventListener(&listener); - TheDataLayout = executionEngine->getDataLayout(); - TheModule->setDataLayout(TheDataLayout->getStringRepresentation()); + TheTargetData = executionEngine->getTargetData(); + TheModule->setDataLayout(TheTargetData->getStringRepresentation()); TheModule->setTargetTriple(vmkit::VmkitModule::getHostTriple()); JavaIntrinsics.init(TheModule); initialiseAssessorInfo(); Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 11:44:13 2013 @@ -13,12 +13,12 @@ #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include "vmkit/JIT.h" Modified: vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp Thu Apr 25 11:44:13 2013 @@ -7,12 +7,12 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" +#include "llvm/LLVMContext.h" +#include "llvm/Module.h" #include "llvm/PassManager.h" -#include "llvm/DIBuilder.h" +#include "llvm/Analysis/DIBuilder.h" #include "llvm/Analysis/LoopPass.h" -#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetData.h" #include "vmkit/JIT.h" @@ -61,7 +61,7 @@ Function* JavaLLVMCompiler::parseFunctio // We are jitting. Take the lock. vmkit::VmkitModule::protectIR(); if (func->getLinkage() == GlobalValue::ExternalWeakLinkage) { - JavaJIT jit(this, meth, func, LMI->isCustomizable? customizeFor : NULL); + JavaJIT jit(this, meth, func, customizeFor); if (isNative(meth->access)) { jit.nativeCompile(); vmkit::VmkitModule::runPasses(func, JavaNativeFunctionPasses); @@ -75,9 +75,11 @@ Function* JavaLLVMCompiler::parseFunctio if (!LMI->isCustomizable && jit.isCustomizable) { // It's the first time we parsed the method and we just found // out it can be customized. - // TODO(geoffray): return a customized version to this caller. meth->isCustomizable = true; LMI->isCustomizable = true; + if (customizeFor != NULL) { + LMI->setCustomizedVersion(customizeFor, func); + } } } vmkit::VmkitModule::unprotectIR(); @@ -106,13 +108,13 @@ llvm::FunctionPass* createLowerConstantC void JavaLLVMCompiler::addJavaPasses() { JavaNativeFunctionPasses = new FunctionPassManager(TheModule); - JavaNativeFunctionPasses->add(new DataLayout(TheModule)); + JavaNativeFunctionPasses->add(new TargetData(TheModule)); J3FunctionPasses = new FunctionPassManager(TheModule); J3FunctionPasses->add(createLowerConstantCallsPass(this)); JavaFunctionPasses = new FunctionPassManager(TheModule); - JavaFunctionPasses->add(new DataLayout(TheModule)); + JavaFunctionPasses->add(new TargetData(TheModule)); vmkit::VmkitModule::addCommandLinePasses(JavaFunctionPasses); } Modified: vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp Thu Apr 25 11:44:13 2013 @@ -7,14 +7,14 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/BasicBlock.h" -#include "llvm/IR/CallingConv.h" -#include "llvm/IR/Constants.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" +#include "llvm/BasicBlock.h" +#include "llvm/CallingConv.h" +#include "llvm/Constants.h" +#include "llvm/Instructions.h" +#include "llvm/Module.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/MutexGuard.h" -#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetData.h" #include "vmkit/JIT.h" @@ -38,7 +38,7 @@ using namespace llvm; Type* LLVMClassInfo::getVirtualType() { if (!virtualType) { std::vector fields; - const DataLayout* targetData = Compiler->TheDataLayout; + const TargetData* targetData = Compiler->TheTargetData; const StructLayout* sl = 0; StructType* structType = 0; LLVMContext& context = Compiler->getLLVMModule()->getContext(); @@ -109,7 +109,7 @@ Type* LLVMClassInfo::getStaticType() { StructType* structType = StructType::get(context, fields, false); staticType = PointerType::getUnqual(structType); - const DataLayout* targetData = Compiler->TheDataLayout; + const TargetData* targetData = Compiler->TheTargetData; const StructLayout* sl = targetData->getStructLayout(structType); // TODO: put that elsewhere. @@ -209,6 +209,17 @@ Function* LLVMMethodInfo::getMethod(Clas return result; } +void LLVMMethodInfo::setCustomizedVersion(Class* cl, llvm::Function* F) { + assert(customizedVersions.size() == 0); + vmkit::ThreadAllocator allocator; + if (Compiler->emitFunctionName()) { + char* buf = GetMethodName(allocator, methodDef, cl); + F->setName(buf); + } + methodFunction = NULL; + customizedVersions[cl] = F; +} + FunctionType* LLVMMethodInfo::getFunctionType() { if (!functionType) { Signdef* sign = methodDef->getSignature(); Modified: vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Thu Apr 25 11:44:13 2013 @@ -7,11 +7,11 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/Constants.h" -#include "llvm/IR/GlobalVariable.h" +#include "llvm/Constants.h" +#include "llvm/GlobalVariable.h" #include "llvm/Pass.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/Instructions.h" +#include "llvm/Function.h" +#include "llvm/Instructions.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 11:44:13 2013 @@ -156,7 +156,8 @@ public: /// throwFromJNI - Throw an exception after executing JNI code. /// void throwFromJNI(word_t SP) { - // Nothing to do. The RETURN_FROM_JNI will take care of it. + endKnownFrame(); + enterUncooperativeCode(SP); } /// throwFromNative - Throw an exception after executing Native code. Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Thu Apr 25 11:44:13 2013 @@ -459,7 +459,7 @@ jboolean IsInstanceOf(JNIEnv *env, jobje END_JNI_EXCEPTION - RETURN_FROM_JNI(0); + return JNI_FALSE; } Modified: vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp Thu Apr 25 11:44:13 2013 @@ -8,12 +8,12 @@ //===----------------------------------------------------------------------===// -#include "llvm/IR/Constants.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/Module.h" +#include "llvm/Constants.h" +#include "llvm/Function.h" +#include "llvm/GlobalVariable.h" +#include "llvm/Module.h" #include "llvm/Pass.h" -#include "llvm/IR/Instructions.h" +#include "llvm/Instructions.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/Compiler.h" Modified: vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp Thu Apr 25 11:44:13 2013 @@ -7,16 +7,16 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/Constants.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" +#include "llvm/Constants.h" +#include "llvm/GlobalVariable.h" +#include "llvm/Function.h" +#include "llvm/Instructions.h" +#include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetData.h" #include "llvm/Transforms/Utils/Cloning.h" #include "vmkit/JIT.h" @@ -45,7 +45,7 @@ bool InlineMalloc::runOnFunction(Functio Function* ArrayWriteBarrier = F.getParent()->getFunction("arrayWriteBarrier"); Function* NonHeapWriteBarrier = F.getParent()->getFunction("nonHeapWriteBarrier"); bool Changed = false; - const DataLayout *TD = getAnalysisIfAvailable(); + const TargetData *TD = getAnalysisIfAvailable(); for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) { BasicBlock *Cur = BI; for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) { Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 11:44:13 2013 @@ -7,16 +7,16 @@ // //===----------------------------------------------------------------------===// -#include -#include -#include -#include -#include +#include +#include +#include +#include #include -#include -#include +#include +#include #include -#include +#include +#include #include #include #include @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include #include <../lib/ExecutionEngine/JIT/JIT.h> Modified: vmkit/trunk/lib/vmkit/JITGCPass/JITGCPass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/JITGCPass/JITGCPass.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/JITGCPass/JITGCPass.cpp (original) +++ vmkit/trunk/lib/vmkit/JITGCPass/JITGCPass.cpp Thu Apr 25 11:44:13 2013 @@ -9,8 +9,8 @@ //===----------------------------------------------------------------------===// -#include "llvm/IR/Intrinsics.h" -#include "llvm/IR/Module.h" +#include "llvm/Intrinsics.h" +#include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Support/raw_ostream.h" Modified: vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp (original) +++ vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp Thu Apr 25 11:44:13 2013 @@ -9,8 +9,8 @@ //===----------------------------------------------------------------------===// -#include "llvm/IR/Intrinsics.h" -#include "llvm//IR/Module.h" +#include "llvm/Intrinsics.h" +#include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Support/raw_ostream.h" Modified: vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp (original) +++ vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp Thu Apr 25 11:44:13 2013 @@ -7,23 +7,23 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/Constants.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Type.h" +#include "llvm/Constants.h" +#include "llvm/DerivedTypes.h" +#include "llvm/Type.h" #include "llvm/CodeGen/GCs.h" #include "llvm/CodeGen/GCStrategy.h" #include "llvm/CodeGen/AsmPrinter.h" #include "llvm/CodeGen/GCMetadataPrinter.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineInstrBuilder.h" -#include "llvm/IR/Module.h" +#include "llvm/Module.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCSymbol.h" #include "llvm/MC/MCStreamer.h" #include "llvm/Target/Mangler.h" -#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetData.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetLoweringObjectFile.h" #include "llvm/Target/TargetMachine.h" @@ -289,7 +289,7 @@ Constant* FindMetadata(const Function& F /// either condition is detected in a function which uses the GC. /// void VmkitAOTGCMetadataPrinter::finishAssembly(AsmPrinter &AP) { - unsigned IntPtrSize = AP.TM.getDataLayout()->getPointerSize(0); + unsigned IntPtrSize = AP.TM.getTargetData()->getPointerSize(); AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection()); Modified: vmkit/trunk/mmtk/inline/InlineMethods.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/inline/InlineMethods.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/mmtk/inline/InlineMethods.cpp (original) +++ vmkit/trunk/mmtk/inline/InlineMethods.cpp Thu Apr 25 11:44:13 2013 @@ -7,13 +7,13 @@ // //===----------------------------------------------------------------------===// -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include using namespace llvm; Modified: vmkit/trunk/mmtk/magic/LowerJavaRT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerJavaRT.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/mmtk/magic/LowerJavaRT.cpp (original) +++ vmkit/trunk/mmtk/magic/LowerJavaRT.cpp Thu Apr 25 11:44:13 2013 @@ -7,11 +7,11 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/Constants.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" +#include "llvm/Constants.h" +#include "llvm/Function.h" +#include "llvm/Instructions.h" +#include "llvm/LLVMContext.h" +#include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/Compiler.h" Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerMagic.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/mmtk/magic/LowerMagic.cpp (original) +++ vmkit/trunk/mmtk/magic/LowerMagic.cpp Thu Apr 25 11:44:13 2013 @@ -8,11 +8,11 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/SmallPtrSet.h" -#include "llvm/IR/Constants.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" +#include "llvm/Constants.h" +#include "llvm/Function.h" +#include "llvm/Instructions.h" +#include "llvm/LLVMContext.h" +#include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/Compiler.h" Modified: vmkit/trunk/tools/j3/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/j3/Makefile?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/tools/j3/Makefile (original) +++ vmkit/trunk/tools/j3/Makefile Thu Apr 25 11:44:13 2013 @@ -11,7 +11,7 @@ LEVEL = ../.. include $(LEVEL)/Makefile.config TOOLNAME = j3 -USEDLIBS = Classpath.a J3.a J3Compiler.a Vmkit.a VmkitCompiler.a CommonThread.a FinalMMTk.a InlineMMTk.a Precompiled.a BootstrapClasses.a Classpath.a +USEDLIBS = Classpath.a J3.a J3Compiler.a Vmkit.a VmkitCompiler.a CommonThread.a FinalMMTk.a InlineMMTk.a Precompiled.a BootstrapClasses.a BUILD_FRAMETABLE = 1 LINK_COMPONENTS = jit nativecodegen scalaropts instrumentation ipa ipo Modified: vmkit/trunk/tools/precompiler/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/Makefile?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/tools/precompiler/Makefile (original) +++ vmkit/trunk/tools/precompiler/Makefile Thu Apr 25 11:44:13 2013 @@ -12,7 +12,7 @@ include $(LEVEL)/Makefile.config DIRS = trainer TOOLNAME = precompiler -USEDLIBS = Classpath.a J3.a J3Compiler.a Vmkit.a VmkitCompiler.a CommonThread.a FinalMMTk.a Classpath.a +USEDLIBS = Classpath.a J3.a J3Compiler.a Vmkit.a VmkitCompiler.a CommonThread.a FinalMMTk.a BUILD_FRAMETABLE = 1 LINK_COMPONENTS = jit nativecodegen scalaropts instrumentation ipa ipo asmparser linker bitwriter Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180272&r1=180271&r2=180272&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 11:44:13 2013 @@ -17,9 +17,9 @@ #include #include "llvm/LinkAllPasses.h" -#include "llvm/IR/Module.h" +#include "llvm/LinkAllVMCore.h" +#include "llvm/Module.h" #include "llvm/PassManager.h" -#include "llvm/Analysis/Verifier.h" #include "llvm/Assembly/PrintModulePass.h" #include "llvm/CodeGen/LinkAllCodegenComponents.h" #include "llvm/Bitcode/ReaderWriter.h" @@ -34,7 +34,7 @@ #include "llvm/Support/SystemUtils.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Signals.h" -#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetData.h" #include "llvm/Target/TargetMachine.h" Copied: vmkit/trunk/www-orig-llvm/OpenProjects.html (from r180270, vmkit/trunk/www/OpenProjects.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/OpenProjects.html?p2=vmkit/trunk/www-orig-llvm/OpenProjects.html&p1=vmkit/trunk/www/OpenProjects.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/content.css (from r180270, vmkit/trunk/www/content.css) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/content.css?p2=vmkit/trunk/www-orig-llvm/content.css&p1=vmkit/trunk/www/content.css&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/get_involved.html (from r180270, vmkit/trunk/www/get_involved.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/get_involved.html?p2=vmkit/trunk/www-orig-llvm/get_involved.html&p1=vmkit/trunk/www/get_involved.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/get_started.html (from r180270, vmkit/trunk/www/get_started.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/get_started.html?p2=vmkit/trunk/www-orig-llvm/get_started.html&p1=vmkit/trunk/www/get_started.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/index.html (from r180270, vmkit/trunk/www/index.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/index.html?p2=vmkit/trunk/www-orig-llvm/index.html&p1=vmkit/trunk/www/index.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/menu.css (from r180270, vmkit/trunk/www/menu.css) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/menu.css?p2=vmkit/trunk/www-orig-llvm/menu.css&p1=vmkit/trunk/www/menu.css&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/menu.html.incl (from r180270, vmkit/trunk/www/menu.html.incl) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/menu.html.incl?p2=vmkit/trunk/www-orig-llvm/menu.html.incl&p1=vmkit/trunk/www/menu.html.incl&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/publications/ladyvm.html (from r180270, vmkit/trunk/www/publications/ladyvm.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/publications/ladyvm.html?p2=vmkit/trunk/www-orig-llvm/publications/ladyvm.html&p1=vmkit/trunk/www/publications/ladyvm.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/publications/osgi_dsn.html (from r180270, vmkit/trunk/www/publications/osgi_dsn.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/publications/osgi_dsn.html?p2=vmkit/trunk/www-orig-llvm/publications/osgi_dsn.html&p1=vmkit/trunk/www/publications/osgi_dsn.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/publications/osgi_iies.html (from r180270, vmkit/trunk/www/publications/osgi_iies.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/publications/osgi_iies.html?p2=vmkit/trunk/www-orig-llvm/publications/osgi_iies.html&p1=vmkit/trunk/www/publications/osgi_iies.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/publications/thesis.html (from r180270, vmkit/trunk/www/publications/thesis.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/publications/thesis.html?p2=vmkit/trunk/www-orig-llvm/publications/thesis.html&p1=vmkit/trunk/www/publications/thesis.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/publications/vmkit.html (from r180270, vmkit/trunk/www/publications/vmkit.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/publications/vmkit.html?p2=vmkit/trunk/www-orig-llvm/publications/vmkit.html&p1=vmkit/trunk/www/publications/vmkit.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/pubs.html (from r180270, vmkit/trunk/www/pubs.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/pubs.html?p2=vmkit/trunk/www-orig-llvm/pubs.html&p1=vmkit/trunk/www/pubs.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www-orig-llvm/releases/index.html (from r180270, vmkit/trunk/www/releases/index.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www-orig-llvm/releases/index.html?p2=vmkit/trunk/www-orig-llvm/releases/index.html&p1=vmkit/trunk/www/releases/index.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== --- vmkit/trunk/www/releases/index.html (original) +++ vmkit/trunk/www-orig-llvm/releases/index.html Thu Apr 25 11:44:13 2013 @@ -27,17 +27,10 @@
    -
  • - VMKit release 0.32 -
  • -
  • - VMKit release 0.31 -
  • VMKit release 0.30 ( Release notes ) -
  • VMKit release 0.29 ( Added: vmkit/trunk/www/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/Makefile?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/Makefile (added) +++ vmkit/trunk/www/Makefile Thu Apr 25 11:44:13 2013 @@ -0,0 +1,12 @@ + + +all: compile + +compile: + $(MAKE) -C publis + +deploy: tidy + rsync -av * gaelthomas at scm.gforge.inria.fr:/home/groups/vmkit2/htdocs/ + +tidy: + find . \( -iname "*~" -o -iname "\#*" -o -iname ".DS_Store" \) -exec rm -f {} \; Removed: vmkit/trunk/www/OpenProjects.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/OpenProjects.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/OpenProjects.html (original) +++ vmkit/trunk/www/OpenProjects.html (removed) @@ -1,63 +0,0 @@ - - - - - - "VMKit" JVM and .Net runtimes for LLVM - - - - - - - -
    - -

    Open VMKit Projects

    - -

    Here are a few tasks that are available for newcomers to work on, depending -on what your interests are. This list is provided to generate ideas, it is not -intended to be comprehensive. Please ask on llvm-dev for more specifics.

    - -
      - -
    • Port VMKit's JVM to Harmony or OpenJDK: -VMKit currently uses GNU Classpath for the standard Java classes. Interfacing -with another library such as Apache Harmony (http://harmony.apache.org) or -Sun's OpenJDK (http://openjdk.java.net) may help improving support for latest -benchmarks (http://www.spec.org/jvm2008).
    • -
    - -

    -On the LLVM side, here are a few interesting projects that would help VMKit: -

    - -
      -
    • Adaptive Optimization System: -Being able to adaptively optimize JIT-compiled code would dramastically help -the startup time of VMKit. All the non-adaptive bits are already there in LLVM: -baseline compiler (with the -fast command line and the simple register -allocator), optimized compiler (with the linear scan register allocator), and -a full set of optimizations changeable at runtime. What's left is a system that -dynamically lookup the hotness of methods and re-compile with optimizations the -methods that are often executed. -
    • - -
    • Type-based alias-analysis: -Safe languages such as ones supported by VMKit (Java, C#) benefit a lot from -a type based alias analysis. LLVM currently lacks full support of this feature -for safe languages. -
    • - -
    • Misceallenous Java-related optimizations: -Removal of array bounds checks, null pointer checks, devirtualization, -inlining, etc. -
    • -
    - - -
    - - - Added: vmkit/trunk/www/common.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/common.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/common.php (added) +++ vmkit/trunk/www/common.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1,92 @@ + + + + +
    $text"; + } else { + echo "

    $text

    "; + } + } + + function preambule($title, $active) { + $root=$GLOBALS["ROOT"]; + $dir=$root."/../"; +?> + + + + + + + Gaël Thomas - Home Page + + + + + + + + + +
    + + INRIA + + +

    VMKit2 Project

    +
    + + Laboratoire d'Informatique de Paris6 + +
    + +

    + + + + + + + + + +
    +
    + "; + section($dir, "ls", $active, "ls.php", "Explore"); + } + ?> +
    + + + +"; + // print_r(ini_get_all()); +?> +
    Last update:
    + + + Removed: vmkit/trunk/www/content.css URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/content.css?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/content.css (original) +++ vmkit/trunk/www/content.css (removed) @@ -1,27 +0,0 @@ -html { margin: 0px; } body { margin: 8px; } - -html, body { - padding:0px; - font-size:14px; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222; - line-height:1.5; -} - -h1, h2, h3, tt { color: #000 } - -h1 { padding-top:0px; margin-top:0px;} -h2 { color:#333333; padding-top:0.5em; } -h3 { padding-top: 0.5em; margin-bottom: -0.25em; color:#2d58b7} -li { padding-bottom: 0.5em; } -ul { padding-left:1.5em; } - -/* Slides */ -IMG.img_slide { - display: block; - margin-left: auto; - margin-right: auto -} - -.itemTitle { color:#2d58b7 } - -/* Tables */ -tr { vertical-align:top } Removed: vmkit/trunk/www/get_involved.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/get_involved.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/get_involved.html (original) +++ vmkit/trunk/www/get_involved.html (removed) @@ -1,50 +0,0 @@ - - - - - VMKit - Get Involved - - - - - - - -
    - -

    Getting Involved with the vmkit Project

    - -

    Once you have checked out and built vmkit and -played around with it, you might be wondering what you can do to make it better -and contribute to its development. Alternatively, maybe you just want to follow -the development of the project to see it progress. -

    - -

    Follow what's going on

    - -

    VMKit is a subproject of the LLVM Project, and -uses llvm dev mailing list for development question and the vmkit-commits -mailing list for patches:

    - -
      -
    • vmkit-commits - - This list is for patch submission/discussion.
    • - -
    • llvmdev - -This list is for everything else llvm/vmkit related (questions and answers, bug -reports, etc).
    • - -
    - -

    The best way to talk with other developers on the project is through the llvm-dev mailing -list.

    - - -

    You can also visit the -Open Projects page for a list of interesting things to work on in VMKit.

    - -
    - - Removed: vmkit/trunk/www/get_started.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/get_started.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/get_started.html (original) +++ vmkit/trunk/www/get_started.html (removed) @@ -1,136 +0,0 @@ - - - - - VMKit - Getting Started - - - - - - - -
    - -

    Getting Started: Building and Running VMKit

    - - -

    This page gives you the shortest path to checking out vmkit and demos a few -options. This should get you up and running with the minimum of muss and fuss. -If you like what you see, please consider getting -involved with the vmkit community.

    - - -

    A word of warning

    - -

    While this work aims to provide a fully functional JVM, it -is still early work and is under heavy development. -

    Some of the common missing pieces in vmkit/llvm are:

    - -
      -
    1. Mixed interpretation/compilation.
    2. -
    3. Adaptive optimization.
    4. -
    - -

    Building vmkit / working with the code

    - -

    If you would like to check out and build the project, the current scheme -is:

    - -
      -
    1. Checkout - LLVM and - Clang from SVN head. -
    2. - -
        -
      • svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
      • -
      • cd llvm/tools
      • -
      • svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
      • -
      • cd ..
      • -
      • ./configure; make ENABLE_OPTIMIZED=1
      • -
      - - -
    3. Download - GNU Classpath 0.97.2:
    4. - -
        -
      • tar zxvf classpath-0.97.2.tar.gz
      • -
      • cd classpath-0.97.2
      • -
      • ./configure --disable-plugin --disable-examples --disable-Werror; make
      • -
      • cd lib
      • -
      • If you are running on Linux:
      • -
          -
        • ln -s ../native/jni/gtk-peer/.libs/libgtkpeer.so;
        • -
        • ln -s ../native/jni/gconf-peer/.libs/libgconfpeer.so;
        • -
        • ln -s ../native/jni/java-io/.libs/libjavaio.so;
        • -
        • ln -s ../native/jni/java-lang/.libs/libjavalangreflect.so;
        • -
        • ln -s ../native/jni/java-lang/.libs/libjavalang.so;
        • -
        • ln -s ../native/jni/java-net/.libs/libjavanet.so;
        • -
        • ln -s ../native/jni/java-nio/.libs/libjavanio.so;
        • -
        • ln -s ../native/jni/java-util/.libs/libjavautil.so;
        • -
        -
      • If you are running on MacOS:
      • -
          -
        • ln -s ../native/jni/gtk-peer/.libs/libgtkpeer.dylib;
        • -
        • ln -s ../native/jni/gconf-peer/.libs/libgconfpeer.dylib;
        • -
        • ln -s ../native/jni/java-io/.libs/libjavaio.dylib;
        • -
        • ln -s ../native/jni/java-lang/.libs/libjavalangreflect.dylib;
        • -
        • ln -s ../native/jni/java-lang/.libs/libjavalang.dylib;
        • -
        • ln -s ../native/jni/java-net/.libs/libjavanet.dylib;
        • -
        • ln -s ../native/jni/java-nio/.libs/libjavanio.dylib;
        • -
        • ln -s ../native/jni/java-util/.libs/libjavautil.dylib;
        • -
        -
      - -
    5. Checkout vmkit:
    6. -
        -
      • svn co http://llvm.org/svn/llvm-project/vmkit/trunk vmkit
      • - -
      -
    7. Configure vmkit:
    8. -
        -
      • ./configure
      • -
        -
        --with-llvmsrc=<directory>
        -
        Tell vmkit where the LLVM source tree is located.
        -

        --with-llvmobj=<directory>
        -
        Tell vmkit where the LLVM object tree is located.
        -

        --with-gnu-classpath-glibj=<file or directory>
        -
        Tell vmkit where GNU Classpath glibj.zip is located.
        -

        --with-gnu-classpath-libs=<directory>
        -
        Tell vmkit where GNU Classpath libs are located.
        -

        --with-mmtk-plan=
        -
        -
          -
        • org.mmtk.plan.marksweep.MS (default)
        • -
        • org.mmtk.plan.copyms.CopyMS
        • -
        • org.mmtk.plan.semispace.SS
        • -
        • org.mmtk.plan.immix.Immix
        • -
        • org.mmtk.plan.generational.marksweep.GenMS
        • -
        • org.mmtk.plan.generational.copying.GenCopy
        • -
        • org.mmtk.plan.generational.immix.GenImmix
        • -
        -
        -
        - -
      - -
    9. Build vmkit:
    10. -
        -
      • cd vmkit
      • -
      • make ENABLE_OPTIMIZED=1 (this will give you a release build)
      • -
      - -
    11. Try it out: (assuming vmkit/Release+Asserts/bin is in your path)
    12. -
        -
      • j3 --help
      • -
      • j3 HelloWorld
      • -
      -
    - -
    - - Removed: vmkit/trunk/www/index.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/index.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/index.html (original) +++ vmkit/trunk/www/index.html (removed) @@ -1,111 +0,0 @@ - - - - - - VMKit: a substrate for virtual machines - - - - - -
    - -

    VMKit: a substrate for virtual machines

    - - -

    The VMKit project is a framework for building virtual machines. It uses - LLVM for compiling and optimizing high-level - languages to machine code, and MMTk - to manage memory. J3 is an implementation of a JVM with VMKit. - You can get and build the source of J3 - today.

    - - -

    Features

    - - -

    VMKit provides the following features:

    - -

    End-User Features:

    - -
      -
    • Precise garbage collection.
    • -
    • Just-in-Time and Ahead-of-Time compilation.
    • -
    • Portable on many architectures (x86, x64, ppc32, ppc64, arm).
    • -
    - -

    Developer Features:

    - -
      -
    • Relatively small code base (~ 20k loc per VM)
    • -
    • Infrastructure for running multiple VM/applications in a single - process
    • -
    • Infrastructure for virtual machine research and development
    • -
    - - -

    Why?

    - - -

    The development of VMKit was started out of a need to factorize virtual - machine development. The JVM and CLI virtual machine have many - similarities, but are too high-level to be the basis of a "universal" - virtual machine. The LLVM IR on the opposite is low-level enough to be - able to execute these VMs. VMKit is a proof of concept implementation - towards that direction.

    - -

    Paper on the design of VMKit: -

    - -

    The PhD thesis that initiated VMKit: -

    - -

    An introduction to VMKit can be found in the following video lectures: -

    -

    - - -

    Current Status

    - - -

    VMKit currently has a decent implementation of a JVM. It executes - large projects (e.g. OSGi Felix, Tomcat, Eclipse) and the - DaCapo benchmarks. -

    - -

    The JVM has been tested on Linux/x64, Linux/x86, Linux/ppc32, MacOSX/x64, - MacOSX/x86, MacOSX/ppc32. The JVM may work on ppc64. Support for - Windows has not been investigated. -

    - - - -

    Get it and get involved!

    - - -

    Start by getting the code, building it, and - playing with it. This will show you the sorts of things we can do - today.

    - -

    Once you've done that, please consider getting - involved in the VMKit community. Currently, VMKit is tightly - integrated into the LLVM community. You can sign up for the LLVM mailing - list to ask and learn about how the project works.

    -
    - - Added: vmkit/trunk/www/index.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/index.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/index.php (added) +++ vmkit/trunk/www/index.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1,56 @@ + + +

    +Current MREs are monolithic. Extending them to propose new +features or reusing them to execute new languages is difficult. +VMKit2 is a library that +eases the development of new MREs and the process of experimenting +with new mechanisms inside MREs. VMKit2 +provides the basic components of MREs: a JIT compiler, a GC, +and a thread manager. VMKit2 is a +fork of the VMKit project. + +

    +VMKit2 relies on LLVM for compilation and +MMTk to manage memory. +Currently, a full Java virtual machine + +

    +For the end user, VMKit2 provides: +

      +
    • Precise garbage collection. +
    • Just-in-Time and Ahead-of-Time compilation. +
    • Portable on many architectures (x86, x64, ppc32, ppc64, arm). +
    +

    + +For the MRE developer, VMKit2 provides: +

      +
    • Relatively small code base (~ 20k loc per VM) +
    • Infrastructure for virtual machine research and development +
    + +

    Current Status

    +

    +VMKit2 currently has a decent implementation of a JVM called J3. It executes large +projects (e.g. OSGi Felix, Tomcat, Eclipse) and the DaCapo benchmarks. A R virtual machine +is currently under heavy development. + +

    +J3 has been tested on Linux/x64, Linux/x86, Linux/ppc32, MacOSX/x64, MacOSX/x86, MacOSX/ppc32. The JVM may work on ppc64. +Support for Windows has not been investigated. + +

    +While this work aims to provide a fully functional JVM, it is still early work and is under heavy development. +Some of the common missing pieces in vmkit2/llvm are: +

      +
    • Mixed interpretation/compilation. +
    • Adaptive optimization. +
    + + + Added: vmkit/trunk/www/index.php.orig URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/index.php.orig?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/index.php.orig (added) +++ vmkit/trunk/www/index.php.orig Thu Apr 25 11:44:13 2013 @@ -0,0 +1,159 @@ +'; +?> + + + + + + + <?php echo $project_name; ?> + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + +WARNING: Private Projects' webspace is not private. It is visible for everybody with an internet connection.
    +ATTENTION : l'espace web des projets privés n'est pas privé. Il est visible par tous les utilisateurs d'Internet. +
    + +

     

    +
    +  

    +

    + In case of problems, mail the administrators or file a bug +
    + + + +
    + + + +
    + + +
    +
    +Powered By GForge Collaborative Development Environment +
    + + + + Propchange: vmkit/trunk/www/index.php.orig ------------------------------------------------------------------------------ svn:executable = * Added: vmkit/trunk/www/involved.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/involved.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/involved.php (added) +++ vmkit/trunk/www/involved.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1,15 @@ + + +

    +First, you can participate to the mailing lists that are hosted by inria:
    +VMKit2 administration page + +

    +Then, you can also participate to the development, just send a mail to the mailing list + + + Added: vmkit/trunk/www/lip6.gif URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/lip6.gif?rev=180272&view=auto ============================================================================== Binary files vmkit/trunk/www/lip6.gif (added) and vmkit/trunk/www/lip6.gif Thu Apr 25 11:44:13 2013 differ Added: vmkit/trunk/www/ls.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/ls.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/ls.php (added) +++ vmkit/trunk/www/ls.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1,60 @@ +"; +// echo "base: ", $base, "
    "; +// echo "current: ", $current, "
    "; + + if($current == "") { + $pwd = $base; + } + + $rel_current = $ROOT.$current; + $current = "/" . $current; + +// echo "current: ", $current, "
    "; +// echo "rel_current: ", $rel_current, "
    "; + + if (is_dir($pwd)) { + preambule("Directory: " . $current, "ls"); + + echo "

    "; + echo ""; + + if ($dh = opendir($pwd)) { + while (($file = readdir($dh)) !== false) { + if(is_dir($pwd . "/" . $file) && ($file != ".git") && (($file != "..") || ($pwd != $base)) && ($file != ".")) { + echo "
    \n"; + } + } + closedir($dh); + } + + echo "

    "; + if ($dh = opendir($pwd)) { + while (($file = readdir($dh)) !== false) { + if(!is_dir($pwd . "/" . $file) && ($file != ".gitignore")) { + echo "$file
    "; + } + } + closedir($dh); + + } + + echo "

    "; + + epilogue(); + } else { + echo "should not happen; current is: '" . $current . "'"; + } +?> + + + + Removed: vmkit/trunk/www/menu.css URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/menu.css?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/menu.css (original) +++ vmkit/trunk/www/menu.css (removed) @@ -1,47 +0,0 @@ -/***************/ -/* page layout */ -/***************/ - -html,body { - padding:0px; - font-size:14px; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222; - line-height:1.5; - margin-left: 10px; -} - - -[id=menu] { - position:fixed; - width:25ex; -} -[id=content] { - /* ***** EDIT THIS VALUE IF CONTENT OVERLAPS MENU ***** */ - position:absolute; - left:29ex; - padding-right:4ex; -} - -/**************/ -/* menu style */ -/**************/ - -#menu .submenu { - padding-top:1em; - display:block; -} - -#menu label { - display:block; - font-weight: bold; - text-align: center; - background-color: rgb(192,192,192); -} -#menu a { - padding:0 .2em; - display:block; - text-align: center; - background-color: rgb(235,235,235); -} -#menu a:visited { - color:rgb(100,50,100); -} Removed: vmkit/trunk/www/menu.html.incl URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/menu.html.incl?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/menu.html.incl (original) +++ vmkit/trunk/www/menu.html.incl (removed) @@ -1,29 +0,0 @@ - Removed: vmkit/trunk/www/publications/ladyvm.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publications/ladyvm.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/publications/ladyvm.html (original) +++ vmkit/trunk/www/publications/ladyvm.html (removed) @@ -1,51 +0,0 @@ - - - - - - A Lazy Developer Approach: Building a JVM with Third Party Software - - - -
    - A Lazy Developer Approach: Building a JVM with Third Party Software -
    -
    - Nicolas Geoffray, Gael Thomas, Charles Clement and Bertil Folliot -
    - -

    Abstract:

    -
    -The development of a complete Java Virtual Machine (JVM) -implementation is a tedious process which involves knowledge in different -areas: garbage collection, just in time compilation, interpretation, file -parsing, data structures, etc. The result is that developing its own virtual -machine requires a considerable amount of man/year. In this paper we show that -one can implement a JVM with third party software and with performance -comparable to industrial and top open-source JVMs. Our proof-of-concept -implementation uses existing versions of a garbage collector, a just in -time compiler, and the base library, and is robust enough to -execute complex Java applications such as the OSGi Felix -implementation and the Tomcat servlet container. - -
    - -

    Bibtex:

    -
    - at inproceedings{geoffray08ladyvm,
    -        author = {N. Geoffray  and G. Thomas and C. Cl\'ement and B. Folliot},
    -        title = { A Lazy Developer Approach: Building a JVM with Third Party Software }, 
    -        booktitle = {{International Conference on Principles and Practice of Programming In Java (PPPJ 2008)  }}, 
    -        year = {2008},
    -        address = {Modena, Italy},
    -        month = {September},
    -}
    -
    - -

    Download:

    - - - - Removed: vmkit/trunk/www/publications/osgi_dsn.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publications/osgi_dsn.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/publications/osgi_dsn.html (original) +++ vmkit/trunk/www/publications/osgi_dsn.html (removed) @@ -1,55 +0,0 @@ - - - - - - I-JVM: a Java Virtual Machine for Component Isolation in OSGi - - - -
    - I-JVM: a Java Virtual Machine for Component Isolation in OSGi -
    -
    - Nicolas Geoffray, Gael Thomas, Gilles Muller, Pierre Parrend, Stephane Frenot, Bertil Folliot -
    - -

    Abstract:

    -
    -The OSGi framework is a Java-based, centralized, component oriented -platform. It is being widely adopted as an execution environment for -the development of extensible applications. However, current Java -Virtual Machines are unable to isolate components from each other. -For instance, a malicious component can freeze the complete platform -by allocating too much memory or alter the behavior of other components by -modifying shared variables. - -This paper presents I-JVM, a Java Virtual Machine that provides a -lightweight approach to isolation while preserving compatibility with -legacy OSGi applications. Our evaluation of I-JVM shows that it solves -the 8 known OSGi vulnerabilities that are due to the Java Virtual -Machine and that the overhead of I-JVM compared to the JVM on which -it is based is below 20%. -
    - -

    Bibtex:

    -
    - at inproceedings{geoffray09ijvm,
    -  author = {N. Geoffray and G. Thomas and G. Muller and P. Parrend and S. Fr\'enot and B. Folliot},
    -  title = {{I-JVM: a Java Virtual Machine for Component Isolation in OSGi}},
    -  booktitle = {International Conference on Dependable Systems and Networks (DSN 2009)},
    -  publisher = {IEEE Computer Society},
    -  pdf = {files/ijvm.pdf},
    -  year = {2009},
    -  month = {June},
    -  address = {Estoril, Portugal}
    -}
    -
    - -

    Download:

    - - - - Removed: vmkit/trunk/www/publications/osgi_iies.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publications/osgi_iies.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/publications/osgi_iies.html (original) +++ vmkit/trunk/www/publications/osgi_iies.html (removed) @@ -1,49 +0,0 @@ - - - - - - Towards a new Isolation Abstraction for OSGi - - - -
    - Towards a new Isolation Abstraction for OSGi -
    -
    - Nicolas Geoffray, Gael Thomas, Charles Clement and Bertil Folliot -
    - -

    Abstract:

    -
    -The Open Service Gateway Initiative (OSGi) specification defines a dynamic Java-based service oriented architecture for networked environments such -as home service gateways. To provide isolation between different services, it relies on the Java class loading mechanism. -While class loaders have many advantages beside isolation, they are poor in protecting the system against -malicious or buggy services. In this paper, -we propose a new approach for service isolation. It is based on the Java isolate technology, without a -task-oriented architecture. Our approach is more tailored to service-oriented architectures and in particular -offers a complete isolation abstraction to the OSGi platform. It is currently under development, hence -we do not provide in this paper any technical details nor results. - -
    - -

    Bibtex:

    -
    - at inproceedings{geoffray08isolationosgi,
    -  author = {N. Geoffray and G. Thomas and C. Cl\'ement and B. Folliot},
    -  title = {{Towards a new Isolation Abstraction for OSGi}},
    -  booktitle = {Proceedings of the First Workshop on Isolation and Integration in Embedded Systems (IIES 2008)},
    -  year = {2008},
    -  pages = {41-45},
    -  address = {Glasgow, Scotland, UK},
    -  month = {April},
    -}
    -
    - -

    Download:

    - - - - Removed: vmkit/trunk/www/publications/thesis.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publications/thesis.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/publications/thesis.html (original) +++ vmkit/trunk/www/publications/thesis.html (removed) @@ -1,59 +0,0 @@ - - - - - - Fostering Systems Research with Managed Runtimes - - - -
    - Fostering Systems Research with Managed Runtimes -
    -
    - Nicolas Geoffray -
    - -

    Abstract:

    -
    -Many systems research projects now target managed runtime environments (MRE) -because they provide better productivity and safety compared to native -environments. Still, developing and optimizing an MRE is a tedious -task that requires many years of development. Although MREs share some common -functionalities, such as a Just In Time Compiler or a Garbage Collector, this -opportunity for sharing has not been yet exploited in implementing MREs. -This thesis describes and evaluates VMKit, a first attempt to build a common -substrate that eases the development and experimentation of high-level MREs and -systems mechanisms. VMKit has been successfully used to build two MREs, -a Java Virtual Machine and a Common Language Runtime, as well as a a new system -mechanism that provides better security in the context of service-oriented -architectures. - -We describe the lessons learnt in implementing such a common -infrastructure from a performance and an ease of development standpoint. -The performance of VMKit are reasonable compared to industrial MREs, and -the high-level MREs are only 20,000 lines of code. Our new system -mechanism only requires the addition of 600 lines of code in VMKit, and -is a significant step towards better dependable systems. - -
    - -

    Bibtex:

    -
    - at PhdThesis{geoffray:phd,
    -        author = {N. Geoffray},
    -        title = { Fostering Systems Research with Managed Runtimes },
    -        schoold = {Universit\'e Pierre et Marie Curie},
    -        year = {2009},
    -        address = {Paris, France},
    -        month = {September},
    -}
    -
    - -

    Download:

    - - - - Removed: vmkit/trunk/www/publications/vmkit.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publications/vmkit.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/publications/vmkit.html (original) +++ vmkit/trunk/www/publications/vmkit.html (removed) @@ -1,62 +0,0 @@ - - - - - - VMKit: a Substrate for Managed Runtime Enviroments - - - -
    - VMKit: a Substrate for Managed Runtime Environments -
    -
    - Nicolas Geoffray, Gael Thomas, Julia Lawall, Gilles Muller and Bertil Folliot -
    - -

    Abstract:

    -
    -Managed Runtime Environments (MREs), such as the JVM and the CLI, form an -attractive environment for program execution, by providing portability and -safety, via the use of a bytecode language and automatic memory management, -as well as good performance, via just-in-time (JIT) compilation. -Nevertheless, developing a fully featured MRE, including e.g. -a garbage collector and JIT compiler, is a herculean -task. As a result, new languages cannot easily take advantage of the -benefits of MREs, and it is difficult to experiment with -extensions of existing MRE based languages. - -This paper describes and evaluates VMKit, a first attempt to build a common -substrate that eases the development of high-level MREs. We have successfully -used VMKit to build two MREs: a Java Virtual Machine and a Common -Language Runtime. We provide an extensive study of the lessons learned in -developing this infrastructure, and assess the ease of implementing new -MREs or MRE extensions and the resulting performance. In -particular, it took one of the authors only one month to develop a Common -Language Runtime using VMKit. VMKit furthermore has performance comparable -to the well established open source MREs Cacao, Apache Harmony and Mono, and is -1.2 to 3 times slower than JikesRVM on most of the DaCapo -benchmarks. - -
    - -

    Bibtex:

    -
    - at inproceedings{geoffray10vmkit,
    -  author = {N. Geoffray and G. Thomas and J.Lawall and G. Muller and B. Folliot},
    -  title = {{VMKit: a Substrate for Managed Runtime Environments}},
    -  booktitle = {Virtual Execution Environment Conference (VEE 2010)},
    -  publisher = {ACM Press},
    -  year = {2010},
    -  month = {March},
    -  address = {Pittsburgh, USA}
    -}
    -
    - -

    Download:

    - - - - Added: vmkit/trunk/www/publis/.biblio URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/.biblio?rev=180272&view=auto ============================================================================== (empty) Added: vmkit/trunk/www/publis/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Makefile?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/Makefile (added) +++ vmkit/trunk/www/publis/Makefile Thu Apr 25 11:44:13 2013 @@ -0,0 +1,20 @@ + +BIB_PAGES=Publications +BIB_FILES=$(patsubst %,%.php,$(BIB_PAGES) $(patsubst %,%_bib, $(BIB_PAGES)) $(patsubst %,%_abstracts, $(BIB_PAGES))) + +.PHONY: all deploy tidy tidy clean distclean +.SECONDARY: +.SUFFIXES: + +all: .biblio + +.biblio: vmkit.bib ab-full.bib Makefile generate-biblio.sh + ./generate-biblio.sh vmkit.bib ab-full.bib 2000 2100 . && touch $@ + +tidy: + find . \( -iname "*~" -o -iname "\#*" -o -iname ".DS_Store" \) -exec rm -f {} \; + +clean: + +distclean: + rm -f $(BIB_FILES) Added: vmkit/trunk/www/publis/Publications.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Publications.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/Publications.php (added) +++ vmkit/trunk/www/publis/Publications.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1,66 @@ + +

    + + + + + + + + + + + + + + + + + + + +
    +[1] + +Nicolas Geoffray, Gaël Thomas, Julia Lawall, Gilles Muller, and Bertil + Folliot. + VMKit: a substrate for managed runtime environments. + In Proceedings of the international conference on Virtual + Execution Environments, VEE '10, pages 51-62, Pittsburgh, PA, USA, 2010. + ACM. +[ bib | +.pdf | +Abstract ] + +
    +[2] + +Nicolas Geoffray, Gaël Thomas, Gilles Muller, Pierre Parrend, Stéphane + Frénot, and Bertil Folliot. + I-JVM: a Java virtual machine for component isolation in OSGi. + In Proceedings of the international conference on Dependable + Systems and Networks, DSN '09, pages 544-553, Estoril, Portugal, 2009. IEEE + Computer Society. +[ bib | +.pdf | +Abstract ] + +
    +[3] + +Nicolas Geoffray, Gaël Thomas, Charles Clément, and Bertil Folliot. + A lazy developer approach: building a JVM with third party + software. + In Proceedings of the international symposium on Principles and + Practice of Programming in Java, PPPJ '08, pages 73-82, Modena, Italy, + 2008. ACM. +[ bib | +.pdf | +Abstract ] + +
    + Added: vmkit/trunk/www/publis/Publications_abstracts.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Publications_abstracts.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/Publications_abstracts.php (added) +++ vmkit/trunk/www/publis/Publications_abstracts.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1,121 @@ + +

    + + + + + + + + + + + + + + + + + + + +
    +[1] + +Nicolas Geoffray, Gaël Thomas, Julia Lawall, Gilles Muller, and Bertil + Folliot. + VMKit: a substrate for managed runtime environments. + In Proceedings of the international conference on Virtual + Execution Environments, VEE '10, pages 51-62, Pittsburgh, PA, USA, 2010. + ACM. +[ bib | +.pdf ] +
    + +Managed Runtime Environments (MREs), such as the JVM and the CLI, form +an attractive environment for program execution, by providing +portability and safety, via the use of a bytecode language and +automatic memory management, as well as good performance, via +just-in-time (JIT) compilation. Nevertheless, developing a fully +featured MRE, including e.g. a garbage collector and JIT compiler, is +a herculean task. As a result, new languages cannot easily take +advantage of the benefits of MREs, and it is difficult to experiment +with extensions of existing MRE based languages.

    +This paper describes and evaluates VMKit, a first attempt to build a +common substrate that eases the development of high-level MREs. We +have successfully used VMKit to build two MREs: a Java Virtual Machine +and a Common Language Runtime. We provide an extensive study of the +lessons learned in developing this infrastructure, and assess the ease +of implementing new MREs or MRE extensions and the resulting +performance. In particular, it took one of the authors only one month +to develop a Common Language Runtime using VMKit. VMKit furthermore +has performance comparable to the well established open source MREs +Cacao, Apache Harmony and Mono, and is 1.2 to 3 times slower than +JikesRVM on most of the DaCapo benchmarks. + +

    +

    +

    +[2] + +Nicolas Geoffray, Gaël Thomas, Gilles Muller, Pierre Parrend, Stéphane + Frénot, and Bertil Folliot. + I-JVM: a Java virtual machine for component isolation in OSGi. + In Proceedings of the international conference on Dependable + Systems and Networks, DSN '09, pages 544-553, Estoril, Portugal, 2009. IEEE + Computer Society. +[ bib | +.pdf ] +
    + +The OSGi framework is a Java-based, centralized, component oriented +platform. It is being widely adopted as an execution environment for +the development of extensible applications. However, current Java +Virtual Machines are unable to isolate components from each other. For +instance, a malicious component can freeze the complete platform by +allocating too much memory or alter the behavior of other components +by modifying shared variables. This paper presents I-JVM, a Java +Virtual Machine that provides a lightweight approach to isolation +while preserving compatibility with legacy OSGi applications. Our +evaluation of I-JVM shows that it solves the 8 known OSGi +vulnerabilities that are due to the Java Virtual Machine and that the +overhead of I-JVM compared to the JVM on which it is based is below +20%. + +
    +

    +

    +[3] + +Nicolas Geoffray, Gaël Thomas, Charles Clément, and Bertil Folliot. + A lazy developer approach: building a JVM with third party + software. + In Proceedings of the international symposium on Principles and + Practice of Programming in Java, PPPJ '08, pages 73-82, Modena, Italy, + 2008. ACM. +[ bib | +.pdf ] +
    + +The development of a complete Java Virtual Machine (JVM) +implementation is a tedious process which involves knowledge in +different areas: garbage collection, just in time compilation, +interpretation, file parsing, data structures, etc. +The result is that developing its own virtual machine requires a +considerable amount of man/year. In this paper +we show that one can implement a JVM with third party +software and with performance comparable to industrial and +top open-source JVMs. Our proof-of-concept implementation +uses existing versions of a garbage collector, a just in +time compiler, and the base library, and is robust enough to +execute complex Java applications such as the OSGi Felix +implementation and the Tomcat servlet container. + +
    +

    +

    + Added: vmkit/trunk/www/publis/Publications_bib.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Publications_bib.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/Publications_bib.php (added) +++ vmkit/trunk/www/publis/Publications_bib.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1,100 @@ + +

    +

    + at inproceedings{vee/10/geoffray/vmkit,
    +  author = {Geoffray, Nicolas and Thomas, Ga\"el and Lawall, Julia and Muller, Gilles and Folliot, Bertil},
    +  title = {{VMKit: a substrate for managed runtime environments}},
    +  booktitle = {Proceedings of the international conference on Virtual Execution Environments, VEE~'10},
    +  publisher = {ACM},
    +  pdf = {geoffray10vee-vmkit.pdf},
    +  year = {2010},
    +  address = {Pittsburgh, PA, USA},
    +  pages = {51--62},
    +  abstract = {
    +Managed Runtime Environments (MREs), such as the JVM and the CLI, form
    +an attractive environment for program execution, by providing
    +portability and safety, via the use of a bytecode language and
    +automatic memory management, as well as good performance, via
    +just-in-time (JIT) compilation. Nevertheless, developing a fully
    +featured MRE, including e.g. a garbage collector and JIT compiler, is
    +a herculean task. As a result, new languages cannot easily take
    +advantage of the benefits of MREs, and it is difficult to experiment
    +with extensions of existing MRE based languages.
    +
    +This paper describes and evaluates VMKit, a first attempt to build a
    +common substrate that eases the development of high-level MREs. We
    +have successfully used VMKit to build two MREs: a Java Virtual Machine
    +and a Common Language Runtime. We provide an extensive study of the
    +lessons learned in developing this infrastructure, and assess the ease
    +of implementing new MREs or MRE extensions and the resulting
    +performance. In particular, it took one of the authors only one month
    +to develop a Common Language Runtime using VMKit. VMKit furthermore
    +has performance comparable to the well established open source MREs
    +Cacao, Apache Harmony and Mono, and is 1.2 to 3 times slower than
    +JikesRVM on most of the DaCapo benchmarks.
    +  }
    +}
    +
    + +
    + at inproceedings{dsn/09/geoffray/ijvm,
    +  author = {Geoffray, Nicolas and Thomas, Ga\"el and Muller, Gilles and Parrend, Pierre and Fr\'enot, St\'ephane and Folliot, Bertil},
    +  title = {{I-JVM: a Java virtual machine for component isolation in OSGi}},
    +  booktitle = {Proceedings of the international conference on Dependable Systems and Networks, DSN~'09},
    +  publisher = {IEEE Computer Society},
    +  pdf = {geoffray09dsn-ijvm.pdf},
    +  year = {2009},
    +  address = {Estoril, Portugal},
    +  pages = {544--553},
    +  abstract = {
    +The OSGi framework is a Java-based, centralized, component oriented
    +platform. It is being widely adopted as an execution environment for
    +the development of extensible applications. However, current Java
    +Virtual Machines are unable to isolate components from each other. For
    +instance, a malicious component can freeze the complete platform by
    +allocating too much memory or alter the behavior of other components
    +by modifying shared variables.  This paper presents I-JVM, a Java
    +Virtual Machine that provides a lightweight approach to isolation
    +while preserving compatibility with legacy OSGi applications. Our
    +evaluation of I-JVM shows that it solves the 8 known OSGi
    +vulnerabilities that are due to the Java Virtual Machine and that the
    +overhead of I-JVM compared to the JVM on which it is based is below
    +20\%.
    +  }
    +}
    +
    + +
    + at inproceedings{pppj/08/geoffray/ladyvm,
    +  author = { Geoffray, Nicolas and Thomas, Ga\"el and Cl\'ement, Charles and Folliot, Bertil},
    +  title = {{A lazy developer approach: building a JVM with third party software}},
    +  booktitle = {Proceedings of the international symposium on Principles and Practice of Programming in Java, PPPJ~'08},
    +  year = {2008},
    +  pages = {73--82},
    +  address = {Modena, Italy},
    +  publisher = {ACM},
    +  pdf = {geoffray08pppj-ladyvm.pdf},
    +  abstract = {
    +The development of a complete Java Virtual Machine (JVM)
    +implementation is a tedious process which involves knowledge in 
    +different areas: garbage collection, just in time compilation, 
    +interpretation, file parsing, data structures, etc.
    +The result is that developing its own virtual machine requires a 
    +considerable amount of man/year. In this paper
    +we show that one can implement a JVM with third party
    +software and with performance comparable to industrial and
    +top open-source JVMs. Our proof-of-concept implementation 
    +uses existing versions of a garbage collector, a just in
    +time compiler, and the base library, and is robust enough to
    +execute complex Java applications such as the OSGi Felix
    +implementation and the Tomcat servlet container.  
    +}
    +}
    +
    + + + Added: vmkit/trunk/www/publis/ab-full.bib URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/ab-full.bib?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/ab-full.bib (added) +++ vmkit/trunk/www/publis/ab-full.bib Thu Apr 25 11:44:13 2013 @@ -0,0 +1,105 @@ + + at string{procof="Proceedings of the "} + at string{poster="Poster at the "} + at string{wip="Work in progress in the "} + + at Comment publishers + at string{acm="ACM"} + at string{usenix="USENIX Association"} + at string{ieee="IEEE Computer Society"} + at string{springer="Springer-Verlag"} + at string{vldbend="VLDB Endowment"} + at string{ibm="IBM Corporation"} + at string{hermes="Hermes"} + at string{wiley="John Wiley \& Sons, Ltd."} + at string{morgan="Morgan Kaufmann"} + at string{addison="Addison-Wesley"} + at string{lncs="LNCS"} + at string{acta="ACTA Press"} + at string{oreilly="O'Reilly"} + + at Comment conferences + at string{sosp="Symposium on Operating Systems Principles, SOSP~'"} + at string{osdi="conference on Operating Systems Design and Implementation, OSDI~'"} + at string{eurosys="EuroSys European Conference on Computer Systems, EuroSys~'"} + at string{usenix-atc="Usenix Annual Technical Conference, USENIX ATC~'"} + at string{usenix-stc="Usenix Summer Technical Conference, USENIX STC~'"} + at string{usenix-sec="USENIX Security Symposium~'"} + at string{pldi="conference on Programming Language Design and Implementation, PLDI~'"} + at string{popl="symposium on Principles Of Programming Languages, POPL~'"} + at string{oopsla="conference on Object Oriented Programming Systems Languages and Applications, OOPSLA~'"} + at string{ecoop="European Conference on Object-Oriented Programming, ECOOP~'"} + at string{ismm="International Symposium on Memory Management, ISMM~'"} + at string{isca="International Symposium on Computer Architecture, ISCA~'"} + at string{podc="symposium on Principles Of Distributed Computing, PODC~'"} + at string{disc="international conference on Distributed Computing, DISC~'"} + at string{cgo="international symposium on Code Generation and Optimization, CGO~'"} + at string{icdcs="International Conference on Distributed Computing Systems, ICDCS~'"} + at string{ipdps="International Parallel and Distributed Processing Symposium, IPDPS~'"} + at string{spaa="Symposium on Parallelism in Algorithms and Architectures, SPAA~'"} + at string{ppopp="symposium on Principles and Practices of Parallel Programming, PPoPP~'"} + at string{asplos="conference on Architectural Support for Programming Languages and Operating Systems, ASPLOS~'"} + at string{sigmetrics="international conference on measurement and modeling of computer systems, SIGMETRICS~'"} + at string{hipc="international conference on High Performance Computing, HiPC~'"} + at string{javagrande={conference on Java Grande, JavaGrande~'}} + at string{jvm="Java\texttrademark\ Virtual Machine Research and Technology Symposium, JVM~'"} + at string{vmrt="Virtual Machine Research and Technology Symposium '"} + at string{ccnc="Consumer Communications and Networking Conference, CCNC~'"} + at string{sbac-pad="international Symposium on Computer Architecture and High Performance Computing, SBAC-PAD~'"} + at string{nca="international symposium on Network Computing and Applications, NCA~'"} + at string{dsn="international conference on Dependable Systems and Networks, DSN~'"} + at string{vee="international conference on Virtual Execution Environments, VEE~'"} + at string{pppj="international symposium on Principles and Practice of Programming in Java, PPPJ~'"} + at string{scc="international Conference on Services Computing, SCC~'"} + at string{doa="international conference on Distributed Objects and Applications, DOA~'"} + at string{sac="Symposium on Applied Computing, SAC~'"} + at string{europar="European conference on Parallel processing, EuroPar~'"} + at string{icse="International Conference on Software Engineering, ICSE~'"} + at string{isscc="International Solid-State Circuits Conference, ISSCC~'"} + at string{dac="Design Automation Conference, DAC~'"} + at string{socc="Symposium on Cloud computing, SoCC~'"} + at string{samos="International Conference on Embedded Computer Systems: Architectures, MOdeling and Simulation, SAMOS~'"} + at string{webapps="USENIX conference on Web application development, WebApps~'"} + at string{sde="software engineering symposium on practical Software Development Environments, SDE~'"} + at string{sc="conference on Supercomputing, Supercomputing~'"} + at string{sp="symposium on Security and Privacy, SP~'"} + at string{ijcai="International Joint Conference on Artificial Intelligence, IJCAI~'"} + at string{hpca="symposium on High Performance Computer Architecture, HPCA~'"} + + at string{cfse="Conférence Française en Systèmes d'Exploitation, CFSE~'"} + at string{decor="conférence francophone sur le Déploiement et la (Re)configuration de logiciels, DECOR~'"} + + at Comment workshops + at string{plos="SOSP Workshop on Programming Languages and Operating Systems, PLOS~'"} + at string{sigopsew=" ACM SIGOPS European Workshop"} + at string{hotpar="workshop on Hot topics in Parallelism, HotPar~'"} + at string{osihpa="workshop on Operating System Interference in High Performance Applications, OSIHPA~'"} + at string{acp4is="workshop on Aspects, Components, and Patterns for Infrastructure Software, ACP4IS~'"} + at string{iies="workshop on Isolation and Integration in Embedded Systems, IIES~'"} + at string{persys="international workshop on Pervasive Systems, PerSys~'"} + at string{mediate="international workshop on Mediation in Semantic Web Services, Mediate~'"} + at string{cipc="NATO workshop on Concurrent Information Processing and Computing, CIPC~'"} + at string{ivme="workshop on Interpreters, Virtual Machines and Emulators, IVME~'"} + at string{jtres="Workshop on Java Technologies for Real-Time and Embedded Systems, JTRES~'"} + + at string{osgiw=" Atelier de travail OSGi\texttrademark"} + at string{cfsew=" Atelier journées des Jeunes Chercheurs en Systèmes, chapitre français de l'ACM-SIGOPS"} + + at Comment journals + at string{pvldb="VLDB Endowment, PVLDB~'"} + at string{cacm="Communications of the ACM"} + at string{tocs="ACM Transactions on Computer Systems (TOCS)"} + at string{toplas="ACM Transactions on Programming Languages and Systems (TOPLAS)"} + at string{toiis="ACM Transactions on Information and System Security"} + at string{ibmsys="IBM System Journal"} + at string{cpe="Concurrency - Practice \& Experience (CP\&E)"} + at string{spe="Software - Practice \& Experience (SP\&E)"} + at string{jpdc="Journal of Parallel and Distributed Computing (JPDC)"} + at string{osr="SIGOPS Operating System Review (OSR)"} + at string{ijca="IASTED International Journal on Computers and Applications"} + at string{ieee-micro="IEEE Micro"} + at string{ieee-software="IEEE Software"} + at string{ieee-tc="IEEE Transactions on Computers"} + + at string{tsi="Technique et Science Informatiques (TSI)"} + Added: vmkit/trunk/www/publis/generate-biblio.sh URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/generate-biblio.sh?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/generate-biblio.sh (added) +++ vmkit/trunk/www/publis/generate-biblio.sh Thu Apr 25 11:44:13 2013 @@ -0,0 +1,73 @@ +#!/bin/bash + +ORIG_BIB_NAME=$1 +LAYOUT_BIB_NAME=$2 +STYLE=plain + +ORIG_DIR_PATH=$(dirname $1) +BASE_PATH="$(echo $ORIG_DIR_PATH | sed -e 's/[^/]*/\.\./g')" + +usage() { + echo "Usage: $0 bib_name layout_name start_date end_date" + exit 1 +} + +[ -z "$ORIG_BIB_NAME" ] && usage +[ -z "$LAYOUT_BIB_NAME" ] && usage + +mkdir -p tmp-biblio +cd tmp-biblio + +one-preambule() { +echo '' +echo "

    " +} + +one-append() { + cat $1.html | sed -e 's/


    This file was.*//' \ + | grep -v "bibtex2html" | sed -e 's/

    .*<\/h1>//' \ + | sed -e 's/\.html/\.php/' >> $1.php +} + +one-epilogue() { + echo '' >> $1 + mv $1 ../$ORIG_DIR_PATH +} + +preambule() { + one-preambule "$1" > "$1".php + one-preambule "$1 - Abstracts" > "$1"_abstracts.php + one-preambule "$1 - Bibtex" > "$1"_bib.php +} + +append() { + one-append "$1" + one-append "$1"_abstracts + one-append "$1"_bib +} + +epilogue() { + one-epilogue "$1".php $2 + one-epilogue "$1"_abstracts.php $2 _abstracts + one-epilogue "$1"_bib.php +} + +generate() { + NAME=$3 + cat ../$2 ../$1 > $NAME.bib + preambule "$NAME" + TMPDIR=. bibtex2html -q -d -nodoc -noheader -s "$STYLE" -r -t "" -both "$NAME".bib + append $NAME + epilogue $NAME $GO +} + +generate $ORIG_BIB_NAME $LAYOUT_BIB_NAME Publications + +cd .. +rm -Rf tmp-biblio + +exit 0 \ No newline at end of file Propchange: vmkit/trunk/www/publis/generate-biblio.sh ------------------------------------------------------------------------------ svn:executable = * Added: vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf?rev=180272&view=auto ============================================================================== Binary files vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf (added) and vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf Thu Apr 25 11:44:13 2013 differ Added: vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf?rev=180272&view=auto ============================================================================== Binary files vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf (added) and vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf Thu Apr 25 11:44:13 2013 differ Added: vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf?rev=180272&view=auto ============================================================================== Binary files vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf (added) and vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf Thu Apr 25 11:44:13 2013 differ Added: vmkit/trunk/www/publis/root.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/root.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/root.php (added) +++ vmkit/trunk/www/publis/root.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1 @@ + Added: vmkit/trunk/www/publis/vmkit.bib URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/vmkit.bib?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/publis/vmkit.bib (added) +++ vmkit/trunk/www/publis/vmkit.bib Thu Apr 25 11:44:13 2013 @@ -0,0 +1,87 @@ + + + at inproceedings{vee/10/geoffray/vmkit, + author = {Geoffray, Nicolas and Thomas, Ga\"el and Lawall, Julia and Muller, Gilles and Folliot, Bertil}, + title = {{VMKit: a substrate for managed runtime environments}}, + booktitle = procof#vee#{10}, + publisher = acm, + pdf = {geoffray10vee-vmkit.pdf}, + year = {2010}, + address = {Pittsburgh, PA, USA}, + pages = {51--62}, + abstract = { +Managed Runtime Environments (MREs), such as the JVM and the CLI, form +an attractive environment for program execution, by providing +portability and safety, via the use of a bytecode language and +automatic memory management, as well as good performance, via +just-in-time (JIT) compilation. Nevertheless, developing a fully +featured MRE, including e.g. a garbage collector and JIT compiler, is +a herculean task. As a result, new languages cannot easily take +advantage of the benefits of MREs, and it is difficult to experiment +with extensions of existing MRE based languages. + +This paper describes and evaluates VMKit, a first attempt to build a +common substrate that eases the development of high-level MREs. We +have successfully used VMKit to build two MREs: a Java Virtual Machine +and a Common Language Runtime. We provide an extensive study of the +lessons learned in developing this infrastructure, and assess the ease +of implementing new MREs or MRE extensions and the resulting +performance. In particular, it took one of the authors only one month +to develop a Common Language Runtime using VMKit. VMKit furthermore +has performance comparable to the well established open source MREs +Cacao, Apache Harmony and Mono, and is 1.2 to 3 times slower than +JikesRVM on most of the DaCapo benchmarks. + } +} + + at inproceedings{dsn/09/geoffray/ijvm, + author = {Geoffray, Nicolas and Thomas, Ga\"el and Muller, Gilles and Parrend, Pierre and Fr\'enot, St\'ephane and Folliot, Bertil}, + title = {{I-JVM: a Java virtual machine for component isolation in OSGi}}, + booktitle = procof#dsn#{09}, + publisher = ieee, + pdf = {geoffray09dsn-ijvm.pdf}, + year = {2009}, + address = {Estoril, Portugal}, + pages = {544--553}, + abstract = { +The OSGi framework is a Java-based, centralized, component oriented +platform. It is being widely adopted as an execution environment for +the development of extensible applications. However, current Java +Virtual Machines are unable to isolate components from each other. For +instance, a malicious component can freeze the complete platform by +allocating too much memory or alter the behavior of other components +by modifying shared variables. This paper presents I-JVM, a Java +Virtual Machine that provides a lightweight approach to isolation +while preserving compatibility with legacy OSGi applications. Our +evaluation of I-JVM shows that it solves the 8 known OSGi +vulnerabilities that are due to the Java Virtual Machine and that the +overhead of I-JVM compared to the JVM on which it is based is below +20\%. + } +} + + at inproceedings{pppj/08/geoffray/ladyvm, + author = { Geoffray, Nicolas and Thomas, Ga\"el and Cl\'ement, Charles and Folliot, Bertil}, + title = {{A lazy developer approach: building a JVM with third party software}}, + booktitle = procof#pppj#{08}, + year = {2008}, + pages = {73--82}, + address = {Modena, Italy}, + publisher = acm, + pdf = {geoffray08pppj-ladyvm.pdf}, + abstract = { +The development of a complete Java Virtual Machine (JVM) +implementation is a tedious process which involves knowledge in +different areas: garbage collection, just in time compilation, +interpretation, file parsing, data structures, etc. +The result is that developing its own virtual machine requires a +considerable amount of man/year. In this paper +we show that one can implement a JVM with third party +software and with performance comparable to industrial and +top open-source JVMs. Our proof-of-concept implementation +uses existing versions of a garbage collector, a just in +time compiler, and the base library, and is robust enough to +execute complex Java applications such as the OSGi Felix +implementation and the Tomcat servlet container. +} +} Removed: vmkit/trunk/www/pubs.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/pubs.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/pubs.html (original) +++ vmkit/trunk/www/pubs.html (removed) @@ -1,46 +0,0 @@ - - - - - VMKit - Getting Started - - - - - - - -
    - -

    VMKit related publications

    - - -

    2010

    -
      -
    1. VMKit: a Substrate for Managed Runtime Environments
      - Nicolas Geoffray, Gael Thomas, Julia Lawall, Gilles Muller, Bertil Folliot
      - Proc. of the Virtual Execution Environments Conference (VEE'10), Pittsburgh, USA, Mar. 2010
    2. -
    -

    2009

    -
      -
    1. Fostering Systems Research with Managed Runtimes
      - Nicolas Geoffray
      - PhD Thesis, Universite Pierre et Marie Curie, Paris, France, Sep. 2009
    2. -
    3. I-JVM: a Java Virtual Machine for Component Isolation in OSGi
      - Nicolas Geoffray, Gael Thomas, Gilles Muller, Pierre Parrend, Stephane Frenot, Bertil Folliot
      - Proc. of the Dependable Systems and Network Conference (DSN'09), Estoril, Portugal, Jun. 2009
    4. -
    -

    2008

    -
      -
    1. A Lazy Developer Approach: Building a JVM with Third Party Software
      - Nicolas Geoffray, Gael Thomas, Charles Clement, Bertil Folliot
      - Proc. of the Principles and Practice of Programming in Java (PPPJ'08), Modena, Italy Sep. 2008
    2. -
    3. Towards a new Isolation Abstraction for OSGi
      - Nicolas Geoffray, Gael Thomas, Charles Clement, Bertil Folliot
      - Proc. of the Isolation and Integration in Embedded Systems (IIES'08), Glasgow, Scotland, Apr. 2008
    4. -
    - -
    - - Removed: vmkit/trunk/www/releases/index.html URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/releases/index.html?rev=180271&view=auto ============================================================================== --- vmkit/trunk/www/releases/index.html (original) +++ vmkit/trunk/www/releases/index.html (removed) @@ -1,75 +0,0 @@ - - - - - - "vmkit" JVM and .Net runtimes for LLVM - - - - - - - - -
    - -

    VMKit Releases

    - - -

    The VMKit project was publicly released in the time of LLVM 2.3. Since - LLVM 2.4, VMKit follows each LLVM release. The first release of VMKit is - version 0.24.

    - - -

    Downloads

    - - - - -
    - - Added: vmkit/trunk/www/root.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/root.php?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/root.php (added) +++ vmkit/trunk/www/root.php Thu Apr 25 11:44:13 2013 @@ -0,0 +1 @@ + Copied: vmkit/trunk/www/start.php (from r180270, vmkit/trunk/www/get_started.html) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/start.php?p2=vmkit/trunk/www/start.php&p1=vmkit/trunk/www/get_started.html&r1=180270&r2=180272&rev=180272&view=diff ============================================================================== --- vmkit/trunk/www/get_started.html (original) +++ vmkit/trunk/www/start.php Thu Apr 25 11:44:13 2013 @@ -1,39 +1,8 @@ - - - - - VMKit - Getting Started - - - - - - - -
    - -

    Getting Started: Building and Running VMKit

    - - -

    This page gives you the shortest path to checking out vmkit and demos a few -options. This should get you up and running with the minimum of muss and fuss. -If you like what you see, please consider getting -involved with the vmkit community.

    - - -

    A word of warning

    - -

    While this work aims to provide a fully functional JVM, it -is still early work and is under heavy development. -

    Some of the common missing pieces in vmkit/llvm are:

    - -
      -
    1. Mixed interpretation/compilation.
    2. -
    3. Adaptive optimization.
    4. -
    - -

    Building vmkit / working with the code

    +

    If you would like to check out and build the project, the current scheme is:

    @@ -85,9 +54,9 @@ is:

-
  • Checkout vmkit:
  • +
  • Checkout vmkit2:
    • -
    • svn co http://llvm.org/svn/llvm-project/vmkit/trunk vmkit
    • +
    • git clone git://scm.gforge.inria.fr/vmkit2/vmkit2.git
  • Configure vmkit:
  • @@ -131,6 +100,5 @@ is:

    - - - + + Added: vmkit/trunk/www/stylesheet.css URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/stylesheet.css?rev=180272&view=auto ============================================================================== --- vmkit/trunk/www/stylesheet.css (added) +++ vmkit/trunk/www/stylesheet.css Thu Apr 25 11:44:13 2013 @@ -0,0 +1,144 @@ + +body { + font-family: 'Times New Roman', serif +} + +.tiny { + font-style: italic; + font-size:90%; +} + +h1 { + background: Beige; + color: brown; + font-family: 'Times New Roman', serif + font-size: 130%; + font-variant: small-caps; + font-weight: 400; + line-height: 120%; + margin: 0px 0px 0px 0px; +} + +h2 { + background: rgb(220,220,245); + color: black; + font-family: 'Times New Roman', serif + font-size: 110%; + font-weight: 700; + line-height: 100%; + margin: 18px 0px 0px 0px; +} + +h3 { + background: rgb(240,240,240); + font-family: 'Times New Roman', serif + color: black; + font-size: 100%; + font-weight: 400; + line-height: 100%; +} + +h1.name { + background: white; + font-family: 'Georgia', 'Times New Roman', serif; + font-size: 185%; + font-weight: 700; + font-variant: small-caps; +} + +a.name { + color: Maroon; + text-decoration: none; +} + +a.name:hover { + color: rgb(120,120,120); +} + +table.contact { + font-family: arial, serif; +} + +pre.mdoc { + border-style: groove; + border-width: 2px; + border-color: black; + background: rgb(245,245,220); + color: rgb(60,60,200); + padding: 2px 3px 2px 3px; +} + +.cadre { + background: white; + font-family: 'Times New Roman', serif; + font-size: 100%; + font-weight: 400; + line-height: 100%; + text-decoration: none; +} + +table.cadre { + border-collapse: collapse; +} + +h3.cadre { + color: brown; + margin: 3px 0px 2px 0px; +} + +h2.cadre { + background: Beige; + color: black; + font-family: 'Times New Roman', serif + font-size: 110%; + margin: 0px 0px 0px 0px; +} + +tr.cadre { + border-bottom: 3px solid Beige; +} + +td.cadre { + border-left: 3px solid Beige; +} + +a.cadre { + color: rgb(120,120,120); + text-decoration: none; +} + +a.cadre:hover { + color: brown; + text-decoration: none; +} + +a.cadre-selected { + color: brown; + text-decoration: none; +} + +.ls input { + color: brown; + background-color: white; + font-family: 'Times New Roman', serif + font-size: 100%; + font-variant: small-caps; + font-weight: normal; + line-height: 100%; + margin: 0px 0px 0px 0px; + text-decoration: none; + border: none; + font-variant: small-caps; +} + +.ls input:hover { + color: rgb(120,120,120); +} + +.ls a { + color: blue; +} + +.ls a:hover { + color: brown; +} From peter.senna at gmail.com Thu Apr 25 09:45:58 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:45:58 -0000 Subject: [vmkit-commits] [vmkit] r180274 - test again the commit mailing list... Message-ID: <20130425164424.E912C2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:44:24 2013 New Revision: 180274 URL: http://llvm.org/viewvc/llvm-project?rev=180274&view=rev Log: test again the commit mailing list... (cherry picked from commit 914cef16a9e3dfb83d915269e3300619f888272b) Modified: vmkit/trunk/CREDITS.TXT Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180274&r1=180273&r2=180274&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:44:24 2013 @@ -8,7 +8,6 @@ beautification by scripts. The fields a (W), PGP key ID and fingerprint (P), description (D), and snail-mail address (S). - N: Will Dietz E: wdietz2 at illinois.edu D: J3 OpenJDK port From peter.senna at gmail.com Thu Apr 25 09:45:59 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:45:59 -0000 Subject: [vmkit-commits] [vmkit] r180273 - re-test the commit mailing list Message-ID: <20130425164421.E13342A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:44:21 2013 New Revision: 180273 URL: http://llvm.org/viewvc/llvm-project?rev=180273&view=rev Log: re-test the commit mailing list (cherry picked from commit ee7adc83bebd77f97b41dbacc4d4152ec154d579) Modified: vmkit/trunk/CREDITS.TXT Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180273&r1=180272&r2=180273&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:44:21 2013 @@ -8,6 +8,7 @@ beautification by scripts. The fields a (W), PGP key ID and fingerprint (P), description (D), and snail-mail address (S). + N: Will Dietz E: wdietz2 at illinois.edu D: J3 OpenJDK port From peter.senna at gmail.com Thu Apr 25 09:46:02 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:46:02 -0000 Subject: [vmkit-commits] [vmkit] r180276 - add the mailing lists Message-ID: <20130425164431.C46B72A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:44:31 2013 New Revision: 180276 URL: http://llvm.org/viewvc/llvm-project?rev=180276&view=rev Log: add the mailing lists (cherry picked from commit fef0b132ae49fa76a2247191d43ceaa4b3c01f69) Added: vmkit/trunk/www/mailings.php Removed: vmkit/trunk/www/involved.php Modified: vmkit/trunk/www/common.php Modified: vmkit/trunk/www/common.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/common.php?rev=180276&r1=180275&r2=180276&view=diff ============================================================================== --- vmkit/trunk/www/common.php (original) +++ vmkit/trunk/www/common.php Thu Apr 25 11:44:31 2013 @@ -58,7 +58,7 @@ - -

    -First, you can participate to the mailing lists that are hosted by inria:
    -VMKit2 administration page - -

    -Then, you can also participate to the development, just send a mail to the mailing list - - - Added: vmkit/trunk/www/mailings.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/mailings.php?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/mailings.php (added) +++ vmkit/trunk/www/mailings.php Thu Apr 25 11:44:31 2013 @@ -0,0 +1,22 @@ + + +

    +VMKit2 has two mailing lists, both hosted by Inria: +

    + +

    +If you want to participate to the project, you can either send a mail to the development mailing +list or directly try to register in the project from the +VMKit2 administration page. + + + From peter.senna at gmail.com Thu Apr 25 09:46:04 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:46:04 -0000 Subject: [vmkit-commits] [vmkit] r180275 - yet another test of the commit mailing list Message-ID: <20130425164427.A758E2A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:44:27 2013 New Revision: 180275 URL: http://llvm.org/viewvc/llvm-project?rev=180275&view=rev Log: yet another test of the commit mailing list (cherry picked from commit cbbf3206b103dd9676c365a4cc7bd5258ed60f46) Modified: vmkit/trunk/Makefile Modified: vmkit/trunk/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile?rev=180275&r1=180274&r2=180275&view=diff ============================================================================== --- vmkit/trunk/Makefile (original) +++ vmkit/trunk/Makefile Thu Apr 25 11:44:27 2013 @@ -27,3 +27,4 @@ FilesToConfig := \ include/llvm/Config/config.h \ lib/j3/Classpath/Classpath.h \ FilesToConfigPATH := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig)) + From peter.senna at gmail.com Thu Apr 25 09:46:19 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:46:19 -0000 Subject: [vmkit-commits] [vmkit] r180277 - www in a single directory Message-ID: <20130425164448.4689F2A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:44:46 2013 New Revision: 180277 URL: http://llvm.org/viewvc/llvm-project?rev=180277&view=rev Log: www in a single directory (cherry picked from commit 382f51a385bcd42eb052dff5e1674b85b158ff39) Added: vmkit/trunk/www/.biblio - copied, changed from r180276, vmkit/trunk/www/publis/.biblio vmkit/trunk/www/Publications.php - copied, changed from r180276, vmkit/trunk/www/publis/Publications.php vmkit/trunk/www/Publications_abstracts.php - copied, changed from r180276, vmkit/trunk/www/publis/Publications_abstracts.php vmkit/trunk/www/Publications_bib.php - copied, changed from r180276, vmkit/trunk/www/publis/Publications_bib.php vmkit/trunk/www/ab-full.bib - copied, changed from r180276, vmkit/trunk/www/publis/ab-full.bib vmkit/trunk/www/generate-biblio.sh - copied, changed from r180276, vmkit/trunk/www/publis/generate-biblio.sh vmkit/trunk/www/geoffray08pppj-ladyvm.pdf - copied, changed from r180276, vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf vmkit/trunk/www/geoffray09dsn-ijvm.pdf - copied, changed from r180276, vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf vmkit/trunk/www/geoffray10vee-vmkit.pdf - copied, changed from r180276, vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf vmkit/trunk/www/vmkit.bib - copied, changed from r180276, vmkit/trunk/www/publis/vmkit.bib Removed: vmkit/trunk/www/publis/.biblio vmkit/trunk/www/publis/Makefile vmkit/trunk/www/publis/Publications.php vmkit/trunk/www/publis/Publications_abstracts.php vmkit/trunk/www/publis/Publications_bib.php vmkit/trunk/www/publis/ab-full.bib vmkit/trunk/www/publis/generate-biblio.sh vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf vmkit/trunk/www/publis/root.php vmkit/trunk/www/publis/vmkit.bib Modified: vmkit/trunk/www/Makefile vmkit/trunk/www/common.php Copied: vmkit/trunk/www/.biblio (from r180276, vmkit/trunk/www/publis/.biblio) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/.biblio?p2=vmkit/trunk/www/.biblio&p1=vmkit/trunk/www/publis/.biblio&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Modified: vmkit/trunk/www/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/Makefile?rev=180277&r1=180276&r2=180277&view=diff ============================================================================== --- vmkit/trunk/www/Makefile (original) +++ vmkit/trunk/www/Makefile Thu Apr 25 11:44:46 2013 @@ -1,12 +1,24 @@ -all: compile +BIB_PAGES=Publications +BIB_FILES=$(patsubst %,%.php,$(BIB_PAGES) $(patsubst %,%_bib, $(BIB_PAGES)) $(patsubst %,%_abstracts, $(BIB_PAGES))) -compile: - $(MAKE) -C publis +.PHONY: all deploy tidy clean distclean +.SECONDARY: +.SUFFIXES: + +all: .biblio + +.biblio: vmkit.bib ab-full.bib Makefile generate-biblio.sh + ./generate-biblio.sh vmkit.bib ab-full.bib 2000 2100 . && touch $@ deploy: tidy rsync -av * gaelthomas at scm.gforge.inria.fr:/home/groups/vmkit2/htdocs/ tidy: find . \( -iname "*~" -o -iname "\#*" -o -iname ".DS_Store" \) -exec rm -f {} \; + +clean: + +distclean: + rm -f $(BIB_FILES) Copied: vmkit/trunk/www/Publications.php (from r180276, vmkit/trunk/www/publis/Publications.php) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/Publications.php?p2=vmkit/trunk/www/Publications.php&p1=vmkit/trunk/www/publis/Publications.php&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www/Publications_abstracts.php (from r180276, vmkit/trunk/www/publis/Publications_abstracts.php) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/Publications_abstracts.php?p2=vmkit/trunk/www/Publications_abstracts.php&p1=vmkit/trunk/www/publis/Publications_abstracts.php&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www/Publications_bib.php (from r180276, vmkit/trunk/www/publis/Publications_bib.php) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/Publications_bib.php?p2=vmkit/trunk/www/Publications_bib.php&p1=vmkit/trunk/www/publis/Publications_bib.php&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www/ab-full.bib (from r180276, vmkit/trunk/www/publis/ab-full.bib) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/ab-full.bib?p2=vmkit/trunk/www/ab-full.bib&p1=vmkit/trunk/www/publis/ab-full.bib&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Modified: vmkit/trunk/www/common.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/common.php?rev=180277&r1=180276&r2=180277&view=diff ============================================================================== --- vmkit/trunk/www/common.php (original) +++ vmkit/trunk/www/common.php Thu Apr 25 11:44:46 2013 @@ -59,7 +59,7 @@ section($dir, "overview", $active, "index.php", "Overview"); section($dir, "start", $active, "start.php", "Get Started"); section($dir, "mailings", $active, "mailings.php", "Mailing Lists"); - section($dir, "publi", $active, "publis/Publications.php", "Publications"); + section($dir, "publi", $active, "Publications.php", "Publications"); if(basename($_SERVER["SCRIPT_FILENAME"]) == "ls.php") { echo "

    "; Copied: vmkit/trunk/www/generate-biblio.sh (from r180276, vmkit/trunk/www/publis/generate-biblio.sh) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/generate-biblio.sh?p2=vmkit/trunk/www/generate-biblio.sh&p1=vmkit/trunk/www/publis/generate-biblio.sh&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www/geoffray08pppj-ladyvm.pdf (from r180276, vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/geoffray08pppj-ladyvm.pdf?p2=vmkit/trunk/www/geoffray08pppj-ladyvm.pdf&p1=vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www/geoffray09dsn-ijvm.pdf (from r180276, vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/geoffray09dsn-ijvm.pdf?p2=vmkit/trunk/www/geoffray09dsn-ijvm.pdf&p1=vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Copied: vmkit/trunk/www/geoffray10vee-vmkit.pdf (from r180276, vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/geoffray10vee-vmkit.pdf?p2=vmkit/trunk/www/geoffray10vee-vmkit.pdf&p1=vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) Removed: vmkit/trunk/www/publis/.biblio URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/.biblio?rev=180276&view=auto ============================================================================== (empty) Removed: vmkit/trunk/www/publis/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Makefile?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/Makefile (original) +++ vmkit/trunk/www/publis/Makefile (removed) @@ -1,20 +0,0 @@ - -BIB_PAGES=Publications -BIB_FILES=$(patsubst %,%.php,$(BIB_PAGES) $(patsubst %,%_bib, $(BIB_PAGES)) $(patsubst %,%_abstracts, $(BIB_PAGES))) - -.PHONY: all deploy tidy tidy clean distclean -.SECONDARY: -.SUFFIXES: - -all: .biblio - -.biblio: vmkit.bib ab-full.bib Makefile generate-biblio.sh - ./generate-biblio.sh vmkit.bib ab-full.bib 2000 2100 . && touch $@ - -tidy: - find . \( -iname "*~" -o -iname "\#*" -o -iname ".DS_Store" \) -exec rm -f {} \; - -clean: - -distclean: - rm -f $(BIB_FILES) Removed: vmkit/trunk/www/publis/Publications.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Publications.php?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/Publications.php (original) +++ vmkit/trunk/www/publis/Publications.php (removed) @@ -1,66 +0,0 @@ - -

    - - - - - - - - - - - - - - - - - - - -
    -[1] - -Nicolas Geoffray, Gaël Thomas, Julia Lawall, Gilles Muller, and Bertil - Folliot. - VMKit: a substrate for managed runtime environments. - In Proceedings of the international conference on Virtual - Execution Environments, VEE '10, pages 51-62, Pittsburgh, PA, USA, 2010. - ACM. -[ bib | -.pdf | -Abstract ] - -
    -[2] - -Nicolas Geoffray, Gaël Thomas, Gilles Muller, Pierre Parrend, Stéphane - Frénot, and Bertil Folliot. - I-JVM: a Java virtual machine for component isolation in OSGi. - In Proceedings of the international conference on Dependable - Systems and Networks, DSN '09, pages 544-553, Estoril, Portugal, 2009. IEEE - Computer Society. -[ bib | -.pdf | -Abstract ] - -
    -[3] - -Nicolas Geoffray, Gaël Thomas, Charles Clément, and Bertil Folliot. - A lazy developer approach: building a JVM with third party - software. - In Proceedings of the international symposium on Principles and - Practice of Programming in Java, PPPJ '08, pages 73-82, Modena, Italy, - 2008. ACM. -[ bib | -.pdf | -Abstract ] - -
    - Removed: vmkit/trunk/www/publis/Publications_abstracts.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Publications_abstracts.php?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/Publications_abstracts.php (original) +++ vmkit/trunk/www/publis/Publications_abstracts.php (removed) @@ -1,121 +0,0 @@ - -

    - - - - - - - - - - - - - - - - - - - -
    -[1] - -Nicolas Geoffray, Gaël Thomas, Julia Lawall, Gilles Muller, and Bertil - Folliot. - VMKit: a substrate for managed runtime environments. - In Proceedings of the international conference on Virtual - Execution Environments, VEE '10, pages 51-62, Pittsburgh, PA, USA, 2010. - ACM. -[ bib | -.pdf ] -
    - -Managed Runtime Environments (MREs), such as the JVM and the CLI, form -an attractive environment for program execution, by providing -portability and safety, via the use of a bytecode language and -automatic memory management, as well as good performance, via -just-in-time (JIT) compilation. Nevertheless, developing a fully -featured MRE, including e.g. a garbage collector and JIT compiler, is -a herculean task. As a result, new languages cannot easily take -advantage of the benefits of MREs, and it is difficult to experiment -with extensions of existing MRE based languages.

    -This paper describes and evaluates VMKit, a first attempt to build a -common substrate that eases the development of high-level MREs. We -have successfully used VMKit to build two MREs: a Java Virtual Machine -and a Common Language Runtime. We provide an extensive study of the -lessons learned in developing this infrastructure, and assess the ease -of implementing new MREs or MRE extensions and the resulting -performance. In particular, it took one of the authors only one month -to develop a Common Language Runtime using VMKit. VMKit furthermore -has performance comparable to the well established open source MREs -Cacao, Apache Harmony and Mono, and is 1.2 to 3 times slower than -JikesRVM on most of the DaCapo benchmarks. - -

    -

    -

    -[2] - -Nicolas Geoffray, Gaël Thomas, Gilles Muller, Pierre Parrend, Stéphane - Frénot, and Bertil Folliot. - I-JVM: a Java virtual machine for component isolation in OSGi. - In Proceedings of the international conference on Dependable - Systems and Networks, DSN '09, pages 544-553, Estoril, Portugal, 2009. IEEE - Computer Society. -[ bib | -.pdf ] -
    - -The OSGi framework is a Java-based, centralized, component oriented -platform. It is being widely adopted as an execution environment for -the development of extensible applications. However, current Java -Virtual Machines are unable to isolate components from each other. For -instance, a malicious component can freeze the complete platform by -allocating too much memory or alter the behavior of other components -by modifying shared variables. This paper presents I-JVM, a Java -Virtual Machine that provides a lightweight approach to isolation -while preserving compatibility with legacy OSGi applications. Our -evaluation of I-JVM shows that it solves the 8 known OSGi -vulnerabilities that are due to the Java Virtual Machine and that the -overhead of I-JVM compared to the JVM on which it is based is below -20%. - -
    -

    -

    -[3] - -Nicolas Geoffray, Gaël Thomas, Charles Clément, and Bertil Folliot. - A lazy developer approach: building a JVM with third party - software. - In Proceedings of the international symposium on Principles and - Practice of Programming in Java, PPPJ '08, pages 73-82, Modena, Italy, - 2008. ACM. -[ bib | -.pdf ] -
    - -The development of a complete Java Virtual Machine (JVM) -implementation is a tedious process which involves knowledge in -different areas: garbage collection, just in time compilation, -interpretation, file parsing, data structures, etc. -The result is that developing its own virtual machine requires a -considerable amount of man/year. In this paper -we show that one can implement a JVM with third party -software and with performance comparable to industrial and -top open-source JVMs. Our proof-of-concept implementation -uses existing versions of a garbage collector, a just in -time compiler, and the base library, and is robust enough to -execute complex Java applications such as the OSGi Felix -implementation and the Tomcat servlet container. - -
    -

    -

    - Removed: vmkit/trunk/www/publis/Publications_bib.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/Publications_bib.php?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/Publications_bib.php (original) +++ vmkit/trunk/www/publis/Publications_bib.php (removed) @@ -1,100 +0,0 @@ - -

    -

    - at inproceedings{vee/10/geoffray/vmkit,
    -  author = {Geoffray, Nicolas and Thomas, Ga\"el and Lawall, Julia and Muller, Gilles and Folliot, Bertil},
    -  title = {{VMKit: a substrate for managed runtime environments}},
    -  booktitle = {Proceedings of the international conference on Virtual Execution Environments, VEE~'10},
    -  publisher = {ACM},
    -  pdf = {geoffray10vee-vmkit.pdf},
    -  year = {2010},
    -  address = {Pittsburgh, PA, USA},
    -  pages = {51--62},
    -  abstract = {
    -Managed Runtime Environments (MREs), such as the JVM and the CLI, form
    -an attractive environment for program execution, by providing
    -portability and safety, via the use of a bytecode language and
    -automatic memory management, as well as good performance, via
    -just-in-time (JIT) compilation. Nevertheless, developing a fully
    -featured MRE, including e.g. a garbage collector and JIT compiler, is
    -a herculean task. As a result, new languages cannot easily take
    -advantage of the benefits of MREs, and it is difficult to experiment
    -with extensions of existing MRE based languages.
    -
    -This paper describes and evaluates VMKit, a first attempt to build a
    -common substrate that eases the development of high-level MREs. We
    -have successfully used VMKit to build two MREs: a Java Virtual Machine
    -and a Common Language Runtime. We provide an extensive study of the
    -lessons learned in developing this infrastructure, and assess the ease
    -of implementing new MREs or MRE extensions and the resulting
    -performance. In particular, it took one of the authors only one month
    -to develop a Common Language Runtime using VMKit. VMKit furthermore
    -has performance comparable to the well established open source MREs
    -Cacao, Apache Harmony and Mono, and is 1.2 to 3 times slower than
    -JikesRVM on most of the DaCapo benchmarks.
    -  }
    -}
    -
    - -
    - at inproceedings{dsn/09/geoffray/ijvm,
    -  author = {Geoffray, Nicolas and Thomas, Ga\"el and Muller, Gilles and Parrend, Pierre and Fr\'enot, St\'ephane and Folliot, Bertil},
    -  title = {{I-JVM: a Java virtual machine for component isolation in OSGi}},
    -  booktitle = {Proceedings of the international conference on Dependable Systems and Networks, DSN~'09},
    -  publisher = {IEEE Computer Society},
    -  pdf = {geoffray09dsn-ijvm.pdf},
    -  year = {2009},
    -  address = {Estoril, Portugal},
    -  pages = {544--553},
    -  abstract = {
    -The OSGi framework is a Java-based, centralized, component oriented
    -platform. It is being widely adopted as an execution environment for
    -the development of extensible applications. However, current Java
    -Virtual Machines are unable to isolate components from each other. For
    -instance, a malicious component can freeze the complete platform by
    -allocating too much memory or alter the behavior of other components
    -by modifying shared variables.  This paper presents I-JVM, a Java
    -Virtual Machine that provides a lightweight approach to isolation
    -while preserving compatibility with legacy OSGi applications. Our
    -evaluation of I-JVM shows that it solves the 8 known OSGi
    -vulnerabilities that are due to the Java Virtual Machine and that the
    -overhead of I-JVM compared to the JVM on which it is based is below
    -20\%.
    -  }
    -}
    -
    - -
    - at inproceedings{pppj/08/geoffray/ladyvm,
    -  author = { Geoffray, Nicolas and Thomas, Ga\"el and Cl\'ement, Charles and Folliot, Bertil},
    -  title = {{A lazy developer approach: building a JVM with third party software}},
    -  booktitle = {Proceedings of the international symposium on Principles and Practice of Programming in Java, PPPJ~'08},
    -  year = {2008},
    -  pages = {73--82},
    -  address = {Modena, Italy},
    -  publisher = {ACM},
    -  pdf = {geoffray08pppj-ladyvm.pdf},
    -  abstract = {
    -The development of a complete Java Virtual Machine (JVM)
    -implementation is a tedious process which involves knowledge in 
    -different areas: garbage collection, just in time compilation, 
    -interpretation, file parsing, data structures, etc.
    -The result is that developing its own virtual machine requires a 
    -considerable amount of man/year. In this paper
    -we show that one can implement a JVM with third party
    -software and with performance comparable to industrial and
    -top open-source JVMs. Our proof-of-concept implementation 
    -uses existing versions of a garbage collector, a just in
    -time compiler, and the base library, and is robust enough to
    -execute complex Java applications such as the OSGi Felix
    -implementation and the Tomcat servlet container.  
    -}
    -}
    -
    - - - Removed: vmkit/trunk/www/publis/ab-full.bib URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/ab-full.bib?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/ab-full.bib (original) +++ vmkit/trunk/www/publis/ab-full.bib (removed) @@ -1,105 +0,0 @@ - - at string{procof="Proceedings of the "} - at string{poster="Poster at the "} - at string{wip="Work in progress in the "} - - at Comment publishers - at string{acm="ACM"} - at string{usenix="USENIX Association"} - at string{ieee="IEEE Computer Society"} - at string{springer="Springer-Verlag"} - at string{vldbend="VLDB Endowment"} - at string{ibm="IBM Corporation"} - at string{hermes="Hermes"} - at string{wiley="John Wiley \& Sons, Ltd."} - at string{morgan="Morgan Kaufmann"} - at string{addison="Addison-Wesley"} - at string{lncs="LNCS"} - at string{acta="ACTA Press"} - at string{oreilly="O'Reilly"} - - at Comment conferences - at string{sosp="Symposium on Operating Systems Principles, SOSP~'"} - at string{osdi="conference on Operating Systems Design and Implementation, OSDI~'"} - at string{eurosys="EuroSys European Conference on Computer Systems, EuroSys~'"} - at string{usenix-atc="Usenix Annual Technical Conference, USENIX ATC~'"} - at string{usenix-stc="Usenix Summer Technical Conference, USENIX STC~'"} - at string{usenix-sec="USENIX Security Symposium~'"} - at string{pldi="conference on Programming Language Design and Implementation, PLDI~'"} - at string{popl="symposium on Principles Of Programming Languages, POPL~'"} - at string{oopsla="conference on Object Oriented Programming Systems Languages and Applications, OOPSLA~'"} - at string{ecoop="European Conference on Object-Oriented Programming, ECOOP~'"} - at string{ismm="International Symposium on Memory Management, ISMM~'"} - at string{isca="International Symposium on Computer Architecture, ISCA~'"} - at string{podc="symposium on Principles Of Distributed Computing, PODC~'"} - at string{disc="international conference on Distributed Computing, DISC~'"} - at string{cgo="international symposium on Code Generation and Optimization, CGO~'"} - at string{icdcs="International Conference on Distributed Computing Systems, ICDCS~'"} - at string{ipdps="International Parallel and Distributed Processing Symposium, IPDPS~'"} - at string{spaa="Symposium on Parallelism in Algorithms and Architectures, SPAA~'"} - at string{ppopp="symposium on Principles and Practices of Parallel Programming, PPoPP~'"} - at string{asplos="conference on Architectural Support for Programming Languages and Operating Systems, ASPLOS~'"} - at string{sigmetrics="international conference on measurement and modeling of computer systems, SIGMETRICS~'"} - at string{hipc="international conference on High Performance Computing, HiPC~'"} - at string{javagrande={conference on Java Grande, JavaGrande~'}} - at string{jvm="Java\texttrademark\ Virtual Machine Research and Technology Symposium, JVM~'"} - at string{vmrt="Virtual Machine Research and Technology Symposium '"} - at string{ccnc="Consumer Communications and Networking Conference, CCNC~'"} - at string{sbac-pad="international Symposium on Computer Architecture and High Performance Computing, SBAC-PAD~'"} - at string{nca="international symposium on Network Computing and Applications, NCA~'"} - at string{dsn="international conference on Dependable Systems and Networks, DSN~'"} - at string{vee="international conference on Virtual Execution Environments, VEE~'"} - at string{pppj="international symposium on Principles and Practice of Programming in Java, PPPJ~'"} - at string{scc="international Conference on Services Computing, SCC~'"} - at string{doa="international conference on Distributed Objects and Applications, DOA~'"} - at string{sac="Symposium on Applied Computing, SAC~'"} - at string{europar="European conference on Parallel processing, EuroPar~'"} - at string{icse="International Conference on Software Engineering, ICSE~'"} - at string{isscc="International Solid-State Circuits Conference, ISSCC~'"} - at string{dac="Design Automation Conference, DAC~'"} - at string{socc="Symposium on Cloud computing, SoCC~'"} - at string{samos="International Conference on Embedded Computer Systems: Architectures, MOdeling and Simulation, SAMOS~'"} - at string{webapps="USENIX conference on Web application development, WebApps~'"} - at string{sde="software engineering symposium on practical Software Development Environments, SDE~'"} - at string{sc="conference on Supercomputing, Supercomputing~'"} - at string{sp="symposium on Security and Privacy, SP~'"} - at string{ijcai="International Joint Conference on Artificial Intelligence, IJCAI~'"} - at string{hpca="symposium on High Performance Computer Architecture, HPCA~'"} - - at string{cfse="Conférence Française en Systèmes d'Exploitation, CFSE~'"} - at string{decor="conférence francophone sur le Déploiement et la (Re)configuration de logiciels, DECOR~'"} - - at Comment workshops - at string{plos="SOSP Workshop on Programming Languages and Operating Systems, PLOS~'"} - at string{sigopsew=" ACM SIGOPS European Workshop"} - at string{hotpar="workshop on Hot topics in Parallelism, HotPar~'"} - at string{osihpa="workshop on Operating System Interference in High Performance Applications, OSIHPA~'"} - at string{acp4is="workshop on Aspects, Components, and Patterns for Infrastructure Software, ACP4IS~'"} - at string{iies="workshop on Isolation and Integration in Embedded Systems, IIES~'"} - at string{persys="international workshop on Pervasive Systems, PerSys~'"} - at string{mediate="international workshop on Mediation in Semantic Web Services, Mediate~'"} - at string{cipc="NATO workshop on Concurrent Information Processing and Computing, CIPC~'"} - at string{ivme="workshop on Interpreters, Virtual Machines and Emulators, IVME~'"} - at string{jtres="Workshop on Java Technologies for Real-Time and Embedded Systems, JTRES~'"} - - at string{osgiw=" Atelier de travail OSGi\texttrademark"} - at string{cfsew=" Atelier journées des Jeunes Chercheurs en Systèmes, chapitre français de l'ACM-SIGOPS"} - - at Comment journals - at string{pvldb="VLDB Endowment, PVLDB~'"} - at string{cacm="Communications of the ACM"} - at string{tocs="ACM Transactions on Computer Systems (TOCS)"} - at string{toplas="ACM Transactions on Programming Languages and Systems (TOPLAS)"} - at string{toiis="ACM Transactions on Information and System Security"} - at string{ibmsys="IBM System Journal"} - at string{cpe="Concurrency - Practice \& Experience (CP\&E)"} - at string{spe="Software - Practice \& Experience (SP\&E)"} - at string{jpdc="Journal of Parallel and Distributed Computing (JPDC)"} - at string{osr="SIGOPS Operating System Review (OSR)"} - at string{ijca="IASTED International Journal on Computers and Applications"} - at string{ieee-micro="IEEE Micro"} - at string{ieee-software="IEEE Software"} - at string{ieee-tc="IEEE Transactions on Computers"} - - at string{tsi="Technique et Science Informatiques (TSI)"} - Removed: vmkit/trunk/www/publis/generate-biblio.sh URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/generate-biblio.sh?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/generate-biblio.sh (original) +++ vmkit/trunk/www/publis/generate-biblio.sh (removed) @@ -1,73 +0,0 @@ -#!/bin/bash - -ORIG_BIB_NAME=$1 -LAYOUT_BIB_NAME=$2 -STYLE=plain - -ORIG_DIR_PATH=$(dirname $1) -BASE_PATH="$(echo $ORIG_DIR_PATH | sed -e 's/[^/]*/\.\./g')" - -usage() { - echo "Usage: $0 bib_name layout_name start_date end_date" - exit 1 -} - -[ -z "$ORIG_BIB_NAME" ] && usage -[ -z "$LAYOUT_BIB_NAME" ] && usage - -mkdir -p tmp-biblio -cd tmp-biblio - -one-preambule() { -echo '' -echo "

    " -} - -one-append() { - cat $1.html | sed -e 's/


    This file was.*//' \ - | grep -v "bibtex2html" | sed -e 's/

    .*<\/h1>//' \ - | sed -e 's/\.html/\.php/' >> $1.php -} - -one-epilogue() { - echo '' >> $1 - mv $1 ../$ORIG_DIR_PATH -} - -preambule() { - one-preambule "$1" > "$1".php - one-preambule "$1 - Abstracts" > "$1"_abstracts.php - one-preambule "$1 - Bibtex" > "$1"_bib.php -} - -append() { - one-append "$1" - one-append "$1"_abstracts - one-append "$1"_bib -} - -epilogue() { - one-epilogue "$1".php $2 - one-epilogue "$1"_abstracts.php $2 _abstracts - one-epilogue "$1"_bib.php -} - -generate() { - NAME=$3 - cat ../$2 ../$1 > $NAME.bib - preambule "$NAME" - TMPDIR=. bibtex2html -q -d -nodoc -noheader -s "$STYLE" -r -t "" -both "$NAME".bib - append $NAME - epilogue $NAME $GO -} - -generate $ORIG_BIB_NAME $LAYOUT_BIB_NAME Publications - -cd .. -rm -Rf tmp-biblio - -exit 0 \ No newline at end of file Removed: vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf?rev=180276&view=auto ============================================================================== Binary files vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf (original) and vmkit/trunk/www/publis/geoffray08pppj-ladyvm.pdf (removed) differ Removed: vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf?rev=180276&view=auto ============================================================================== Binary files vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf (original) and vmkit/trunk/www/publis/geoffray09dsn-ijvm.pdf (removed) differ Removed: vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf?rev=180276&view=auto ============================================================================== Binary files vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf (original) and vmkit/trunk/www/publis/geoffray10vee-vmkit.pdf (removed) differ Removed: vmkit/trunk/www/publis/root.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/root.php?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/root.php (original) +++ vmkit/trunk/www/publis/root.php (removed) @@ -1 +0,0 @@ - Removed: vmkit/trunk/www/publis/vmkit.bib URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/publis/vmkit.bib?rev=180276&view=auto ============================================================================== --- vmkit/trunk/www/publis/vmkit.bib (original) +++ vmkit/trunk/www/publis/vmkit.bib (removed) @@ -1,87 +0,0 @@ - - - at inproceedings{vee/10/geoffray/vmkit, - author = {Geoffray, Nicolas and Thomas, Ga\"el and Lawall, Julia and Muller, Gilles and Folliot, Bertil}, - title = {{VMKit: a substrate for managed runtime environments}}, - booktitle = procof#vee#{10}, - publisher = acm, - pdf = {geoffray10vee-vmkit.pdf}, - year = {2010}, - address = {Pittsburgh, PA, USA}, - pages = {51--62}, - abstract = { -Managed Runtime Environments (MREs), such as the JVM and the CLI, form -an attractive environment for program execution, by providing -portability and safety, via the use of a bytecode language and -automatic memory management, as well as good performance, via -just-in-time (JIT) compilation. Nevertheless, developing a fully -featured MRE, including e.g. a garbage collector and JIT compiler, is -a herculean task. As a result, new languages cannot easily take -advantage of the benefits of MREs, and it is difficult to experiment -with extensions of existing MRE based languages. - -This paper describes and evaluates VMKit, a first attempt to build a -common substrate that eases the development of high-level MREs. We -have successfully used VMKit to build two MREs: a Java Virtual Machine -and a Common Language Runtime. We provide an extensive study of the -lessons learned in developing this infrastructure, and assess the ease -of implementing new MREs or MRE extensions and the resulting -performance. In particular, it took one of the authors only one month -to develop a Common Language Runtime using VMKit. VMKit furthermore -has performance comparable to the well established open source MREs -Cacao, Apache Harmony and Mono, and is 1.2 to 3 times slower than -JikesRVM on most of the DaCapo benchmarks. - } -} - - at inproceedings{dsn/09/geoffray/ijvm, - author = {Geoffray, Nicolas and Thomas, Ga\"el and Muller, Gilles and Parrend, Pierre and Fr\'enot, St\'ephane and Folliot, Bertil}, - title = {{I-JVM: a Java virtual machine for component isolation in OSGi}}, - booktitle = procof#dsn#{09}, - publisher = ieee, - pdf = {geoffray09dsn-ijvm.pdf}, - year = {2009}, - address = {Estoril, Portugal}, - pages = {544--553}, - abstract = { -The OSGi framework is a Java-based, centralized, component oriented -platform. It is being widely adopted as an execution environment for -the development of extensible applications. However, current Java -Virtual Machines are unable to isolate components from each other. For -instance, a malicious component can freeze the complete platform by -allocating too much memory or alter the behavior of other components -by modifying shared variables. This paper presents I-JVM, a Java -Virtual Machine that provides a lightweight approach to isolation -while preserving compatibility with legacy OSGi applications. Our -evaluation of I-JVM shows that it solves the 8 known OSGi -vulnerabilities that are due to the Java Virtual Machine and that the -overhead of I-JVM compared to the JVM on which it is based is below -20\%. - } -} - - at inproceedings{pppj/08/geoffray/ladyvm, - author = { Geoffray, Nicolas and Thomas, Ga\"el and Cl\'ement, Charles and Folliot, Bertil}, - title = {{A lazy developer approach: building a JVM with third party software}}, - booktitle = procof#pppj#{08}, - year = {2008}, - pages = {73--82}, - address = {Modena, Italy}, - publisher = acm, - pdf = {geoffray08pppj-ladyvm.pdf}, - abstract = { -The development of a complete Java Virtual Machine (JVM) -implementation is a tedious process which involves knowledge in -different areas: garbage collection, just in time compilation, -interpretation, file parsing, data structures, etc. -The result is that developing its own virtual machine requires a -considerable amount of man/year. In this paper -we show that one can implement a JVM with third party -software and with performance comparable to industrial and -top open-source JVMs. Our proof-of-concept implementation -uses existing versions of a garbage collector, a just in -time compiler, and the base library, and is robust enough to -execute complex Java applications such as the OSGi Felix -implementation and the Tomcat servlet container. -} -} Copied: vmkit/trunk/www/vmkit.bib (from r180276, vmkit/trunk/www/publis/vmkit.bib) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/vmkit.bib?p2=vmkit/trunk/www/vmkit.bib&p1=vmkit/trunk/www/publis/vmkit.bib&r1=180276&r2=180277&rev=180277&view=diff ============================================================================== (empty) From peter.senna at gmail.com Thu Apr 25 09:47:04 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:47:04 -0000 Subject: [vmkit-commits] [vmkit] r180278 - update www Message-ID: <20130425164454.B93BF2A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:44:54 2013 New Revision: 180278 URL: http://llvm.org/viewvc/llvm-project?rev=180278&view=rev Log: update www (cherry picked from commit 054c44acf6a4450d5d2dc7efce105cbb0c8d04b7) Modified: vmkit/trunk/www/common.php vmkit/trunk/www/index.php Modified: vmkit/trunk/www/common.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/common.php?rev=180278&r1=180277&r2=180278&view=diff ============================================================================== --- vmkit/trunk/www/common.php (original) +++ vmkit/trunk/www/common.php Thu Apr 25 11:44:54 2013 @@ -23,9 +23,9 @@ - + - Gaël Thomas - Home Page + VMKit2 - Home Page Modified: vmkit/trunk/www/index.php URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/www/index.php?rev=180278&r1=180277&r2=180278&view=diff ============================================================================== --- vmkit/trunk/www/index.php (original) +++ vmkit/trunk/www/index.php Thu Apr 25 11:44:54 2013 @@ -17,7 +17,7 @@ fork of the LLVM for compilation and MMTk to manage memory. -Currently, a full Java virtual machine +Currently, a full Java virtual machine called J3 is distributed with VMKit2.

    For the end user, VMKit2 provides: From peter.senna at gmail.com Thu Apr 25 09:48:22 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:48:22 -0000 Subject: [vmkit-commits] [vmkit] r180280 - add accessor for gcRoot header Message-ID: <20130425164649.6C1762A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:46:49 2013 New Revision: 180280 URL: http://llvm.org/viewvc/llvm-project?rev=180280&view=rev Log: add accessor for gcRoot header (cherry picked from commit b4d4a7c45919332b2be62f9affae4a6127d00623) Modified: vmkit/trunk/include/vmkit/GC.h vmkit/trunk/lib/j3/VMCore/JavaObject.cpp vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Modified: vmkit/trunk/include/vmkit/GC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/GC.h?rev=180280&r1=180279&r2=180280&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/GC.h (original) +++ vmkit/trunk/include/vmkit/GC.h Thu Apr 25 11:46:49 2013 @@ -15,13 +15,28 @@ #include "vmkit/System.h" class VirtualTable; +class gc; + +class gcHeader { +public: + word_t _header; + + inline gc* toReference() { return (gc*)((uintptr_t)this + hiddenHeaderSize()); } + + static inline size_t hiddenHeaderSize() { return sizeof(gcHeader); } +}; class gcRoot { + private: + word_t _header; public: virtual ~gcRoot() {} virtual void tracer(word_t closure) {} - word_t header; + + word_t& header(){return _header; } + inline gcHeader* toHeader() { return (gcHeader*)((uintptr_t)this - gcHeader::hiddenHeaderSize()); } + /// getVirtualTable - Returns the virtual table of this object. /// VirtualTable* getVirtualTable() const { Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180280&r1=180279&r2=180280&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 11:46:49 2013 @@ -34,7 +34,7 @@ uint32_t JavaObject::hashCode(JavaObject assert(HashMask != 0); assert(vmkit::HashBits != 0); - word_t header = self->header; + word_t header = self->header(); word_t GCBits; GCBits = header & vmkit::GCBitMask; word_t val = header & HashMask; @@ -54,16 +54,16 @@ uint32_t JavaObject::hashCode(JavaObject assert(val <= HashMask); do { - header = self->header; + header = self->header(); if ((header & HashMask) != 0) break; word_t newHeader = header | val; assert((newHeader & ~HashMask) == header); - __sync_val_compare_and_swap(&(self->header), header, newHeader); + __sync_val_compare_and_swap(&(self->header()), header, newHeader); } while (true); - assert((self->header & HashMask) != 0); - assert(GCBits == (self->header & vmkit::GCBitMask)); - return (self->header & HashMask) ^ (word_t)getClass(self); + assert((self->header() & HashMask) != 0); + assert(GCBits == (self->header() & vmkit::GCBitMask)); + return (self->header() & HashMask) ^ (word_t)getClass(self); } Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180280&r1=180279&r2=180280&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:46:49 2013 @@ -32,11 +32,11 @@ void ThinLock::overflowThinLock(gc* obje word_t newValue = 0; word_t yieldedValue = 0; do { - oldValue = object->header; + oldValue = object->header(); newValue = obj->getID() | (oldValue & NonLockBitsMask); assert(obj->associatedObject == object); - yieldedValue = __sync_val_compare_and_swap(&(object->header), oldValue, newValue); - } while (((object->header) & ~NonLockBitsMask) != ID); + yieldedValue = __sync_val_compare_and_swap(&(object->header()), oldValue, newValue); + } while (((object->header()) & ~NonLockBitsMask) != ID); assert(obj->associatedObject == object); } @@ -53,9 +53,9 @@ void ThinLock::removeFatLock(FatLock* fa ID = fatLock->getID(); do { - oldValue = object->header; + oldValue = object->header(); newValue = oldValue & NonLockBitsMask; - yieldedValue = __sync_val_compare_and_swap(&object->header, oldValue, newValue); + yieldedValue = __sync_val_compare_and_swap(&object->header(), oldValue, newValue); } while (oldValue != yieldedValue); assert((oldValue & NonLockBitsMask) != ID); fatLock->associatedObject = NULL; @@ -64,23 +64,23 @@ void ThinLock::removeFatLock(FatLock* fa FatLock* ThinLock::changeToFatlock(gc* object, LockSystem& table) { llvm_gcroot(object, 0); - if (!(object->header & FatMask)) { + if (!(object->header() & FatMask)) { FatLock* obj = table.allocate(object); - uint32 count = (object->header & ThinCountMask) >> ThinCountShift; + uint32 count = (object->header() & ThinCountMask) >> ThinCountShift; obj->acquireAll(object, count + 1); word_t oldValue = 0; word_t newValue = 0; word_t yieldedValue = 0; word_t ID = obj->getID(); do { - oldValue = object->header; + oldValue = object->header(); newValue = ID | (oldValue & NonLockBitsMask); assert(obj->associatedObject == object); - yieldedValue = __sync_val_compare_and_swap(&(object->header), oldValue, newValue); - } while (((object->header) & ~NonLockBitsMask) != ID); + yieldedValue = __sync_val_compare_and_swap(&(object->header()), oldValue, newValue); + } while (((object->header()) & ~NonLockBitsMask) != ID); return obj; } else { - FatLock* res = table.getFatLockFromID(object->header); + FatLock* res = table.getFatLockFromID(object->header()); assert(res && "Lock deallocated while held."); assert(res->associatedObject == object); return res; @@ -93,8 +93,8 @@ void printDebugMessage(gc* object, LockS "WARNING: [%p] has been waiting really long for %p (header = %p)\n", (void*)vmkit::Thread::get(), (void*)object, - (void*)object->header); - FatLock* obj = table.getFatLockFromID(object->header); + (void*)object->header()); + FatLock* obj = table.getFatLockFromID(object->header()); if (obj != NULL) { fprintf(stderr, "WARNING: [%p] is waiting on fatlock %p. " @@ -113,15 +113,15 @@ void ThinLock::acquire(gc* object, LockS word_t newValue = 0; word_t yieldedValue = 0; - if ((object->header & System::GetThreadIDMask()) == id) { + if ((object->header() & System::GetThreadIDMask()) == id) { assert(owner(object, table) && "Inconsistent lock"); - if ((object->header & ThinCountMask) != ThinCountMask) { - uint32 count = object->header & ThinCountMask; + if ((object->header() & ThinCountMask) != ThinCountMask) { + uint32 count = object->header() & ThinCountMask; do { - oldValue = object->header; + oldValue = object->header(); newValue = oldValue + ThinCountAdd; - yieldedValue = __sync_val_compare_and_swap(&(object->header), oldValue, newValue); - } while ((object->header & ThinCountMask) == count); + yieldedValue = __sync_val_compare_and_swap(&(object->header()), oldValue, newValue); + } while ((object->header() & ThinCountMask) == count); } else { overflowThinLock(object, table); } @@ -130,12 +130,12 @@ void ThinLock::acquire(gc* object, LockS } do { - oldValue = object->header & NonLockBitsMask; + oldValue = object->header() & NonLockBitsMask; newValue = oldValue | id; - yieldedValue = __sync_val_compare_and_swap(&(object->header), oldValue, newValue); - } while ((object->header & ~NonLockBitsMask) == 0); + yieldedValue = __sync_val_compare_and_swap(&(object->header()), oldValue, newValue); + } while ((object->header() & ~NonLockBitsMask) == 0); - if (((object->header) & ~NonLockBitsMask) == id) { + if (((object->header()) & ~NonLockBitsMask) == id) { assert(owner(object, table) && "Not owner after quitting acquire!"); return; } @@ -143,12 +143,12 @@ void ThinLock::acquire(gc* object, LockS // Simple counter to lively diagnose possible dead locks in this code. int counter = 0; while (true) { - if (object->header & FatMask) { - FatLock* obj = table.getFatLockFromID(object->header); + if (object->header() & FatMask) { + FatLock* obj = table.getFatLockFromID(object->header()); if (obj != NULL) { if (obj->acquire(object)) { - assert((object->header & FatMask) && "Inconsistent lock"); - assert((table.getFatLockFromID(object->header) == obj) && "Inconsistent lock"); + assert((object->header() & FatMask) && "Inconsistent lock"); + assert((table.getFatLockFromID(object->header()) == obj) && "Inconsistent lock"); assert(owner(object, table) && "Not owner after acquring fat lock!"); break; } @@ -158,30 +158,30 @@ void ThinLock::acquire(gc* object, LockS counter++; if (counter == 1000) printDebugMessage(object, table); - while (object->header & ~NonLockBitsMask) { - if (object->header & FatMask) { + while (object->header() & ~NonLockBitsMask) { + if (object->header() & FatMask) { break; } else { vmkit::Thread::yield(); } } - if ((object->header & ~NonLockBitsMask) == 0) { + if ((object->header() & ~NonLockBitsMask) == 0) { FatLock* obj = table.allocate(object); obj->internalLock.lock(); do { - oldValue = object->header & NonLockBitsMask; + oldValue = object->header() & NonLockBitsMask; newValue = oldValue | obj->getID(); assert(obj->associatedObject == object); - yieldedValue = __sync_val_compare_and_swap(&object->header, oldValue, newValue); - } while ((object->header & ~NonLockBitsMask) == 0); + yieldedValue = __sync_val_compare_and_swap(&object->header(), oldValue, newValue); + } while ((object->header() & ~NonLockBitsMask) == 0); if ((getFatLock(object, table) != obj)) { - assert((object->header & ~NonLockBitsMask) != obj->getID()); + assert((object->header() & ~NonLockBitsMask) != obj->getID()); obj->internalLock.unlock(); table.deallocate(obj); } else { - assert((object->header & ~NonLockBitsMask) == obj->getID()); + assert((object->header() & ~NonLockBitsMask) == obj->getID()); assert(owner(object, table) && "Inconsistent lock"); break; } @@ -199,24 +199,24 @@ void ThinLock::release(gc* object, LockS word_t oldValue = 0; word_t newValue = 0; word_t yieldedValue = 0; - if ((object->header & ~NonLockBitsMask) == id) { + if ((object->header() & ~NonLockBitsMask) == id) { do { - oldValue = object->header; + oldValue = object->header(); newValue = oldValue & NonLockBitsMask; - yieldedValue = __sync_val_compare_and_swap(&object->header, oldValue, newValue); - } while ((object->header & ~NonLockBitsMask) == id); - } else if (object->header & FatMask) { - FatLock* obj = table.getFatLockFromID(object->header); + yieldedValue = __sync_val_compare_and_swap(&object->header(), oldValue, newValue); + } while ((object->header() & ~NonLockBitsMask) == id); + } else if (object->header() & FatMask) { + FatLock* obj = table.getFatLockFromID(object->header()); assert(obj && "Lock deallocated while held."); obj->release(object, table); } else { - assert(((object->header & ThinCountMask) > 0) && "Inconsistent state"); - uint32 count = (object->header & ThinCountMask); + assert(((object->header() & ThinCountMask) > 0) && "Inconsistent state"); + uint32 count = (object->header() & ThinCountMask); do { - oldValue = object->header; + oldValue = object->header(); newValue = oldValue - ThinCountAdd; - yieldedValue = __sync_val_compare_and_swap(&(object->header), oldValue, newValue); - } while ((object->header & ThinCountMask) == count); + yieldedValue = __sync_val_compare_and_swap(&(object->header()), oldValue, newValue); + } while ((object->header() & ThinCountMask) == count); } } @@ -224,12 +224,12 @@ void ThinLock::release(gc* object, LockS /// lock. bool ThinLock::owner(gc* object, LockSystem& table) { llvm_gcroot(object, 0); - if (object->header & FatMask) { - FatLock* obj = table.getFatLockFromID(object->header); + if (object->header() & FatMask) { + FatLock* obj = table.getFatLockFromID(object->header()); if (obj != NULL) return obj->owner(); } else { uint64 id = vmkit::Thread::get()->getThreadID(); - if ((object->header & System::GetThreadIDMask()) == id) return true; + if ((object->header() & System::GetThreadIDMask()) == id) return true; } return false; } @@ -237,8 +237,8 @@ bool ThinLock::owner(gc* object, LockSys /// getFatLock - Get the fat lock is the lock is a fat lock, 0 otherwise. FatLock* ThinLock::getFatLock(gc* object, LockSystem& table) { llvm_gcroot(object, 0); - if (object->header & FatMask) { - return table.getFatLockFromID(object->header); + if (object->header() & FatMask) { + return table.getFatLockFromID(object->header()); } else { return NULL; } Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180280&r1=180279&r2=180280&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:46:49 2013 @@ -23,12 +23,12 @@ extern "C" word_t Java_org_j3_mmtk_Objec } extern "C" word_t Java_org_j3_mmtk_ObjectModel_readAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { - return obj->header; + return obj->header(); } extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2 ( MMTkObject* OM, gc* obj, word_t val) { - obj->header = val; + obj->header() = val; } extern "C" gc* Java_org_j3_mmtk_ObjectModel_objectStartRef__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { @@ -52,13 +52,13 @@ extern "C" gc* Java_org_j3_mmtk_ObjectMo } extern "C" word_t Java_org_j3_mmtk_ObjectModel_prepareAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { - return obj->header; + return obj->header(); } extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_attemptAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Word_2( MMTkObject* OM, gc* obj, word_t oldValue, word_t newValue) { - word_t val = __sync_val_compare_and_swap(&(obj->header), oldValue, newValue); + word_t val = __sync_val_compare_and_swap(&(obj->header()), oldValue, newValue); return (val == oldValue); } From peter.senna at gmail.com Thu Apr 25 09:48:43 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:48:43 -0000 Subject: [vmkit-commits] [vmkit] r180279 - Working on stale references and isolate termination. Message-ID: <20130425164640.4B28A2A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:46:36 2013 New Revision: 180279 URL: http://llvm.org/viewvc/llvm-project?rev=180279&view=rev Log: Working on stale references and isolate termination. (cherry picked from commit 8b33b069777ced12f4883ae362d296ebb122c84c) Added: vmkit/trunk/.autotools vmkit/trunk/.cproject vmkit/trunk/.project vmkit/trunk/README.TXT vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll - copied, changed from r180278, vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp vmkit/trunk/tests/debug.txt vmkit/trunk/tests/i-jvm-log.txt vmkit/trunk/tests/ijvm.isolate.IsolateManager/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java vmkit/trunk/tests/ijvm.tests.StaticClient/ vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath vmkit/trunk/tests/ijvm.tests.StaticClient/.project vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/ vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties vmkit/trunk/tests/ijvm.tests.StaticClient/src/ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java vmkit/trunk/tests/ijvm.tests.StaticExposer/ vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath vmkit/trunk/tests/ijvm.tests.StaticExposer/.project vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/ vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java vmkit/trunk/tests/ijvm.tests.loopClient/ vmkit/trunk/tests/ijvm.tests.loopClient/.classpath vmkit/trunk/tests/ijvm.tests.loopClient/.project vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/ vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.loopClient/build.properties vmkit/trunk/tests/ijvm.tests.loopClient/src/ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java vmkit/trunk/tests/ijvm.tests.looper/ vmkit/trunk/tests/ijvm.tests.looper/.classpath vmkit/trunk/tests/ijvm.tests.looper/.project vmkit/trunk/tests/ijvm.tests.looper/META-INF/ vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.looper/build.properties vmkit/trunk/tests/ijvm.tests.looper/src/ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java vmkit/trunk/tests/ijvm.tests.tier/ vmkit/trunk/tests/ijvm.tests.tier/.classpath vmkit/trunk/tests/ijvm.tests.tier/.project vmkit/trunk/tests/ijvm.tests.tier/META-INF/ vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.tier/build.properties vmkit/trunk/tests/ijvm.tests.tier/src/ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java vmkit/trunk/tests/ijvm.tests.tierImpl/ vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath vmkit/trunk/tests/ijvm.tests.tierImpl/.project vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/ vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties vmkit/trunk/tests/ijvm.tests.tierImpl/src/ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java vmkit/trunk/tests/minimal.xargs vmkit/trunk/tests/sun-jvm-log.txt Modified: vmkit/trunk/CREDITS.TXT vmkit/trunk/Makefile.common.in vmkit/trunk/Makefile.rules vmkit/trunk/include/j3/J3Intrinsics.h vmkit/trunk/include/j3/JavaAOTCompiler.h vmkit/trunk/include/j3/JavaCompiler.h vmkit/trunk/include/j3/JavaJITCompiler.h vmkit/trunk/include/j3/JavaLLVMCompiler.h vmkit/trunk/include/j3/LLVMInfo.h vmkit/trunk/include/vmkit/CollectionRV.h vmkit/trunk/include/vmkit/JIT.h vmkit/trunk/include/vmkit/Locks.h vmkit/trunk/include/vmkit/MethodInfo.h vmkit/trunk/include/vmkit/ObjectLocks.h vmkit/trunk/include/vmkit/System.h vmkit/trunk/include/vmkit/Thread.h vmkit/trunk/include/vmkit/UTF8.h vmkit/trunk/include/vmkit/VirtualMachine.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.h vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp vmkit/trunk/lib/j3/LLVMRuntime/Makefile vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll vmkit/trunk/lib/j3/VMCore/JavaArray.h vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.h vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp vmkit/trunk/lib/j3/VMCore/JavaObject.cpp vmkit/trunk/lib/j3/VMCore/JavaObject.h vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.h vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp vmkit/trunk/lib/j3/VMCore/Jnjvm.h vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h vmkit/trunk/lib/j3/VMCore/Reader.h vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp vmkit/trunk/lib/vmkit/Compiler/JIT.cpp vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp vmkit/trunk/lib/vmkit/Runtime/Object.cpp vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp vmkit/trunk/mmtk/java/build.xml.in vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp vmkit/trunk/mmtk/mmtk-j3/Collection.cpp vmkit/trunk/tools/precompiler/trainer/Makefile vmkit/trunk/tools/vmjc/vmjc.cpp Added: vmkit/trunk/.autotools URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.autotools?rev=180279&view=auto ============================================================================== --- vmkit/trunk/.autotools (added) +++ vmkit/trunk/.autotools Thu Apr 25 11:46:36 2013 @@ -0,0 +1,42 @@ + + + + + Added: vmkit/trunk/.cproject URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.cproject?rev=180279&view=auto ============================================================================== --- vmkit/trunk/.cproject (added) +++ vmkit/trunk/.cproject Thu Apr 25 11:46:36 2013 @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: vmkit/trunk/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/.project (added) +++ vmkit/trunk/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,73 @@ + + + ijvm + + + + + + org.eclipse.cdt.autotools.core.genmakebuilderV2 + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + false + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.eclipse.cdt.autotools.core.autotoolsNatureV2 + + Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:46:36 2013 @@ -35,3 +35,6 @@ N: Gael Thomas E: gael.thomas at lip6.fr W: http://lip6.fr/Gael.Thomas/ D: Primary architect of JnJVM + +N: Koutheir Attouchi +E: koutheir at gmail.com Modified: vmkit/trunk/Makefile.common.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/Makefile.common.in (original) +++ vmkit/trunk/Makefile.common.in Thu Apr 25 11:46:36 2013 @@ -16,6 +16,47 @@ ifeq ($(BUILD_FRAMETABLE), 1) BUILT_SOURCES = FrametablesSymbols.inc FrametablesExterns.inc endif +ENABLE_OPTIMIZED := 0 +REQUIRES_FRAME_POINTER := 1 + +ifeq ($(ENABLE_OPTIMIZED), 0) + CFLAGS += -O0 + CXXFLAGS += -O0 + + LLC_CPP_FLAGS := -O=0 + LLC_ASM_FLAGS := -O=0 -asm-verbose + LLC_GLIBJ_FLAGS := + + OPT_BC_WITH_GC_FLAGS := -inline + OPT_MMTK_FLAGS := + OPT_VMJC_FLAGS := -std-compile-opts + + VMJC_MMTK_FLAGS := + VMJC_GLIBJ_FLAGS := -jit-emit-debug -std-compile-opts + + PRECOMPILER_FLAGS := + + KEEP_SYMBOLS := 1 + DEBUG_RUNTIME := 1 + DEBUG_SYMBOLS := 1 +else + CFLAGS += -O2 -g0 + CXXFLAGS += -O2 -g0 + + LLC_CPP_FLAGS := + LLC_ASM_FLAGS := -O=2 -disable-debug-info-print + LLC_GLIBJ_FLAGS := -disable-debug-info-print + + OPT_BC_WITH_GC_FLAGS := -std-compile-opts -strip-debug + OPT_MMTK_FLAGS := -std-compile-opts -strip-debug + OPT_VMJC_FLAGS := -std-compile-opts -strip-debug + + PRECOMPILER_FLAGS := -O3 + + VMJC_MMTK_FLAGS := -std-compile-opts + VMJC_GLIBJ_FLAGS := -std-compile-opts +endif + # Include LLVM's Master Makefile. include $(LLVM_OBJ_ROOT)/Makefile.common Modified: vmkit/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/Makefile.rules (original) +++ vmkit/trunk/Makefile.rules Thu Apr 25 11:46:36 2013 @@ -15,7 +15,7 @@ ifdef VMKIT_RUNTIME LLVMRuntime.inc : $(LLVMAS) $(LLC) $(VMKIT_RUNTIME) $(Echo) "Building LLVM runtime with $(VMKIT_RUNTIME)" - $(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) -march=cpp -cppgen=contents -o $@ + $(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=contents -o $@ all-local:: LLVMRuntime.inc @@ -37,18 +37,18 @@ glibj.zip.s : $(LOPT) $(LLC) $(VMJC) glibj.zip.bc : $(Echo) "Compiling glibj.zip to llvm" $(Verb) if test -d $(GLIBJ); then \ - $(VMJC) -f -std-compile-opts $(GLIBJ)/glibj.zip -o glibj.zip.bc; \ + $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ)/glibj.zip -o glibj.zip.bc; \ else \ - $(VMJC) -f -std-compile-opts $(GLIBJ) -o glibj.zip.bc; \ + $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ) -o glibj.zip.bc; \ fi glibj-optimized.zip.bc : glibj.zip.bc $(Echo) "Optimizing glibj.zip" - $(Verb) $(LOPT) -std-compile-opts -f glibj.zip.bc -o glibj-optimized.zip.bc + $(Verb) $(LOPT) $(OPT_VMJC_FLAGS) -f glibj.zip.bc -o glibj-optimized.zip.bc glibj.zip.s : glibj-optimized.zip.bc $(Echo) "Compiling glibj.zip.bc to native" - $(Verb) $(LLC) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s + $(Verb) $(LLC) $(LLC_GLIBJ_FLAGS) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s $(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG) @@ -74,20 +74,22 @@ ifeq ($(COMPILE_MMTK), 1) all:: $(Verb) $(ANT) -buildfile $(PROJ_OBJ_ROOT)/mmtk/java/build.xml $(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@) - $(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) -std-compile-opts -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc - $(Verb) $(VMJC) -std-compile-opts -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled - $(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -std-compile-opts -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc + $(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc + $(Verb) $(VMJC) $(VMJC_MMTK_FLAGS) -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled + $(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) $(OPT_MMTK_FLAGS) -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc $(Verb) $(LLVMLINK) -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc - $(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $(LibDir)/FinalMMTk.bc + $(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -StaticGCPass -o $(LibDir)/FinalMMTk.bc $(Verb) $(MKDIR) $(ObjDir) - $(Verb) $(LLC) -disable-fp-elim -disable-cfi -disable-debug-info-print -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s + $(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-fp-elim -disable-cfi -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s + $(Verb) $(GREP) -v '\.loc[^0-9]\+[0-9]\+ 0' $(ObjDir)/FinalMMTk.s > $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc + $(Verb) $(MV) -f $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc $(ObjDir)/FinalMMTk.s $(Verb) $(LLVMCC) -c $(ObjDir)/FinalMMTk.s -o $(ObjDir)/FinalMMTk.o $(Verb) $(Archive) $(LibDir)/libFinalMMTk.a $(ObjDir)/FinalMMTk.o $(Verb) $(Ranlib) $(LibDir)/libFinalMMTk.a - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkMallocInline.inc - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkMallocInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc endif clean-local:: @@ -108,11 +110,11 @@ AModule := $(LibDir)/lib$(MODU $(ObjectsBCWithGC): $(ObjDir)/%_gc.bc: $(ObjDir)/%.ll $(LOPT) $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)" - $(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $@ + $(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) $(OPT_BC_WITH_GC_FLAGS) -StaticGCPass -o $@ $(ObjectsSWithGC): $(ObjDir)/%_gc.s: $(ObjDir)/%_gc.bc $(LLC) $(Echo) "Compiling $*.bc to $*.s for $(BuildMode) build" - $(Verb) $(LLC) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@ + $(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@ $(ObjectsWithGC): $(ObjDir)/%_gc.o: $(ObjDir)/%_gc.s $(ObjDir)/.dir $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG) Added: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180279&view=auto ============================================================================== --- vmkit/trunk/README.TXT (added) +++ vmkit/trunk/README.TXT Thu Apr 25 11:46:36 2013 @@ -0,0 +1,102 @@ +http://llvm.org/docs/GettingStarted.html#checkout + +=================== +Prepare the system: +=================== +apt-get install libgconf2-dev libgtk2.0-dev + +# To use OpenJDK: +# apt-get install default-jre default-jdk + +============== +GNU Classpath: +============== +wget http://ftp.gnu.org/gnu/classpath/classpath-0.97.2.tar.gz +tar zxvf classpath-0.97.2.tar.gz +ln -s classpath-0.97.2 classpath +cd classpath +./configure --disable-plugin --disable-examples --disable-Werror +make -j12 +cd lib +ln -sf ../native/jni/gtk-peer/.libs/libgtkpeer.so +ln -sf ../native/jni/gconf-peer/.libs/libgconfpeer.so +ln -sf ../native/jni/java-io/.libs/libjavaio.so +ln -sf ../native/jni/java-lang/.libs/libjavalangreflect.so +ln -sf ../native/jni/java-lang/.libs/libjavalang.so +ln -sf ../native/jni/java-net/.libs/libjavanet.so +ln -sf ../native/jni/java-nio/.libs/libjavanio.so +ln -sf ../native/jni/java-util/.libs/libjavautil.so + +# Go root +# make install + +===== +LLVM: +===== + +Notice: + +LLVM revision 158308 is known to work. + +Get it (git): + +git clone http://llvm.org/git/llvm.git +cd llvm/tools +git clone http://llvm.org/git/clang.git +cd clang +git config branch.master.rebase true +cd ../.. +git config branch.master.rebase true + +Get it (svn): + +svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm +cd llvm/tools +svn co http://llvm.org/svn/llvm-project/cfe/trunk clang +cd ../projects +svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt +cd .. + +Patch it: + +cd llvm +patch -p0 < ../llvm.patch + +Make it (release mode): + +./configure --enable-optimized --enable-assertions --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen +make -j12 ENABLE_OPTIMIZED=1 BUILD_EXAMPLES=0 ENABLE_DOCS=0 +ln -s Release+Asserts Debug+Asserts + +Enable debug compilation: + +nano Makefile.config +# Comment out: +# ENABLE_OPTIMIZED=1 +# Uncomment: +# DEBUG_RUNTIME = 1 +# DEBUG_SYMBOLS = 1 +# Insert: +# KEEP_SYMBOLS=1 + +Make it (debug mode): + +./configure --disable-optimized --enable-assertions --enable-debug-runtime --enable-debug-symbols --enable-keep-symbols --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen +make -j12 ENABLE_OPTIMIZED=0 BUILD_EXAMPLES=0 ENABLE_DOCS=0 + +====== +VMKit: +====== + +Get it (svn): + +svn co http://llvm.org/svn/llvm-project/vmkit/trunk vmkit + +Get it (git): + +git clone git+ssh://koutheir at scm.gforge.inria.fr//gitroot/vmkit2/vmkit2.git + +Make it (debug mode): + +./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip +make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 Modified: vmkit/trunk/include/j3/J3Intrinsics.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/j3/J3Intrinsics.h (original) +++ vmkit/trunk/include/j3/J3Intrinsics.h Thu Apr 25 11:46:36 2013 @@ -30,7 +30,9 @@ public: llvm::Type* JavaArrayDoubleType; llvm::Type* JavaArrayObjectType; + llvm::Type* ExceptionBufferType; llvm::Type* VTType; + llvm::Type* JavaVTType; llvm::Type* JavaObjectType; llvm::Type* JavaArrayType; llvm::Type* JavaCommonClassType; @@ -43,7 +45,7 @@ public: llvm::Type* UTF8Type; llvm::Type* JavaMethodType; llvm::Type* JavaFieldType; - llvm::Type* AttributType; + llvm::Type* AttributeType; llvm::Type* JavaThreadType; llvm::Type* MutatorThreadType; llvm::Type* J3DenseMapType; @@ -58,6 +60,7 @@ public: llvm::Function* PrintMethodEndFunction; llvm::Function* InitialiseClassFunction; llvm::Function* InitialisationCheckFunction; + llvm::Function* InitialisationCheckForJavaObjectFunction; llvm::Function* ForceInitialisationCheckFunction; llvm::Function* ForceLoadedCheckFunction; llvm::Function* ClassLookupFunction; @@ -81,6 +84,10 @@ public: llvm::Function* MultiCallNewFunction; llvm::Function* GetArrayClassFunction; +// llvm::Function *CodeMarker1Function, *CodeMarker2Function; + llvm::Function* SetIsolateFunction; + llvm::Function* GetCachedValueFunction; + llvm::Function* GetClassDelegateePtrFunction; llvm::Function* GetClassDelegateeFunction; llvm::Function* RuntimeDelegateeFunction; llvm::Function* ArrayLengthFunction; @@ -116,6 +123,8 @@ public: llvm::Constant* OffsetStaticInstanceInTaskClassMirrorConstant; llvm::Constant* OffsetInitializedInTaskClassMirrorConstant; llvm::Constant* OffsetStatusInTaskClassMirrorConstant; + llvm::Constant* OffsetCommonClassInClassConstant; + llvm::Constant* OffsetCommonClassInJavaVirtualTableConstant; llvm::Constant* OffsetDoYieldInThreadConstant; llvm::Constant* OffsetIsolateIDInThreadConstant; @@ -149,6 +158,11 @@ public: llvm::Function* ArrayStoreExceptionFunction; llvm::Function* ArithmeticExceptionFunction; llvm::Function* ThrowExceptionFromJITFunction; + + llvm::Constant* CurrentIsolateID; + llvm::Constant* OffsetHandlerMethodInExceptionBufferConstant; + llvm::Constant* OffsetHandlerIsolateIDInExceptionBufferConstant; + llvm::Constant* OffsetSetJmpBufferInExceptionBufferConstant; }; } Modified: vmkit/trunk/include/j3/JavaAOTCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaAOTCompiler.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaAOTCompiler.h (original) +++ vmkit/trunk/include/j3/JavaAOTCompiler.h Thu Apr 25 11:46:36 2013 @@ -17,7 +17,7 @@ namespace j3 { class ArrayObject; -class Attribut; +class JavaAttribute; class ClassBytes; class JnjvmBootstrapLoader; @@ -26,7 +26,7 @@ using vmkit::UTF8; class JavaAOTCompiler : public JavaLLVMCompiler { public: - JavaAOTCompiler(const std::string &ModuleID); + JavaAOTCompiler(const std::string &ModuleID, bool compilingMMTk=false); virtual bool isStaticCompiling() { return true; @@ -36,8 +36,8 @@ public: return true; } - virtual JavaCompiler* Create(const std::string& ModuleID) { - return new JavaAOTCompiler(ModuleID); + virtual JavaCompiler* Create(const std::string& ModuleID, bool compilingMMTk=false) { + return new JavaAOTCompiler(ModuleID, compilingMMTk); } virtual void* materializeFunction(JavaMethod* meth, Class* customizeFor) { @@ -64,7 +64,7 @@ public: virtual llvm::Constant* getClassBytes(const UTF8* name, ClassBytes* bytes); virtual llvm::Constant* getJavaClass(CommonClass* cl); virtual llvm::Constant* getJavaClassPtr(CommonClass* cl); - virtual llvm::Constant* getStaticInstance(Class* cl); + virtual llvm::Constant* getStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE); virtual llvm::Constant* getVirtualTable(JavaVirtualTable*); virtual llvm::Constant* getMethodInClass(JavaMethod* meth); @@ -83,16 +83,17 @@ public: private: //--------------- Static compiler specific functions -----------------------// + llvm::Constant* CreateConstantFromTaskClassMirrorArray(Class* cl); llvm::Constant* CreateConstantFromVT(JavaVirtualTable* VT); llvm::Constant* CreateConstantFromUTF8(const UTF8* val); llvm::Constant* CreateConstantFromCommonClass(CommonClass* cl); llvm::Constant* CreateConstantFromClass(Class* cl); llvm::Constant* CreateConstantFromClassPrimitive(ClassPrimitive* cl); llvm::Constant* CreateConstantFromClassArray(ClassArray* cl); - llvm::Constant* CreateConstantFromAttribut(Attribut& attribut); + llvm::Constant* CreateConstantFromAttribute(JavaAttribute& attribute); llvm::Constant* CreateConstantFromJavaField(JavaField& field); llvm::Constant* CreateConstantFromJavaMethod(JavaMethod& method); - llvm::Constant* CreateConstantFromStaticInstance(Class* cl); + llvm::Constant* CreateConstantFromStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE); llvm::Constant* CreateConstantFromJavaString(JavaString* str); llvm::Constant* CreateConstantForBaseObject(CommonClass* cl); llvm::Constant* CreateConstantFromJavaObject(JavaObject* obj); @@ -116,7 +117,7 @@ private: std::map arrayClasses; std::map javaClasses; std::map virtualTables; - std::map staticInstances; + std::map taskClassMirrors; std::map resolvedConstantPools; std::map strings; std::map nativeFunctions; @@ -151,7 +152,7 @@ private: virtual_table_iterator; typedef std::map::iterator - static_instance_iterator; + task_class_mirror_iterator; typedef std::map::iterator resolved_constant_pool_iterator; Modified: vmkit/trunk/include/j3/JavaCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaCompiler.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaCompiler.h (original) +++ vmkit/trunk/include/j3/JavaCompiler.h Thu Apr 25 11:46:36 2013 @@ -36,7 +36,7 @@ public: vmkit::BumpPtrAllocator allocator; - virtual JavaCompiler* Create(const std::string&) { + virtual JavaCompiler* Create(const std::string&, bool compilingMMTk=false) { return this; } Modified: vmkit/trunk/include/j3/JavaJITCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaJITCompiler.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaJITCompiler.h (original) +++ vmkit/trunk/include/j3/JavaJITCompiler.h Thu Apr 25 11:46:36 2013 @@ -41,7 +41,7 @@ public: llvm::ExecutionEngine* executionEngine; llvm::GCModuleInfo* GCInfo; - JavaJITCompiler(const std::string &ModuleID); + JavaJITCompiler(const std::string &ModuleID, bool compilingMMTk=false); ~JavaJITCompiler(); virtual bool isStaticCompiling() { @@ -64,7 +64,7 @@ public: virtual llvm::Constant* getNativeClass(CommonClass* cl); virtual llvm::Constant* getJavaClass(CommonClass* cl); virtual llvm::Constant* getJavaClassPtr(CommonClass* cl); - virtual llvm::Constant* getStaticInstance(Class* cl); + virtual llvm::Constant* getStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE); virtual llvm::Constant* getVirtualTable(JavaVirtualTable*); virtual llvm::Constant* getMethodInClass(JavaMethod* meth); @@ -79,7 +79,7 @@ public: bool stat, llvm::BasicBlock* insert) = 0; virtual word_t getPointerOrStub(JavaMethod& meth, int type) = 0; - static JavaJITCompiler* CreateCompiler(const std::string& ModuleID); + static JavaJITCompiler* CreateCompiler(const std::string& ModuleID, bool compilingMMTk=false); }; class JavaJ3LazyJITCompiler : public JavaJITCompiler { @@ -89,11 +89,11 @@ public: bool stat, llvm::BasicBlock* insert); virtual word_t getPointerOrStub(JavaMethod& meth, int side); - virtual JavaCompiler* Create(const std::string& ModuleID) { - return new JavaJ3LazyJITCompiler(ModuleID); + virtual JavaCompiler* Create(const std::string& ModuleID, bool compilingMMTk=false) { + return new JavaJ3LazyJITCompiler(ModuleID, compilingMMTk); } - JavaJ3LazyJITCompiler(const std::string& ModuleID); + JavaJ3LazyJITCompiler(const std::string& ModuleID, bool compilingMMTk=false); }; } // end namespace j3 Modified: vmkit/trunk/include/j3/JavaLLVMCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaLLVMCompiler.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaLLVMCompiler.h (original) +++ vmkit/trunk/include/j3/JavaLLVMCompiler.h Thu Apr 25 11:46:36 2013 @@ -52,6 +52,7 @@ protected: llvm::DIBuilder* DebugFactory; J3Intrinsics JavaIntrinsics; const llvm::TargetData* TheTargetData; + bool compilingMMTk; private: bool enabledException; @@ -84,8 +85,9 @@ private: llvm::DenseMap staticAPs; public: - JavaLLVMCompiler(const std::string &ModuleID); - + JavaLLVMCompiler(const std::string &ModuleID, bool compilingMMTk=false); + + bool isCompilingMMTk() {return compilingMMTk;} virtual bool isStaticCompiling() = 0; virtual bool emitFunctionName() = 0; virtual void* GenerateStub(llvm::Function* F) = 0; @@ -123,7 +125,7 @@ public: cooperativeGC = false; } - virtual JavaCompiler* Create(const std::string& ModuleID) = 0; + virtual JavaCompiler* Create(const std::string& ModuleID, bool compilingMMTk=false) = 0; virtual ~JavaLLVMCompiler(); @@ -194,7 +196,7 @@ public: virtual llvm::Constant* getNativeClass(CommonClass* cl) = 0; virtual llvm::Constant* getJavaClass(CommonClass* cl) = 0; virtual llvm::Constant* getJavaClassPtr(CommonClass* cl) = 0; - virtual llvm::Constant* getStaticInstance(Class* cl) = 0; + virtual llvm::Constant* getStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE) = 0; virtual llvm::Constant* getVirtualTable(JavaVirtualTable*) = 0; virtual llvm::Constant* getMethodInClass(JavaMethod* meth) = 0; Modified: vmkit/trunk/include/j3/LLVMInfo.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/LLVMInfo.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/j3/LLVMInfo.h (original) +++ vmkit/trunk/include/j3/LLVMInfo.h Thu Apr 25 11:46:36 2013 @@ -86,7 +86,7 @@ private: llvm::Constant* offsetConstant; llvm::FunctionType* functionType; std::map customizedVersions; - + public: llvm::Function* getMethod(Class* customizeFor); llvm::Constant* getOffset(); @@ -107,6 +107,10 @@ public: void setCustomizedVersion(Class* customizeFor, llvm::Function* F); + typedef std::map customizedVersionsType; + typedef customizedVersionsType::iterator customizedVersionsIterator; + customizedVersionsType* getCustomizedVersions() {return &customizedVersions;} + friend class JavaAOTCompiler; }; Modified: vmkit/trunk/include/vmkit/CollectionRV.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/CollectionRV.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/CollectionRV.h (original) +++ vmkit/trunk/include/vmkit/CollectionRV.h Thu Apr 25 11:46:36 2013 @@ -62,7 +62,7 @@ public: virtual void synchronize() = 0; virtual void join() = 0; - virtual void joinAfterUncooperative(word_t SP) = 0; + virtual void joinAfterUncooperative(void* SP) = 0; virtual void joinBeforeUncooperative() = 0; virtual void addThread(Thread* th) = 0; @@ -74,7 +74,7 @@ public: void synchronize(); void join(); - void joinAfterUncooperative(word_t SP); + void joinAfterUncooperative(void* SP); void joinBeforeUncooperative(); void addThread(Thread* th); Modified: vmkit/trunk/include/vmkit/JIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/JIT.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/JIT.h (original) +++ vmkit/trunk/include/vmkit/JIT.h Thu Apr 25 11:46:36 2013 @@ -154,6 +154,7 @@ public: llvm::Constant* constantFloatMinusZero; llvm::Constant* constantDoubleMinusZero; llvm::Constant* constantPtrNull; + llvm::Constant* constantPtr32Null; llvm::Constant* constantPtrLogSize; llvm::Constant* constantThreadIDMask; llvm::Constant* constantStackOverflowMask; Modified: vmkit/trunk/include/vmkit/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Locks.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Locks.h (original) +++ vmkit/trunk/include/vmkit/Locks.h Thu Apr 25 11:46:36 2013 @@ -175,6 +175,19 @@ public: void unlock() { release(); } }; +class LockGuard +{ +protected: + Lock& lock; + +private: //Disable these consructors + LockGuard(); + LockGuard(const LockGuard&); + +public: + inline LockGuard(Lock& l) : lock(l) {lock.lock();} + virtual ~LockGuard() {lock.unlock();} +}; } // end namespace vmkit Modified: vmkit/trunk/include/vmkit/MethodInfo.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/MethodInfo.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/MethodInfo.h (original) +++ vmkit/trunk/include/vmkit/MethodInfo.h Thu Apr 25 11:46:36 2013 @@ -19,7 +19,7 @@ namespace vmkit { class FrameInfo { public: void* Metadata; - word_t ReturnAddress; + void* ReturnAddress; uint16_t SourceIndex; uint16_t FrameSize; uint16_t NumLiveOffsets; @@ -28,9 +28,9 @@ public: class MethodInfoHelper { public: - static void print(word_t ip, word_t addr); + static void print(void* ip, void* callFrame); - static void scan(word_t closure, FrameInfo* FI, word_t ip, word_t addr); + static void scan(word_t closure, FrameInfo* FI, void* ip, void* callFrame); static uint32_t FrameInfoSize(uint32_t NumOffsets) { uint32_t FrameInfoSize = sizeof(FrameInfo) + (NumOffsets - 1) * sizeof(int16_t); Modified: vmkit/trunk/include/vmkit/ObjectLocks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/ObjectLocks.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/ObjectLocks.h (original) +++ vmkit/trunk/include/vmkit/ObjectLocks.h Thu Apr 25 11:46:36 2013 @@ -59,7 +59,7 @@ public: state = StateRunning; } - bool wait(gc* object, LockSystem& table, struct timeval* info, bool timed); + bool wait(gc* object, LockSystem& table, struct timeval* info, bool& timed); void notify(gc* object, LockSystem& table); void notifyAll(gc* object, LockSystem& table); }; Modified: vmkit/trunk/include/vmkit/System.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/System.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/System.h (original) +++ vmkit/trunk/include/vmkit/System.h Thu Apr 25 11:46:36 2013 @@ -95,7 +95,7 @@ const word_t kVmkitThreadMask = 0xF00000 const word_t kGCMemorySize = 0x30000000; -#define TRY { vmkit::ExceptionBuffer __buffer__; if (!SETJMP(__buffer__.buffer)) +#define TRY { vmkit::ExceptionBuffer __buffer__; if (!SETJMP(__buffer__.getSetJmpBuffer())) #define CATCH else #define IGNORE else { vmkit::Thread::get()->clearException(); }} #define END_CATCH } @@ -124,8 +124,8 @@ public: return ptr; } - static word_t GetAlternativeStackSize() { - static word_t size = PageAlignUp(SIGSTKSZ); + static size_t GetAlternativeStackSize() { + static size_t size = PageAlignUp(SIGSTKSZ); return size; } @@ -144,31 +144,11 @@ public: return kThreadStart; } - static uint32_t GetPageSize() { - static uint32_t pagesize = getpagesize(); + static size_t GetPageSize() { + static size_t pagesize = getpagesize(); return pagesize; } - static word_t GetCallerAddress() { -#if defined(ARCH_X86) || defined(ARCH_X64) - return (word_t)__builtin_frame_address(0); -#else - return ((word_t*)__builtin_frame_address(0))[0]; -#endif - } - - static word_t GetCallerOfAddress(word_t addr) { - return ((word_t*)addr)[0]; - } - - static word_t GetIPFromCallerAddress(word_t addr) { -#if defined(MACOS_OS) && defined(ARCH_PPC) - return ((word_t*)addr)[2]; -#else - return ((word_t*)addr)[1]; -#endif - } - static int SetJmp(jmp_buf buffer) { #if defined(MACOS_OS) return _setjmp(buffer); Modified: vmkit/trunk/include/vmkit/Thread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Thread.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Thread.h (original) +++ vmkit/trunk/include/vmkit/Thread.h Thu Apr 25 11:46:36 2013 @@ -19,11 +19,114 @@ #include "vmkit/System.h" +typedef uint32_t isolate_id_t; +#define CURRENT_ISOLATE ((isolate_id_t)(-1)) +#define IsValidIsolateID(iid) ((iid) != CURRENT_ISOLATE) namespace vmkit { class FrameInfo; class VirtualMachine; +class Thread; + + +class KnownFrame { +public: + void* currentFP; + void* currentIP; + KnownFrame* previousFrame; +}; + + +enum StackWalkerState { + StackWalkerInvalid = 0, + StackWalkerValid, + StackWalkerValidMetadata +}; + +/// StackWalker - This class walks the stack of threads, returning a FrameInfo +/// object at each iteration. +/// +class StackWalker +{ +protected: + void* callFrame; + KnownFrame* frame; + vmkit::Thread* thread; + bool onlyReportMetadataEnabledFrames; + +public: + StackWalker(vmkit::Thread* th, bool only_report_metadata_enabled_frames = false); + StackWalker(const StackWalker& obj, bool reset = false); + + StackWalker& operator = (const StackWalker& obj); + bool operator == (const StackWalker& obj) const {return (thread == obj.thread) && (callFrame == obj.callFrame);} + bool operator != (const StackWalker& obj) const {return !((*this) == obj);} + void operator++(); + void operator--(); + void* operator*(); + FrameInfo* get(); + const FrameInfo* get() const {return const_cast(this)->get();} + void reset() __attribute__ ((noinline)); + + void* getCallFrame() const {return callFrame;} + void* getCallerCallFrame() const; + void* getReturnAddress() const {return getReturnAddressFromCallFrame(callFrame);} + KnownFrame* getKnownFrame() {return frame;} + vmkit::Thread* getScannedThread() const {return thread;} + StackWalkerState getState() const; + bool isValid() const {return getState() >= StackWalkerValid;} + bool hasMetaData() const {return getState() == StackWalkerValidMetadata;} + + void* updateReturnAddress(void* newAddr); + void* updateCallerFrameAddress(void* newAddr); + + bool isReportingOnlyMetadataEnabledFrames() const {return onlyReportMetadataEnabledFrames;} + void reportOnlyMetadataEnabledFrames(bool only_report_metadata_enabled_frames) {onlyReportMetadataEnabledFrames = only_report_metadata_enabled_frames;} + + void dump() const; + + static void* getCallerCallFrameAddress(void* callFrame); + static void** getReturnAddressPtrFromCallFrame(void* callFrame); + static void* getReturnAddressFromCallFrame(void* callFrame); + +#if defined(ARCH_X86) || defined(ARCH_X64) +#define StackWalker_getCallFrameAddress() ((void*)(__builtin_frame_address(0))) +#else +#define StackWalker_getCallFrameAddress() (*(void**)__builtin_frame_address(0)) +#endif + +}; + + +class ExceptionBuffer { +protected: + /* + WARNING: + - Do not change the fields order or type, unless you update LLVM data types. + - Do not declare anything as virtual (to avoid generating a Virtual Table). + */ + void* handlerMethod; + uint32_t handlerIsolateID; + ExceptionBuffer* previousBuffer; + jmp_buf buffer; + +public: + ExceptionBuffer(); + ~ExceptionBuffer() {removeFromThreadExceptionList();} + + void addToThreadExceptionList(void* returnAddr); + void removeFromThreadExceptionList(); + + void* getHandlerMethod() const {return handlerMethod;} + isolate_id_t getHandlerIsolateID() const {return handlerIsolateID;} + + ExceptionBuffer* getPrevious() {return previousBuffer;} + void setPrevious(ExceptionBuffer* newValue) {previousBuffer = newValue;} + + jmp_buf& getSetJmpBuffer() {return buffer;} +}; + /// CircularBase - This class represents a circular list. Classes that extend /// this class automatically place their instances in a circular list. @@ -99,14 +202,6 @@ public: }; -class KnownFrame { -public: - word_t currentFP; - word_t currentIP; - KnownFrame* previousFrame; -}; - - class ExceptionBuffer; /// Thread - This class is the base of custom virtual machines' Thread classes. @@ -117,6 +212,7 @@ public: Thread() { lastExceptionBuffer = 0; lastKnownFrame = 0; + runningDeadIsolate = false; } /// yield - Yield the processor to another thread. @@ -143,17 +239,18 @@ public: return (uint64_t)this; } -public: +protected: /// IsolateID - The Isolate ID of the thread's VM. - size_t IsolateID; + isolate_id_t isolateID; +public: /// MyVM - The VM attached to this Thread. VirtualMachine* MyVM; /// baseSP - The base stack pointer. /// - word_t baseSP; + void* baseSP; /// doYield - Flag to tell the thread to yield for GC reasons. /// @@ -170,7 +267,7 @@ public: /// get - Get the thread specific data of the current thread. /// static Thread* get() { - return (Thread*)(System::GetCallerAddress() & System::GetThreadIDMask()); + return (Thread*)((word_t)StackWalker_getCallFrameAddress() & System::GetThreadIDMask()); } private: @@ -179,13 +276,13 @@ private: /// interrupted, lastSP is not null and contains the value of the /// stack pointer before entering native. /// - word_t lastSP; + void* lastSP; /// internalThreadID - The implementation specific thread id. /// void* internalThreadID; - /// internalThreadStart - The implementation sepcific thread starter + /// internalThreadStart - The implementation specific thread starter /// function. /// static void internalThreadStart(vmkit::Thread* th); @@ -196,22 +293,32 @@ private: public: + isolate_id_t getIsolateID() const; + void setIsolateID(isolate_id_t newIsolateID); + static isolate_id_t getValidIsolateID(isolate_id_t isolateID); + + bool runsDeadIsolate() const; + void markRunningDeadIsolate(); + void setDeadIsolateID(); + + bool isCurrentThread(); + /// tracer - Does nothing. Used for child classes which may defined /// a tracer. /// virtual void tracer(word_t closure) {} void scanStack(word_t closure); - word_t getLastSP() { return lastSP; } - void setLastSP(word_t V) { lastSP = V; } + void* getLastSP() { return lastSP; } + void setLastSP(void* V) { lastSP = V; } void joinRVBeforeEnter(); - void joinRVAfterLeave(word_t savedSP); + void joinRVAfterLeave(void* savedSP); void enterUncooperativeCode(uint16_t level = 0) __attribute__ ((noinline)); - void enterUncooperativeCode(word_t SP); + void enterUncooperativeCode(void* SP); void leaveUncooperativeCode(); - word_t waitOnSP(); + void* waitOnSP(); /// clearException - Clear any pending exception of the current thread. @@ -219,7 +326,7 @@ public: internalClearException(); } - bool isVmkitThread() { + bool isVmkitThread() const { if (!baseAddr) return false; else return (((word_t)this) & System::GetVmkitThreadMask()) == baseAddr; } @@ -236,7 +343,7 @@ public: /// stackOverflow - Returns if there is a stack overflow in Java land. /// bool stackOverflow() { - return (System::GetCallerAddress() & StackOverflowMask) == 0; + return ((word_t)StackWalker_getCallFrameAddress() & StackOverflowMask) == 0; } /// operator new - Allocate the Thread object as well as the stack for this @@ -259,7 +366,7 @@ public: /// getFrameContext - Fill the buffer with frames currently on the stack. /// - void getFrameContext(word_t* buffer); + void getFrameContext(void** buffer); /// getFrameContextLength - Get the length of the frame context. /// @@ -280,62 +387,27 @@ public: void startUnknownFrame(KnownFrame& F) __attribute__ ((noinline)); void endUnknownFrame(); - word_t GetAlternativeStackEnd() { - return (word_t)this + System::GetPageSize(); - } - - word_t GetAlternativeStackStart() { - return GetAlternativeStackEnd() + System::GetAlternativeStackSize(); - } - - bool IsStackOverflowAddr(word_t addr) { - word_t stackOverflowCheck = GetAlternativeStackStart(); - return addr > stackOverflowCheck && - addr <= stackOverflowCheck + System::GetPageSize(); - } -}; - -class ExceptionBuffer { -public: - ExceptionBuffer() { - init(); - } - - void init() { - Thread* th = Thread::get(); - previousBuffer = th->lastExceptionBuffer; - th->lastExceptionBuffer = this; + void* GetAlternativeStackEnd() { + return (void*)((intptr_t)this + System::GetPageSize()); } - ~ExceptionBuffer() { - remove(); + void* GetAlternativeStackStart() { + return (void*)((intptr_t)GetAlternativeStackEnd() + System::GetAlternativeStackSize()); } - void remove() { - Thread* th = Thread::get(); - assert(th->lastExceptionBuffer == this && "Wrong exception buffer"); - th->lastExceptionBuffer = previousBuffer; + bool IsStackOverflowAddr(void* addr) { + void* stackOverflowCheck = GetAlternativeStackStart(); + return (addr > stackOverflowCheck) && + addr <= (void*)((intptr_t)stackOverflowCheck + System::GetPageSize()); } - jmp_buf buffer; - ExceptionBuffer* previousBuffer; -}; - -/// StackWalker - This class walks the stack of threads, returning a FrameInfo -/// object at each iteration. -/// -class StackWalker { -public: - word_t addr; - word_t ip; - KnownFrame* frame; - vmkit::Thread* thread; + virtual void throwNullPointerException(void* methodIP) const; + virtual void throwDeadIsolateException() const {} - StackWalker(vmkit::Thread* th) __attribute__ ((noinline)); - void operator++(); - word_t operator*(); - FrameInfo* get(); + virtual void runAfterLeavingGarbageCollectorRendezVous() {} +protected: + bool runningDeadIsolate; }; Modified: vmkit/trunk/include/vmkit/UTF8.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/UTF8.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/UTF8.h (original) +++ vmkit/trunk/include/vmkit/UTF8.h Thu Apr 25 11:46:36 2013 @@ -2,6 +2,8 @@ #define _UTF8_INTERNAL_H_ #include +#include +#include #include "vmkit/Allocator.h" #include "vmkit/VmkitDenseMap.h" #include "vmkit/VmkitDenseSet.h" @@ -22,7 +24,7 @@ private: public: /// size - The (constant) size of the UTF8. - ssize_t size; + int32_t size; /// elements - Elements of this UTF8. /// The size should be set to zero, but this is invalid C99. @@ -61,6 +63,11 @@ public: UTF8(sint32 n) { size = n; } + + std::string toString() const; + friend std::ostream& operator << (std::ostream& out, const UTF8& utf8) {return out << utf8.toString();} + void dump() const __attribute__((noinline)); + int compare(const char *) const; }; extern "C" const UTF8 TombstoneKey; Modified: vmkit/trunk/include/vmkit/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/VirtualMachine.h (original) +++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:46:36 2013 @@ -32,7 +32,7 @@ public: /// used when walking the stack so that VMKit knows which applicative method /// is executing on the stack. /// - llvm::DenseMap Functions; + llvm::DenseMap Functions; /// FunctionMapLock - Spin lock to protect the Functions map. /// @@ -40,12 +40,12 @@ public: /// IPToFrameInfo - Map a code start instruction instruction to the FrameInfo. /// - FrameInfo* IPToFrameInfo(word_t ip); + FrameInfo* IPToFrameInfo(void* ip); /// addFrameInfo - A new instruction pointer in the function map. /// - void addFrameInfo(word_t ip, FrameInfo* meth); - void addFrameInfoNoLock(word_t ip, FrameInfo* meth) { + void addFrameInfo(void* ip, FrameInfo* meth); + void addFrameInfoNoLock(void* ip, FrameInfo* meth) { Functions[ip] = meth; } /// removeFrameInfos - Remove all FrameInfo owned by the given owner. @@ -160,6 +160,7 @@ public: /// endCollection - Code after running a GC. /// virtual void endCollection() {} + virtual void endCollectionBeforeUnblockingThreads() {} /// scanWeakReferencesQueue - Scan all weak references. Called by the GC /// before scanning the finalization queue. @@ -199,6 +200,8 @@ public: /// virtual const char* getObjectTypeName(gc* object) { return "An object"; } + virtual bool resetDeadIsolateReference(void* source, void** objectRef) {return false;} + /// rendezvous - The rendezvous implementation for garbage collection. /// CooperativeCollectionRV rendezvous; @@ -208,14 +211,15 @@ public: //===----------------------------------------------------------------------===// FunctionMap FunctionsCache; - FrameInfo* IPToFrameInfo(word_t ip) { + FrameInfo* IPToFrameInfo(void* ip) { return FunctionsCache.IPToFrameInfo(ip); } void removeFrameInfos(void* owner) { FunctionsCache.removeFrameInfos(owner); } - virtual void printMethod(FrameInfo* FI, word_t ip, word_t addr) = 0; + virtual void printMethod(FrameInfo* FI, void* ip, void* callFrame) = 0; + virtual void printCallStack(const StackWalker& walker) = 0; //===----------------------------------------------------------------------===// // (4) Launch-related methods. @@ -231,6 +235,7 @@ public: virtual void nullPointerException() = 0; virtual void stackOverflowError() = 0; + virtual void deadIsolateException(void* methodIP, bool immediate = true) = 0; }; } // end namespace vmkit Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 11:46:36 2013 @@ -76,4 +76,12 @@ JavaObjectField* JavaObjectField::create return ret; } + +UserClass* JavaObjectConstructor::getClass(JavaObjectConstructor* self) +{ + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); +} + } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:46:36 2013 @@ -138,11 +138,7 @@ public: static JavaMethod* getInternalMethod(JavaObjectConstructor* self); - static UserClass* getClass(JavaObjectConstructor* self) { - llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); - } + static UserClass* getClass(JavaObjectConstructor* self); static JavaObjectConstructor* createFromInternalConstructor(JavaMethod* cons, int i); }; @@ -161,9 +157,18 @@ public: static void setVmdata(JavaObjectVMThread* vmthread, JavaThread* internal_thread) { llvm_gcroot(vmthread, 0); + assert(internal_thread && "Invalid internal thread"); vmthread->vmdata = internal_thread; } + friend std::ostream& operator << (std::ostream& os, JavaObjectVMThread& threadObj) + { + for (int retries = 10; (!threadObj.vmdata) && (retries >= 0); --retries) + usleep(100); + if (!threadObj.vmdata) + return os; + return os << *threadObj.vmdata; + } }; Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc Thu Apr 25 11:46:36 2013 @@ -12,6 +12,8 @@ #include "Classpath.h" #include "Jnjvm.h" +#include + using namespace j3; extern "C" { @@ -57,6 +59,31 @@ JavaObject* obj) { return res; } +void printStackTrace(JavaObject *obj, const char *methName, int skip = 3, int level_deep = 1) +{ + j3::JavaThread *thread = j3::JavaThread::get(); + + std::ostringstream log; + log << '[' << *thread << "] " << methName << " obj=" << obj << " class=" << *JavaObject::getClass(obj)->name; + + const UTF8* clName = JavaObject::getClass(obj)->name; + if (!clName->compare("java/lang/VMThread") || !clName->compare("java/lang/Thread")) + log << '(' << *static_cast(obj) << ')'; + + log << std::endl; + std::cerr << log.str(); + + j3::Jnjvm *vm = thread->getJVM(); + vmkit::StackWalker Walker(thread); + for (vmkit::FrameInfo* FI = NULL; (level_deep > 0) && ((FI = Walker.get()) != NULL); ++Walker) { + if (!FI->Metadata) continue; + if (skip > 0) {--skip; continue;} + + vm->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); + --level_deep; + } +} + JNIEXPORT void JNICALL Java_java_lang_VMObject_notifyAll( #ifdef NATIVE_JNI JNIEnv *env, @@ -68,6 +95,7 @@ JavaObject* obj) { BEGIN_NATIVE_EXCEPTION(0) +// printStackTrace(obj, "notifyAll", 3, 0); JavaObject::notifyAll(obj); END_NATIVE_EXCEPTION @@ -84,9 +112,13 @@ JavaObject* obj, jlong ms, jint ns) { llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - +/* + printStackTrace(obj, "wait", 3, 1); + bool notified = JavaObject::wait(obj, ms, ns); + if (notified) + printStackTrace(obj, "wait_notified", 3, 1); +*/ JavaObject::wait(obj, ms, ns); - END_NATIVE_EXCEPTION } @@ -101,6 +133,7 @@ JavaObject* obj) { BEGIN_NATIVE_EXCEPTION(0) +// printStackTrace(obj, "notify", 3, 0); JavaObject::notify(obj); END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 11:46:36 2013 @@ -95,9 +95,9 @@ JavaObject* vmThread, sint64 stackSize) JavaThread* th = new JavaThread(vm); if (!th) vm->outOfMemoryError(); - th->start((void (*)(vmkit::Thread*))start); // Now that the thread has been created, initialise its object fields. th->initialise(javaThread, vmThread); + th->start((void (*)(vmkit::Thread*))start); END_NATIVE_EXCEPTION } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc Thu Apr 25 11:46:36 2013 @@ -50,7 +50,7 @@ JavaObject* internalFillInStackTrace(Jav vmkit::StackWalker Walker(th); uint32_t i = 0; - while (intptr_t ip = *Walker) { + while (void* ip = *Walker) { ArrayPtr::setElement(result, ip, i); ++i; ++Walker; @@ -83,7 +83,7 @@ JavaObject* throwable) { } -JavaObject* consStackElement(vmkit::FrameInfo* FI, intptr_t ip) { +JavaObject* consStackElement(vmkit::FrameInfo* FI, void* ip) { JavaString* methodName = 0; JavaString* className = 0; @@ -100,7 +100,7 @@ JavaObject* consStackElement(vmkit::Fram Class* cl = meth->classDef; className = JavaString::internalToJava(cl->name, vm); - Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut); + JavaAttribute* sourceAtt = cl->lookupAttribute(JavaAttribute::sourceFileAttribute); // We don't have the bytes if the class was vmjc'ed. if (sourceAtt && cl->getBytes()) { Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp Thu Apr 25 11:46:36 2013 @@ -219,7 +219,7 @@ JavaObjectField* JavaObjectField::create return ret; } -static inline JavaString** getSignatureString(Attribut* sigAtt, Class* cl) { +static inline JavaString** getSignatureString(JavaAttribute* sigAtt, Class* cl) { if (!sigAtt) return 0; Reader reader(sigAtt, cl->bytes); @@ -230,26 +230,26 @@ static inline JavaString** getSignatureS } JavaString** JavaObjectClass::getSignature(Class *cl) { - Attribut* sigAtt = cl->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = cl->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, cl); } JavaString** JavaObjectField::getSignature(JavaField* field) { - Attribut* sigAtt = field->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = field->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, field->classDef); } JavaString** JavaObjectMethod::getSignature(JavaMethod* meth) { - Attribut* sigAtt = meth->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = meth->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, meth->classDef); } JavaString** JavaObjectConstructor::getSignature(JavaMethod* cons) { - Attribut* sigAtt = cons->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = cons->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, cons->classDef); } -static inline ArraySInt8* getAttrBytes(Attribut* annotationsAtt, Class* cl) { +static inline ArraySInt8* getAttrBytes(JavaAttribute* annotationsAtt, Class* cl) { ArraySInt8* ret = 0; llvm_gcroot(ret, 0); @@ -270,47 +270,47 @@ static inline ArraySInt8* getAttrBytes(A } ArraySInt8* JavaObjectClass::getAnnotations(Class *cl) { - Attribut* attr = - cl->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + cl->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, cl); } ArraySInt8* JavaObjectField::getAnnotations(JavaField *field) { - Attribut* attr = - field->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + field->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, field->classDef); } ArraySInt8* JavaObjectMethod::getAnnotations(JavaMethod *meth) { - Attribut* attr = - meth->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + meth->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectMethod::getParamAnnotations(JavaMethod *meth) { - Attribut* attr = - meth->lookupAttribut(Attribut::paramAnnotationsAttribut); + JavaAttribute* attr = + meth->lookupAttribute(JavaAttribute::paramAnnotationsAttribute); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectMethod::getAnnotationDefault(JavaMethod *meth) { - Attribut* attr = - meth->lookupAttribut(Attribut::annotationDefaultAttribut); + JavaAttribute* attr = + meth->lookupAttribute(JavaAttribute::annotationDefaultAttribute); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectConstructor::getAnnotations(JavaMethod *cons) { - Attribut* attr = - cons->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + cons->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, cons->classDef); } ArraySInt8* JavaObjectConstructor::getParamAnnotations(JavaMethod *cons) { - Attribut* attr = - cons->lookupAttribut(Attribut::paramAnnotationsAttribut); + JavaAttribute* attr = + cons->lookupAttribute(JavaAttribute::paramAnnotationsAttribute); return getAttrBytes(attr, cons->classDef); } Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 11:46:36 2013 @@ -86,7 +86,7 @@ JavaObject* consStackElement(vmkit::Fram Class* cl = meth->classDef; className = JavaString::internalToJava(cl->name, vm); - Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut); + Attribute* sourceAtt = cl->lookupAttribut(Attribute::sourceFileAttribut); if (sourceAtt) { Reader reader(sourceAtt, cl->bytes); @@ -2910,7 +2910,7 @@ JVM_GetEnclosingMethodInfo(JNIEnv* env, // Primitives arrays, interfaces... if (!cl) RETURN_FROM_JNI(0); - Attribut* emAtt = cl->lookupAttribut(Attribut::enclosingMethodAttribut); + Attribute* emAtt = cl->lookupAttribut(Attribute::enclosingMethodAttribut); if (emAtt) { Reader reader(emAtt, cl->bytes); Modified: vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h (original) +++ vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h Thu Apr 25 11:46:36 2013 @@ -74,6 +74,7 @@ public: return OwningClass->getStaticInstance(); } + Class* getOwningClass() {return OwningClass;} }; } Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 11:46:36 2013 @@ -40,6 +40,10 @@ void J3Intrinsics::init(llvm::Module* mo VTType = PointerType::getUnqual(ArrayType::get( PointerType::getUnqual(FunctionType::get(Type::getInt32Ty(Context), true)), 0)); + JavaVTType = PointerType::getUnqual(module->getTypeByName("JavaVT")); + + ExceptionBufferType = PointerType::getUnqual(module->getTypeByName("ExceptionBuffer")); + ResolvedConstantPoolType = ptrPtrType; JavaObjectType = @@ -88,8 +92,8 @@ void J3Intrinsics::init(llvm::Module* mo PointerType::getUnqual(module->getTypeByName("JavaMethod")); UTF8Type = PointerType::getUnqual(module->getTypeByName("UTF8")); - AttributType = - PointerType::getUnqual(module->getTypeByName("Attribut")); + AttributeType = + PointerType::getUnqual(module->getTypeByName("Attribute")); JavaThreadType = PointerType::getUnqual(module->getTypeByName("JavaThread")); MutatorThreadType = @@ -141,9 +145,11 @@ void J3Intrinsics::init(llvm::Module* mo OffsetObjectSizeInClassConstant = constantOne; OffsetVTInClassConstant = ConstantInt::get(Type::getInt32Ty(Context), 7); OffsetTaskClassMirrorInClassConstant = constantThree; - OffsetStaticInstanceInTaskClassMirrorConstant = constantThree; + OffsetStaticInstanceInTaskClassMirrorConstant = constantTwo; OffsetStatusInTaskClassMirrorConstant = constantZero; OffsetInitializedInTaskClassMirrorConstant = constantOne; + OffsetCommonClassInClassConstant = constantZero; + OffsetCommonClassInJavaVirtualTableConstant = constantFour; OffsetIsolateIDInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 1); OffsetVMInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 2); @@ -157,7 +163,8 @@ void J3Intrinsics::init(llvm::Module* mo InterfaceLookupFunction = module->getFunction("j3InterfaceLookup"); MultiCallNewFunction = module->getFunction("j3MultiCallNew"); ForceLoadedCheckFunction = module->getFunction("forceLoadedCheck"); - InitialisationCheckFunction = module->getFunction("initialisationCheck"); + InitialisationCheckFunction = module->getFunction("j3InitialisationCheck"); + InitialisationCheckForJavaObjectFunction = module->getFunction("j3InitialisationCheckForJavaObject"); ForceInitialisationCheckFunction = module->getFunction("forceInitialisationCheck"); InitialiseClassFunction = module->getFunction("j3RuntimeInitialiseClass"); @@ -175,12 +182,15 @@ void J3Intrinsics::init(llvm::Module* mo GetObjectSizeFromClassFunction = module->getFunction("getObjectSizeFromClass"); - GetClassDelegateeFunction = module->getFunction("getClassDelegatee"); + SetIsolateFunction = module->getFunction("j3SetIsolate"); + GetCachedValueFunction = module->getFunction("j3GetCachedValue"); + GetClassDelegateePtrFunction = module->getFunction("j3GetClassDelegateePtr"); + GetClassDelegateeFunction = module->getFunction("j3GetClassDelegatee"); RuntimeDelegateeFunction = module->getFunction("j3RuntimeDelegatee"); IsSubclassOfFunction = module->getFunction("isSubclassOf"); IsSecondaryClassFunction = module->getFunction("isSecondaryClass"); GetDepthFunction = module->getFunction("getDepth"); - GetStaticInstanceFunction = module->getFunction("getStaticInstance"); + GetStaticInstanceFunction = module->getFunction("j3GetStaticInstance"); GetDisplayFunction = module->getFunction("getDisplay"); GetVTInDisplayFunction = module->getFunction("getVTInDisplay"); AquireObjectFunction = module->getFunction("j3JavaObjectAquire"); @@ -229,4 +239,10 @@ void J3Intrinsics::init(llvm::Module* mo GetLockFunction = module->getFunction("getLock"); ThrowExceptionFromJITFunction = module->getFunction("j3ThrowExceptionFromJIT"); + + CurrentIsolateID = ConstantInt::get(Type::getInt32Ty(Context), CURRENT_ISOLATE); + + OffsetHandlerMethodInExceptionBufferConstant = constantZero; + OffsetHandlerIsolateIDInExceptionBufferConstant = constantOne; + OffsetSetJmpBufferInExceptionBufferConstant = constantThree; } Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:46:36 2013 @@ -36,6 +36,8 @@ #include "Zip.h" #include +#include +#include using namespace j3; using namespace llvm; @@ -181,24 +183,41 @@ Constant* JavaAOTCompiler::getResolvedCo if (I == End) { Module& Mod = *getLLVMModule(); + std::string pool_name(UTF8Buffer(ctp->classDef->name).toCompileName("_ResolvedConstantPool_")->cString()); + ArrayType* ATy = ArrayType::get(JavaIntrinsics.ptrType, ctp->ctpSize); - std::vector Vals; + ArrayType* AStringTy = ArrayType::get(JavaIntrinsics.ptrType, NR_ISOLATES); + std::vector Vals(ctp->ctpSize, JavaIntrinsics.constantPtrNull); for (uint32 i = 0; i < ctp->ctpSize; ++i) { if (ctp->typeAt(i) == JavaConstantPool::ConstantUTF8) { - Vals.push_back(ConstantExpr::getBitCast(getUTF8(ctp->UTF8At(i)), JavaIntrinsics.ptrType)); + Vals[i] = ConstantExpr::getBitCast(getUTF8(ctp->UTF8At(i)), JavaIntrinsics.ptrType); } else if (ctp->typeAt(i) == JavaConstantPool::ConstantClass && (ctp->isClassLoaded(i) != NULL)) { - Vals.push_back(ConstantExpr::getBitCast( - getNativeClass(ctp->isClassLoaded(i)), JavaIntrinsics.ptrType)); - } else { - Vals.push_back(Constant::getNullValue(JavaIntrinsics.ptrType)); + Vals[i] = ConstantExpr::getBitCast( + getNativeClass(ctp->isClassLoaded(i)), JavaIntrinsics.ptrType); + } else if (ctp->typeAt(i) == JavaConstantPool::ConstantString) { + std::stringstream array_name; + array_name << pool_name << "String_" << i << '_'; + + std::vector Strings(NR_ISOLATES, JavaIntrinsics.constantPtrNull); + /* + for (isolate_id_t isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) + if (void *p = ctp->getCachedValue(i, isolateID)) + Strings[isolateID] = CreateConstantFromJavaString(*reinterpret_cast(p)); + */ + + GlobalVariable* stringArray = new GlobalVariable( + Mod, AStringTy, false, GlobalValue::InternalLinkage, + ConstantArray::get(AStringTy, Strings), array_name.str()); + + Vals[i] = ConstantExpr::getBitCast(stringArray, JavaIntrinsics.ptrType); } } Constant* Array = ConstantArray::get(ATy, Vals); GlobalVariable* varGV = new GlobalVariable(Mod, Array->getType(), false, GlobalValue::InternalLinkage, - Array, ""); + Array, pool_name); Array = ConstantExpr::getBitCast(varGV, JavaIntrinsics.ResolvedConstantPoolType); @@ -445,7 +464,7 @@ Constant* JavaAOTCompiler::getFinalObjec } } -Constant* JavaAOTCompiler::CreateConstantFromStaticInstance(Class* cl) { +Constant* JavaAOTCompiler::CreateConstantFromStaticInstance(Class* cl, isolate_id_t isolateID) { LLVMClassInfo* LCI = getClassInfo(cl); Type* Ty = LCI->getStaticType(); StructType* STy = dyn_cast(Ty->getContainedType(0)); @@ -458,47 +477,47 @@ Constant* JavaAOTCompiler::CreateConstan LLVMAssessorInfo& LAI = getTypedefInfo(type); Type* Ty = LAI.llvmType; - Attribut* attribut = field.lookupAttribut(Attribut::constantAttribut); + JavaAttribute* attribute = field.lookupAttribute(JavaAttribute::constantAttribute); - if (attribut == NULL) { - if ((cl->getStaticInstance() != NULL) && !useCooperativeGC()) { + if (attribute == NULL) { + if ((cl->getStaticInstance(isolateID) != NULL) && !useCooperativeGC()) { if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; if (prim->isBool() || prim->isByte()) { ConstantInt* CI = ConstantInt::get( Type::getInt8Ty(getLLVMContext()), - field.getStaticInt8Field()); + field.getStaticInt8Field(isolateID)); Elts.push_back(CI); } else if (prim->isShort() || prim->isChar()) { ConstantInt* CI = ConstantInt::get( Type::getInt16Ty(getLLVMContext()), - field.getStaticInt16Field()); + field.getStaticInt16Field(isolateID)); Elts.push_back(CI); } else if (prim->isInt()) { ConstantInt* CI = ConstantInt::get( Type::getInt32Ty(getLLVMContext()), - field.getStaticInt32Field()); + field.getStaticInt32Field(isolateID)); Elts.push_back(CI); } else if (prim->isLong()) { ConstantInt* CI = ConstantInt::get( Type::getInt64Ty(getLLVMContext()), - field.getStaticLongField()); + field.getStaticLongField(isolateID)); Elts.push_back(CI); } else if (prim->isFloat()) { Constant* CF = ConstantFP::get( Type::getFloatTy(getLLVMContext()), - field.getStaticFloatField()); + field.getStaticFloatField(isolateID)); Elts.push_back(CF); } else if (prim->isDouble()) { Constant* CF = ConstantFP::get( Type::getDoubleTy(getLLVMContext()), - field.getStaticDoubleField()); + field.getStaticDoubleField(isolateID)); Elts.push_back(CF); } else { abort(); } } else { - JavaObject* val = field.getStaticObjectField(); + JavaObject* val = field.getStaticObjectField(isolateID); if (val) { JnjvmClassLoader* JCL = cl->classLoader; CommonClass* FieldCl = field.getSignature()->assocClass(JCL); @@ -512,7 +531,7 @@ Constant* JavaAOTCompiler::CreateConstan Elts.push_back(Constant::getNullValue(Ty)); } } else { - Reader reader(attribut, cl->bytes); + Reader reader(attribute, cl->bytes); JavaConstantPool * ctpInfo = cl->ctpInfo; uint16 idx = reader.readU2(); if (type->isPrimitive()) { @@ -545,34 +564,20 @@ Constant* JavaAOTCompiler::CreateConstan return ConstantStruct::get(STy, Elts); } -Constant* JavaAOTCompiler::getStaticInstance(Class* classDef) { - static_instance_iterator End = staticInstances.end(); - static_instance_iterator I = staticInstances.find(classDef); - if (I == End) { - - LLVMClassInfo* LCI = getClassInfo(classDef); - Type* Ty = LCI->getStaticType(); - Ty = Ty->getContainedType(0); - std::string name(UTF8Buffer(classDef->name).toCompileName()->cString()); - name += "_static"; - Module& Mod = *getLLVMModule(); - GlobalVariable* varGV = - new GlobalVariable(Mod, Ty, false, GlobalValue::ExternalLinkage, - 0, name); - - Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV, - JavaIntrinsics.ptrType); - staticInstances.insert(std::make_pair(classDef, res)); - - if (isCompiling(classDef)) { - Constant* C = CreateConstantFromStaticInstance(classDef); - varGV->setInitializer(C); - } - - return res; - } else { - return I->second; - } +Constant* JavaAOTCompiler::getStaticInstance(Class* classDef, isolate_id_t isolateID) { + ConstantArray *TCMArray = dyn_cast(CreateConstantFromTaskClassMirrorArray(classDef)); + if (!compilingMMTk) { + // Thanks for calling me, but you should call j3GetStaticInstance() to get the static instance + // pointer at runtime. + return NULL; + } + + isolateID = JavaThread::getValidIsolateID(isolateID); + ConstantStruct *TCM = dyn_cast(TCMArray->getAggregateElement(isolateID)); + + Constant *isolateStaticInstance = TCM->getAggregateElement( + JavaIntrinsics.OffsetStaticInstanceInTaskClassMirrorConstant); + return isolateStaticInstance; } Constant* JavaAOTCompiler::getVirtualTable(JavaVirtualTable* VT) { @@ -809,21 +814,21 @@ Constant* JavaAOTCompiler::CreateConstan } -Constant* JavaAOTCompiler::CreateConstantFromAttribut(Attribut& attribut) { +Constant* JavaAOTCompiler::CreateConstantFromAttribute(JavaAttribute& attribute) { StructType* STy = - dyn_cast(JavaIntrinsics.AttributType->getContainedType(0)); + dyn_cast(JavaIntrinsics.AttributeType->getContainedType(0)); std::vector Elmts; // name - Elmts.push_back(getUTF8(attribut.name)); + Elmts.push_back(getUTF8(attribute.name)); // start - Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribut.start)); + Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribute.start)); // nbb - Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribut.nbb)); + Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribute.nbb)); return ConstantStruct::get(STy, Elmts); } @@ -913,29 +918,29 @@ Constant* JavaAOTCompiler::CreateConstan // type FieldElts.push_back(getUTF8(field.type)); - // attributs - if (field.nbAttributs) { - llvm::Type* AttrTy = JavaIntrinsics.AttributType->getContainedType(0); - ArrayType* ATy = ArrayType::get(AttrTy, field.nbAttributs); - for (uint32 i = 0; i < field.nbAttributs; ++i) { - TempElts.push_back(CreateConstantFromAttribut(field.attributs[i])); + // attributes + if (field.nbAttributes) { + llvm::Type* AttrTy = JavaIntrinsics.AttributeType->getContainedType(0); + ArrayType* ATy = ArrayType::get(AttrTy, field.nbAttributes); + for (uint32 i = 0; i < field.nbAttributes; ++i) { + TempElts.push_back(CreateConstantFromAttribute(field.attributes[i])); } - Constant* attributs = ConstantArray::get(ATy, TempElts); + Constant* attributes = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributs = new GlobalVariable(*getLLVMModule(), ATy, true, + attributes = new GlobalVariable(*getLLVMModule(), ATy, true, GlobalValue::InternalLinkage, - attributs, ""); - attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, - JavaIntrinsics.AttributType); + attributes, ""); + attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, + JavaIntrinsics.AttributeType); - FieldElts.push_back(attributs); + FieldElts.push_back(attributes); } else { - FieldElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); + FieldElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); } - // nbAttributs - FieldElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), field.nbAttributs)); + // nbAttributes + FieldElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), field.nbAttributes)); // classDef FieldElts.push_back(getNativeClass(field.classDef)); @@ -963,29 +968,29 @@ Constant* JavaAOTCompiler::CreateConstan // access MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.access)); - // attributs - if (method.nbAttributs) { - llvm::Type* AttrTy = JavaIntrinsics.AttributType->getContainedType(0); - ArrayType* ATy = ArrayType::get(AttrTy, method.nbAttributs); - for (uint32 i = 0; i < method.nbAttributs; ++i) { - TempElts.push_back(CreateConstantFromAttribut(method.attributs[i])); + // attributes + if (method.nbAttributes) { + llvm::Type* AttrTy = JavaIntrinsics.AttributeType->getContainedType(0); + ArrayType* ATy = ArrayType::get(AttrTy, method.nbAttributes); + for (uint32 i = 0; i < method.nbAttributes; ++i) { + TempElts.push_back(CreateConstantFromAttribute(method.attributes[i])); } - Constant* attributs = ConstantArray::get(ATy, TempElts); + Constant* attributes = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributs = new GlobalVariable(Mod, ATy, true, + attributes = new GlobalVariable(Mod, ATy, true, GlobalValue::InternalLinkage, - attributs, ""); - attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, - JavaIntrinsics.AttributType); + attributes, ""); + attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, + JavaIntrinsics.AttributeType); - MethodElts.push_back(attributs); + MethodElts.push_back(attributes); } else { - MethodElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); + MethodElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); } - // nbAttributs - MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.nbAttributs)); + // nbAttributes + MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.nbAttributes)); // classDef MethodElts.push_back(getNativeClass(method.classDef)); @@ -1139,13 +1144,61 @@ Constant* JavaAOTCompiler::CreateConstan ConstantStruct::get(STy, elements), "UTF8Map"); } +Constant* JavaAOTCompiler::CreateConstantFromTaskClassMirrorArray(Class* cl) +{ + task_class_mirror_iterator I = taskClassMirrors.find(cl); + if (I != taskClassMirrors.end()) + return I->second; // TCM Constant already created + + StructType* STy = dyn_cast(JavaIntrinsics.JavaClassType->getContainedType(0)); + ArrayType* ATy = dyn_cast(STy->getContainedType(3)); + StructType* TCMTy = dyn_cast(ATy->getContainedType(0)); + assert(TCMTy && "Malformed type"); + + Module& Mod = *getLLVMModule(); + LLVMClassInfo* LCI = getClassInfo(cl); + StructType* StaticInstanceTy = dyn_cast(LCI->getStaticType()->getContainedType(0)); + assert(StaticInstanceTy && "Malformed type"); + + std::string var_name(UTF8Buffer(cl->name).toCompileName("_StaticInstance_")->cString()); + size_t var_name_len = var_name.size(); + char var_name_ext[32]; + + Constant** TCMEntries = new Constant*[NR_ISOLATES]; + memset(TCMEntries, 0, NR_ISOLATES * sizeof(Constant*)); + + for (isolate_id_t isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) { + var_name.resize(var_name_len); + snprintf(var_name_ext, sizeof(var_name_ext)/sizeof(*var_name_ext), "%d", isolateID); + var_name += var_name_ext; + + GlobalVariable* staticInstance = new GlobalVariable(Mod, StaticInstanceTy, false, GlobalValue::ExternalLinkage, 0, var_name); + if (isCompiling(cl)) { + Constant* staticInstanceInit = CreateConstantFromStaticInstance(cl, isolateID); + staticInstance->setInitializer(staticInstanceInit); + } + + Constant *TCMEntry[] = { + ConstantInt::get(Type::getInt8Ty(getLLVMContext()), cl->getInitializationState(isolateID)), + ConstantInt::get(Type::getInt1Ty(getLLVMContext()), cl->isReady(isolateID) ? 1 : 0), + ConstantExpr::getBitCast(staticInstance, JavaIntrinsics.ptrType) + }; + TCMEntries[isolateID] = ConstantStruct::get(TCMTy, TCMEntry); + } + + Constant* tcm = ConstantArray::get(ATy, ArrayRef(TCMEntries, NR_ISOLATES)); + taskClassMirrors.insert(std::make_pair(cl, tcm)); + + delete [] TCMEntries; + return tcm; +} + Constant* JavaAOTCompiler::CreateConstantFromClass(Class* cl) { StructType* STy = dyn_cast(JavaIntrinsics.JavaClassType->getContainedType(0)); Module& Mod = *getLLVMModule(); - std::vector ClassElts; - std::vector TempElts; + std::vector ClassElts, TempElts; // common class ClassElts.push_back(CreateConstantFromCommonClass(cl)); @@ -1159,21 +1212,11 @@ Constant* JavaAOTCompiler::CreateConstan cl->alignment)); // IsolateInfo + ClassElts.push_back(CreateConstantFromTaskClassMirrorArray(cl)); + ArrayType* ATy = dyn_cast(STy->getContainedType(3)); assert(ATy && "Malformed type"); - StructType* TCMTy = dyn_cast(ATy->getContainedType(0)); - assert(TCMTy && "Malformed type"); - - TempElts.push_back(ConstantInt::get(Type::getInt8Ty(getLLVMContext()), - cl->getInitializationState())); - TempElts.push_back(ConstantInt::get(Type::getInt1Ty(getLLVMContext()), - cl->isReady() ? 1 : 0)); - TempElts.push_back(getStaticInstance(cl)); - Constant* CStr[1] = { ConstantStruct::get(TCMTy, TempElts) }; - TempElts.clear(); - ClassElts.push_back(ConstantArray::get(ATy, CStr)); - if (cl->nbVirtualFields + cl->nbStaticFields) { ATy = ArrayType::get(JavaIntrinsics.JavaFieldType->getContainedType(0), cl->nbVirtualFields + cl->nbStaticFields); @@ -1293,29 +1336,29 @@ Constant* JavaAOTCompiler::CreateConstan ctpInfo, ""); ClassElts.push_back(varGV); - // attributs - if (cl->nbAttributs) { - ATy = ArrayType::get(JavaIntrinsics.AttributType->getContainedType(0), - cl->nbAttributs); + // attributes + if (cl->nbAttributes) { + ATy = ArrayType::get(JavaIntrinsics.AttributeType->getContainedType(0), + cl->nbAttributes); - for (uint32 i = 0; i < cl->nbAttributs; ++i) { - TempElts.push_back(CreateConstantFromAttribut(cl->attributs[i])); + for (uint32 i = 0; i < cl->nbAttributes; ++i) { + TempElts.push_back(CreateConstantFromAttribute(cl->attributes[i])); } - Constant* attributs = ConstantArray::get(ATy, TempElts); + Constant* attributes = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributs = new GlobalVariable(*getLLVMModule(), ATy, true, + attributes = new GlobalVariable(*getLLVMModule(), ATy, true, GlobalValue::InternalLinkage, - attributs, ""); - attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, - JavaIntrinsics.AttributType); - ClassElts.push_back(attributs); + attributes, ""); + attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, + JavaIntrinsics.AttributeType); + ClassElts.push_back(attributes); } else { - ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); + ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); } - // nbAttributs - ClassElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), cl->nbAttributs)); + // nbAttributes + ClassElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), cl->nbAttributes)); // innerClasses if (cl->nbInnerClasses) { @@ -1798,8 +1841,8 @@ Constant* JavaAOTCompiler::CreateConstan return Array; } -JavaAOTCompiler::JavaAOTCompiler(const std::string& ModuleID) : - JavaLLVMCompiler(ModuleID) { +JavaAOTCompiler::JavaAOTCompiler(const std::string& ModuleID, bool compilingMMTk) : + JavaLLVMCompiler(ModuleID, compilingMMTk) { std::string Error; const Target* TheTarget(TargetRegistry::lookupTarget( @@ -1883,8 +1926,8 @@ void JavaAOTCompiler::printStats() { (unsigned long long int) arrayClasses.size()); fprintf(stdout, "Number of virtual tables : %llu\n", (unsigned long long int) virtualTables.size()); - fprintf(stdout, "Number of static instances : %llu\n", - (unsigned long long int) staticInstances.size()); + fprintf(stdout, "Number of Task Class Mirrors : %llu\n", + (unsigned long long int) taskClassMirrors.size()); fprintf(stdout, "Number of constant pools : %llu\n", (unsigned long long int) resolvedConstantPools.size()); fprintf(stdout, "Number of strings : %llu\n", @@ -2108,7 +2151,7 @@ void mainCompilerStart(JavaThread* th) { JavaJITCompiler* Comp = NULL; if (!M->clinits->empty()) { - Comp = JavaJITCompiler::CreateCompiler("JIT"); + Comp = JavaJITCompiler::CreateCompiler("JIT", M->isCompilingMMTk()); Comp->EmitFunctionName = true; if (!M->useCooperativeGC()) { Comp->disableCooperativeGC(); Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:46:36 2013 @@ -60,6 +60,7 @@ void JavaJIT::updateStackInfo(Opinfo& in } bool JavaJIT::needsInitialisationCheck(Class* cl) { +/* if (cl->isReadyForCompilation() || (!cl->isInterface() && compilingClass->isSubclassOf(cl))) { return false; @@ -73,6 +74,13 @@ bool JavaJIT::needsInitialisationCheck(C } return true; +*/ + bool needs_check = cl->needsInitialisationCheck(); + + if (needs_check && TheCompiler->isCompilingMMTk() && cl->isReadyForCompilation(0)) + needs_check = false; + + return needs_check; } void JavaJIT::checkYieldPoint() { @@ -97,7 +105,7 @@ bool JavaJIT::canBeInlined(JavaMethod* m if (isSynchro(meth->access)) return false; if (isNative(meth->access)) return false; - Attribut* codeAtt = meth->lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = meth->lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt == NULL) return false; Reader reader(codeAtt, meth->classDef->bytes); @@ -110,7 +118,7 @@ bool JavaJIT::canBeInlined(JavaMethod* m if (handlers != 0) return false; reader.cursor = start; - JavaJIT jit(TheCompiler, meth, llvmFunction, customizing ? customizeFor : NULL); + JavaJIT jit(TheCompiler, meth, llvmFunction, customizing ? customizeFor : NULL, compilingMMTk); jit.inlineMethods = inlineMethods; jit.inlineMethods[meth] = true; if (!jit.analyzeForInlining(reader, codeLen)) return false; @@ -209,14 +217,18 @@ void JavaJIT::invokeVirtual(uint16 index PHINode* node = 0; Value* indexes2[2]; indexes2[0] = intrinsics->constantZero; - bool nullChecked = false; + + Value* targetObject = getTarget(signature); + targetObject = new LoadInst(targetObject, "", false, currentBlock); + if (!thisReference) JITVerifyNull(targetObject); + if (!TheCompiler->isCompilingMMTk()) + CallInst::Create(intrinsics->InitialisationCheckForJavaObjectFunction, targetObject, "", currentBlock); if (meth) { LLVMMethodInfo* LMI = TheCompiler->getMethodInfo(meth); Constant* Offset = LMI->getOffset(); indexes2[1] = Offset; } else { - nullChecked = true; GlobalVariable* GV = new GlobalVariable(*llvmFunction->getParent(), Type::getInt32Ty(*llvmContext), false, @@ -238,9 +250,6 @@ void JavaJIT::invokeVirtual(uint16 index Args.push_back(TheCompiler->getNativeClass(compilingClass)); Args.push_back(ConstantInt::get(Type::getInt32Ty(*llvmContext), index)); Args.push_back(GV); - Value* targetObject = getTarget(signature); - targetObject = new LoadInst(targetObject, "", false, currentBlock); - if (!thisReference) JITVerifyNull(targetObject); Args.push_back(targetObject); load = invoke(intrinsics->VirtualLookupFunction, Args, "", currentBlock); node->addIncoming(load, currentBlock); @@ -251,7 +260,7 @@ void JavaJIT::invokeVirtual(uint16 index } makeArgs(it, index, args, signature->nbArguments + 1); - if (!nullChecked && !thisReference) JITVerifyNull(args[0]); + Value* VT = CallInst::Create(intrinsics->GetVTFunction, args[0], "", currentBlock); @@ -301,14 +310,6 @@ llvm::Value* JavaJIT::getJavaThreadPtr(l return new BitCastInst(mutatorThreadPtr, intrinsics->JavaThreadType, "", currentBlock); } -llvm::Value* JavaJIT::getIsolateIDPtr(llvm::Value* mutatorThreadPtr) { - Value* GEP[3] = { intrinsics->constantZero, - intrinsics->OffsetThreadInMutatorThreadConstant, - intrinsics->OffsetIsolateIDInThreadConstant }; - - return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "", currentBlock); -} - llvm::Value* JavaJIT::getVMPtr(llvm::Value* mutatorThreadPtr) { Value* GEP[3] = { intrinsics->constantZero, intrinsics->OffsetThreadInMutatorThreadConstant, @@ -370,6 +371,80 @@ static llvm::Function* GetNativeCallee(J return callee; } +/* +Value* JavaJIT::getCommonClass(Value* ClassOrObject) +{ + Type *Ty = ClassOrObject->getType(); + + if (Ty == intrinsics->JavaObjectType) { + // This is equivalent to "JavaObject::getClass(targetObject)" + + ClassOrObject = new BitCastInst(ClassOrObject, intrinsics->ptrPtrType, "", currentBlock); + ClassOrObject = new LoadInst(ClassOrObject, "", currentBlock); + ClassOrObject = new BitCastInst(ClassOrObject, intrinsics->JavaVTType, "objectVT", currentBlock); + + Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetCommonClassInJavaVirtualTableConstant}; + ClassOrObject = GetElementPtrInst::Create(ClassOrObject, GEP, "", currentBlock); + ClassOrObject = new LoadInst(ClassOrObject, "commonClass", currentBlock); + } else if (Ty == intrinsics->JavaClassType) { + Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetCommonClassInClassConstant}; + ClassOrObject = GetElementPtrInst::Create(ClassOrObject, GEP, "targetCommonClass", currentBlock); + } + + assert((ClassOrObject->getType() == intrinsics->JavaCommonClassType) && "Invalid target class or object."); + return ClassOrObject; +} +*/ + +Value* JavaJIT::getClassDelegateePtr(CommonClass* cl) +{ + Value* obj = TheCompiler->getNativeClass(cl); + obj = new BitCastInst(obj, intrinsics->JavaCommonClassType, "", currentBlock); + return CallInst::Create(intrinsics->GetClassDelegateePtrFunction, obj, "", currentBlock); +} + +bool JavaJIT::shouldMethodChangeCurrentIsolate() +{ + JnjvmClassLoader* loader = compilingClass->classLoader; + + // We are compiling the Java runtime: + // This code must run in the isolate ID of its caller, so as to account consumed resources + // to the caller. + if (loader == loader->bootstrapLoader) return false; + + // We are compiling the method: + // This code must run in the isolate ID of its caller, so as to enable initializing + // the class (not the object) in any desired isolate ID. + if (compilingMethod->name->equals(loader->bootstrapLoader->clinitName)) return false; + + return true; +} + +Value* JavaJIT::setCurrentIsolateForCompilingMethod(Value* currentIsolateID, bool alwaysSet) +{ + Constant *isolateID; + if (this->shouldMethodChangeCurrentIsolate()) + isolateID = ConstantInt::get(Type::getInt32Ty(TheCompiler->getLLVMContext()), compilingClass->classLoader->getIsolateID()); + else if (alwaysSet) + isolateID = intrinsics->CurrentIsolateID; + else + return NULL; + + if (!currentIsolateID) currentIsolateID = intrinsics->constantPtr32Null; + + Value *Args[] = {isolateID, currentIsolateID}; + // Return the old isolate value, whether it was set or not + return CallInst::Create(intrinsics->SetIsolateFunction, Args, "oldIsolateID", currentBlock); +} + +void JavaJIT::restoreCurrentIsolateForCompilingMethod(Value* oldIsolateID, bool alwaysRestore) +{ + if (!oldIsolateID || (!alwaysRestore && !this->shouldMethodChangeCurrentIsolate())) return; + + Value *Args[] = {oldIsolateID, intrinsics->constantPtr32Null}; + CallInst::Create(intrinsics->SetIsolateFunction, Args, "", currentBlock); +} + llvm::Function* JavaJIT::nativeCompile(word_t natPtr) { PRINT_DEBUG(JNJVM_COMPILE, 1, COLOR_NORMAL, "native compile %s.%s\n", @@ -472,7 +547,7 @@ llvm::Function* JavaJIT::nativeCompile(w uint32 index = 0; if (stat) { - Value* cl = TheCompiler->getJavaClassPtr(compilingClass); + Value* cl = getClassDelegateePtr(compilingClass); nativeArgs.push_back(cl); index = 2; } else { @@ -573,6 +648,8 @@ llvm::Function* JavaJIT::nativeCompile(w } nativeArgs[0] = nativeFunc; + Value *oldIsolateID = this->setCurrentIsolateForCompilingMethod(NULL, false); + // Synchronize before saying we're entering native if (isSynchro(compilingMethod->access)) { nbHandlers = 1; @@ -618,6 +695,8 @@ llvm::Function* JavaJIT::nativeCompile(w if (isSynchro(compilingMethod->access)) endSynchronize(); + this->restoreCurrentIsolateForCompilingMethod(oldIsolateID, false); + BasicBlock* ifNormal = createBasicBlock(""); BasicBlock* ifException = createBasicBlock(""); Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr())); @@ -743,7 +822,7 @@ void JavaJIT::beginSynchronize() { obj = new LoadInst( thisObject, "", false, currentBlock); } else { - obj = TheCompiler->getJavaClassPtr(compilingClass); + obj = getClassDelegateePtr(compilingClass); obj = new LoadInst(obj, "", false, currentBlock); } monitorEnter(obj); @@ -756,7 +835,7 @@ void JavaJIT::endSynchronize() { obj = new LoadInst( thisObject, "", false, currentBlock); } else { - obj = TheCompiler->getJavaClassPtr(compilingClass); + obj = getClassDelegateePtr(compilingClass); obj = new LoadInst(obj, "", false, currentBlock); } monitorExit(obj); @@ -803,7 +882,7 @@ static void removeUnusedObjects(std::vec Instruction* JavaJIT::inlineCompile(BasicBlock*& curBB, BasicBlock* endExBlock, std::vector& args) { - Attribut* codeAtt = compilingMethod->lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = compilingMethod->lookupAttribute(JavaAttribute::codeAttribute); Reader reader(codeAtt, compilingClass->bytes); uint16 maxStack = reader.readU2(); uint16 maxLocals = reader.readU2(); @@ -977,7 +1056,7 @@ llvm::Function* JavaJIT::javaCompile() { DbgSubprogram = TheCompiler->getDebugFactory()->createFunction( DIDescriptor(), "", "", DIFile(), 0, DIType(), false, false, 0); - Attribut* codeAtt = compilingMethod->lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = compilingMethod->lookupAttribute(JavaAttribute::codeAttribute); if (!codeAtt) { fprintf(stderr, "I haven't verified your class file and it's malformed:" @@ -1095,20 +1174,26 @@ llvm::Function* JavaJIT::javaCompile() { // Now that arguments have been setup, we can proceed with runtime calls. #if JNJVM_EXECUTE > 0 - { - Value* arg = TheCompiler->getMethodInClass(compilingMethod); + if (!TheCompiler->isCompilingMMTk() && compilingClass->name->elements[0] == 'i') { + Value* arg = TheCompiler->getMethodInClass(compilingMethod); - llvm::CallInst::Create(intrinsics->PrintMethodStartFunction, arg, "", + llvm::CallInst::Create(intrinsics->PrintMethodStartFunction, arg, "", currentBlock); } #endif + Value *currentIsolateID = NULL; nbHandlers = readExceptionTable(reader, codeLen); if (nbHandlers != 0) { - jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "", currentBlock); - jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ptrType, "", currentBlock); + jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "ExceptionBufferBytes", currentBlock); + jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ExceptionBufferType, "ExceptionBuffer", currentBlock); + + Value *GEP[] = {intrinsics->constantZero, intrinsics->OffsetHandlerIsolateIDInExceptionBufferConstant}; + currentIsolateID = GetElementPtrInst::Create(jmpBuffer, GEP, "handlerIsolateID", currentBlock); } + Value *oldIsolateID = this->setCurrentIsolateForCompilingMethod(currentIsolateID, nbHandlers != 0); + reader.cursor = start; exploreOpcodes(reader, codeLen); @@ -1186,11 +1271,13 @@ llvm::Function* JavaJIT::javaCompile() { endSynchronize(); } + this->restoreCurrentIsolateForCompilingMethod(oldIsolateID, false); + #if JNJVM_EXECUTE > 0 - { + if (!TheCompiler->isCompilingMMTk() && compilingClass->name->elements[0] == 'i') { Value* arg = TheCompiler->getMethodInClass(compilingMethod); CallInst::Create(intrinsics->PrintMethodEndFunction, arg, "", currentBlock); - } + } #endif finishExceptions(); @@ -1249,8 +1336,8 @@ llvm::Function* JavaJIT::javaCompile() { UTF8Buffer(compilingClass->name).cString(), UTF8Buffer(compilingMethod->name).cString()); - Attribut* annotationsAtt = - compilingMethod->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* annotationsAtt = + compilingMethod->lookupAttribute(JavaAttribute::annotationsAttribute); if (annotationsAtt) { Reader reader(annotationsAtt, compilingClass->bytes); @@ -1261,10 +1348,10 @@ llvm::Function* JavaJIT::javaCompile() { const UTF8* name = compilingClass->ctpInfo->UTF8At(AR.AnnotationNameIndex); if (name->equals(TheCompiler->InlinePragma)) { - llvmFunction->removeFnAttr(Attribute::NoInline); - llvmFunction->addFnAttr(Attribute::AlwaysInline); + llvmFunction->removeFnAttr(llvm::Attribute::NoInline); + llvmFunction->addFnAttr(llvm::Attribute::AlwaysInline); } else if (name->equals(TheCompiler->NoInlinePragma)) { - llvmFunction->addFnAttr(Attribute::NoInline); + llvmFunction->addFnAttr(llvm::Attribute::NoInline); } } } @@ -1299,7 +1386,7 @@ void JavaJIT::loadConstant(uint16 index) Value* val = TheCompiler->getString(str); push(val, false, upcalls->newString); } else { - JavaString** str = (JavaString**)ctpInfo->ctpRes[index]; + JavaString** str = (JavaString**)ctpInfo->getCachedValue(index); if ((str != NULL) && !TheCompiler->isStaticCompiling()) { Value* val = TheCompiler->getStringPtr(str); val = new LoadInst(val, "", currentBlock); @@ -1574,7 +1661,7 @@ Instruction* JavaJIT::lowerDoubleOps(con Instruction* JavaJIT::invokeInline(JavaMethod* meth, std::vector& args, bool customized) { - JavaJIT jit(TheCompiler, meth, llvmFunction, customized ? customizeFor : NULL); + JavaJIT jit(TheCompiler, meth, llvmFunction, customized ? customizeFor : NULL, compilingMMTk); jit.unifiedUnreachable = unifiedUnreachable; jit.inlineMethods = inlineMethods; jit.inlineMethods[meth] = true; @@ -1739,13 +1826,11 @@ Value* JavaJIT::getConstantPoolAt(uint32 // This makes unswitch loop very unhappy time-wise, but makes GVN happy // number-wise. IMO, it's better to have this than Unswitch. - JavaConstantPool* ctp = compilingClass->ctpInfo; - Value* CTP = TheCompiler->getResolvedConstantPool(ctp); Value* Cl = TheCompiler->getNativeClass(compilingClass); std::vector Args; Args.push_back(resolver); - Args.push_back(CTP); + Args.push_back(compilingMMTk ? intrinsics->constantZero : intrinsics->CurrentIsolateID); Args.push_back(Cl); Args.push_back(ConstantInt::get(Type::getInt32Ty(*llvmContext), index)); if (additionalArg) Args.push_back(additionalArg); @@ -1889,6 +1974,8 @@ Value* JavaJIT::ldResolved(uint16 index, } object = TheCompiler->getStaticInstance(field->classDef); + if (!object) + object = CallInst::Create(intrinsics->GetStaticInstanceFunction, Cl, "", currentBlock); } else { object = new LoadInst( object, "", false, currentBlock); @@ -2321,7 +2408,11 @@ Instruction* JavaJIT::invoke(Value *F, s if (jmpBuffer != NULL) { BasicBlock* doCall = createBasicBlock(""); ifException = createBasicBlock(""); - Instruction* check = CallInst::Create(intrinsics->SetjmpFunction, jmpBuffer, "", currentBlock); + + Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetSetJmpBufferInExceptionBufferConstant, intrinsics->constantZero}; + Value *setjmpBuffer = GetElementPtrInst::Create(jmpBuffer, GEP, "setjmpBuffer", currentBlock); + Instruction* check = CallInst::Create(intrinsics->SetjmpFunction, setjmpBuffer, "", currentBlock); + check = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, check, intrinsics->constantZero, ""); BranchInst::Create(doCall, ifException, check, currentBlock); currentBlock = doCall; @@ -2338,6 +2429,14 @@ Instruction* JavaJIT::invoke(Value *F, s BranchInst::Create(ifNormal, currentBlock); currentBlock = ifException; + + // Restore the isolate ID of the current method. + // The called method had an exception and might not have restored the isolate ID as necessary. + Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetHandlerIsolateIDInExceptionBufferConstant}; + Value *handlerIsolateID = GetElementPtrInst::Create(jmpBuffer, GEP, "", currentBlock); + handlerIsolateID = new LoadInst(handlerIsolateID, "handlerIsolateID", currentBlock); + this->restoreCurrentIsolateForCompilingMethod(handlerIsolateID, true); + CallInst::Create(intrinsics->UnregisterSetjmpFunction, jmpBuffer, "", currentBlock); BranchInst::Create(currentExceptionBlock, currentBlock); currentBlock = ifNormal; Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.h (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.h Thu Apr 25 11:46:36 2013 @@ -79,7 +79,8 @@ public: JavaJIT(JavaLLVMCompiler* C, JavaMethod* meth, llvm::Function* func, - Class* customized) { + Class* customized, + bool CompilingMMTk = false) { compilingMethod = meth; compilingClass = meth->classDef; upcalls = compilingClass->classLoader->bootstrapLoader->upcalls; @@ -99,6 +100,7 @@ public: overridesThis = false; nbHandlers = 0; jmpBuffer = NULL; + compilingMMTk = CompilingMMTk; } /// javaCompile - Compile the Java method. @@ -114,6 +116,8 @@ public: uint32_t nbHandlers; private: + bool compilingMMTk; + /// Whether the method overrides 'this'. bool overridesThis; @@ -173,9 +177,6 @@ private: /// getMutatorThreadPtr - Emit code to get a pointer to the current MutatorThread. llvm::Value* getMutatorThreadPtr(); - /// getIsolateIDPtr - Emit code to get a pointer to IsolateID. - llvm::Value* getIsolateIDPtr(llvm::Value* mutatorThreadPtr); - /// getVMPtr - Emit code to get a pointer to MyVM. llvm::Value* getVMPtr(llvm::Value* mutatorThreadPtr); @@ -547,6 +548,11 @@ private: llvm::Instruction* invoke(llvm::Value *F, const char* Name, llvm::BasicBlock *InsertAtEnd); + llvm::Value* getClassDelegateePtr(CommonClass* cl); + llvm::Value* setCurrentIsolateForCompilingMethod(llvm::Value* currentIsolateID, bool alwaysSet); + void restoreCurrentIsolateForCompilingMethod(llvm::Value* oldIsolateID, bool alwaysRestore); + bool shouldMethodChangeCurrentIsolate(); + //===--------------------- Yield point support ---------------------------===// void checkYieldPoint(); Modified: vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp Thu Apr 25 11:46:36 2013 @@ -24,6 +24,7 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetData.h" #include <../lib/ExecutionEngine/JIT/JIT.h> +#include <../lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h> #include "VmkitGC.h" #include "vmkit/VirtualMachine.h" @@ -62,7 +63,9 @@ Constant* JavaJITCompiler::getNativeClas } Constant* JavaJITCompiler::getResolvedConstantPool(JavaConstantPool* ctp) { - void* ptr = ctp->ctpRes; + assert(false && "Must not be here."); + + void* ptr = NULL; // = ctp->ctpRes; assert(ptr && "No constant pool found"); ConstantInt* CI = ConstantInt::get(Type::getInt64Ty(getLLVMContext()), uint64_t(ptr)); @@ -114,11 +117,17 @@ Constant* JavaJITCompiler::getFinalObjec return NULL; } -Constant* JavaJITCompiler::getStaticInstance(Class* classDef) { - void* obj = classDef->getStaticInstance(); +Constant* JavaJITCompiler::getStaticInstance(Class* classDef, isolate_id_t isolateID) { + if (!compilingMMTk) { + // Thanks for calling me, but you should call j3GetStaticInstance() to get the static instance + // pointer at runtime. + return NULL; + } + + void* obj = classDef->getStaticInstance(isolateID); if (!obj) { classDef->acquire(); - obj = classDef->getStaticInstance(); + obj = classDef->getStaticInstance(isolateID); if (!obj) { // Allocate now so that compiled code can reference it. obj = classDef->allocateStaticInstance(JavaThread::get()->getJVM()); @@ -152,8 +161,8 @@ Constant* JavaJITCompiler::getNativeFunc return ConstantExpr::getIntToPtr(CI, valPtrType); } -JavaJITCompiler::JavaJITCompiler(const std::string &ModuleID) : - JavaLLVMCompiler(ModuleID), listener(this) { +JavaJITCompiler::JavaJITCompiler(const std::string &ModuleID, bool compilingMMTk) : + JavaLLVMCompiler(ModuleID, compilingMMTk), listener(this) { EmitFunctionName = false; GCInfo = NULL; @@ -161,6 +170,8 @@ JavaJITCompiler::JavaJITCompiler(const s EngineBuilder engine(TheModule); TargetOptions options; options.NoFramePointerElim = true; + options.JITEmitDebugInfo = true; +// engine.setUseMCJIT(true); engine.setTargetOptions(options); engine.setEngineKind(EngineKind::JIT); executionEngine = engine.create(); @@ -400,11 +411,11 @@ Value* JavaJ3LazyJITCompiler::addCallbac // Set the stub in the constant pool. JavaConstantPool* ctpInfo = cl->ctpInfo; word_t stub = stat ? sign->getStaticCallStub() : sign->getSpecialCallStub(); - if (!ctpInfo->ctpRes[index]) { - // Do a compare and swap, so that we do not overwrtie what a stub might + if (!ctpInfo->getCachedValue(index)) { + // Do a compare and swap, so that we do not overwrite what a stub might // have just updated. word_t val = (word_t) - __sync_val_compare_and_swap(&(ctpInfo->ctpRes[index]), NULL, (void*)stub); + ctpInfo->updateCachedValueSynchronized(index, (void*)stub, NULL); // If there is something in the the constant pool that is not NULL nor // the stub, then it's the method. if (val != 0 && val != stub) { @@ -414,11 +425,12 @@ Value* JavaJ3LazyJITCompiler::addCallbac } } // Load the constant pool. - Value* CTP = getResolvedConstantPool(ctpInfo); - Value* Index = ConstantInt::get(Type::getInt32Ty(insert->getContext()), - index); - Value* func = GetElementPtrInst::Create(CTP, Index, "", insert); - func = new LoadInst(func, "", false, insert); + Value* Args[] = { + getNativeClass(cl), + ConstantInt::get(Type::getInt32Ty(insert->getContext()), index), + compilingMMTk ? JavaIntrinsics.constantZero : JavaIntrinsics.CurrentIsolateID + }; + Value* func = CallInst::Create(JavaIntrinsics.GetCachedValueFunction, Args, "", insert); // Bitcast it to the LLVM function. func = new BitCastInst(func, stat ? LSI->getStaticPtrType() : LSI->getVirtualPtrType(), @@ -434,10 +446,10 @@ bool JavaJ3LazyJITCompiler::needsCallbac getMethod(meth, customizeFor)->hasExternalWeakLinkage()); } -JavaJ3LazyJITCompiler::JavaJ3LazyJITCompiler(const std::string& ModuleID) - : JavaJITCompiler(ModuleID) {} +JavaJ3LazyJITCompiler::JavaJ3LazyJITCompiler(const std::string& ModuleID, bool compilingMMTk) + : JavaJITCompiler(ModuleID, compilingMMTk) {} -JavaJITCompiler* JavaJITCompiler::CreateCompiler(const std::string& ModuleID) { - return new JavaJ3LazyJITCompiler(ModuleID); +JavaJITCompiler* JavaJITCompiler::CreateCompiler(const std::string& ModuleID, bool compilingMMTk) { + return new JavaJ3LazyJITCompiler(ModuleID, compilingMMTk); } Modified: vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp Thu Apr 25 11:46:36 2013 @@ -25,9 +25,9 @@ using namespace llvm; namespace j3 { -JavaLLVMCompiler::JavaLLVMCompiler(const std::string& str) : +JavaLLVMCompiler::JavaLLVMCompiler(const std::string& str, bool CompilingMMTk) : TheModule(new llvm::Module(str, *(new LLVMContext()))), - DebugFactory(new DIBuilder(*TheModule)) { + DebugFactory(new DIBuilder(*TheModule)), compilingMMTk(CompilingMMTk) { enabledException = true; cooperativeGC = true; @@ -61,7 +61,7 @@ Function* JavaLLVMCompiler::parseFunctio // We are jitting. Take the lock. vmkit::VmkitModule::protectIR(); if (func->getLinkage() == GlobalValue::ExternalWeakLinkage) { - JavaJIT jit(this, meth, func, customizeFor); + JavaJIT jit(this, meth, func, customizeFor, compilingMMTk); if (isNative(meth->access)) { jit.nativeCompile(); vmkit::VmkitModule::runPasses(func, JavaNativeFunctionPasses); Modified: vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Thu Apr 25 11:46:36 2013 @@ -38,30 +38,6 @@ private: }; char LowerConstantCalls::ID = 0; -static Value* getTCM(J3Intrinsics* intrinsics, Value* Arg, Instruction* CI) { - Value* GEP[2] = { intrinsics->constantZero, - intrinsics->OffsetTaskClassMirrorInClassConstant }; - Value* TCMArray = GetElementPtrInst::Create(Arg, GEP, "", CI); - - Value* GEP2[2] = { intrinsics->constantZero, intrinsics->constantZero }; - - Value* TCM = GetElementPtrInst::Create(TCMArray, GEP2, "", CI); - return TCM; - -} - -static Value* getDelegatee(J3Intrinsics* intrinsics, Value* Arg, Instruction* CI) { - Value* GEP[2] = { intrinsics->constantZero, - intrinsics->constantZero }; - Value* TCMArray = GetElementPtrInst::Create(Arg, GEP, "", CI); - - Value* GEP2[2] = { intrinsics->constantZero, intrinsics->constantZero }; - - Value* TCM = GetElementPtrInst::Create(TCMArray, GEP2, "", CI); - return new LoadInst(TCM, "", CI); - -} - bool LowerConstantCalls::runOnFunction(Function& F) { LLVMContext* Context = &F.getContext(); bool Changed = false; @@ -279,107 +255,12 @@ bool LowerConstantCalls::runOnFunction(F Value* Class = new LoadInst(ClassPtr, "", CI); CI->replaceAllUsesWith(Class); CI->eraseFromParent(); - } else if (V == intrinsics->GetClassDelegateeFunction) { - Changed = true; - BasicBlock* NBB = II->getParent()->splitBasicBlock(II); - I->getParent()->getTerminator()->eraseFromParent(); - Value* Del = getDelegatee(intrinsics, Call.getArgument(0), CI); - Value* cmp = new ICmpInst(CI, ICmpInst::ICMP_EQ, Del, - intrinsics->JavaObjectNullConstant, ""); - - BasicBlock* NoDelegatee = BasicBlock::Create(*Context, "No delegatee", &F); - BasicBlock* DelegateeOK = BasicBlock::Create(*Context, "Delegatee OK", &F); - BranchInst::Create(NoDelegatee, DelegateeOK, cmp, CI); - PHINode* phi = PHINode::Create(intrinsics->JavaObjectType, 2, "", DelegateeOK); - phi->addIncoming(Del, CI->getParent()); - - Instruction* Res = CallInst::Create(intrinsics->RuntimeDelegateeFunction, - Call.getArgument(0), "", NoDelegatee); - Res->setDebugLoc(CI->getDebugLoc()); - BranchInst::Create(DelegateeOK, NoDelegatee); - phi->addIncoming(Res, NoDelegatee); - - CI->replaceAllUsesWith(phi); - CI->eraseFromParent(); - BranchInst::Create(NBB, DelegateeOK); - break; - - } else if (V == intrinsics->InitialisationCheckFunction) { - Changed = true; - - BasicBlock* NBB = 0; - if (CI->getParent()->getTerminator() != CI) { - NBB = II->getParent()->splitBasicBlock(II); - CI->getParent()->getTerminator()->eraseFromParent(); - } else { - InvokeInst* Invoke = dyn_cast(CI); - assert(Invoke && "Last instruction is not an invoke"); - NBB = Invoke->getNormalDest(); - } - - Value* Cl = Call.getArgument(0); - Value* TCM = getTCM(intrinsics, Call.getArgument(0), CI); - Value* GEP[2] = - { intrinsics->constantZero, - intrinsics->OffsetInitializedInTaskClassMirrorConstant }; - Value* StatusPtr = GetElementPtrInst::Create(TCM, GEP, "", CI); - - Value* test = new LoadInst(StatusPtr, "", CI); - - BasicBlock* trueCl = BasicBlock::Create(*Context, "Initialized", &F); - BasicBlock* falseCl = BasicBlock::Create(*Context, "Uninitialized", &F); - PHINode* node = llvm::PHINode::Create(intrinsics->JavaClassType, 2, "", trueCl); - node->addIncoming(Cl, CI->getParent()); - BranchInst::Create(trueCl, falseCl, test, CI); - - - Instruction* res = 0; - if (InvokeInst* Invoke = dyn_cast(CI)) { - Value* Args[1] = { Cl }; - BasicBlock* UI = Invoke->getUnwindDest(); - - res = InvokeInst::Create(intrinsics->InitialiseClassFunction, - trueCl, UI, Args, "", falseCl); - - // For some reason, an LLVM pass may add PHI nodes to the - // exception destination. - BasicBlock::iterator Temp = UI->getInstList().begin(); - while (PHINode* PHI = dyn_cast(Temp)) { - Value* Val = PHI->getIncomingValueForBlock(CI->getParent()); - PHI->removeIncomingValue(CI->getParent(), false); - PHI->addIncoming(Val, falseCl); - Temp++; - } - - // And here we set the phi nodes of the normal dest of the Invoke - // instruction. The phi nodes have now the trueCl as basic block. - Temp = NBB->getInstList().begin(); - while (PHINode* PHI = dyn_cast(Temp)) { - Value* Val = PHI->getIncomingValueForBlock(CI->getParent()); - PHI->removeIncomingValue(CI->getParent(), false); - PHI->addIncoming(Val, trueCl); - Temp++; - } - - } else { - res = CallInst::Create(intrinsics->InitialiseClassFunction, - Cl, "", falseCl); - BranchInst::Create(trueCl, falseCl); - } - res->setDebugLoc(CI->getDebugLoc()); - - node->addIncoming(res, falseCl); - - - CI->replaceAllUsesWith(node); - CI->eraseFromParent(); - BranchInst::Create(NBB, trueCl); - break; } else if (V == intrinsics->GetConstantPoolAtFunction) { Function* resolver = dyn_cast(Call.getArgument(0)); assert(resolver && "Wrong use of GetConstantPoolAt"); Type* returnType = resolver->getReturnType(); - Value* CTP = Call.getArgument(1); + Value* isolateID = Call.getArgument(1); + Value* cl = Call.getArgument(2); Value* Index = Call.getArgument(3); Changed = true; BasicBlock* NBB = 0; @@ -392,9 +273,8 @@ bool LowerConstantCalls::runOnFunction(F NBB = Invoke->getNormalDest(); } - Value* indexes = Index; - Value* arg1 = GetElementPtrInst::Create(CTP, indexes, "", CI); - arg1 = new LoadInst(arg1, "", false, CI); + Value* GCVArgs[] = {cl, Index, isolateID}; + Value* arg1 = CallInst::Create(intrinsics->GetCachedValueFunction, GCVArgs, "", CI); Value* test = new ICmpInst(CI, ICmpInst::ICMP_EQ, arg1, intrinsics->constantPtrNull, ""); Modified: vmkit/trunk/lib/j3/LLVMRuntime/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/Makefile?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/Makefile (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/Makefile Thu Apr 25 11:46:36 2013 @@ -12,7 +12,8 @@ include $(LEVEL)/Makefile.config VMKIT_RUNTIME = $(PROJ_SRC_DIR)/runtime-default.ll VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-mmtk-thread.ll -VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-single.ll +#VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-single.ll +VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-isolate.ll BUILT_SOURCES = LLVMRuntime.inc Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll Thu Apr 25 11:46:36 2013 @@ -5,6 +5,9 @@ ;;; A virtual table is an array of function pointers. %VT = type [0 x i32 (...)*] +;;; Java VT (partial definition, only needed fields) +%JavaVT = type { i8*, i8*, i8*, [ 1 x i8* ], %JavaCommonClass* } + ;;; The root of all Java Objects: a VT and a lock. %JavaObject = type { %VT*, i8* } @@ -22,15 +25,15 @@ %ArrayUInt8 = type { %JavaObject, i8*, [0 x i8] } ;;; The task class mirror. -;;; Field 1: The class state -;;; Field 2: The initialization state -;;; Field 3: The static instance +;;; Field 0: The class state +;;; Field 1: The initialization state +;;; Field 2: The static instance %TaskClassMirror = type { i8, i1, i8* } %CircularBase = type { %VT*, %CircularBase*, %CircularBase* } ;;; Field 0: the parent (circular base) -;;; Field 1: size_t IsolateID +;;; Field 1: isolate_id_t IsolateID ;;; Field 2: void* MyVM ;;; Field 3: void* baseSP ;;; Field 4: bool doYield @@ -41,21 +44,21 @@ ;;; field 9: void* routine ;;; field 10: void* lastKnownFrame ;;; field 11: void* lastExceptionBuffer -%Thread = type { %CircularBase, i8*, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8* } +%Thread = type { %CircularBase, i32, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8*, i1 } %JavaThread = type { %MutatorThread, i8*, %JavaObject* } %JavaConstantPool = type { %JavaClass*, i32, i8*, i32*, i8** } -%Attribut = type { %UTF8*, i32, i32 } +%Attribute = type { %UTF8*, i32, i32 } -%UTF8 = type { i8*, [0 x i16] } +%UTF8 = type { i32, [0 x i16] } -%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribut*, i16, %JavaClass*, i32, +%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribute*, i16, %JavaClass*, i32, i16 } -%JavaMethod = type { i8*, i16, %Attribut*, i16, %JavaClass*, +%JavaMethod = type { i8*, i16, %Attribute*, i16, %JavaClass*, %UTF8*, %UTF8*, i8, i8*, i32 } %JavaClassPrimitive = type { %JavaCommonClass, i32 } @@ -88,10 +91,11 @@ declare void @listAllTypes(%JavaObject, %JavaField, %JavaMethod, %UTF8, - %Attribut, + %Attribute, %JavaThread, %MutatorThread, - %J3DenseMap); + %J3DenseMap, + %JavaVT); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;; Constant calls for J3 runtime internal objects field accesses ;;;;;;;;; @@ -144,7 +148,7 @@ declare %VT* @getVTInDisplay(%VT**, i32) declare i32 @getDepth(%VT*) readnone ;;; getStaticInstance - Get the static instance of this class. -declare i8* @getStaticInstance(%JavaClass*) readnone +declare i8* @j3GetStaticInstance(%JavaClass*) readnone ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -161,7 +165,8 @@ declare %JavaObject* @j3MultiCallNew(%Ja ;;; initialisationCheck - Checks if the class has been initialized and ;;; initializes if not. This is used for initialization barriers in an isolate ;;; environment, and in some specific scenario in a single environment. -declare %JavaClass* @initialisationCheck(%JavaClass*) readnone +declare %JavaClass* @j3InitialisationCheck(%JavaClass*) +declare %JavaClass* @j3InitialisationCheckForJavaObject(%JavaObject*) ;;; forceInitialisationCheck - Force to check initialization. The difference ;;; between this function and the initialisationCheck function is that the @@ -179,8 +184,9 @@ declare void @forceLoadedCheck(%JavaComm ;;; getConstantPoolAt - Get the value in the constant pool of this class. ;;; This function is removed by J3's LLVM pass, therefore it does ;;; not have an actual implementation. -declare i8* @getConstantPoolAt(i8* (%JavaClass*, i32, ...)*, i8**, +declare i8* @getConstantPoolAt(i8* (%JavaClass*, i32, ...)*, i32, %JavaClass*, i32, ...) +declare i8* @j3GetCachedValue(%JavaClass*, i32, i32) ;;; j3VirtualTableLookup - Look up the offset in a virtual table of a ;;; specific function. @@ -218,11 +224,13 @@ declare i1 @isSecondaryClass(%VT*, %VT*) ;;; getClassDelegatee - Returns the java/lang/Class representation of the ;;; class. This method is lowered to the GEP to the class delegatee in ;;; the common class. -declare %JavaObject* @getClassDelegatee(%JavaCommonClass*) +declare %JavaObject** @j3GetClassDelegateePtr(%JavaCommonClass*) +declare %JavaObject* @j3GetClassDelegatee(%JavaCommonClass*) ;;; j3RuntimeDelegatee - Returns the java/lang/Class representation of the ;;; class. This method is called if the class delegatee has not been created ;;; yet. +declare %JavaObject** @j3RuntimeDelegateePtr(%JavaCommonClass*) declare %JavaObject* @j3RuntimeDelegatee(%JavaCommonClass*) ;;; j3GetArrayClass - Get the array user class of the user class. Copied: vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll (from r180278, vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll?p2=vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll&p1=vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll&r1=180278&r2=180279&rev=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll Thu Apr 25 11:46:36 2013 @@ -2,12 +2,14 @@ ;;;;;;;;;;;;;;;;;;;;;;;;; Isolate specific types ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -%JavaCommonClass = type { [1 x %JavaObject*], i32, +%JavaCommonClass = type { [256 x %JavaObject*], i32, %JavaClass**, i16, %UTF8*, %JavaClass*, i8*, %VT* } %ClassBytes = type { i32, i8* } -%JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror], +%JavaClass = type { %JavaCommonClass, i32, i32, [256 x %TaskClassMirror], %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, - %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribut*, + %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribute*, i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 } + +declare i32 @j3SetIsolate(i32, i32*) Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll Thu Apr 25 11:46:36 2013 @@ -9,5 +9,5 @@ %JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror], %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, - %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribut*, + %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribute*, i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 } Modified: vmkit/trunk/lib/j3/VMCore/JavaArray.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaArray.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaArray.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaArray.h Thu Apr 25 11:46:36 2013 @@ -120,7 +120,7 @@ ARRAYCLASS(ArraySInt32, sint32); ARRAYCLASS(ArrayLong, sint64); ARRAYCLASS(ArrayFloat, float); ARRAYCLASS(ArrayDouble, double); -ARRAYCLASS(ArrayPtr, word_t); +ARRAYCLASS(ArrayPtr, void*); #undef ARRAYCLASS Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:46:36 2013 @@ -29,17 +29,17 @@ using namespace j3; -const UTF8* Attribut::annotationsAttribut = 0; -const UTF8* Attribut::codeAttribut = 0; -const UTF8* Attribut::exceptionsAttribut = 0; -const UTF8* Attribut::constantAttribut = 0; -const UTF8* Attribut::lineNumberTableAttribut = 0; -const UTF8* Attribut::innerClassesAttribut = 0; -const UTF8* Attribut::sourceFileAttribut = 0; -const UTF8* Attribut::signatureAttribut = 0; -const UTF8* Attribut::enclosingMethodAttribut = 0; -const UTF8* Attribut::paramAnnotationsAttribut = 0; -const UTF8* Attribut::annotationDefaultAttribut = 0; +const UTF8* JavaAttribute::annotationsAttribute = 0; +const UTF8* JavaAttribute::codeAttribute = 0; +const UTF8* JavaAttribute::exceptionsAttribute = 0; +const UTF8* JavaAttribute::constantAttribute = 0; +const UTF8* JavaAttribute::lineNumberTableAttribute = 0; +const UTF8* JavaAttribute::innerClassesAttribute = 0; +const UTF8* JavaAttribute::sourceFileAttribute = 0; +const UTF8* JavaAttribute::signatureAttribute = 0; +const UTF8* JavaAttribute::enclosingMethodAttribute = 0; +const UTF8* JavaAttribute::paramAnnotationsAttribute = 0; +const UTF8* JavaAttribute::annotationDefaultAttribute = 0; Class* ClassArray::SuperArray; Class** ClassArray::InterfacesArray; @@ -49,7 +49,7 @@ extern "C" void ArrayObjectTracer(JavaOb extern "C" void RegularObjectTracer(JavaObject*); extern "C" void ReferenceObjectTracer(JavaObject*); -Attribut::Attribut(const UTF8* name, uint32 length, +JavaAttribute::JavaAttribute(const UTF8* name, uint32 length, uint32 offset) { this->start = offset; @@ -57,27 +57,27 @@ Attribut::Attribut(const UTF8* name, uin this->name = name; } -Attribut* Class::lookupAttribut(const UTF8* key) { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); +JavaAttribute* Class::lookupAttribute(const UTF8* key) { + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); if (cur->name->equals(key)) return cur; } return 0; } -Attribut* JavaField::lookupAttribut(const UTF8* key) { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); +JavaAttribute* JavaField::lookupAttribute(const UTF8* key) { + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); if (cur->name->equals(key)) return cur; } return 0; } -Attribut* JavaMethod::lookupAttribut(const UTF8* key) { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); +JavaAttribute* JavaMethod::lookupAttribute(const UTF8* key) { + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); if (cur->name->equals(key)) return cur; } @@ -88,9 +88,9 @@ CommonClass::~CommonClass() { } Class::~Class() { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); - cur->~Attribut(); + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); + cur->~JavaAttribute(); classLoader->allocator.Deallocate(cur); } @@ -132,17 +132,17 @@ Class::~Class() { } JavaField::~JavaField() { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); - cur->~Attribut(); + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); + cur->~JavaAttribute(); classDef->classLoader->allocator.Deallocate(cur); } } JavaMethod::~JavaMethod() { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); - cur->~Attribut(); + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); + cur->~JavaAttribute(); classDef->classLoader->allocator.Deallocate(cur); } } @@ -441,11 +441,11 @@ JavaField* Class::lookupField(const UTF8 return res; } -JavaObject* UserClass::doNew(Jnjvm* vm) { +JavaObject* UserClass::doNew(Jnjvm* vm, isolate_id_t isolateID) { JavaObject* res = NULL; llvm_gcroot(res, 0); assert(this && "No class when allocating."); - assert((this->isInitializing() || + assert((this->isInitializing(isolateID) || classLoader->getCompiler()->isStaticCompiling() || this == classLoader->bootstrapLoader->upcalls->newClass) && "Uninitialized class when allocating."); @@ -517,10 +517,10 @@ bool JavaVirtualTable::isSubtypeOf(JavaV return false; } -void JavaField::InitNullStaticField() { +void JavaField::InitNullStaticField(isolate_id_t isolateID) { Typedef* type = getSignature(); - void* obj = classDef->getStaticInstance(); + void* obj = classDef->getStaticInstance(isolateID); if (!type->isPrimitive()) { ((JavaObject**)((uint64)obj + ptrOffset))[0] = NULL; return; @@ -548,9 +548,9 @@ void JavaField::InitNullStaticField() { } } -void JavaField::InitStaticField(uint64 val) { +void JavaField::InitStaticField(uint64 val, isolate_id_t isolateID) { Typedef* type = getSignature(); - void* obj = classDef->getStaticInstance(); + void* obj = classDef->getStaticInstance(isolateID); assert(type->isPrimitive() && "Non primitive field"); PrimitiveTypedef* prim = (PrimitiveTypedef*)type; if (prim->isLong()) { @@ -571,30 +571,31 @@ void JavaField::InitStaticField(uint64 v } } -void JavaField::InitStaticField(JavaObject* val) { +void JavaField::InitStaticField(JavaObject* val, isolate_id_t isolateID) { llvm_gcroot(val, 0); - void* obj = classDef->getStaticInstance(); + void* obj = classDef->getStaticInstance(isolateID); assert(isReference()); JavaObject** ptr = (JavaObject**)((uint64)obj + ptrOffset); vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); } -void JavaField::InitStaticField(double val) { - void* obj = classDef->getStaticInstance(); +void JavaField::InitStaticField(double val, isolate_id_t isolateID) { + void* obj = classDef->getStaticInstance(isolateID); ((double*)((uint64)obj + ptrOffset))[0] = val; } -void JavaField::InitStaticField(float val) { - void* obj = classDef->getStaticInstance(); +void JavaField::InitStaticField(float val, isolate_id_t isolateID) { + void* obj = classDef->getStaticInstance(isolateID); ((float*)((uint64)obj + ptrOffset))[0] = val; } void JavaField::InitStaticField(Jnjvm* vm) { const Typedef* type = getSignature(); - Attribut* attribut = lookupAttribut(Attribut::constantAttribut); + JavaAttribute* attribut = lookupAttribute(JavaAttribute::constantAttribute); + isolate_id_t isolateID = JavaThread::getValidIsolateID(CURRENT_ISOLATE); if (!attribut) { - InitNullStaticField(); + InitNullStaticField(isolateID); } else { Reader reader(attribut, classDef->bytes); JavaConstantPool * ctpInfo = classDef->ctpInfo; @@ -602,17 +603,17 @@ void JavaField::InitStaticField(Jnjvm* v if (type->isPrimitive()) { UserCommonClass* cl = type->assocClass(vm->bootstrapLoader); if (cl == vm->upcalls->OfLong) { - InitStaticField((uint64)ctpInfo->LongAt(idx)); + InitStaticField((uint64)ctpInfo->LongAt(idx), isolateID); } else if (cl == vm->upcalls->OfDouble) { - InitStaticField(ctpInfo->DoubleAt(idx)); + InitStaticField(ctpInfo->DoubleAt(idx), isolateID); } else if (cl == vm->upcalls->OfFloat) { - InitStaticField(ctpInfo->FloatAt(idx)); + InitStaticField(ctpInfo->FloatAt(idx), isolateID); } else { - InitStaticField((uint64)ctpInfo->IntegerAt(idx)); + InitStaticField((uint64)ctpInfo->IntegerAt(idx), isolateID); } } else if (type->isReference()) { const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[idx]); - InitStaticField((JavaObject*)ctpInfo->resolveString(utf8, idx)); + InitStaticField((JavaObject*)ctpInfo->resolveString(utf8, idx), isolateID); } else { fprintf(stderr, "I haven't verified your class file and it's malformed:" " unknown constant %s!\n", @@ -674,7 +675,7 @@ void Class::readParents(Reader& reader) void internalLoadExceptions(JavaMethod& meth) { - Attribut* codeAtt = meth.lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = meth.lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt) { Reader reader(codeAtt, meth.classDef->bytes); @@ -709,15 +710,15 @@ void UserClass::loadExceptions() { internalLoadExceptions(staticMethods[i]); } -Attribut* Class::readAttributs(Reader& reader, uint16& size) { +JavaAttribute* Class::readAttributes(Reader& reader, uint16& size) { uint16 nba = reader.readU2(); - Attribut* attributs = new(classLoader->allocator, "Attributs") Attribut[nba]; + JavaAttribute* attributs = new(classLoader->allocator, "Attributs") JavaAttribute[nba]; for (int i = 0; i < nba; i++) { const UTF8* attName = ctpInfo->UTF8At(reader.readU2()); uint32 attLen = reader.readU4(); - Attribut& att = attributs[i]; + JavaAttribute& att = attributs[i]; att.start = reader.cursor; att.nbb = attLen; att.name = attName; @@ -747,7 +748,7 @@ void Class::readFields(Reader& reader) { field->initialise(this, name, type, access); ++nbVirtualFields; } - field->attributs = readAttributs(reader, field->nbAttributs); + field->attributes = readAttributes(reader, field->nbAttributes); } } @@ -846,7 +847,7 @@ void Class::readMethods(Reader& reader) meth->initialise(this, name, type, access); ++nbVirtualMethods; } - meth->attributs = readAttributs(reader, meth->nbAttributs); + meth->attributes = readAttributes(reader, meth->nbAttributes); } if (isAbstract(access)) { @@ -904,7 +905,7 @@ void Class::readClass() { readParents(reader); readFields(reader); readMethods(reader); - attributs = readAttributs(reader, nbAttributs); + attributes = readAttributes(reader, nbAttributes); } void UserClass::resolveParents() { @@ -921,14 +922,13 @@ void Class::resolveClass() { resolveParents(); loadExceptions(); // Do a compare and swap in case another thread initialized the class. - __sync_val_compare_and_swap( - &(getCurrentTaskClassMirror().status), loaded, resolved); + setResolvedSynchronized(loaded); assert(isResolved() || isErroneous()); } void UserClass::resolveInnerOuterClasses() { if (!innerOuterResolved) { - Attribut* attribut = lookupAttribut(Attribut::innerClassesAttribut); + JavaAttribute* attribut = lookupAttribute(JavaAttribute::innerClassesAttribute); if (attribut != 0) { Reader reader(attribut, bytes); uint16 nbi = reader.readU2(); @@ -1001,7 +1001,7 @@ ArrayObject* JavaMethod::getExceptionTyp llvm_gcroot(res, 0); llvm_gcroot(delegatee, 0); - Attribut* exceptionAtt = lookupAttribut(Attribut::exceptionsAttribut); + JavaAttribute* exceptionAtt = lookupAttribute(JavaAttribute::exceptionsAttribute); Jnjvm* vm = JavaThread::get()->getJVM(); if (exceptionAtt == 0) { return (ArrayObject*)vm->upcalls->classArrayClass->doNew(0, vm); @@ -1024,15 +1024,15 @@ ArrayObject* JavaMethod::getExceptionTyp } -JavaObject* CommonClass::setDelegatee(JavaObject* val) { +JavaObject* CommonClass::setDelegatee(JavaObject* val, isolate_id_t isolateID) { llvm_gcroot(val, 0); - JavaObject** obj = &(delegatee[0]); + JavaObject** obj = getDelegateePtr(isolateID); classLoader->lock.lock(); if (*obj == NULL) { vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)obj, (gc*)val); } classLoader->lock.unlock(); - return getDelegatee(); + return getDelegatee(isolateID); } @@ -1287,14 +1287,14 @@ ArrayUInt16* JavaMethod::toString() cons } -bool UserClass::needsInitialisationCheck() { +bool UserClass::needsInitialisationCheck(isolate_id_t isolateID) { - if (isReady()) return false; +// if (isReady(isolateID)) return false; - if (super && super->needsInitialisationCheck()) + if (super && super->needsInitialisationCheck(isolateID)) return true; - if (nbStaticFields) return true; + if (nbStaticFields > 0) return true; JavaMethod* meth = lookupMethodDontThrow(classLoader->bootstrapLoader->clinitName, @@ -1303,7 +1303,8 @@ bool UserClass::needsInitialisationCheck if (meth) return true; - setInitializationState(ready); + setResolved(); + setInitializationState(ready, isolateID); return false; } @@ -1698,7 +1699,7 @@ void AnnotationReader::readElementValue( } uint16 JavaMethod::lookupLineNumber(vmkit::FrameInfo* info) { - Attribut* codeAtt = lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt == NULL) return 0; Reader reader(codeAtt, classDef->bytes); reader.readU2(); // max_stack @@ -1711,7 +1712,7 @@ uint16 JavaMethod::lookupLineNumber(vmki for (uint16 att = 0; att < nba; ++att) { const UTF8* attName = classDef->ctpInfo->UTF8At(reader.readU2()); uint32 attLen = reader.readU4(); - if (attName->equals(Attribut::lineNumberTableAttribut)) { + if (attName->equals(JavaAttribute::lineNumberTableAttribute)) { uint16_t lineLength = reader.readU2(); uint16_t currentLine = 0; for (uint16 j = 0; j < lineLength; ++j) { @@ -1728,7 +1729,7 @@ uint16 JavaMethod::lookupLineNumber(vmki } uint16 JavaMethod::lookupCtpIndex(vmkit::FrameInfo* FI) { - Attribut* codeAtt = lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); Reader reader(codeAtt, classDef->bytes); reader.cursor = reader.cursor + 2 + 2 + 4 + FI->SourceIndex + 1; return reader.readU2(); @@ -1763,19 +1764,20 @@ void Class::broadcastClass() { JavaObject::notifyAll(delegatee); } -void JavaField::setInstanceObjectField(JavaObject* obj, JavaObject* val) { - llvm_gcroot(obj, 0); - llvm_gcroot(val, 0); - if (val != NULL) assert(val->getVirtualTable()); - assert(classDef->isResolved()); - JavaObject** ptr = (JavaObject**)((uint64)obj + ptrOffset); - vmkit::Collector::objectReferenceWriteBarrier((gc*)obj, (gc**)ptr, (gc*)val); -} - -void JavaField::setStaticObjectField(JavaObject* val) { - llvm_gcroot(val, 0); - if (val != NULL) assert(val->getVirtualTable()); - assert(classDef->isResolved()); - JavaObject** ptr = (JavaObject**)((uint64)classDef->getStaticInstance() + ptrOffset); - vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); -} +bool Class::isInitializing(isolate_id_t isolateID) +{ + TaskClassMirror& TCM = getTaskClassMirror(isolateID); + if (TCM.status >= inClinit) return true; + if (!isResolved(isolateID)) return false; + + needsInitialisationCheck(isolateID); + return (TCM.status >= inClinit); +} + +JavaField_IMPL_ASSESSORS(float, Float) +JavaField_IMPL_ASSESSORS(double, Double) +JavaField_IMPL_ASSESSORS(uint8, Int8) +JavaField_IMPL_ASSESSORS(uint16, Int16) +JavaField_IMPL_ASSESSORS(uint32, Int32) +JavaField_IMPL_ASSESSORS(sint64, Long) +JavaField_IMPL_ASSESSORS(JavaObject*, Object) Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 11:46:36 2013 @@ -22,6 +22,9 @@ #include "JavaObject.h" #include "JnjvmClassLoader.h" #include "JnjvmConfig.h" +#include "Jnjvm.h" +#include "JavaTypes.h" +#include "JavaThread.h" #include #include @@ -70,84 +73,84 @@ public: void readElementValue(); }; -/// Attribut - This class represents JVM attributes to Java class, methods and +/// Attribute - This class represents JVM attributes to Java class, methods and /// fields located in the .class file. /// -class Attribut : public vmkit::PermanentObject { +class JavaAttribute : public vmkit::PermanentObject { public: - /// name - The name of the attribut. These are specified in the JVM book. + /// name - The name of the attribute. These are specified in the JVM book. /// Experimental attributes exist, but the JnJVM does nor parse them. /// const UTF8* name; - /// start - The offset in the class of this attribut. + /// start - The offset in the class of this attribute. /// uint32 start; - /// nbb - The size of the attribut. + /// nbb - The size of the attribute. /// uint32 nbb; - /// Attribut - Create an attribut at the given length and offset. + /// Attribute - Create an attribute at the given length and offset. /// - Attribut(const UTF8* name, uint32 length, uint32 offset); - Attribut() {} + JavaAttribute(const UTF8* name, uint32 length, uint32 offset); + JavaAttribute() {} - /// codeAttribut - The "Code" JVM attribut. This is a method attribut for + /// codeAttribute - The "Code" JVM attribute. This is a method attribute for /// finding the bytecode of a method in the .class file. // - static const UTF8* codeAttribut; + static const UTF8* codeAttribute; - /// annotationsAttribut - The "RuntimeVisibleAnnotations" JVM attribut. - /// This is a method attribut for getting the runtime annotations. + /// annotationsAttribute - The "RuntimeVisibleAnnotations" JVM attribute. + /// This is a method attribute for getting the runtime annotations. // - static const UTF8* annotationsAttribut; + static const UTF8* annotationsAttribute; - /// exceptionsAttribut - The "Exceptions" attribut. This is a method - /// attribut for finding the exception table of a method in the .class + /// exceptionsAttribute - The "Exceptions" attribute. This is a method + /// attribute for finding the exception table of a method in the .class /// file. /// - static const UTF8* exceptionsAttribut; + static const UTF8* exceptionsAttribute; - /// constantAttribut - The "ConstantValue" attribut. This is a field attribut + /// constantAttribute - The "ConstantValue" attribute. This is a field attribute /// when the field has a static constant value. /// - static const UTF8* constantAttribut; + static const UTF8* constantAttribute; - /// lineNumberTableAttribut - The "LineNumberTable" attribut. This is used + /// lineNumberTableAttribute - The "LineNumberTable" attribute. This is used /// for corresponding JVM bytecode to source line in the .java file. /// - static const UTF8* lineNumberTableAttribut; + static const UTF8* lineNumberTableAttribute; - /// innerClassAttribut - The "InnerClasses" attribut. This is a class attribut + /// innerClassAttribute - The "InnerClasses" attribute. This is a class attribute /// for knowing the inner/outer informations of a Java class. /// - static const UTF8* innerClassesAttribut; + static const UTF8* innerClassesAttribute; - /// sourceFileAttribut - The "SourceFile" attribut. This is a class attribut - /// and gives the correspondance between a class and the name of its Java + /// sourceFileAttribute - The "SourceFile" attribute. This is a class attribute + /// and gives the correspondence between a class and the name of its Java /// file. /// - static const UTF8* sourceFileAttribut; + static const UTF8* sourceFileAttribute; - /// signatureAttribut - The "Signature" attribut. This is used to record + /// signatureAttribute - The "Signature" attribute. This is used to record /// generics information about a class or method. /// - static const UTF8* signatureAttribut; + static const UTF8* signatureAttribute; - /// enclosingMEthodAttribut - The "EnclosingMethod" attribut. This is a class - /// attribut that identifies the method definining a local or anonymous class + /// enclosingMEthodAttribute - The "EnclosingMethod" attribute. This is a class + /// attribute that identifies the method defining a local or anonymous class /// - static const UTF8* enclosingMethodAttribut; + static const UTF8* enclosingMethodAttribute; - /// paramAnnotationsAttribut - Annotations for parameters attribut + /// paramAnnotationsAttribute - Annotations for parameters attribute /// - static const UTF8* paramAnnotationsAttribut; + static const UTF8* paramAnnotationsAttribute; - /// annotationDefaultAttribut - The "AnnotationDefault" attribut + /// annotationDefaultAttribute - The "AnnotationDefault" attribute /// - static const UTF8* annotationDefaultAttribut; + static const UTF8* annotationDefaultAttribute; }; /// TaskClassMirror - The isolate specific class information: the initialization @@ -175,7 +178,7 @@ public: /// class CommonClass : public vmkit::PermanentObject { -public: +private: //===----------------------------------------------------------------------===// // @@ -189,6 +192,7 @@ public: /// JavaObject* delegatee[NR_ISOLATES]; +public: /// access - {public, private, protected}. /// uint32 access; @@ -318,7 +322,7 @@ public: /// getClassDelegatee - Return the java/lang/Class representation of this /// class. /// - JavaObject* getClassDelegatee(Jnjvm* vm, JavaObject* pd = NULL); + JavaObject* getClassDelegatee(Jnjvm* vm, JavaObject* pd = NULL, isolate_id_t isolateID = CURRENT_ISOLATE); /// getClassDelegateePtr - Return a pointer on the java/lang/Class /// representation of this class. Used for JNI. @@ -353,19 +357,22 @@ public: /// setDelegatee - Set the java/lang/Class object of this class. /// - JavaObject* setDelegatee(JavaObject* val); + JavaObject* setDelegatee(JavaObject* val, isolate_id_t isolateID = CURRENT_ISOLATE); /// getDelegatee - Get the java/lang/Class object representing this class. /// - JavaObject* getDelegatee() const { - return delegatee[0]; + JavaObject* getDelegatee(isolate_id_t isolateID = CURRENT_ISOLATE) const { + return *getDelegateePtr(isolateID); } /// getDelegatee - Get a pointer on the java/lang/Class object /// representing this class. /// - JavaObject* const* getDelegateePtr() const { - return delegatee; + JavaObject* const* getDelegateePtr(isolate_id_t isolateID = CURRENT_ISOLATE) const { + return const_cast(this)->getDelegateePtr(isolateID); + } + JavaObject** getDelegateePtr(isolate_id_t isolateID = CURRENT_ISOLATE) { + return delegatee + JavaThread::getValidIsolateID(isolateID); } /// resolvedImplClass - Return the internal representation of the @@ -463,13 +470,13 @@ public: /// JavaConstantPool* ctpInfo; - /// attributs - JVM attributes of this class. + /// attributes - JVM attributes of this class. /// - Attribut* attributs; + JavaAttribute* attributes; - /// nbAttributs - The number of attributes. + /// nbAttributes - The number of attributes. /// - uint16 nbAttributs; + uint16 nbAttributes; /// innerClasses - The inner classes of this class. /// @@ -600,7 +607,7 @@ public: /// doNew - Allocates a Java object whose class is this class. /// - JavaObject* doNew(Jnjvm* vm); + JavaObject* doNew(Jnjvm* vm, isolate_id_t isolateID = CURRENT_ISOLATE); /// tracer - Tracer function of instances of Class. /// @@ -609,9 +616,9 @@ public: ~Class(); Class(); - /// lookupAttribut - Look up a JVM attribut of this class. + /// lookupAttribute - Look up a JVM attribute of this class. /// - Attribut* lookupAttribut(const UTF8* key); + JavaAttribute* lookupAttribute(const UTF8* key); /// allocateStaticInstance - Allocate the static instance of this class. /// @@ -630,9 +637,9 @@ public: /// void loadExceptions(); - /// readAttributs - Reads the attributs of the class. + /// readAttributes - Reads the attributes of the class. /// - Attribut* readAttributs(Reader& reader, uint16& size); + JavaAttribute* readAttributes(Reader& reader, uint16& size); /// readFields - Reads the fields of the class. /// @@ -693,89 +700,85 @@ public: /// isolate. /// TaskClassMirror& getCurrentTaskClassMirror() { - return IsolateInfo[0]; + return getTaskClassMirror(); } - + + TaskClassMirror& getTaskClassMirror(isolate_id_t isolateID = CURRENT_ISOLATE) { + return IsolateInfo[JavaThread::getValidIsolateID(isolateID)]; + } + /// isReadyForCompilation - Can this class be inlined when JITing? /// - bool isReadyForCompilation() { - return isReady(); + bool isReadyForCompilation(isolate_id_t isolateID = CURRENT_ISOLATE) { + return isReady(isolateID); } /// setResolved - Set the status of the class as resolved. - /// + /// Resolved state is common to all isolates void setResolved() { - getCurrentTaskClassMirror().status = resolved; + getTaskClassMirror(0).status = resolved; } + void setResolvedSynchronized(uint8 oldStatus, isolate_id_t isolateID = CURRENT_ISOLATE) { + TaskClassMirror& TCM = getTaskClassMirror(0); + __sync_val_compare_and_swap(&TCM.status, oldStatus, resolved); + } + /// setErroneous - Set the class as erroneous. /// void setErroneous() { getCurrentTaskClassMirror().status = erroneous; } - /// setIsResolving - The class file is being resolved. - /// - void setIsResolving() { - getCurrentTaskClassMirror().status = resolving; - } - /// getStaticInstance - Get the memory that holds static variables. /// - void* getStaticInstance() { - return getCurrentTaskClassMirror().staticInstance; + void* getStaticInstance(isolate_id_t isolateID = CURRENT_ISOLATE) { + return getTaskClassMirror(isolateID).staticInstance; } /// setStaticInstance - Set the memory that holds static variables. /// - void setStaticInstance(void* val) { - assert(getCurrentTaskClassMirror().staticInstance == NULL); - getCurrentTaskClassMirror().staticInstance = val; + void setStaticInstance(void* val, isolate_id_t isolateID = CURRENT_ISOLATE) { + TaskClassMirror& TCM = getTaskClassMirror(isolateID); + assert((val != NULL) && (TCM.staticInstance == NULL)); + TCM.staticInstance = val; } /// getInitializationState - Get the state of the class. /// - uint8 getInitializationState() { - return getCurrentTaskClassMirror().status; + uint8 getInitializationState(isolate_id_t isolateID = CURRENT_ISOLATE) { + return getTaskClassMirror(isolateID).status; } /// setInitializationState - Set the state of the class. /// - void setInitializationState(uint8 st) { - TaskClassMirror& TCM = getCurrentTaskClassMirror(); + void setInitializationState(uint8 st, isolate_id_t isolateID = CURRENT_ISOLATE) { + TaskClassMirror& TCM = getTaskClassMirror(isolateID); TCM.status = st; if (st == ready) TCM.initialized = true; } /// isReady - Has this class been initialized? /// - bool isReady() { - return getCurrentTaskClassMirror().status == ready; + bool isReady(isolate_id_t isolateID = CURRENT_ISOLATE) { + return getTaskClassMirror(isolateID).status == ready; } /// isInitializing - Is the class currently being initialized? /// - bool isInitializing() { - return getCurrentTaskClassMirror().status >= inClinit; - } + bool isInitializing(isolate_id_t isolateID = CURRENT_ISOLATE); /// isResolved - Has this class been resolved? /// - bool isResolved() { - uint8 stat = getCurrentTaskClassMirror().status; - return (stat >= resolved && stat != erroneous); + bool isResolved(isolate_id_t isolateID = CURRENT_ISOLATE) { + return (getTaskClassMirror(0).status >= resolved && + getTaskClassMirror(isolateID).status != erroneous); } /// isErroneous - Is the class in an erroneous state. /// - bool isErroneous() { - return getCurrentTaskClassMirror().status == erroneous; - } - - /// isResolving - Is the class currently being resolved? - /// - bool isResolving() { - return getCurrentTaskClassMirror().status == resolving; + bool isErroneous(isolate_id_t isolateID = CURRENT_ISOLATE) { + return getTaskClassMirror(isolateID).status == erroneous; } /// isNativeOverloaded - Is the method overloaded with a native function? @@ -784,7 +787,7 @@ public: /// needsInitialisationCheck - Does the method need an initialisation check? /// - bool needsInitialisationCheck(); + bool needsInitialisationCheck(isolate_id_t isolateID = CURRENT_ISOLATE); /// fillIMT - Fill the vector with vectors of methods with the same IMT /// index. @@ -877,13 +880,13 @@ public: /// uint16 access; - /// attributs - List of Java attributs of this method. + /// attributes - List of Java attributes of this method. /// - Attribut* attributs; + JavaAttribute* attributes; - /// nbAttributs - The number of attributes. + /// nbAttributes - The number of attributes. /// - uint16 nbAttributs; + uint16 nbAttributes; /// classDef - The Java class where the method is defined. /// @@ -909,10 +912,10 @@ public: /// uint32 offset; - /// lookupAttribut - Look up an attribut in the method's attributs. Returns - /// null if the attribut is not found. + /// lookupAttribute - Look up an attribute in the method's attributes. Returns + /// null if the attribute is not found. /// - Attribut* lookupAttribut(const UTF8* key); + JavaAttribute* lookupAttribute(const UTF8* key); /// lookupLineNumber - Find the line number based on the given frame info. /// @@ -923,7 +926,7 @@ public: /// uint16 lookupCtpIndex(vmkit::FrameInfo* FI); - /// getSignature - Get the signature of thes method, resolving it if + /// getSignature - Get the signature of the method, resolving it if /// necessary. /// Signdef* getSignature() { @@ -986,108 +989,123 @@ public: // //===----------------------------------------------------------------------===// - /// This class of methods takes a variable argument list. - uint32 invokeIntSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - float invokeFloatSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - double invokeDoubleSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - sint64 invokeLongSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - - uint32 invokeIntVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - float invokeFloatVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - double invokeDoubleVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - sint64 invokeLongVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - - uint32 invokeIntStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - float invokeFloatStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - double invokeDoubleStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - sint64 invokeLongStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - - /// This class of methods takes a buffer which contain the arguments of the - /// call. - uint32 invokeIntSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - float invokeFloatSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - double invokeDoubleSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - sint64 invokeLongSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - - uint32 invokeIntVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - float invokeFloatVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - double invokeDoubleVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - sint64 invokeLongVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - - uint32 invokeIntStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - float invokeFloatStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - double invokeDoubleStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - sint64 invokeLongStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - - /// This class of methods is variadic. - uint32 invokeIntSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - float invokeFloatSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - double invokeDoubleSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - sint64 invokeLongSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, - ...) __attribute__ ((noinline)); - - uint32 invokeIntVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - float invokeFloatVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - double invokeDoubleVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - sint64 invokeLongVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, - ...) __attribute__ ((noinline)); - - uint32 invokeIntStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - float invokeFloatStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - double invokeDoubleStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - sint64 invokeLongStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); +#define DO_TRY +#define DO_CATCH if (th->pendingException) { th->throwFromJava(); } + +private: + jvalue* marshalArguments(vmkit::ThreadAllocator& allocator, va_list& ap); + + template + TYPE invokeSpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) { + llvm_gcroot(obj, 0); + verifyNull(obj); + + void* func = this->compiledPtr(); + FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)getSignature()->getVirtualCallBuf(); + + JavaThread* th = JavaThread::get(); + th->startJava(); + TYPE res; + + DO_TRY + res = call(cl->getConstantPool(), func, obj, buf); + DO_CATCH + + th->endJava(); + return res; + } + + template + TYPE invokeVirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) { + UserCommonClass* theClass = JavaObject::getClass(obj); + UserClass* objCl = theClass->isArray() ? theClass->super : theClass->asClass(); + + JavaMethod* meth = this; + if ((objCl != classDef) && !isFinal(access)) { + meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); + assert(meth && "No method found"); + } + + assert(objCl->isSubclassOf(meth->classDef) && "Wrong type"); + + return meth->invokeSpecialBuf(vm, cl, obj, buf); + } + + template + TYPE invokeStaticBuf(Jnjvm* vm, UserClass* cl, void* buf) { + if (!cl->isReady()) { + cl->resolveClass(); + cl->initialiseClass(vm); + } + + void* func = this->compiledPtr(); + FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)getSignature()->getStaticCallBuf(); + + JavaThread* th = JavaThread::get(); + th->startJava(); + TYPE res; + + DO_TRY + res = call(cl->getConstantPool(), func, buf); + DO_CATCH + + th->endJava(); + return res; + } + + template + TYPE invokeVirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) { + llvm_gcroot(obj, 0); + verifyNull(obj); + + vmkit::ThreadAllocator allocator; + jvalue* buffer = marshalArguments(allocator, ap); + return invokeVirtualBuf(vm, cl, obj, buffer); + } + + template + TYPE invokeSpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) { + llvm_gcroot(obj, 0); + verifyNull(obj); + + vmkit::ThreadAllocator allocator; + jvalue* buffer = marshalArguments(allocator, ap); + return invokeSpecialBuf(vm, cl, obj, buffer); + } + + template + TYPE invokeStaticAP(Jnjvm* vm, UserClass* cl, va_list& ap) { + vmkit::ThreadAllocator allocator; + jvalue* buffer = marshalArguments(allocator, ap); + return invokeStaticBuf(vm, cl, buffer); + } + +#define JavaMethod_DECL_INVOKE_VA(TYPE, TYPE_NAME) \ + TYPE invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) __attribute__ ((noinline)); + +#define JavaMethod_DECL_INVOKE_AP(TYPE, TYPE_NAME) \ + TYPE invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list& ap) __attribute__ ((noinline)); + +#define JavaMethod_DECL_INVOKE_BUF(TYPE, TYPE_NAME) \ + TYPE invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) __attribute__ ((noinline)); + +#define JavaMethod_DECL_INVOKE(TYPE, TYPE_NAME) \ + JavaMethod_DECL_INVOKE_BUF(TYPE, TYPE_NAME) \ + JavaMethod_DECL_INVOKE_AP(TYPE, TYPE_NAME) \ + JavaMethod_DECL_INVOKE_VA(TYPE, TYPE_NAME) + +public: + JavaMethod_DECL_INVOKE(uint32_t, Int) + JavaMethod_DECL_INVOKE(int64_t, Long) + JavaMethod_DECL_INVOKE(float, Float) + JavaMethod_DECL_INVOKE(double, Double) + JavaMethod_DECL_INVOKE(JavaObject*, JavaObject) #define JNI_NAME_PRE "Java_" #define JNI_NAME_PRE_LEN 5 @@ -1104,11 +1122,11 @@ private: /// InitField - Set an initial value to the field. /// - void InitStaticField(uint64 val); - void InitStaticField(JavaObject* val); - void InitStaticField(double val); - void InitStaticField(float val); - void InitNullStaticField(); + void InitStaticField(uint64 val, isolate_id_t isolateID = CURRENT_ISOLATE); + void InitStaticField(JavaObject* val, isolate_id_t isolateID = CURRENT_ISOLATE); + void InitStaticField(double val, isolate_id_t isolateID = CURRENT_ISOLATE); + void InitStaticField(float val, isolate_id_t isolateID = CURRENT_ISOLATE); + void InitNullStaticField(isolate_id_t isolateID = CURRENT_ISOLATE); public: @@ -1132,13 +1150,13 @@ public: /// const UTF8* type; - /// attributs - List of Java attributs for this field. + /// attributes - List of Java attributes for this field. /// - Attribut* attributs; + JavaAttribute* attributes; - /// nbAttributs - The number of attributes. + /// nbAttributes - The number of attributes. /// - uint16 nbAttributs; + uint16 nbAttributes; /// classDef - The class where the field is defined. /// @@ -1167,13 +1185,13 @@ public: /// void InitStaticField(Jnjvm* vm); - /// lookupAttribut - Look up the attribut in the field's list of attributs. + /// lookupAttribute - Look up the attribute in the field's list of attributes. /// - Attribut* lookupAttribut(const UTF8* key); + JavaAttribute* lookupAttribute(const UTF8* key); - JavaObject** getStaticObjectFieldPtr() { - assert(classDef->getStaticInstance()); - return (JavaObject**)((uint64)classDef->getStaticInstance() + ptrOffset); + JavaObject** getStaticObjectFieldPtr(isolate_id_t isolateID = CURRENT_ISOLATE) { + assert(classDef->getStaticInstance(isolateID)); + return (JavaObject**)((uint64)classDef->getStaticInstance(isolateID) + ptrOffset); } JavaObject** getInstanceObjectFieldPtr(JavaObject* obj) { @@ -1181,74 +1199,89 @@ public: return (JavaObject**)((uint64)obj + ptrOffset); } +private: /// getStatic*Field - Get a static field. /// - #define GETSTATICFIELD(TYPE, TYPE_NAME) \ - TYPE getStatic##TYPE_NAME##Field() { \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ - return ((TYPE*)ptr)[0]; \ - } + template + TYPE getStaticField(isolate_id_t isolateID) { + assert(classDef->isResolved(isolateID)); + void* ptr = (void*)((uint64)classDef->getStaticInstance(isolateID) + ptrOffset); + return *static_cast(ptr); + } + + /* + The struct FieldSetter is a workaround in C++ to enable + template-based method specialization in a non-template + class. See specialization below the class declaration. + */ + template + struct FieldSetter { + /// setStatic*Field - Set a field of an object. + /// + static void setStaticField(const JavaField* field, TYPE val, isolate_id_t isolateID) { + assert(field->classDef->isResolved(isolateID)); + void* ptr = (void*)((uint64)field->classDef->getStaticInstance(isolateID) + field->ptrOffset); + *static_cast(ptr) = val; + } + + /// setInstance*Field - Set an instance field. + /// + static void setInstanceField(const JavaField* field, JavaObject* obj, TYPE val) { + llvm_gcroot(obj, 0); + assert(field->classDef->isResolved()); + void* ptr = (void*)((uint64)obj + field->ptrOffset); + *static_cast(ptr) = val; + } + }; /// setStatic*Field - Set a field of an object. /// - #define SETSTATICFIELD(TYPE, TYPE_NAME) \ - void setStatic##TYPE_NAME##Field(TYPE val) { \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ - ((TYPE*)ptr)[0] = val; \ + template + void setStaticField(TYPE val, isolate_id_t isolateID) { + FieldSetter::setStaticField(this, val, isolateID); } /// getInstance*Field - Get an instance field. /// - #define GETINSTANCEFIELD(TYPE, TYPE_NAME) \ - TYPE getInstance##TYPE_NAME##Field(JavaObject* obj) { \ - llvm_gcroot(obj, 0); \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)obj + ptrOffset); \ - return ((TYPE*)ptr)[0]; \ - } \ - - /// setInstance*Field - Set an instance field. - /// - #define SETINSTANCEFIELD(TYPE, TYPE_NAME) \ - void setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \ - llvm_gcroot(obj, 0); \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)obj + ptrOffset); \ - ((TYPE*)ptr)[0] = val; \ - } - - #define MK_ASSESSORS(TYPE, TYPE_NAME) \ - GETSTATICFIELD(TYPE, TYPE_NAME) \ - SETSTATICFIELD(TYPE, TYPE_NAME) \ - GETINSTANCEFIELD(TYPE, TYPE_NAME) \ - SETINSTANCEFIELD(TYPE, TYPE_NAME) \ - - MK_ASSESSORS(float, Float) - MK_ASSESSORS(double, Double) - MK_ASSESSORS(uint8, Int8) - MK_ASSESSORS(uint16, Int16) - MK_ASSESSORS(uint32, Int32) - MK_ASSESSORS(sint64, Long) - - JavaObject* getStaticObjectField() { - assert(classDef->isResolved()); - void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); - return ((JavaObject**)ptr)[0]; - } - - void setStaticObjectField(JavaObject* val); - - JavaObject* getInstanceObjectField(JavaObject* obj) { + template + TYPE getInstanceField(JavaObject* obj) { llvm_gcroot(obj, 0); assert(classDef->isResolved()); void* ptr = (void*)((uint64)obj + ptrOffset); - return ((JavaObject**)ptr)[0]; + return *static_cast(ptr); } - // This can't be inlined because of a linker bug. - void setInstanceObjectField(JavaObject* obj, JavaObject* val); + /// setInstance*Field - Set an instance field. + /// + template + void setInstanceField(JavaObject* obj, TYPE val) { + FieldSetter::setInstanceField(this, obj, val); + } + +#define JavaField_DECL_ASSESSORS(TYPE, TYPE_NAME) \ + TYPE getStatic##TYPE_NAME##Field(isolate_id_t isolateID = CURRENT_ISOLATE); \ + void setStatic##TYPE_NAME##Field(TYPE val, isolate_id_t isolateID = CURRENT_ISOLATE); \ + TYPE getInstance##TYPE_NAME##Field(JavaObject* obj); \ + void setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val); + +#define JavaField_IMPL_ASSESSORS(TYPE, TYPE_NAME) \ + TYPE JavaField::getStatic##TYPE_NAME##Field(isolate_id_t isolateID) { \ + return getStaticField(isolateID);} \ + void JavaField::setStatic##TYPE_NAME##Field(TYPE val, isolate_id_t isolateID) { \ + return setStaticField(val, isolateID);} \ + TYPE JavaField::getInstance##TYPE_NAME##Field(JavaObject* obj) { \ + return this->getInstanceField(obj);} \ + void JavaField::setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \ + return this->setInstanceField(obj, val);} + +public: + JavaField_DECL_ASSESSORS(float, Float) + JavaField_DECL_ASSESSORS(double, Double) + JavaField_DECL_ASSESSORS(uint8, Int8) + JavaField_DECL_ASSESSORS(uint16, Int16) + JavaField_DECL_ASSESSORS(uint32, Int32) + JavaField_DECL_ASSESSORS(sint64, Long) + JavaField_DECL_ASSESSORS(JavaObject*, Object) bool isReference() { uint16 val = type->elements[0]; @@ -1289,6 +1322,28 @@ public: }; +// Specialization for TYPE=JavaObject* +template<> +struct JavaField::FieldSetter { + + static void setStaticField(const JavaField* field, JavaObject* val, isolate_id_t isolateID = CURRENT_ISOLATE) { + llvm_gcroot(val, 0); + if (val != NULL) assert(val->getVirtualTable()); + assert(field->classDef->isResolved(isolateID)); + JavaObject** ptr = (JavaObject**)((uint64)field->classDef->getStaticInstance(isolateID) + field->ptrOffset); + vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); + } + + static void setInstanceField(const JavaField* field, JavaObject* obj, JavaObject* val) { + llvm_gcroot(obj, 0); + llvm_gcroot(val, 0); + if (val != NULL) assert(val->getVirtualTable()); + assert(field->classDef->isResolved()); + JavaObject** ptr = (JavaObject**)((uint64)obj + field->ptrOffset); + vmkit::Collector::objectReferenceWriteBarrier((gc*)obj, (gc**)ptr, (gc*)val); + } +}; + } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp Thu Apr 25 11:46:36 2013 @@ -157,6 +157,7 @@ uint32 JavaConstantPool::CtpReaderDouble void* JavaConstantPool::operator new(size_t sz, vmkit::BumpPtrAllocator& allocator, uint32 ctpSize) { + // NOTICE: 'size' is not the final size of the object, as it does more allocations in the constructor uint32 size = sz + ctpSize * (sizeof(void*) + sizeof(sint32) + sizeof(uint8)); return allocator.Allocate(size, "Constant pool"); } @@ -176,6 +177,14 @@ JavaConstantPool::JavaConstantPool(Class while (cur < ctpSize) { uint8 curType = reader.readU1(); ctpType[cur] = curType; + + // 'ctpRes' entries corresponding to 'ConstantString' types are pointers to arrays of values + // corresponding to different isolates. + if (ctpType[cur] == ConstantString) { + ctpRes[cur] = classDef->classLoader->allocator.Allocate(sizeof(void *) * NR_ISOLATES, NULL); + memset(ctpRes[cur], 0, sizeof(void *) * NR_ISOLATES); + } + cur += ((funcsReader[curType])(this, reader, cur)); } } @@ -187,7 +196,7 @@ const UTF8* JavaConstantPool::UTF8At(uin abort(); } - if (!ctpRes[entry]) { + if (!getCachedValue(entry)) { vmkit::ThreadAllocator allocator; Reader reader(classDef->bytes, ctpDef[entry]); uint32 len = reader.readU2(); @@ -219,13 +228,13 @@ const UTF8* JavaConstantPool::UTF8At(uin JnjvmClassLoader* loader = classDef->classLoader; const UTF8* utf8 = loader->hashUTF8->lookupOrCreateReader(buf, n); - ctpRes[entry] = const_cast(utf8); + updateCachedValue(entry, const_cast(utf8)); PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] \t\t\"%s\"\n", entry, UTF8Buffer(utf8)->cString()); } - return (const UTF8*)ctpRes[entry]; + return (const UTF8*)getCachedValue(entry); } float JavaConstantPool::FloatAt(uint32 entry) { @@ -271,12 +280,12 @@ CommonClass* JavaConstantPool::isClassLo abort(); } - CommonClass* res = (CommonClass*)ctpRes[entry]; + CommonClass* res = (CommonClass*)getCachedValue(entry); if (res == NULL) { JnjvmClassLoader* loader = classDef->classLoader; const UTF8* name = UTF8At(ctpDef[entry]); res = loader->lookupClassOrArray(name); - ctpRes[entry] = res; + updateCachedValue(entry, res); } return res; } @@ -297,7 +306,7 @@ CommonClass* JavaConstantPool::loadClass } else { temp = loader->loadName(name, resolve, false, NULL); } - ctpRes[index] = temp; + updateCachedValue(index, temp); } else if (resolve && temp->isClass()) { temp->asClass()->resolveClass(); } @@ -319,7 +328,7 @@ CommonClass* JavaConstantPool::getMethod } Typedef* JavaConstantPool::resolveNameAndType(uint32 index) { - void* res = ctpRes[index]; + void* res = getCachedValue(index); if (!res) { if (typeAt(index) != ConstantNameAndType) { fprintf(stderr, "Malformed class %s\n", @@ -329,14 +338,14 @@ Typedef* JavaConstantPool::resolveNameAn sint32 entry = ctpDef[index]; const UTF8* type = UTF8At(entry & 0xFFFF); Typedef* sign = classDef->classLoader->constructType(type); - ctpRes[index] = sign; + updateCachedValue(index, sign); return sign; } return (Typedef*)res; } Signdef* JavaConstantPool::resolveNameAndSign(uint32 index) { - void* res = ctpRes[index]; + void* res = getCachedValue(index); if (!res) { if (typeAt(index) != ConstantNameAndType) { fprintf(stderr, "Malformed class %s\n", @@ -346,7 +355,7 @@ Signdef* JavaConstantPool::resolveNameAn sint32 entry = ctpDef[index]; const UTF8* type = UTF8At(entry & 0xFFFF); Signdef* sign = classDef->classLoader->constructSign(type); - ctpRes[index] = sign; + updateCachedValue(index, sign); return sign; } return (Signdef*)res; @@ -471,7 +480,7 @@ void JavaConstantPool::resolveMethod(uin const UTF8*& utf8, Signdef*& sign) { sint32 entry = ctpDef[index]; sint32 ntIndex = entry & 0xFFFF; - sign = (Signdef*)ctpRes[ntIndex]; + sign = (Signdef*)getCachedValue(ntIndex); assert(sign && "No cached signature after JITting"); utf8 = UTF8At(ctpDef[ntIndex] >> 16); cl = loadClass(entry >> 16); @@ -484,7 +493,7 @@ void JavaConstantPool::resolveField(uint const UTF8*& utf8, Typedef*& sign) { sint32 entry = ctpDef[index]; sint32 ntIndex = entry & 0xFFFF; - sign = (Typedef*)ctpRes[ntIndex]; + sign = (Typedef*)getCachedValue(ntIndex); assert(sign && "No cached Typedef after JITting"); utf8 = UTF8At(ctpDef[ntIndex] >> 16); cl = loadClass(entry >> 16); @@ -496,7 +505,7 @@ void JavaConstantPool::resolveField(uint JavaField* JavaConstantPool::lookupField(uint32 index, bool stat) { sint32 entry = ctpDef[index]; sint32 ntIndex = entry & 0xFFFF; - Typedef* sign = (Typedef*)ctpRes[ntIndex]; + Typedef* sign = (Typedef*)getCachedValue(ntIndex); const UTF8* utf8 = UTF8At(ctpDef[ntIndex] >> 16); CommonClass* cl = getMethodClassIfLoaded(entry >> 16); if (cl) { @@ -507,10 +516,10 @@ JavaField* JavaConstantPool::lookupField // don't throw if no field, the exception will be thrown just in time if (field) { if (!stat) { - ctpRes[index] = (void*)field->ptrOffset; + updateCachedValue(index, (void*)field->ptrOffset); } else if (lookup->isReady()) { void* S = field->classDef->getStaticInstance(); - ctpRes[index] = (void*)((uint64)S + field->ptrOffset); + updateCachedValue(index, (void*)((uint64)S + field->ptrOffset)); } } return field; @@ -527,6 +536,24 @@ JavaString* JavaConstantPool::resolveStr return str; } +void** JavaConstantPool::getCachedValuePtr(uint32_t index, isolate_id_t isolateID) +{ + assert(index < ctpSize && "Invalid constant index"); + void **entry = ctpRes + index; + if (ctpType[index] != ConstantString) return entry; + + isolateID = JavaThread::getValidIsolateID(isolateID); + void ** stringArray = reinterpret_cast(*entry); + return stringArray + isolateID; +} + +void* JavaConstantPool::updateCachedValue(uint32_t index, void* newValue, isolate_id_t isolateID) { + void** valuePtr = getCachedValuePtr(index, isolateID); + void* oldValue = *valuePtr; + *valuePtr = newValue; + return oldValue; +} + JavaConstantPool::ctpReader JavaConstantPool::funcsReader[16] = { unimplemented, CtpReaderUTF8, Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h Thu Apr 25 11:46:36 2013 @@ -49,11 +49,13 @@ public: /// sint32* ctpDef; +private: /// ctpRes - Objects resolved dynamically, e.g. UTF8s, classes, methods, /// fields, string pointers. /// void** ctpRes; +public: /// operator new - Redefine the operator to allocate the arrays of a /// constant pool inline. void* operator new(size_t sz, vmkit::BumpPtrAllocator& allocator, @@ -257,6 +259,23 @@ public: /// ~JavaConstantPool - Delete the constant pool. /// ~JavaConstantPool() {} + +protected: + void** getCachedValuePtr(uint32_t index, isolate_id_t isolateID = CURRENT_ISOLATE); + +public: + void* getCachedValue(uint32_t index, isolate_id_t isolateID = CURRENT_ISOLATE) { + return *getCachedValuePtr(index, isolateID); + } + + /// This returns the old contents before updating + void* updateCachedValueSynchronized(uint32_t index, void* newValue, void* oldValue, isolate_id_t isolateID = CURRENT_ISOLATE) { + void** valuePtr = getCachedValuePtr(index, isolateID); + return __sync_val_compare_and_swap(valuePtr, oldValue, newValue); + } + + /// This returns the old contents before updating + void* updateCachedValue(uint32_t index, void* newValue, isolate_id_t isolateID = CURRENT_ISOLATE); }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp Thu Apr 25 11:46:36 2013 @@ -23,260 +23,88 @@ using namespace j3; -#define readArgs(buf, signature, ap, jni) { \ - jvalue* buffer = (jvalue*)buf; \ - Typedef* const* arguments = signature->getArgumentsType(); \ - for (uint32 i = 0; i < signature->nbArguments; ++i) { \ - const Typedef* type = arguments[i];\ - if (type->isPrimitive()) {\ - const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type;\ - if (prim->isLong()) {\ - buffer[i].j = va_arg(ap, sint64);\ - } else if (prim->isInt()){ \ - buffer[i].i = va_arg(ap, sint32);\ - } else if (prim->isChar()) { \ - buffer[i].c = va_arg(ap, uint32);\ - } else if (prim->isShort()) { \ - buffer[i].s = va_arg(ap, sint32);\ - } else if (prim->isByte()) { \ - buffer[i].b = va_arg(ap, sint32);\ - } else if (prim->isBool()) { \ - buffer[i].z = va_arg(ap, uint32);\ - } else if (prim->isFloat()) {\ - buffer[i].f = (float)va_arg(ap, double);\ - } else if (prim->isDouble()) {\ - buffer[i].d = va_arg(ap, double);\ - } else {\ - fprintf(stderr, "Can't happen");\ - abort();\ - }\ - } else{\ - buffer[i].l = reinterpret_cast(va_arg(ap, JavaObject**));\ - }\ - }\ -} - -#define DO_TRY -#define DO_CATCH if (th->pendingException) { th->throwFromJava(); } - //===----------------------------------------------------------------------===// // We do not need to have special care on the GC-pointers in the buffer // manipulated in these functions because the objects in the buffer are // addressed and never stored directly. //===----------------------------------------------------------------------===// -#if 1 // VA_ARGS do not work on all platforms for LLVM. -#define INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -\ -TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \ - llvm_gcroot(obj, 0); \ - verifyNull(obj); \ - Signdef* sign = getSignature(); \ - vmkit::ThreadAllocator allocator; \ - jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ - readArgs(buf, sign, ap, jni); \ - return invoke##TYPE_NAME##VirtualBuf(vm, cl, obj, buf); \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj); \ - Signdef* sign = getSignature(); \ - vmkit::ThreadAllocator allocator; \ - jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ - readArgs(buf, sign, ap, jni); \ - return invoke##TYPE_NAME##SpecialBuf(vm, cl, obj, buf); \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) {\ - Signdef* sign = getSignature(); \ - vmkit::ThreadAllocator allocator; \ - jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ - readArgs(buf, sign, ap, jni); \ - return invoke##TYPE_NAME##StaticBuf(vm, cl, buf); \ -} - -#else - -#define INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \ - llvm_gcroot(obj, 0); \ - verifyNull(obj); \ - UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ - if (objCl == classDef || isFinal(access)) { \ - meth = this; \ - } else { \ - meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \ - } \ - assert(meth && "No method found"); \ - void* func = meth->compiledPtr(); \ - Signdef* sign = getSignature(); \ - FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, ap);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj);\ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, ap);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) {\ - if (!cl->isReady()) { \ - cl->resolveClass(); \ - cl->initialiseClass(vm); \ - } \ - \ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_STATIC_AP call = (FUNC_TYPE_STATIC_AP)sign->getStaticCallAP(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, ap);\ - DO_CATCH \ - th->endJava(); \ - return res; \ +jvalue* JavaMethod::marshalArguments(vmkit::ThreadAllocator& allocator, va_list& ap) +{ + Signdef* signature = getSignature(); + if (signature->nbArguments == 0) return NULL; //Zero arguments + + Typedef* const* arguments = signature->getArgumentsType(); + + jvalue* buffer = (jvalue*)allocator.Allocate(signature->nbArguments * sizeof(jvalue)); + + for (uint32 i = 0; i < signature->nbArguments; ++i) { + const Typedef* type = arguments[i]; + + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + + if (prim->isLong()) buffer[i].j = va_arg(ap, sint64); + else if (prim->isInt()) buffer[i].i = va_arg(ap, sint32); + else if (prim->isChar()) buffer[i].c = va_arg(ap, uint32); + else if (prim->isShort()) buffer[i].s = va_arg(ap, sint32); + else if (prim->isByte()) buffer[i].b = va_arg(ap, sint32); + else if (prim->isBool()) buffer[i].z = va_arg(ap, uint32); + else if (prim->isFloat()) buffer[i].f = (float)va_arg(ap, double); + else if (prim->isDouble()) buffer[i].d = va_arg(ap, double); + else assert(0 && "Unknown primitive type."); + } else + buffer[i].l = reinterpret_cast(va_arg(ap, JavaObject**)); + } + return buffer; } -#endif - -#define INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj);\ - Signdef* sign = getSignature(); \ - UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ - JavaMethod* meth = NULL; \ - if (objCl == classDef || isFinal(access)) { \ - meth = this; \ - } else { \ - meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \ - } \ - assert(meth && "No method found"); \ - assert(objCl->isSubclassOf(meth->classDef) && "Wrong type"); \ - void* func = meth->compiledPtr(); \ - FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, buf);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj);\ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, buf);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) {\ - if (!cl->isReady()) { \ - cl->resolveClass(); \ - cl->initialiseClass(vm); \ - } \ - \ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)sign->getStaticCallBuf(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, buf);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ - -#define INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ - llvm_gcroot(obj, 0); \ - va_list ap;\ - va_start(ap, obj);\ - TYPE res = invoke##TYPE_NAME##VirtualAP(vm, cl, obj, ap);\ - va_end(ap); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) {\ - llvm_gcroot(obj, 0); \ - va_list ap;\ - va_start(ap, obj);\ - TYPE res = invoke##TYPE_NAME##SpecialAP(vm, cl, obj, ap);\ - va_end(ap); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) {\ - va_list ap;\ - va_start(ap, cl);\ - TYPE res = invoke##TYPE_NAME##StaticAP(vm, cl, ap);\ - va_end(ap); \ - return res; \ -}\ - -#define INVOKE(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) - -typedef uint32 (*uint32_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef sint64 (*sint64_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef float (*float_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef double (*double_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef JavaObject* (*object_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); - -typedef uint32 (*uint32_static_ap)(UserConstantPool*, void*, va_list); -typedef sint64 (*sint64_static_ap)(UserConstantPool*, void*, va_list); -typedef float (*float_static_ap)(UserConstantPool*, void*, va_list); -typedef double (*double_static_ap)(UserConstantPool*, void*, va_list); -typedef JavaObject* (*object_static_ap)(UserConstantPool*, void*, va_list); - -typedef uint32 (*uint32_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef sint64 (*sint64_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef float (*float_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef double (*double_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef JavaObject* (*object_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); - -typedef uint32 (*uint32_static_buf)(UserConstantPool*, void*, void*); -typedef sint64 (*sint64_static_buf)(UserConstantPool*, void*, void*); -typedef float (*float_static_buf)(UserConstantPool*, void*, void*); -typedef double (*double_static_buf)(UserConstantPool*, void*, void*); -typedef JavaObject* (*object_static_buf)(UserConstantPool*, void*, void*); - -INVOKE(uint32, Int, uint32_virtual_ap, uint32_static_ap, uint32_virtual_buf, uint32_static_buf) -INVOKE(sint64, Long, sint64_virtual_ap, sint64_static_ap, sint64_virtual_buf, sint64_static_buf) -INVOKE(float, Float, float_virtual_ap, float_static_ap, float_virtual_buf, float_static_buf) -INVOKE(double, Double, double_virtual_ap, double_static_ap, double_virtual_buf, double_static_buf) -INVOKE(JavaObject*, JavaObject, object_virtual_ap, object_static_ap, object_virtual_buf, object_static_buf) +#define JavaMethod_INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ + llvm_gcroot(obj, 0); \ + va_list ap; \ + va_start(ap, obj); \ + TYPE res = invokeVirtualAP(vm, cl, obj, ap); \ + va_end(ap); \ + return res; \ + } \ + TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ + llvm_gcroot(obj, 0); \ + va_list ap; \ + va_start(ap, obj); \ + TYPE res = invokeSpecialAP(vm, cl, obj, ap); \ + va_end(ap); \ + return res; \ + } \ + TYPE JavaMethod::invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) { \ + va_list ap; \ + va_start(ap, cl); \ + TYPE res = invokeStaticAP(vm, cl, ap); \ + va_end(ap); \ + return res; \ + } + +#define JavaMethod_INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) {return invokeVirtualAP(vm, cl, obj, ap);} \ + TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) {return invokeSpecialAP(vm, cl, obj, ap);} \ + TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list& ap) {return invokeStaticAP(vm, cl, ap);} + +#define JavaMethod_INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {return invokeVirtualBuf(vm, cl, obj, buf);} \ + TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {return invokeSpecialBuf(vm, cl, obj, buf);} \ + TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) {return invokeStaticBuf(vm, cl, buf);} + +#define JavaMethod_INVOKE(TYPE, TYPE_NAME) \ + typedef TYPE (* func_virtual_ap_##TYPE_NAME)(UserConstantPool*, void*, JavaObject*, va_list); \ + typedef TYPE (* func_static_ap_##TYPE_NAME)(UserConstantPool*, void*, va_list); \ + typedef TYPE (* func_virtual_buf_##TYPE_NAME)(UserConstantPool*, void*, JavaObject*, void*); \ + typedef TYPE (* func_static_buf_##TYPE_NAME)(UserConstantPool*, void*, void*); \ + JavaMethod_INVOKE_AP(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) \ + JavaMethod_INVOKE_BUF(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) \ + JavaMethod_INVOKE_VA(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) + +JavaMethod_INVOKE(uint32, Int) +JavaMethod_INVOKE(sint64, Long) +JavaMethod_INVOKE(float, Float) +JavaMethod_INVOKE(double, Double) +JavaMethod_INVOKE(JavaObject*, JavaObject) Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 11:46:36 2013 @@ -68,7 +68,7 @@ uint32_t JavaObject::hashCode(JavaObject void JavaObject::waitIntern( - JavaObject* self, struct timeval* info, bool timed) { + JavaObject* self, struct timeval* info, bool& timed) { llvm_gcroot(self, 0); JavaThread* thread = JavaThread::get(); vmkit::LockSystem& table = thread->getJVM()->lockSystem; @@ -88,15 +88,18 @@ void JavaObject::waitIntern( void JavaObject::wait(JavaObject* self) { llvm_gcroot(self, 0); - waitIntern(self, NULL, false); + bool timeout = false; + waitIntern(self, NULL, timeout); } -void JavaObject::timedWait(JavaObject* self, struct timeval& info) { +bool JavaObject::timedWait(JavaObject* self, struct timeval& info) { llvm_gcroot(self, 0); - waitIntern(self, &info, true); + bool timeout = true; + waitIntern(self, &info, timeout); + return !timeout; //Return false if timed out } -void JavaObject::wait(JavaObject* self, int64_t ms, int32_t ns) { +bool JavaObject::wait(JavaObject* self, int64_t ms, int32_t ns) { llvm_gcroot(self, 0); Jnjvm* vm = JavaThread::get()->getJVM(); @@ -112,9 +115,10 @@ void JavaObject::wait(JavaObject* self, struct timeval t; t.tv_sec = sec; t.tv_usec = usec; - JavaObject::timedWait(self, t); + return JavaObject::timedWait(self, t); } else { JavaObject::wait(self); + return true; } } Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.h Thu Apr 25 11:46:36 2013 @@ -233,7 +233,7 @@ private: /// waitIntern - internal wait on a monitor /// - static void waitIntern(JavaObject* self, struct timeval *info, bool timed); + static void waitIntern(JavaObject* self, struct timeval *info, bool& timed); public: @@ -255,11 +255,11 @@ public: /// timedWait - Java timed wait. Makes the current thread waiting on a /// monitor for the given amount of time. /// - static void timedWait(JavaObject* self, struct timeval &info); + static bool timedWait(JavaObject* self, struct timeval &info); /// wait - Wait for specified ms and ns. Wrapper for either wait() or /// timedWait, depending on duration specified. - static void wait(JavaObject* self, int64_t ms, int32_t ns); + static bool wait(JavaObject* self, int64_t ms, int32_t ns); /// notify - Java notify. Notifies a thread from the availability of the /// monitor. Modified: vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp Thu Apr 25 11:46:36 2013 @@ -8,7 +8,9 @@ // //===----------------------------------------------------------------------===// +#include +#include "Classpath.h" #include "ClasspathReflect.h" #include "JavaArray.h" #include "JavaClass.h" @@ -25,13 +27,30 @@ using namespace j3; +extern "C" UserCommonClass* j3RuntimeInitialiseClass(UserClass*); + +extern "C" UserClass* j3InitialisationCheck(UserClass* cl) +{ + if (!cl->isClass()) return cl; + if (!cl->isInitializing()) + cl = j3RuntimeInitialiseClass(cl)->asClass(); + return cl; +} + +extern "C" UserClass* j3InitialisationCheckForJavaObject(JavaObject* obj) +{ + CommonClass* ccl = JavaObject::getClass(obj); + if (!ccl->isClass()) return NULL; + return j3InitialisationCheck(ccl->asClass()); +} + extern "C" void* j3InterfaceLookup(UserClass* caller, uint32 index) { void* res = 0; UserConstantPool* ctpInfo = caller->getConstantPool(); - if (ctpInfo->ctpRes[index]) { - res = ctpInfo->ctpRes[index]; + if (ctpInfo->getCachedValue(index)) { + res = ctpInfo->getCachedValue(index); } else { UserCommonClass* cl = 0; const UTF8* utf8 = 0; @@ -41,7 +60,7 @@ extern "C" void* j3InterfaceLookup(UserC assert(cl->isClass() && isInterface(cl->access) && "Wrong type of method"); res = cl->asClass()->lookupInterfaceMethod(utf8, sign->keyName); - ctpInfo->ctpRes[index] = (void*)res; + ctpInfo->updateCachedValue(index, res); } return res; } @@ -52,8 +71,8 @@ extern "C" void* j3VirtualFieldLookup(Us void* res = 0; UserConstantPool* ctpInfo = caller->getConstantPool(); - if (ctpInfo->ctpRes[index]) { - res = ctpInfo->ctpRes[index]; + if (ctpInfo->getCachedValue(index)) { + res = ctpInfo->getCachedValue(index); } else { UserCommonClass* cl = 0; @@ -65,7 +84,7 @@ extern "C" void* j3VirtualFieldLookup(Us UserClass* lookup = cl->isArray() ? cl->super : cl->asClass(); JavaField* field = lookup->lookupField(utf8, sign->keyName, false, true, 0); - ctpInfo->ctpRes[index] = (void*)field->ptrOffset; + ctpInfo->updateCachedValue(index, (void*)field->ptrOffset); res = (void*)field->ptrOffset; } @@ -80,8 +99,8 @@ extern "C" void* j3StaticFieldLookup(Use UserConstantPool* ctpInfo = caller->getConstantPool(); - if (ctpInfo->ctpRes[index]) { - res = ctpInfo->ctpRes[index]; + if (ctpInfo->getCachedValue(index)) { + res = ctpInfo->getCachedValue(index); } else { UserCommonClass* cl = 0; @@ -101,7 +120,7 @@ extern "C" void* j3StaticFieldLookup(Use assert(obj && "No static instance in static field lookup"); void* ptr = (void*)((uint64)obj + field->ptrOffset); - ctpInfo->ctpRes[index] = ptr; + ctpInfo->updateCachedValue(index, ptr); res = ptr; } @@ -173,8 +192,9 @@ extern "C" void* j3ClassLookup(UserClass // Calls Java code. // Throws if initializing the class throws an exception. extern "C" UserCommonClass* j3RuntimeInitialiseClass(UserClass* cl) { + Jnjvm* vm = JavaThread::get()->getJVM(); cl->resolveClass(); - cl->initialiseClass(JavaThread::get()->getJVM()); + cl->initialiseClass(vm); return cl; } @@ -183,6 +203,10 @@ extern "C" JavaObject* j3RuntimeDelegate return cl->getClassDelegatee(JavaThread::get()->getJVM()); } +extern "C" JavaObject** j3RuntimeDelegateePtr(UserCommonClass* cl) { + return const_cast(cl->getClassDelegateePtr(JavaThread::get()->getJVM())); +} + // Throws if one of the dimension is negative. JavaObject* multiCallNewIntern(UserClassArray* cl, uint32 len, sint32* dims, Jnjvm* vm) { @@ -266,13 +290,13 @@ extern "C" void j3EndJNI(uint32** oldLRN th->currentAddedReferences = *oldLRN; } -extern "C" word_t j3StartJNI(uint32* localReferencesNumber, +extern "C" void* j3StartJNI(uint32* localReferencesNumber, uint32** oldLocalReferencesNumber, vmkit::KnownFrame* Frame) __attribute__((noinline)); // Never throws. Does not call Java code. Can not yield a GC. May join a GC. -extern "C" word_t j3StartJNI(uint32* localReferencesNumber, +extern "C" void* j3StartJNI(uint32* localReferencesNumber, uint32** oldLocalReferencesNumber, vmkit::KnownFrame* Frame) { @@ -359,7 +383,7 @@ extern "C" void* j3StringLookup(UserClas UserConstantPool* ctpInfo = cl->getConstantPool(); const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[index]); str = cl->classLoader->UTF8ToStr(utf8); - ctpInfo->ctpRes[index] = str; + ctpInfo->updateCachedValue(index, str); return (void*)str; } @@ -453,7 +477,7 @@ extern "C" void* j3ResolveStaticStub() { result = callee->compiledPtr(); // Update the entry in the constant pool. - ctpInfo->ctpRes[ctpIndex] = result; + ctpInfo->updateCachedValue(ctpIndex, result); return result; } @@ -494,7 +518,7 @@ extern "C" void* j3ResolveSpecialStub() result = callee->compiledPtr(); // Update the entry in the constant pool. - ctpInfo->ctpRes[ctpIndex] = result; + ctpInfo->updateCachedValue(ctpIndex, result); return result; } @@ -502,7 +526,10 @@ extern "C" void* j3ResolveSpecialStub() // Does not throw an exception. extern "C" void* j3ResolveInterface(JavaObject* obj, JavaMethod* meth, uint32_t index) { word_t result = 0; - InterfaceMethodTable* IMT = JavaObject::getClass(obj)->virtualVT->IMT; + UserClass* cl = j3InitialisationCheckForJavaObject(obj); + assert(cl && "Invalid class of JavaObject"); + + InterfaceMethodTable* IMT = cl->virtualVT->IMT; if ((IMT->contents[index] & 1) == 0) { result = IMT->contents[index]; } else { @@ -525,15 +552,42 @@ extern "C" void* j3ResolveInterface(Java } extern "C" void j3PrintMethodStart(JavaMethod* meth) { - fprintf(stderr, "[%p] executing %s.%s\n", (void*)vmkit::Thread::get(), - UTF8Buffer(meth->classDef->name).cString(), - UTF8Buffer(meth->name).cString()); +#if JNJVM_EXECUTE > 0 + JavaThread *thread = JavaThread::get(); + char tab_level[10240]; + + assert((thread->call_level < sizeof(tab_level)/sizeof(tab_level[0])) && "Too deep call level to be logged!"); + + memset(tab_level, ' ', thread->call_level); + tab_level[thread->call_level++] = '\0'; + +// uint16_t c = meth->classDef->name->elements[0]; +// if (c != 'i') return; + + std::ostringstream log; + log << '[' << *thread << ']' << tab_level << " call " << + *meth->classDef->name << '.' << *meth->name << std::endl; + std::cerr << log.str(); +#endif } extern "C" void j3PrintMethodEnd(JavaMethod* meth) { - fprintf(stderr, "[%p] return from %s.%s\n", (void*)vmkit::Thread::get(), - UTF8Buffer(meth->classDef->name).cString(), - UTF8Buffer(meth->name).cString()); +#if JNJVM_EXECUTE > 0 + JavaThread *thread = JavaThread::get(); + char tab_level[10240]; + + thread->call_level--; + memset(tab_level, ' ', thread->call_level); + tab_level[thread->call_level] = '\0'; + +// uint16_t c = meth->classDef->name->elements[0]; +// if (c != 'i') return; + + std::ostringstream log; + log << '[' << *thread << ']' << tab_level << " ret " << + *meth->classDef->name << '.' << *meth->name << std::endl; + std::cerr << log.str(); +#endif } extern "C" void j3PrintExecution(uint32 opcode, uint32 index, @@ -543,3 +597,50 @@ extern "C" void j3PrintExecution(uint32 UTF8Buffer(meth->name).cString(), OpcodeNames[opcode], index); } + +extern "C" void* j3GetCachedValue(UserClass* cl, uint32 index, isolate_id_t isolateID) +{ + return cl->ctpInfo->getCachedValue(index, isolateID); +} + +extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID) +{ + vmkit::Thread* thread = vmkit::Thread::get(); + isolate_id_t oldIsolateID = thread->getIsolateID(); + isolate_id_t curIsolateID = oldIsolateID; + + if ((isolateID != CURRENT_ISOLATE) && (isolateID != oldIsolateID)) { + thread->setIsolateID(isolateID); + curIsolateID = isolateID; + } + + if (currentIsolateID != NULL) *currentIsolateID = curIsolateID; + return oldIsolateID; +} + +extern "C" JavaObject** j3GetClassDelegateePtr(UserCommonClass* commonCl) +{ + JavaObject **obj = commonCl->getDelegateePtr(); + if (!obj || !(*obj)) { + Jnjvm* vm = JavaThread::get()->getJVM(); + commonCl->getClassDelegatee(vm, NULL); + obj = commonCl->getDelegateePtr(); + + assert(obj && (*obj) && "Invalid class delegatee"); + } + return obj; +} + +extern "C" JavaObject* j3GetClassDelegatee(UserCommonClass* commonClass) +{ + JavaObject *obj = commonClass->getDelegatee(); + if (!obj) obj = j3RuntimeDelegatee(commonClass); + return obj; +} + +extern "C" void* j3GetStaticInstance(UserClass* caller) +{ + TaskClassMirror& tcm = caller->getCurrentTaskClassMirror(); + assert(caller->isInitializing() && (tcm.staticInstance != NULL) && "Isolate static instance not initialized."); + return tcm.staticInstance; +} Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Thu Apr 25 11:46:36 2013 @@ -7,12 +7,15 @@ // //===----------------------------------------------------------------------===// +#include + #include "vmkit/Locks.h" #include "vmkit/Thread.h" #include "JavaClass.h" #include "JavaObject.h" #include "JavaThread.h" +#include "JavaString.h" #include "JavaUpcalls.h" #include "Jnjvm.h" @@ -21,6 +24,9 @@ using namespace j3; JavaThread::JavaThread(Jnjvm* isolate) : MutatorThread() { MyVM = isolate; + JavaThread* th = JavaThread::get(); + if (th->isVmkitThread()) + isolateID = th->getIsolateID(); pendingException = NULL; jniEnv = isolate->jniEnv; localJNIRefs = new JNILocalReferences(); @@ -40,12 +46,13 @@ JavaThread::~JavaThread() { delete localJNIRefs; } -void JavaThread::throwException(JavaObject* obj) { +void JavaThread::throwException(JavaObject* obj, bool immediate) { llvm_gcroot(obj, 0); JavaThread* th = JavaThread::get(); assert(th->pendingException == 0 && "pending exception already there?"); vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&(th->pendingException), (gc*)obj); - th->internalThrowException(); + if (immediate) + th->internalThrowException(); } void JavaThread::throwPendingException() { @@ -127,7 +134,7 @@ void JavaThread::printJavaBacktrace() { while (vmkit::FrameInfo* FI = Walker.get()) { if (FI->Metadata != NULL) { - MyVM->printMethod(FI, Walker.ip, Walker.addr); + MyVM->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); } ++Walker; } @@ -163,3 +170,92 @@ void JNILocalReferences::removeJNIRefere length -= num; } } + +std::ostream& j3::operator << (std::ostream& os, JavaThread& thread) +{ + os << (void*)(&thread); + + Jnjvm* vm = thread.getJVM(); + JavaObject* jThread = thread.currentThread(); + if (vm && jThread) { + JavaString* threadNameObj = static_cast( + vm->upcalls->threadName->getInstanceObjectField(jThread)); + char *threadName = JavaString::strToAsciiz(threadNameObj); + os << '(' << threadName << ')'; + delete [] threadName; + } + + return os << ',' << thread.getIsolateID(); +} + +void JavaThread::printStackTrace(int skip, int level_deep) +{ + JavaThread *thread = JavaThread::get(); + std::cerr << '[' << *thread << "] Call stack trace:" << std::endl; + + j3::Jnjvm *vm = thread->getJVM(); + vmkit::StackWalker Walker(thread); + for (vmkit::FrameInfo* FI = NULL; (level_deep > 0) && ((FI = Walker.get()) != NULL); ++Walker) { + if (!FI->Metadata) continue; + if (skip > 0) {--skip; continue;} + + vm->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); + --level_deep; + } +} + +void JavaThread::throwNullPointerException(void* methodIP) const +{ + if (!this->isVmkitThread()) + return vmkit::Thread::throwNullPointerException(methodIP); + + this->cleanUpOnDeadIsolateBeforeException(&methodIP); + + MyVM->nullPointerException(); + UNREACHABLE(); +} + +void JavaThread::throwDeadIsolateException() const +{ + if (this->runsDeadIsolate()) + const_cast(this)->setIsolateID(0); + + if (!this->isVmkitThread()) + return vmkit::Thread::throwDeadIsolateException(); + + void *methodIP = StackWalker_getCallFrameAddress(); + methodIP = vmkit::StackWalker::getReturnAddressFromCallFrame(methodIP); + + MyVM->deadIsolateException(methodIP, true); + UNREACHABLE(); +} + +extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); + +void JavaThread::cleanUpOnDeadIsolateBeforeException(void** methodIP, JavaMethod** method) const +{ + vmkit::StackWalker walker(const_cast(this), true); + vmkit::FrameInfo *FI = walker.get(); + + if (!FI) { + if (methodIP != NULL) *methodIP = NULL; + if (method != NULL) *method = NULL; + return; + } + + JavaMethod* meth = (JavaMethod*)FI->Metadata; + + // Restore the current isolate ID to that of the caller + isolate_id_t callerIsolateID = meth->classDef->classLoader->getIsolateID(); + j3SetIsolate(callerIsolateID, NULL); + + if (methodIP != NULL) *methodIP = FI->ReturnAddress; + if (method != NULL) *method = meth; +} + +void JavaThread::runAfterLeavingGarbageCollectorRendezVous() +{ + // Be sure to throw an exception if I am running in a dead isolate + if (this->runsDeadIsolate()) + throwDeadIsolateException(); +} Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 11:46:36 2013 @@ -10,6 +10,8 @@ #ifndef JNJVM_JAVA_THREAD_H #define JNJVM_JAVA_THREAD_H +#include + #include "vmkit/Cond.h" #include "vmkit/Locks.h" #include "vmkit/ObjectLocks.h" @@ -33,7 +35,7 @@ class Jnjvm; #define BEGIN_JNI_EXCEPTION \ JavaThread* th = JavaThread::get(); \ - word_t SP = th->getLastSP(); \ + void* SP = th->getLastSP(); \ th->leaveUncooperativeCode(); \ vmkit::KnownFrame Frame; \ th->startKnownFrame(Frame); \ @@ -92,6 +94,9 @@ public: /// JNILocalReferences* localJNIRefs; +#if JNJVM_EXECUTE > 0 + unsigned int call_level; +#endif JavaObject** pushJNIRef(JavaObject* obj) { llvm_gcroot(obj, 0); @@ -109,6 +114,9 @@ public: /// JavaThread - Empty constructor, used to get the VT. /// JavaThread() { +#if JNJVM_EXECUTE > 0 + call_level = 0; +#endif } /// ~JavaThread - Delete any potential malloc'ed objects used by this thread. @@ -141,7 +149,7 @@ public: /// throwException - Throw the given exception in the current thread. /// - void throwException(JavaObject* obj); + void throwException(JavaObject* obj, bool immediate = true); /// throwPendingException - Throw a pending exception. /// @@ -155,7 +163,7 @@ public: /// throwFromJNI - Throw an exception after executing JNI code. /// - void throwFromJNI(word_t SP) { + void throwFromJNI(void* SP) { endKnownFrame(); enterUncooperativeCode(SP); } @@ -203,6 +211,17 @@ public: /// void printJavaBacktrace(); + static void printStackTrace(int skip = 3, int level_deep = 1) __attribute__((noinline)); + + friend std::ostream& operator << (std::ostream&, JavaThread&); + + void cleanUpOnDeadIsolateBeforeException(void** methodIP = NULL, JavaMethod** method = NULL) const; + + virtual void throwNullPointerException(void* methodIP) const; + virtual void throwDeadIsolateException() const; + + virtual void runAfterLeavingGarbageCollectorRendezVous(); + /// getJavaFrameContext - Fill the buffer with Java methods currently on /// the stack. /// Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:46:36 2013 @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #define JNJVM_LOAD 0 +#define JNJVM_CLINIT 0 #include #include @@ -15,6 +16,7 @@ #include #include #include +#include #include #include "debug.h" @@ -119,9 +121,6 @@ void UserClass::initialiseClass(Jnjvm* v setInitializationState(inClinit); UserClass* cl = (UserClass*)this; - // Single environment allocates the static instance during resolution, so - // that compiled code can access it directly (with an initialization - // check just before the access) if (!cl->getStaticInstance()) cl->allocateStaticInstance(vm); release(); @@ -170,8 +169,25 @@ void UserClass::initialiseClass(Jnjvm* v JavaMethod* meth = lookupMethodDontThrow(vm->bootstrapLoader->clinitName, vm->bootstrapLoader->clinitType, true, false, 0); +#if JNJVM_CLINIT + uint16_t c = this->name->elements[0]; + bool logInit = !(c == 'j' || c == 'g'); + + static char init_buffer[10240]; + static int init_level; + if (logInit) std::cout << '[' << *self << ']' << init_buffer; +#endif if (meth) { + +#if JNJVM_CLINIT + if (logInit) { + std::cout << " clinit " << *name << " ..." << std::endl; + init_buffer[init_level] = ' '; + init_buffer[++init_level] = '\0'; + } +#endif + TRY { meth->invokeIntStatic(vm, cl); } CATCH { @@ -179,12 +195,31 @@ void UserClass::initialiseClass(Jnjvm* v assert(exc && "no exception?"); self->clearException(); } END_CATCH; + +#if JNJVM_CLINIT + if (logInit) { + init_buffer[--init_level] = '\0'; + std::cout << '[' << *self << ']' << init_buffer; + } +#endif + } +#if JNJVM_CLINIT + else { + if (logInit) std::cout << " init " << *name << " ... "; + } +#endif + // 9. If the execution of the initializers completes normally, then lock // this Class object, label it fully initialized, notify all waiting // threads, release the lock, and complete this procedure normally. if (!exc) { + +#if JNJVM_CLINIT + if (logInit) std::cout << " done" << std::endl; +#endif + acquire(); setInitializationState(ready); setOwnerClass(0); @@ -193,6 +228,10 @@ void UserClass::initialiseClass(Jnjvm* v return; } +#if JNJVM_CLINIT + if (logInit) std::cout << " failed" << std::endl; +#endif + // 10. Otherwise, the initializers must have completed abruptly by // throwing some exception E. If the class of E is not Error or one // of its subclasses, then create a new instance of the class @@ -263,12 +302,19 @@ JavaObject* Jnjvm::CreateError(UserClass return obj; } -void Jnjvm::error(UserClass* cl, JavaMethod* init, JavaString* str) { +void Jnjvm::error(UserClass* cl, JavaMethod* init, JavaString* str, bool immediate) { JavaObject* obj = 0; llvm_gcroot(obj, 0); llvm_gcroot(str, 0); obj = CreateError(cl, init, str); - JavaThread::get()->throwException(obj); + JavaThread::get()->throwException(obj, immediate); +} + +void Jnjvm::error(UserClass* cl, JavaMethod* init, const char* str, bool immediate) { + JavaObject* obj = 0; + llvm_gcroot(obj, 0); + obj = CreateError(cl, init, str); + JavaThread::get()->throwException(obj, immediate); } void Jnjvm::arrayStoreException() { @@ -763,28 +809,28 @@ void Jnjvm::addProperty(char* key, char* } // Mimic what's happening in Classpath when creating a java.lang.Class object. -JavaObject* UserCommonClass::getClassDelegatee(Jnjvm* vm, JavaObject* pd) { +JavaObject* UserCommonClass::getClassDelegatee(Jnjvm* vm, JavaObject* pd, isolate_id_t isolateID) { JavaObjectClass* delegatee = 0; JavaObjectClass* base = 0; llvm_gcroot(pd, 0); llvm_gcroot(delegatee, 0); llvm_gcroot(base, 0); - if (getDelegatee() == NULL) { + if (getDelegatee(isolateID) == NULL) { UserClass* cl = vm->upcalls->newClass; - delegatee = (JavaObjectClass*)cl->doNew(vm); + delegatee = (JavaObjectClass*)cl->doNew(vm, isolateID); JavaObjectClass::setClass(delegatee, this); if (pd == NULL && isArray()) { base = (JavaObjectClass*) - asArrayClass()->baseClass()->getClassDelegatee(vm, pd); + asArrayClass()->baseClass()->getClassDelegatee(vm, pd, isolateID); JavaObjectClass::setProtectionDomain( delegatee, JavaObjectClass::getProtectionDomain(base)); } else { JavaObjectClass::setProtectionDomain(delegatee, pd); } - setDelegatee(delegatee); + setDelegatee(delegatee, isolateID); } - return getDelegatee(); + return getDelegatee(isolateID); } JavaObject* const* UserCommonClass::getClassDelegateePtr(Jnjvm* vm, JavaObject* pd) { @@ -1325,6 +1371,9 @@ Jnjvm::Jnjvm(vmkit::BumpPtrAllocator& Al bootstrapLoader = loader; upcalls = bootstrapLoader->upcalls; throwable = upcalls->newThrowable; + + RunningIsolates[0].state = IsolateRunning; + RunningIsolates[0].loader = loader; } Jnjvm::~Jnjvm() { @@ -1350,7 +1399,12 @@ void Jnjvm::startCollection() { referenceThread->WeakReferencesQueue.acquire(); referenceThread->PhantomReferencesQueue.acquire(); } - + +void Jnjvm::endCollectionBeforeUnblockingThreads() +{ + collectIsolates(); +} + void Jnjvm::endCollection() { finalizerThread->FinalizationQueueLock.release(); referenceThread->ToEnqueueLock.release(); @@ -1446,16 +1500,16 @@ extern "C" int StartJnjvmWithoutJIT(int return 0; } -void Jnjvm::printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr) { +void Jnjvm::printMethod(vmkit::FrameInfo* FI, void* ip, void* callFrame) { if (FI->Metadata == NULL) { - vmkit::MethodInfoHelper::print(ip, addr); + vmkit::MethodInfoHelper::print(ip, callFrame); return; } JavaMethod* meth = (JavaMethod*)FI->Metadata; fprintf(stderr, "; %p (%p) in %s.%s (line %d, bytecode %d, code start %p)", - (void*)ip, - (void*)addr, + ip, + callFrame, UTF8Buffer(meth->classDef->name).cString(), UTF8Buffer(meth->name).cString(), meth->lookupLineNumber(FI), Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:46:36 2013 @@ -24,6 +24,7 @@ #include "JnjvmConfig.h" #include "JNIReferences.h" #include "LockedMap.h" +#include "JavaArray.h" namespace j3 { @@ -46,6 +47,21 @@ class UserClassArray; class UserClassPrimitive; class UserCommonClass; +enum IsolateState { // These are bits that can be set independently + IsolateFree = 0x0, + IsolateRunning = 0x1, + + IsolateDenyExecution = 0x2, + IsolateResetReferences = 0x4 +}; +typedef uint8_t isolate_state_t; + +struct IsolateDescriptor { + isolate_state_t state; + JnjvmClassLoader *loader; +}; + + /// ThreadSystem - Thread management of a JVM. Each JVM has one thread /// management system to count the number of non-daemon threads it owns. /// The initial thread of the JVM is a non-daemon thread. When there are @@ -94,7 +110,7 @@ public: char* jarFile; std::vector< std::pair > agents; - void readArgs(Jnjvm *vm); + void readArgs(class Jnjvm *vm); void extractClassFromJar(Jnjvm* vm, int argc, char** argv, int i); void javaAgent(char* cur); @@ -123,6 +139,7 @@ private: ReferenceThread* referenceThread; virtual void startCollection(); + virtual void endCollectionBeforeUnblockingThreads(); virtual void endCollection(); virtual void scanWeakReferencesQueue(word_t closure); virtual void scanSoftReferencesQueue(word_t closure); @@ -131,9 +148,11 @@ private: virtual void addFinalizationCandidate(gc* obj); virtual size_t getObjectSize(gc* obj); virtual const char* getObjectTypeName(gc* obj); - virtual void printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr); +public: + virtual void printMethod(vmkit::FrameInfo* FI, void* ip, void* callFrame); +private: /// CreateError - Creates a Java object of the specified exception class /// and calling its function. /// @@ -144,7 +163,8 @@ private: /// that calls this functions. This is used internally by Jnjvm to control /// which pair class/method are used. /// - void error(UserClass* cl, JavaMethod* meth, JavaString*); + void error(UserClass* cl, JavaMethod* meth, JavaString*, bool immediate = true); + void error(UserClass* cl, JavaMethod* meth, const char*, bool immediate = true); /// errorWithExcp - Throws an exception whose cause is the Java object excp. /// @@ -350,6 +370,34 @@ public: /// mapping the initial thread. /// void loadBootstrap(); + void loadIsolate(JnjvmClassLoader *loader); + + IsolateDescriptor RunningIsolates[NR_ISOLATES]; + vmkit::LockNormal IsolateLock; + + int allocateNextFreeIsolateID(JnjvmClassLoader* loader, isolate_id_t *isolateID); + void freeIsolateID(isolate_id_t isolateID); + + void disableIsolates(isolate_id_t* isolateID, size_t isolateCount, bool denyIsolateExecution, bool resetIsolateReferences); + + void collectIsolates(); + void collectIsolate(isolate_id_t isolateID); + void denyIsolateExecutionInThread(isolate_id_t isolateID, JavaThread& thread); + void denyIsolateExecutionInMethodFrame(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker); + void removeExceptionHandlersInThread(isolate_id_t isolateID, JavaThread& thread); + void denyMethodExecution(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker); + void denyMethodExecution(JavaMethod& method); + bool isActivatorStopMethod(JavaMethod& method) const; + isolate_id_t getFrameIsolateID(const vmkit::FrameInfo& frame) const; + isolate_id_t getFrameIsolateID(const JavaMethod& method) const; + void redirectMethodProlog(void* methodAddress, void* redirectCode, size_t codeSize); + void denyClassExecution(isolate_id_t isolateID, CommonClass& cl); + void invalidateAllClassesInIsolate(isolate_id_t isolateID); + + virtual bool resetDeadIsolateReference(void* source, void** objectRef); + virtual void deadIsolateException(void* methodIP, bool immediate = true); + + virtual void printCallStack(const vmkit::StackWalker& walker); }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:46:36 2013 @@ -49,6 +49,7 @@ typedef void (*static_init_t)(JnjvmClass const UTF8* JavaCompiler::InlinePragma = 0; const UTF8* JavaCompiler::NoInlinePragma = 0; +extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); JnjvmBootstrapLoader::JnjvmBootstrapLoader(vmkit::BumpPtrAllocator& Alloc, JavaCompiler* Comp, @@ -142,18 +143,18 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad arrayTable[JavaArray::T_LONG - 4] = upcalls->ArrayOfLong; arrayTable[JavaArray::T_DOUBLE - 4] = upcalls->ArrayOfDouble; - Attribut::annotationsAttribut = + JavaAttribute::annotationsAttribute = asciizConstructUTF8("RuntimeVisibleAnnotations"); - Attribut::codeAttribut = asciizConstructUTF8("Code"); - Attribut::exceptionsAttribut = asciizConstructUTF8("Exceptions"); - Attribut::constantAttribut = asciizConstructUTF8("ConstantValue"); - Attribut::lineNumberTableAttribut = asciizConstructUTF8("LineNumberTable"); - Attribut::innerClassesAttribut = asciizConstructUTF8("InnerClasses"); - Attribut::sourceFileAttribut = asciizConstructUTF8("SourceFile"); - Attribut::signatureAttribut = asciizConstructUTF8("Signature"); - Attribut::enclosingMethodAttribut = asciizConstructUTF8("EnclosingMethod"); - Attribut::paramAnnotationsAttribut = asciizConstructUTF8("RuntimeVisibleParameterAnnotations"); - Attribut::annotationDefaultAttribut = asciizConstructUTF8("AnnotationDefault"); + JavaAttribute::codeAttribute = asciizConstructUTF8("Code"); + JavaAttribute::exceptionsAttribute = asciizConstructUTF8("Exceptions"); + JavaAttribute::constantAttribute = asciizConstructUTF8("ConstantValue"); + JavaAttribute::lineNumberTableAttribute = asciizConstructUTF8("LineNumberTable"); + JavaAttribute::innerClassesAttribute = asciizConstructUTF8("InnerClasses"); + JavaAttribute::sourceFileAttribute = asciizConstructUTF8("SourceFile"); + JavaAttribute::signatureAttribute = asciizConstructUTF8("Signature"); + JavaAttribute::enclosingMethodAttribute = asciizConstructUTF8("EnclosingMethod"); + JavaAttribute::paramAnnotationsAttribute = asciizConstructUTF8("RuntimeVisibleParameterAnnotations"); + JavaAttribute::annotationDefaultAttribute = asciizConstructUTF8("AnnotationDefault"); JavaCompiler::InlinePragma = asciizConstructUTF8("Lorg/vmmagic/pragma/Inline;"); @@ -172,6 +173,7 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad VMDoubleName = asciizConstructUTF8("java/lang/VMDouble"); stackWalkerName = asciizConstructUTF8("gnu/classpath/VMStackWalker"); NoClassDefFoundError = asciizConstructUTF8("java/lang/NoClassDefFoundError"); + org_osgi_framework_BundleContext = asciizConstructUTF8("Lorg/osgi/framework/BundleContext;"); #define DEF_UTF8(var) \ var = asciizConstructUTF8(#var) @@ -204,14 +206,20 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad DEF_UTF8(doubleToRawLongBits); DEF_UTF8(intBitsToFloat); DEF_UTF8(longBitsToDouble); + DEF_UTF8(stop); #undef DEF_UTF8 } +JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : + isolateID(0), allocator(Alloc) +{ +} + JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, VMClassLoader* vmdata, - Jnjvm* I) : allocator(Alloc) { + Jnjvm* VM) : isolateID(0), allocator(Alloc) { llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); bootstrapLoader = JCL.bootstrapLoader; @@ -226,13 +234,22 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit vmdata->JCL = this; vmkit::Collector::objectReferenceNonHeapWriteBarrier( (gc**)&javaLoader, (gc*)loader); - isolate = I; + vm = VM; JavaMethod* meth = bootstrapLoader->upcalls->loadInClassLoader; loadClassMethod = JavaObject::getClass(loader)->asClass()->lookupMethodDontThrow( meth->name, meth->type, false, true, &loadClass); assert(loadClass && "Loader does not have a loadClass function"); + + if (VM->appClassLoader != NULL) { // Is the system class loader already set up? + isolate_id_t oldIsolateID = 0; + VM->allocateNextFreeIsolateID(this, &isolateID); + + oldIsolateID = j3SetIsolate(isolateID, NULL); + VM->loadIsolate(this); + j3SetIsolate(oldIsolateID, NULL); + } } void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) { @@ -330,9 +347,9 @@ UserClass* JnjvmClassLoader::internalLoa if (!cl) { UserClass* forCtp = loadClass; if (strName == NULL) { - strName = JavaString::internalToJava(name, isolate); + strName = JavaString::internalToJava(name, vm); } - obj = loadClassMethod->invokeJavaObjectVirtual(isolate, forCtp, javaLoader, + obj = loadClassMethod->invokeJavaObjectVirtual(vm, forCtp, javaLoader, &strName); cl = JavaObjectClass::getClass(((JavaObjectClass*)obj)); } @@ -837,8 +854,9 @@ const UTF8* JnjvmClassLoader::readerCons JnjvmClassLoader::~JnjvmClassLoader() { - if (isolate) { - isolate->removeFrameInfos(TheCompiler); + if (vm) { + vm->removeFrameInfos(TheCompiler); + vm->freeIsolateID(isolateID); } if (classes) { @@ -879,7 +897,7 @@ JnjvmBootstrapLoader::~JnjvmBootstrapLoa JavaString** JnjvmClassLoader::UTF8ToStr(const UTF8* val) { JavaString* res = NULL; llvm_gcroot(res, 0); - res = isolate->internalUTF8ToStr(val); + res = vm->internalUTF8ToStr(val); return strings->addString(this, res); } Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:46:36 2013 @@ -57,12 +57,14 @@ private: /// isolate - Which isolate defined me? Null for the bootstrap class loader. /// - Jnjvm* isolate; + Jnjvm* vm; + isolate_id_t isolateID; /// javaLoder - The Java representation of the class loader. Null for the /// bootstrap class loader. /// JavaObject* javaLoader; +// JavaObject* javaLoader[NR_ISOLATES]; /// internalLoad - Load the class with the given name. /// @@ -78,7 +80,7 @@ private: /// first use of a Java class loader. /// JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, - JavaObject* loader, VMClassLoader* vmdata, Jnjvm* isolate); + JavaObject* loader, VMClassLoader* vmdata, Jnjvm* VM); /// lookupComponentName - Try to find the component name of the given array /// name. If the component name is not in the table of UTF8s and holder @@ -92,7 +94,7 @@ private: void ensureCached(UserCommonClass* cl); protected: - JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : allocator(Alloc) {} + JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc); /// TheCompiler - The Java compiler for this class loader. /// @@ -130,9 +132,7 @@ public: /// vmkit::BumpPtrAllocator& allocator; - /// getIsolate - Returns the isolate that created this class loader. - /// - Jnjvm* getIsolate() const { return isolate; } + isolate_id_t getIsolateID() const {return isolateID;} /// getClasses - Returns the classes this class loader has loaded. /// @@ -387,6 +387,7 @@ public: Classpath* upcalls; /// Lists of UTF8s used internaly in VMKit. + const UTF8* org_osgi_framework_BundleContext; const UTF8* NoClassDefFoundError; const UTF8* initName; const UTF8* clinitName; @@ -427,6 +428,7 @@ public: const UTF8* doubleToRawLongBits; const UTF8* intBitsToFloat; const UTF8* longBitsToDouble; + const UTF8* stop; /// primitiveMap - Map of primitive classes, hashed by id. std::map primitiveMap; Modified: vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h Thu Apr 25 11:46:36 2013 @@ -28,6 +28,6 @@ class JavaConstantPool; } #define ISOLATE_STATIC static -#define NR_ISOLATES 1 +#define NR_ISOLATES 256 #endif // JNJVM_CONFIG_H Added: vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp?rev=180279&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp (added) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp Thu Apr 25 11:46:36 2013 @@ -0,0 +1,196 @@ + +#include "JnjvmIsolate.h" + +using namespace j3; + + +extern "C" jint Java_ijvm_isolate_vm_IJVM_getObjectIsolateID(JavaObject* object) +{ + llvm_gcroot(object, 0); + const UserCommonClass* ccl = JavaObject::getClass(object); + isolate_id_t isolateID = ccl->classLoader->getIsolateID(); + return isolateID; +} + +extern "C" void Java_ijvm_isolate_vm_IJVM_disableIsolates(ArrayLong *isolateID, jboolean denyIsolateExecution, jboolean resetIsolateReferences) +{ + size_t isolateCount = ArrayLong::getSize(isolateID); + isolate_id_t* list = new isolate_id_t[isolateCount]; + + for (size_t i=0; i < isolateCount; ++i) + list[i] = (isolate_id_t)ArrayLong::getElement(isolateID, i); + + ((Jnjvm*)vmkit::Thread::get()->MyVM)->disableIsolates(list, isolateCount, denyIsolateExecution, resetIsolateReferences); + + delete [] list; +} + +void Jnjvm::disableIsolates(isolate_id_t* isolateID, size_t isolateCount, bool denyIsolateExecution, bool resetIsolateReferences) +{ + if (!isolateID || !isolateCount || (!denyIsolateExecution && !resetIsolateReferences)) return; // Nothing to do + + for (size_t i=0; i < isolateCount; ++i) { + if (isolateID[i] == 0) + illegalArgumentException("isolateID must not be zero"); + } + + { + vmkit::LockGuard lg(IsolateLock); + for (size_t i=0; i < isolateCount; ++i) { + RunningIsolates[isolateID[i]].state |= + (resetIsolateReferences ? IsolateResetReferences : 0) | + (denyIsolateExecution ? IsolateDenyExecution : 0); + } + } + + vmkit::Collector::collect(); +} + +void Jnjvm::collectIsolates() +{ +// vmkit::LockGuard lg(IsolateLock); + for (isolate_id_t isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) + collectIsolate(isolateID); +} + +void Jnjvm::collectIsolate(isolate_id_t isolateID) +{ + if (!(RunningIsolates[isolateID].state & IsolateDenyExecution)) return; + + // Deny current isolate execution in running threads + vmkit::Thread *thisThread = vmkit::Thread::get(); + for (vmkit::Thread* th = (vmkit::Thread*)thisThread->next(); th != thisThread; th = (vmkit::Thread*)th->next()) + denyIsolateExecutionInThread(isolateID, *(JavaThread*)th); + + // Deny future isolate execution + ClassMap* classes = RunningIsolates[isolateID].loader->getClasses(); +// classes->lock.lock(); + for (ClassMap::iterator cl = classes->map.begin(), clEnd = classes->map.end(); cl != clEnd; ++cl) + denyClassExecution(isolateID, *cl->second); +// classes->lock.unlock(); + + invalidateAllClassesInIsolate(isolateID); +} + +void Jnjvm::printCallStack(const vmkit::StackWalker& walker) +{ + vmkit::FrameInfo* FI = NULL; + JavaThread* thread = (JavaThread*)walker.getScannedThread(); + + std::cerr << '[' << *thread << "] Call stack trace from call frame=" << walker.getCallFrame() << std::endl; + for (vmkit::StackWalker w(walker); (FI = w.get()) != NULL; ++w) + this->printMethod(FI, w.getReturnAddress(), w.getCallFrame()); + std::cerr << std::endl; +} + +void Jnjvm::loadIsolate(JnjvmClassLoader *loader) +{ + JavaObject* obj = NULL; + JavaObject* javaLoader = NULL; + llvm_gcroot(obj, 0); + llvm_gcroot(javaLoader, 0); + + assert((bootstrapLoader->upcalls->newString != NULL) && "bootstrap class loader not initialized"); + +#define LOAD_CLASS(cl) \ + cl->resolveClass(); \ + cl->initialiseClass(this); + + LOAD_CLASS(upcalls->newString); + + // The initialization code of the classes initialized below may require + // to get the Java thread, so we create the Java thread object first. + LOAD_CLASS(upcalls->newThread); + LOAD_CLASS(upcalls->newVMThread); + LOAD_CLASS(upcalls->threadGroup); + + LOAD_CLASS(upcalls->newClass); + LOAD_CLASS(upcalls->newConstructor); + LOAD_CLASS(upcalls->newField); + LOAD_CLASS(upcalls->newMethod); + LOAD_CLASS(upcalls->newStackTraceElement); + LOAD_CLASS(upcalls->boolClass); + LOAD_CLASS(upcalls->byteClass); + LOAD_CLASS(upcalls->charClass); + LOAD_CLASS(upcalls->shortClass); + LOAD_CLASS(upcalls->intClass); + LOAD_CLASS(upcalls->longClass); + LOAD_CLASS(upcalls->floatClass); + LOAD_CLASS(upcalls->doubleClass); + LOAD_CLASS(upcalls->InvocationTargetException); + LOAD_CLASS(upcalls->ArrayStoreException); + LOAD_CLASS(upcalls->ClassCastException); + LOAD_CLASS(upcalls->IllegalMonitorStateException); + LOAD_CLASS(upcalls->IllegalArgumentException); + LOAD_CLASS(upcalls->InterruptedException); + LOAD_CLASS(upcalls->IndexOutOfBoundsException); + LOAD_CLASS(upcalls->ArrayIndexOutOfBoundsException); + LOAD_CLASS(upcalls->NegativeArraySizeException); + LOAD_CLASS(upcalls->NullPointerException); + LOAD_CLASS(upcalls->SecurityException); + LOAD_CLASS(upcalls->ClassFormatError); + LOAD_CLASS(upcalls->ClassCircularityError); + LOAD_CLASS(upcalls->NoClassDefFoundError); + LOAD_CLASS(upcalls->UnsupportedClassVersionError); + LOAD_CLASS(upcalls->NoSuchFieldError); + LOAD_CLASS(upcalls->NoSuchMethodError); + LOAD_CLASS(upcalls->InstantiationError); + LOAD_CLASS(upcalls->IllegalAccessError); + LOAD_CLASS(upcalls->IllegalAccessException); + LOAD_CLASS(upcalls->VerifyError); + LOAD_CLASS(upcalls->ExceptionInInitializerError); + LOAD_CLASS(upcalls->LinkageError); + LOAD_CLASS(upcalls->AbstractMethodError); + LOAD_CLASS(upcalls->UnsatisfiedLinkError); + LOAD_CLASS(upcalls->InternalError); + LOAD_CLASS(upcalls->OutOfMemoryError); + LOAD_CLASS(upcalls->StackOverflowError); + LOAD_CLASS(upcalls->UnknownError); + LOAD_CLASS(upcalls->ClassNotFoundException); + LOAD_CLASS(upcalls->ArithmeticException); + LOAD_CLASS(upcalls->InstantiationException); + LOAD_CLASS(upcalls->SystemClass); + LOAD_CLASS(upcalls->cloneableClass); + LOAD_CLASS(upcalls->CloneNotSupportedException); +#undef LOAD_CLASS + + // Implementation-specific end-of-bootstrap initialization + upcalls->InitializeSystem(this); + + obj = JavaThread::get()->currentThread(); + javaLoader = loader->getJavaClassLoader(); + upcalls->setContextClassLoader->invokeIntSpecial(this, upcalls->newThread, obj, &javaLoader); + + // load and initialize math since it is responsible for dlopen'ing + // libjavalang.so and we are optimizing some math operations + UserCommonClass* math = bootstrapLoader->loadName(bootstrapLoader->mathName, true, true, NULL); + math->asClass()->initialiseClass(this); +} + +int Jnjvm::allocateNextFreeIsolateID(JnjvmClassLoader* loader, isolate_id_t *isolateID) +{ + isolate_id_t i = 0; + { + vmkit::LockGuard lg(IsolateLock); + for (; (i < NR_ISOLATES) && (RunningIsolates[i].state != IsolateFree); ++i); + + if (i < NR_ISOLATES) { + RunningIsolates[i].state = IsolateRunning; + RunningIsolates[i].loader = loader; + + if (isolateID != NULL) *isolateID = i; + } + } + + assert((i < NR_ISOLATES) && "Not enough isolate slots"); + return (i < NR_ISOLATES) ? 0 : ENOENT; +} + +void Jnjvm::freeIsolateID(isolate_id_t isolateID) +{ + vmkit::LockGuard lg(IsolateLock); + RunningIsolates[isolateID].state = IsolateFree; + RunningIsolates[isolateID].loader = NULL; + + std::cout << "Isolate " << isolateID << " unloaded from memory." << std::endl; +} Added: vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h?rev=180279&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h (added) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h Thu Apr 25 11:46:36 2013 @@ -0,0 +1,32 @@ + +#include +#include +#include + +#include "VmkitGC.h" +#include "Jnjvm.h" +#include "JavaClass.h" +#include "JavaUpcalls.h" +#include "VMStaticInstance.h" +#include "j3/JavaJITCompiler.h" +#include "j3/jni.h" + + +extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); + +extern "C" void CalledStoppedIsolateMethod(void* methodIP) __attribute__((noinline)); +extern "C" void ReturnedToStoppedIsolateMethod(void* methodIP) __attribute__((noinline)); + +extern "C" void StoppedIsolate_Redirect_ReturnToDeadMethod() __attribute__((naked, noreturn, noinline)); + +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod() __attribute__((naked, noreturn, noinline)); +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_End() __attribute__((naked, noreturn, noinline)); + +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop() __attribute__((naked, noreturn, noinline)); +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End() __attribute__((naked, noreturn, noinline)); + +#define StoppedIsolate_Redirect_CallToDeadMethod_CodeSize \ + ((size_t)((intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_End - (intptr_t)StoppedIsolate_Redirect_CallToDeadMethod)) + +#define StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_CodeSize \ + ((size_t)((intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End - (intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop)) Added: vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp?rev=180279&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp (added) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp Thu Apr 25 11:46:36 2013 @@ -0,0 +1,37 @@ + +#include "JnjvmIsolate.h" + +using namespace j3; + + +bool Jnjvm::resetDeadIsolateReference(void* source, void** ptr) +{ + // Don't touch fake Java objects that exist only as bridges between the + // Java object model and the C++ object model. + if (!ptr || !(*ptr) // NULL reference or NULL object + || VMClassLoader::isVMClassLoader(*(JavaObject**)ptr) + || VMStaticInstance::isVMStaticInstance(*(JavaObject**)ptr)) + return false; + + CommonClass* ccl = JavaObject::getClass(*((JavaObject**)ptr)); + isolate_id_t isolateID = ccl->classLoader->getIsolateID(); + + // vmkit::LockGuard lg(IsolateLock); + if (!(RunningIsolates[isolateID].state & IsolateResetReferences)) + return false; // Isolate not marked for resetting references + + std::cout << "Resetting @reference=" << ptr << " @oldObject=" << *ptr << + " class=" << *ccl->name << " isolateID=" << isolateID; + + if (source) { + CommonClass* sccl = JavaObject::getClass(((JavaObject*)source)); + isolate_id_t sourceIsolateID = sccl->classLoader->getIsolateID(); + + std::cout << " fromClass=" << *sccl->name << " fromIsolateID=" << sourceIsolateID; + } + + std::cout << std::endl; + + *ptr = NULL; // Reset the reference + return true; +} Added: vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp?rev=180279&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp (added) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp Thu Apr 25 11:46:36 2013 @@ -0,0 +1,505 @@ + +#include "JnjvmIsolate.h" + +using namespace j3; + + +void Jnjvm::invalidateAllClassesInIsolate(isolate_id_t isolateID) +{ + // Mark all classes as invalid in the given isolate + ClassMap* classes = RunningIsolates[isolateID].loader->getClasses(); +// classes->lock.lock(); + + for (isolate_id_t runningIsolateID = 0; runningIsolateID < NR_ISOLATES; ++runningIsolateID) { + if (RunningIsolates[runningIsolateID].state == IsolateFree) continue; + + classes = RunningIsolates[runningIsolateID].loader->getClasses(); + for (ClassMap::iterator cli = classes->map.begin(), cliEnd = classes->map.end(); cli != cliEnd; ++cli) { + if (!cli->second->isClass()) continue; + + Class *cl = cli->second->asClass(); + for (isolate_id_t deniedIsolateID = 0; deniedIsolateID < NR_ISOLATES; ++deniedIsolateID) { + if (!(RunningIsolates[deniedIsolateID].state & IsolateDenyExecution)) continue; + + TaskClassMirror& tcm = cl->getTaskClassMirror(deniedIsolateID); + tcm.initialized = false; + tcm.status = loaded; + } + } + } +// classes->lock.unlock(); +} + +void Jnjvm::denyIsolateExecutionInThread(isolate_id_t isolateID, JavaThread& thread) +{ + if (!thread.isVmkitThread()) return; // This is not a Java thread + + removeExceptionHandlersInThread(isolateID, thread); + + // We look at every pair of methods (native and Java methods). + vmkit::StackWalker CallerWalker(&thread); + + if (!CallerWalker.isValid()) + return; // No methods (native/Java) to inspect in this stack + + vmkit::StackWalker CalledWalker(CallerWalker); + ++CallerWalker; + + if (!CallerWalker.isValid()) return; // One frame in the stack (is this normal? possible?) + + // Loop over pairs of method frames (caller/called) in the stack + for (vmkit::StackWalkerState state = vmkit::StackWalkerInvalid; + (state = CallerWalker.getState()) >= vmkit::StackWalkerValid; + CalledWalker = CallerWalker, ++CallerWalker) + { + if (state != vmkit::StackWalkerValidMetadata) + continue; // The caller method is not a Java method + + const vmkit::FrameInfo* CallerFrame = CallerWalker.get(); + if (isolateID != getFrameIsolateID(*CallerFrame)) + continue; // The caller method does not belong to the terminating isolate + + // The caller method is a Java method belonging to the terminating isolate. + vmkit::StackWalker LastJavaCallerWalker(CallerWalker); + + // Look for the next Java methods. + CallerWalker.reportOnlyMetadataEnabledFrames(true); + for (++CallerWalker; ; LastJavaCallerWalker = CallerWalker, ++CallerWalker) { + if ((state = CallerWalker.getState()) == vmkit::StackWalkerInvalid) { + // No Java methods calling this method, only native methods. + CallerWalker = LastJavaCallerWalker; + break; + } + + // We found a Java caller method + CallerFrame = CallerWalker.get(); + if (isolateID != getFrameIsolateID(*CallerFrame)) { + // The Java caller method does not belong to the terminating isolate. + // Make CallerWalker point at the last frame before that foreign Java method frame. + vmkit::StackWalker ForeignCaller(CallerWalker); + CallerWalker = LastJavaCallerWalker; + CallerWalker.reportOnlyMetadataEnabledFrames(false); + + for (++CallerWalker; + CallerWalker != ForeignCaller; + LastJavaCallerWalker = CallerWalker, ++CallerWalker); + + CallerWalker = LastJavaCallerWalker; + break; + } + + // We found another Java caller method belonging to the terminating isolate. + // Continue scanning... + } + CallerWalker.reportOnlyMetadataEnabledFrames(false); + + // CalledWalker : called frame, native or NOT belonging to the terminating isolate. + // (CalledWalker + 1)...CallerWalker: caller frames, native or belonging to the terminating isolate. + denyIsolateExecutionInMethodFrame(CallerWalker, CalledWalker); + + // We are sure that the next method frame is either native or a Java method frame + // not belonging to the terminating isolate. + ++CallerWalker; + } + + // If the thread was running code in the isolate to kill, set its current isolate ID + // to the dead isolate ID, it should throw an exception as soon as it accesses isolate ID + if (thread.getIsolateID() == isolateID) + thread.markRunningDeadIsolate(); +} + +isolate_id_t Jnjvm::getFrameIsolateID(const vmkit::FrameInfo& frame) const +{ + assert(frame.Metadata && "Method frame has no metadata."); + return getFrameIsolateID(*(const JavaMethod*)frame.Metadata); +} + +isolate_id_t Jnjvm::getFrameIsolateID(const JavaMethod& method) const +{ + const JnjvmClassLoader* loader = method.classDef->classLoader; + return (loader == loader->bootstrapLoader) ? 0 : loader->getIsolateID(); +} + +void Jnjvm::denyIsolateExecutionInMethodFrame(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker) +{ + denyMethodExecution(CallerWalker, CalledWalker); + + // Patch the return address of the given method frame in order to return to the address of + // StoppedIsolate_RedirectMethodCodeToException when it executes the ret instruction. + vmkit::StackWalker walker(CalledWalker); + ++walker; + walker.updateReturnAddress((void*)(intptr_t)(&StoppedIsolate_Redirect_ReturnToDeadMethod)); + + // Patch the thread stack frames to exclude the given method frames, so that further scanning of the stack does + // not reveal those method frames. + walker.updateCallerFrameAddress(CallerWalker.getCallerCallFrame()); +} + +void Jnjvm::redirectMethodProlog(void* methodAddress, void* redirectCode, size_t codeSize) +{ + llvm::sys::MemoryBlock methodProlog(methodAddress, codeSize); + llvm::sys::Memory::setWritable(methodProlog); + + memcpy(methodAddress, redirectCode, codeSize); + + llvm::sys::Memory::InvalidateInstructionCache(methodAddress, codeSize); +} + +void Jnjvm::removeExceptionHandlersInThread(isolate_id_t isolateID, JavaThread& thread) +{ + // Remove all exception handlers which run in the given isolate. + // These exception handlers might exist in a method that was loaded by the isolate class loader itself, + // and might be a method that does not modify the current isolate ID (e.g. a Java runtime method) and + // which consequently run in the isolate of its caller. + + vmkit::ExceptionBuffer *CurExceptBuffer, *CalledExceptBuffer = NULL; + for (CurExceptBuffer = thread.lastExceptionBuffer; + CurExceptBuffer != NULL; + CurExceptBuffer = CurExceptBuffer->getPrevious()) + { + if (isolateID != CurExceptBuffer->getHandlerIsolateID()) { + CalledExceptBuffer = CurExceptBuffer; + continue; + } + + if (JavaMethod* method = (JavaMethod*)thread.MyVM->IPToFrameInfo(CurExceptBuffer->getHandlerMethod())->Metadata) { + std::cout << '[' << thread << "] Disabling exception handler inside method=" << + *method->classDef->name << '.' << *method->name << + " in isolateID=" << getFrameIsolateID(*method) << std::endl; + } + + // Skip the exception buffer + if (!CalledExceptBuffer) + thread.lastExceptionBuffer = CurExceptBuffer->getPrevious(); + else + CalledExceptBuffer->setPrevious(CurExceptBuffer->getPrevious()); + } +} +/* +void Jnjvm::removeExceptionHandlersInMethodFrames(JavaThread& thread, const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker) +{ + // Remove all exception handlers in the given methods + vmkit::ExceptionBuffer *CurExceptBuffer, *CalledExceptBuffer = NULL; + bool MoreFramesToCheck = true, skippedExceptHandler = false; + vmkit::StackWalker CalledMarkerWalker(CalledWalker); + ++CalledMarkerWalker; // Skip the called method + + for (CurExceptBuffer = thread.lastExceptionBuffer; + CurExceptBuffer != NULL; + CalledExceptBuffer = skippedExceptHandler ? CalledExceptBuffer : CurExceptBuffer, + CurExceptBuffer = CurExceptBuffer->getPrevious()) + { + vmkit::FrameInfo* ExceptHandlerMethodFrame; + JavaMethod* ExceptHandlerMethodInfo; + vmkit::StackWalker walker(CalledMarkerWalker); + skippedExceptHandler = false; + + void* ExceptHandlerMethodAddr = CurExceptBuffer->getHandlerMethod(); + if (!ExceptHandlerMethodAddr) continue; + + ExceptHandlerMethodFrame = thread.MyVM->IPToFrameInfo(ExceptHandlerMethodAddr); + if (!ExceptHandlerMethodFrame) continue; + + ExceptHandlerMethodInfo = (JavaMethod*)ExceptHandlerMethodFrame->Metadata; + if (!ExceptHandlerMethodInfo) continue; + + walker.reportOnlyMetadataEnabledFrames(false); + + for (bool inLastCaller = false; !inLastCaller; ++walker) { + inLastCaller = (walker == CallerWalker); + + vmkit::FrameInfo* DeadMethodFrame = walker.get(); + if (!DeadMethodFrame) continue; + + JavaMethod* DeadMethodInfo = (JavaMethod*)DeadMethodFrame->Metadata; + if (!DeadMethodInfo) continue; + if (DeadMethodInfo != ExceptHandlerMethodInfo) continue; + + std::cout << '[' << thread << "] Disabling exception handler inside method=" << + *DeadMethodInfo->classDef->name << '.' << *DeadMethodInfo->name << + " in isolateID=" << getFrameIsolateID(*DeadMethodInfo) << std::endl; + + // Skip the exception buffer + if (!CalledExceptBuffer) + thread.lastExceptionBuffer = CurExceptBuffer->getPrevious(); + else + CalledExceptBuffer->setPrevious(CurExceptBuffer->getPrevious()); + + // This called method frame exception buffer is now skipped, don't check it again. + CalledMarkerWalker = walker; + ++CalledMarkerWalker; + + skippedExceptHandler = true; + MoreFramesToCheck = !inLastCaller; // Still have method frames to check? + break; + } + + if (!MoreFramesToCheck) + break; + } +} +*/ +void Jnjvm::denyMethodExecution(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker) +{ + vmkit::StackWalker walker(CalledWalker); + do { + ++walker; + if (walker.getState() < vmkit::StackWalkerValidMetadata) continue; + + denyMethodExecution(*((JavaMethod*)walker.get()->Metadata)); + } while (walker != CallerWalker); +} + +void Jnjvm::denyMethodExecution(JavaMethod& method) +{ + void *redirectCode; + size_t redirectCodeSize; + if (isActivatorStopMethod(method)) { + redirectCode = (void*)(intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop; + redirectCodeSize = StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_CodeSize; + } else { + redirectCode = (void*)(intptr_t)StoppedIsolate_Redirect_CallToDeadMethod; + redirectCodeSize = StoppedIsolate_Redirect_CallToDeadMethod_CodeSize; + } + + if (method.code == redirectCode) + return; // Already denied, nothing to do + + if (method.code != NULL) { // Method was generated, overwrite its prolog code in memory + std::cout << "Patching prolog of method[generated,non-custom]=" << + *method.classDef->name << '.' << *method.name << + " in isolateID=" << getFrameIsolateID(method) << std::endl; + + redirectMethodProlog(method.code, redirectCode, redirectCodeSize); + + method.code = redirectCode; // Make the function point to the redirection code. + return; + } + + if (!method.isCustomizable) { + std::cout << "Patching prolog of method[not-generated,non-custom]=" << + *method.classDef->name << '.' << *method.name << + " in isolateID=" << getFrameIsolateID(method) << std::endl; + + method.code = redirectCode; // Make the function point to the redirection code. + return; + } + + // NOTE: + // We must NOT generate code here, because we might cause a dead lock while trying to obtain + // the LLVM-IR lock via protectIR(). + + // Avoid any further customizations to this method + JavaJITCompiler* compiler = static_cast(method.classDef->classLoader->getCompiler()); + LLVMMethodInfo* methodInfo = compiler->getMethodInfo(&method); + + method.isCustomizable = false; + methodInfo->isCustomizable = false; + + // Patch all the customized versions of the method. + LLVMMethodInfo::customizedVersionsType* methodVersions = methodInfo->getCustomizedVersions(); + for (LLVMMethodInfo::customizedVersionsIterator methodCode = methodVersions->begin(), + methodCodeEnd = methodVersions->end(); + methodCode != methodCodeEnd; + ++methodCode) + { + std::cout << "Patching prolog of method[generated,custom]=" << + *method.classDef->name << '.' << *method.name << + " customizedFor=" << *methodCode->first->name << + " in isolateID=" << getFrameIsolateID(method) << std::endl; + + void *code = compiler->executionEngine->getPointerToGlobal(methodCode->second); + redirectMethodProlog(code, redirectCode, redirectCodeSize); + } + + method.code = redirectCode; // Make the function point to the redirection code. +} + +bool Jnjvm::isActivatorStopMethod(JavaMethod& method) const +{ + /* + WARNING: We have made enough checks to be sure this method is: + public void stop(BundleContext bundleContext) throws Exception + + However, we must also check that the class of this method is the Activator of the bundle. + This would require calling org.osgi.framework.Bundle.getHeaders() and finding the + "Bundle-Activator" meta-data to compare it with method.classDef. + */ + if (!isPublic(method.access) || isStatic(method.access)) return false; + + const Signdef* sign = method.getSignature(); + if ((sign->nbArguments != 1) || !sign->getReturnType()->isVoid()) return false; + + JnjvmBootstrapLoader* bootstrapLoader = method.classDef->classLoader->bootstrapLoader; + return method.name->equals(bootstrapLoader->stop) + && (**sign->getArgumentsType()).keyName->equals(bootstrapLoader->org_osgi_framework_BundleContext); +} + +void Jnjvm::denyClassExecution(isolate_id_t isolateID, CommonClass& ccl) +{ + if ((ccl.classLoader->getIsolateID() != isolateID) + || ccl.isPrimitive() || ccl.isArray() || ccl.isInterface()) + return; + + if (ccl.super) + denyClassExecution(isolateID, *ccl.super); // Deny the super class, if any + + Class& cl = *ccl.asClass(); + for (size_t i=0; i < cl.nbInnerClasses; ++i) + denyClassExecution(isolateID, *cl.innerClasses[i]); // Deny inner classes, if any + + std::cout << "Denying class execution: " << *cl.name << std::endl; + + for (size_t i=0; i < cl.nbStaticMethods; ++i) + denyMethodExecution(cl.staticMethods[i]); // Deny static class methods + + for (size_t i=0; i < cl.nbVirtualMethods; ++i) + denyMethodExecution(cl.virtualMethods[i]); // Deny virtual object methods +} + +extern "C" void CalledStoppedIsolateMethod(void* methodIP) +{ + JavaThread *thread = JavaThread::get(); + JavaMethod* method = NULL; + thread->cleanUpOnDeadIsolateBeforeException(&methodIP, &method); + + if (method) { + std::cout << '[' << *thread << "] DeadIsolateException(ReturnedToStoppedIsolateMethod) in method=" << + *method->classDef->name << '.' << *method->name << std::endl; + } + + thread->MyVM->deadIsolateException(methodIP); + UNREACHABLE(); +} + +extern "C" void ReturnedToStoppedIsolateMethod(void* methodIP) +{ + JavaThread *thread = JavaThread::get(); + JavaMethod* method = NULL; + thread->cleanUpOnDeadIsolateBeforeException(&methodIP, &method); + + if (method) { + std::cout << '[' << *thread << "] DeadIsolateException(ReturnedToStoppedIsolateMethod) in method=" << + *method->classDef->name << '.' << *method->name << std::endl; + } + + thread->MyVM->deadIsolateException(methodIP); + UNREACHABLE(); +} + +void Jnjvm::deadIsolateException(void* methodIP, bool immediate) +{ + //error(upcalls->DeadIsolateException, upcalls->InitDeadIsolateException, str, immediate); + error( + upcalls->InterruptedException, upcalls->InitInterruptedException, + "Called method is implemented by a bundle that was stopped.", + immediate); +} + +#if defined(ARCH_X86) && defined(LINUX_OS) + +/* +This code treats the case where M0 calls M1 which calls M2 (Mi are Java methods) where: +- M1 belongs to the terminating isolate, and +- M0 and M2 do not. + +M2 will continue running as expected. But when it returns, instead of jumping to M1, it comes here. +In fact, M2 should have its on-stack return address patched to jump here. +So, this code will run in the stack frame of M1. This code will adjust the stack frame of M1 then +simulate a call to throw an exception. The adjustment made will make it seem as if M0 thrown the +exception directly. + +In short, this code transforms: M0 > M1 > M2 + into: M0 > throw exception + +NOTICE: +* The exception thrower function should never return to its caller, except to exception handlers. +* This code supposes that the calling convention of LLVM-generated code is cdecl. The stdcall calling + convention requires the called method to know the number of parameters it receives and to pop them + out on return (instruction: ret N), this would prohibit us from writing a generic code to patch the + stack, and would require dynamic code generation, or another way of doing things... +* This code must be position-independent because it might be copied elsewhere, so no relative + offsets should be generated. Careful choosing instructions. +*/ + +extern "C" void StoppedIsolate_Redirect_ReturnToDeadMethod() +{ + asm volatile ( + "mov %ebp, %esp \n" // Free all locals + "pop %ebp \n" // caller EBP ==> EBP + "push (%esp) \n" // Arg0 = ReturnAddress + // Copy the full function address into the register to avoid generating an offset-based call instruction. + "mov $ReturnedToStoppedIsolateMethod, %eax \n" + "jmp %eax \n" // simulate a call from caller + ); +} + +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod() +{ + asm volatile ( + "push (%esp) \n" // Arg0 = ReturnAddress + // Copy the full function address into the register to avoid generating an offset-based call instruction. + "mov $CalledStoppedIsolateMethod, %eax \n" + "jmp %eax \n" // simulate a call from caller + "StoppedIsolate_Redirect_CallToDeadMethod_End: \n" // Mark the end of code + + ".globl StoppedIsolate_Redirect_CallToDeadMethod_End \n" // Reserve space for the label address + ); +} + +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop() +{ + asm volatile ( + "ret \n" // Return directly to the caller + "StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End: \n"// Mark the end of code + + ".globl StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End \n"// Reserve space for the label address + ); +} + +/* +// NOTE: This works more correctly than __builtin_frame_address because this does NOT require stack frame to be setup. +extern "C" void* StoppedIsolate_GetEIP() +{ + asm volatile ( + "mov (%esp), %eax \n" + "ret \n" + ); +} + +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_Redirect() +{ + asm volatile ( + "sub $StoppedIsolate_Redirect_CallToDeadMethod_Code, %eax \n" + "add $StoppedIsolate_Redirect_CallToDeadMethod_Data, %eax \n" + "mov (%eax), %eax \n" + + "push %ebp \n" + "push %eax \n" + "mov $CalledStoppedIsolateMethod, %eax \n" + "call %eax \n" + ); +} + +extern "C" void StoppedIsolate_Redirect_CallToDeadMethod() +{ + asm volatile ( + "mov $StoppedIsolate_GetEIP, %eax \n" + "call %eax \n" + + "StoppedIsolate_Redirect_CallToDeadMethod_Code: \n" + "mov $StoppedIsolate_Redirect_CallToDeadMethod_Redirect, %ebx \n" + "jmp %ebx \n" + + "StoppedIsolate_Redirect_CallToDeadMethod_Data: \n" + ".fill 4 \n"// Enough to store a (void*) + "StoppedIsolate_Redirect_CallToDeadMethod_End: \n" + + ".globl StoppedIsolate_Redirect_CallToDeadMethod_End \n" + ); +} +*/ + +#else +#error "Sorry. Only Linux x86 is currently supported." +#endif Modified: vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h (original) +++ vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h Thu Apr 25 11:46:36 2013 @@ -29,6 +29,14 @@ namespace vmkit { using namespace j3; +extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); +extern "C" void* j3GetStaticInstance(UserClass* cl); +extern "C" void* j3GetCachedValue(UserClass* cl, uint32 index, isolate_id_t isolateID); +extern "C" JavaObject** j3GetClassDelegateePtr(UserCommonClass* commonCl); +extern "C" JavaObject* j3GetClassDelegatee(UserCommonClass* commonCl); +extern "C" UserClass* j3InitialisationCheck(UserClass* cl); +extern "C" UserClass* j3InitialisationCheckForJavaObject(JavaObject* obj); + extern "C" void* j3InterfaceLookup(UserClass* caller, uint32 index); extern "C" void* j3VirtualFieldLookup(UserClass* caller, uint32 index); extern "C" void* j3StaticFieldLookup(UserClass* caller, uint32 index); @@ -36,6 +44,7 @@ extern "C" void* j3VirtualTableLookup(Us extern "C" void* j3StringLookup(UserClass* cl, uint32 index); extern "C" void* j3ClassLookup(UserClass* caller, uint32 index); extern "C" UserCommonClass* j3RuntimeInitialiseClass(UserClass* cl); +extern "C" JavaObject** j3RuntimeDelegateePtr(UserCommonClass* cl); extern "C" JavaObject* j3RuntimeDelegatee(UserCommonClass* cl); extern "C" JavaArray* j3MultiCallNew(UserClassArray* cl, uint32 len, ...); extern "C" UserClassArray* j3GetArrayClass(UserCommonClass*, Modified: vmkit/trunk/lib/j3/VMCore/Reader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Reader.h?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Reader.h (original) +++ vmkit/trunk/lib/j3/VMCore/Reader.h Thu Apr 25 11:46:36 2013 @@ -44,7 +44,7 @@ public: uint32 cursor; uint32 max; - Reader(Attribut* attr, ClassBytes* bytes) { + Reader(JavaAttribute* attr, ClassBytes* bytes) { this->bytes = bytes; this->cursor = attr->start; this->min = attr->start; Modified: vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Thu Apr 25 11:46:36 2013 @@ -175,8 +175,8 @@ void CommonClass::tracer(word_t closure) } for (uint32 i = 0; i < NR_ISOLATES; ++i) { - if (delegatee[i] != NULL) { - vmkit::Collector::markAndTraceRoot(delegatee + i, closure); + if (getDelegatee(i) != NULL) { + vmkit::Collector::markAndTraceRoot(getDelegateePtr(i), closure); } } } @@ -184,13 +184,12 @@ void CommonClass::tracer(word_t closure) void Class::tracer(word_t closure) { CommonClass::tracer(closure); - for (uint32 i = 0; i < NR_ISOLATES; ++i) { - TaskClassMirror &M = IsolateInfo[i]; - if (M.staticInstance != NULL) { + for (uint32 isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) { + if (getStaticInstance(isolateID) != NULL) { for (uint32 i = 0; i < nbStaticFields; ++i) { JavaField& field = staticFields[i]; if (field.isReference()) { - JavaObject** ptr = field.getStaticObjectFieldPtr(); + JavaObject** ptr = field.getStaticObjectFieldPtr(isolateID); vmkit::Collector::markAndTraceRoot(ptr, closure); } } Modified: vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp Thu Apr 25 11:46:36 2013 @@ -90,7 +90,7 @@ void CooperativeCollectionRV::join() { th->inRV = true; lockRV(); - th->setLastSP(System::GetCallerAddress()); + th->setLastSP(StackWalker_getCallFrameAddress()); th->joinedRV = true; another_mark(); waitEndOfRV(); @@ -98,6 +98,8 @@ void CooperativeCollectionRV::join() { unlockRV(); th->inRV = false; + + th->runAfterLeavingGarbageCollectorRendezVous(); } void CooperativeCollectionRV::joinBeforeUncooperative() { @@ -108,6 +110,7 @@ void CooperativeCollectionRV::joinBefore th->inRV = true; lockRV(); + bool wasInRV = th->doYield; if (th->doYield) { if (!th->joinedRV) { th->joinedRV = true; @@ -118,9 +121,11 @@ void CooperativeCollectionRV::joinBefore unlockRV(); th->inRV = false; + + if (wasInRV) th->runAfterLeavingGarbageCollectorRendezVous(); } -void CooperativeCollectionRV::joinAfterUncooperative(word_t SP) { +void CooperativeCollectionRV::joinAfterUncooperative(void* SP) { vmkit::Thread* th = vmkit::Thread::get(); assert((th->getLastSP() == 0) && "SP set after entering uncooperative code"); @@ -128,6 +133,7 @@ void CooperativeCollectionRV::joinAfterU th->inRV = true; lockRV(); + bool wasInRV = th->doYield; if (th->doYield) { th->setLastSP(SP); if (!th->joinedRV) { @@ -140,6 +146,8 @@ void CooperativeCollectionRV::joinAfterU unlockRV(); th->inRV = false; + + if (wasInRV) th->runAfterLeavingGarbageCollectorRendezVous(); } extern "C" void conditionalSafePoint() { Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:46:36 2013 @@ -387,7 +387,7 @@ FatLock* LockSystem::getFatLockFromID(wo bool LockingThread::wait( - gc* self, LockSystem& table, struct timeval* info, bool timed) { + gc* self, LockSystem& table, struct timeval* info, bool& timed) { llvm_gcroot(self, 0); assert(vmkit::ThinLock::owner(self, table)); @@ -443,6 +443,7 @@ bool LockingThread::wait( l->firstThread->nextWaiting)) && "Inconsistent list"); bool interrupted = (this->interruptFlag != 0); + timed = timeout; if (interrupted || timeout) { if (this->nextWaiting) { Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc (original) +++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc Thu Apr 25 11:46:36 2013 @@ -39,8 +39,8 @@ void Handler::UpdateRegistersForNPE() { } void Handler::UpdateRegistersForStackOverflow() { - word_t alt_stack = vmkit::Thread::get()->GetAlternativeStackStart(); - ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBX] = System::GetIPFromCallerAddress(((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]); + greg_t alt_stack = (greg_t)vmkit::Thread::get()->GetAlternativeStackStart(); + ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBX] = (greg_t)StackWalker::getReturnAddressFromCallFrame((void*)((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]); ((ucontext_t*)context)->uc_mcontext.gregs[REG_EAX] = ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]; ((ucontext_t*)context)->uc_mcontext.gregs[REG_ESP] = alt_stack; ((ucontext_t*)context)->uc_mcontext.gregs[REG_EIP] = (word_t)HandleStackOverflow; Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp Thu Apr 25 11:46:36 2013 @@ -52,7 +52,7 @@ bool System::SupportsHardwareStackOverfl } #endif -extern "C" void ThrowStackOverflowError(word_t ip) { +extern "C" void ThrowStackOverflowError(void* ip) { vmkit::Thread* th = vmkit::Thread::get(); vmkit::FrameInfo* FI = th->MyVM->IPToFrameInfo(ip); if (FI->Metadata == NULL) { @@ -65,23 +65,15 @@ extern "C" void ThrowStackOverflowError( UNREACHABLE(); } -extern "C" void ThrowNullPointerException(word_t ip) { - vmkit::Thread* th = vmkit::Thread::get(); - vmkit::FrameInfo* FI = th->MyVM->IPToFrameInfo(ip); - if (FI->Metadata == NULL) { - fprintf(stderr, "Thread %p received a SIGSEGV: either the VM code or an external\n" - "native method is bogus. Aborting...\n", (void*)th); - abort(); - } else { - vmkit::Thread::get()->MyVM->nullPointerException(); - } - UNREACHABLE(); +extern "C" void ThrowNullPointerException(void* methodIP) +{ + vmkit::Thread::get()->throwNullPointerException(methodIP); } void sigsegvHandler(int n, siginfo_t *info, void *context) { Handler handler(context); vmkit::Thread* th = vmkit::Thread::get(); - word_t addr = (word_t)info->si_addr; + void* addr = (void*)info->si_addr; if (th->IsStackOverflowAddr(addr)) { if (vmkit::System::SupportsHardwareStackOverflow()) { handler.UpdateRegistersForStackOverflow(); Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 11:46:36 2013 @@ -16,6 +16,7 @@ #include "vmkit/Locks.h" #include "vmkit/Thread.h" +#include #include #include #include @@ -27,6 +28,27 @@ using namespace vmkit; +ExceptionBuffer::ExceptionBuffer() +{ + addToThreadExceptionList(0); + handlerIsolateID = Thread::get()->getIsolateID(); +} + +void ExceptionBuffer::addToThreadExceptionList(void* returnAddr) +{ + Thread* th = Thread::get(); + handlerMethod = returnAddr; + previousBuffer = th->lastExceptionBuffer; + th->lastExceptionBuffer = this; +} + +void ExceptionBuffer::removeFromThreadExceptionList() +{ + Thread* th = Thread::get(); + assert(th->lastExceptionBuffer == this && "Wrong exception buffer"); + th->lastExceptionBuffer = previousBuffer; +} + int Thread::kill(void* tid, int signo) { return pthread_kill((pthread_t)tid, signo); } @@ -53,13 +75,13 @@ void Thread::joinRVBeforeEnter() { MyVM->rendezvous.joinBeforeUncooperative(); } -void Thread::joinRVAfterLeave(word_t savedSP) { +void Thread::joinRVAfterLeave(void* savedSP) { MyVM->rendezvous.joinAfterUncooperative(savedSP); } void Thread::startKnownFrame(KnownFrame& F) { // Get the caller of this function - word_t cur = System::GetCallerAddress(); + void* cur = StackWalker_getCallFrameAddress(); F.previousFrame = lastKnownFrame; F.currentFP = cur; // This is used as a marker. @@ -74,12 +96,12 @@ void Thread::endKnownFrame() { void Thread::startUnknownFrame(KnownFrame& F) { // Get the caller of this function - word_t cur = System::GetCallerAddress(); + void* cur = StackWalker_getCallFrameAddress(); // Get the caller of the caller. - cur = System::GetCallerOfAddress(cur); + cur = StackWalker::getCallerCallFrameAddress(cur); F.previousFrame = lastKnownFrame; F.currentFP = cur; - F.currentIP = System::GetIPFromCallerAddress(cur); + F.currentIP = StackWalker::getReturnAddressFromCallFrame(cur); lastKnownFrame = &F; } @@ -89,23 +111,23 @@ void Thread::endUnknownFrame() { } void Thread::internalThrowException() { - LONGJMP(lastExceptionBuffer->buffer, 1); + LONGJMP(lastExceptionBuffer->getSetJmpBuffer(), 1); } void Thread::printBacktrace() { StackWalker Walker(this); while (FrameInfo* FI = Walker.get()) { - MyVM->printMethod(FI, Walker.ip, Walker.addr); + MyVM->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); ++Walker; } } -void Thread::getFrameContext(word_t* buffer) { +void Thread::getFrameContext(void** buffer) { vmkit::StackWalker Walker(this); uint32_t i = 0; - while (word_t ip = *Walker) { + while (void* ip = *Walker) { buffer[i++] = ip; ++Walker; } @@ -122,63 +144,185 @@ uint32_t Thread::getFrameContextLength() return i; } +void* StackWalker::getCallerCallFrameAddress(void* callFrame) +{ + void **oldBasePtr = (void**)callFrame; + return *oldBasePtr; +} + +void** StackWalker::getReturnAddressPtrFromCallFrame(void* callFrame) +{ + void **oldBasePtr = (void**)callFrame; + +#if defined(MACOS_OS) && defined(ARCH_PPC) + return oldBasePtr + 2; +#else + return oldBasePtr + 1; +#endif +} + +void* StackWalker::getReturnAddressFromCallFrame(void* callFrame) +{ + return *getReturnAddressPtrFromCallFrame(callFrame); +} + FrameInfo* StackWalker::get() { - if (addr == thread->baseSP) return 0; - ip = System::GetIPFromCallerAddress(addr); - return thread->MyVM->IPToFrameInfo(ip); + if (callFrame == thread->baseSP) return 0; + return thread->MyVM->IPToFrameInfo(getReturnAddress()); } -word_t StackWalker::operator*() { - if (addr == thread->baseSP) return 0; - ip = System::GetIPFromCallerAddress(addr); - return ip; +StackWalkerState StackWalker::getState() const +{ + const FrameInfo *fi = this->get(); + if (!fi) return StackWalkerInvalid; + if (!fi->Metadata) return StackWalkerValid; + return StackWalkerValidMetadata; } -void StackWalker::operator++() { - if (addr != thread->baseSP) { - assert((addr < thread->baseSP) && "Corrupted stack"); - assert((addr < System::GetCallerOfAddress(addr)) && "Corrupted stack"); - if ((frame != NULL) && (addr == frame->currentFP)) { - assert(frame->currentIP == 0); - frame = frame->previousFrame; - assert(frame != NULL); - assert(frame->currentIP != 0); - addr = frame->currentFP; - frame = frame->previousFrame; - } else { - addr = System::GetCallerOfAddress(addr); - } - } +void* StackWalker::operator*() { + if (callFrame == thread->baseSP) return 0; + return getReturnAddress(); } -StackWalker::StackWalker(vmkit::Thread* th) { - thread = th; - frame = th->lastKnownFrame; - if (vmkit::Thread::get() == th) { - addr = System::GetCallerAddress(); - addr = System::GetCallerOfAddress(addr); - } else { - addr = th->waitOnSP(); - if (frame) { - assert(frame->currentFP >= addr); - } - if (frame && (addr == frame->currentFP)) { - frame = frame->previousFrame; - // Let this be called from JNI, as in - // OpenJDK's JVM_FillInStackTrace: - if (frame && frame->currentIP != 0) +void* StackWalker::getCallerCallFrame() const +{ + StackWalker walker(*this); + ++walker; + return walker.getCallFrame(); +} + +void StackWalker::operator++() { + for (;;) { + if (callFrame != thread->baseSP) { + assert((callFrame < thread->baseSP) && "Corrupted stack"); + assert((callFrame < StackWalker::getCallerCallFrameAddress(callFrame)) && "Corrupted stack"); + if ((frame != NULL) && (callFrame == frame->currentFP)) { + assert(frame->currentIP == 0); + frame = frame->previousFrame; + assert(frame != NULL); + assert(frame->currentIP != 0); + callFrame = frame->currentFP; frame = frame->previousFrame; - assert((frame == NULL) || (frame->currentIP == 0)); + } else { + callFrame = StackWalker::getCallerCallFrameAddress(callFrame); + } } - } - assert(addr && "No address to start with"); -} + if (!onlyReportMetadataEnabledFrames) break; + StackWalkerState state = getState(); + if (state == StackWalkerInvalid || state == StackWalkerValidMetadata) break; + } +} + +void StackWalker::operator--() +{ + // The call stack is a singly-linked list of call frames whose head is the last + // called method frame. This means that implementing this feature (getting the + // called frame of the current frame) requires rescanning the whole stack from the + // beginning (the last called frame), which can be slow in some cases. + + StackWalker caller(*this, true); + StackWalker called(caller); + ++caller; + + for (void* currentAddr = this->getCallFrame(); + (caller.get() != NULL) && (caller.getCallFrame() != currentAddr); + called = caller, ++caller); + + assert((caller.get() != NULL) && "Caller of the current frame not found!"); + *this = called; +} + +// This code must be a macro because it must be directly called +//from its caller, with not additional function frames in between. +#define StackWalker_reset() \ +{ \ + if (vmkit::Thread::get() == thread) { \ + callFrame = StackWalker_getCallFrameAddress(); \ + callFrame = StackWalker::getCallerCallFrameAddress(callFrame); \ + } else { \ + callFrame = thread->waitOnSP(); \ + if (frame) assert(frame->currentFP >= callFrame); \ + if (frame && (callFrame == frame->currentFP)) { \ + frame = frame->previousFrame; \ + if (frame && frame->currentIP != 0) \ + frame = frame->previousFrame; \ + assert((frame == NULL) || (frame->currentIP == 0)); \ + } \ + } \ + assert(callFrame && "No address to start with"); \ + if (onlyReportMetadataEnabledFrames) { \ + FrameInfo *fi = this->get(); \ + if ((fi != NULL) && !fi->Metadata) ++(*(this)); \ + } \ +} + +StackWalker::StackWalker(vmkit::Thread* th, bool only_report_metadata_enabled_frames) : + callFrame(0), frame(th->lastKnownFrame), thread(th), + onlyReportMetadataEnabledFrames(only_report_metadata_enabled_frames) +{ + StackWalker_reset(); +} + +StackWalker::StackWalker(const StackWalker& obj, bool reset) : + callFrame(obj.callFrame), frame(obj.frame), thread(obj.thread), + onlyReportMetadataEnabledFrames(obj.onlyReportMetadataEnabledFrames) +{ + if (!reset) return; + StackWalker_reset(); +} + +void StackWalker::reset() +{ + StackWalker_reset(); +} + +StackWalker& StackWalker::operator = (const StackWalker& obj) +{ + callFrame = obj.callFrame; + frame = obj.frame; + thread = obj.thread; + onlyReportMetadataEnabledFrames = obj.onlyReportMetadataEnabledFrames; + return *this; +} + +void* StackWalker::updateReturnAddress(void* newAddr) +{ + void** retAddrPtr = StackWalker::getReturnAddressPtrFromCallFrame(callFrame); + void* oldRetAddr = *retAddrPtr; + *retAddrPtr = newAddr; + return oldRetAddr; +} + +void* StackWalker::updateCallerFrameAddress(void* newAddr) +{ + void **oldBasePtr = (void**)callFrame; + void* oldOldBasePtr = *oldBasePtr; + + for (void* framePtr = callFrame; framePtr != newAddr; framePtr = StackWalker::getCallerCallFrameAddress(framePtr)) { + for (KnownFrame *kf = thread->lastKnownFrame, *pkf = NULL; kf != NULL; pkf = kf, kf = kf->previousFrame) { + if (kf->currentFP != framePtr) continue; + + if (!pkf) + thread->lastKnownFrame = kf->previousFrame; + else + pkf->previousFrame = kf->previousFrame; + } + } + + *oldBasePtr = newAddr; + return oldOldBasePtr; +} + +void StackWalker::dump() const +{ + thread->MyVM->printCallStack(*this); +} void Thread::scanStack(word_t closure) { StackWalker Walker(this); while (FrameInfo* MI = Walker.get()) { - MethodInfoHelper::scan(closure, MI, Walker.ip, Walker.addr); + MethodInfoHelper::scan(closure, MI, Walker.getReturnAddress(), Walker.getCallFrame()); ++Walker; } } @@ -188,10 +332,10 @@ void Thread::enterUncooperativeCode(uint if (!inRV) { assert(!lastSP && "SP already set when entering uncooperative code"); // Get the caller. - word_t temp = System::GetCallerAddress(); + void* temp = StackWalker_getCallFrameAddress(); // Make sure to at least get the caller of the caller. ++level; - while (level--) temp = System::GetCallerOfAddress(temp); + while (level--) temp = StackWalker::getCallerCallFrameAddress(temp); // The cas is not necessary, but it does a memory barrier. __sync_bool_compare_and_swap(&lastSP, 0, temp); if (doYield) joinRVBeforeEnter(); @@ -200,7 +344,7 @@ void Thread::enterUncooperativeCode(uint } } -void Thread::enterUncooperativeCode(word_t SP) { +void Thread::enterUncooperativeCode(void* SP) { if (isVmkitThread()) { if (!inRV) { assert(!lastSP && "SP already set when entering uncooperative code"); @@ -216,7 +360,7 @@ void Thread::leaveUncooperativeCode() { if (isVmkitThread()) { if (!inRV) { assert(lastSP && "No last SP when leaving uncooperative code"); - word_t savedSP = lastSP; + void* savedSP = lastSP; // The cas is not necessary, but it does a memory barrier. __sync_bool_compare_and_swap(&lastSP, lastSP, 0); // A rendezvous has just been initiated, join it. @@ -226,9 +370,9 @@ void Thread::leaveUncooperativeCode() { } } -word_t Thread::waitOnSP() { +void* Thread::waitOnSP() { // First see if we can get lastSP directly. - word_t sp = lastSP; + void* sp = lastSP; if (sp) return sp; // Then loop a fixed number of iterations to get lastSP. @@ -322,13 +466,14 @@ public: StackThreadManager TheStackManager; extern void sigsegvHandler(int, siginfo_t*, void*); +//extern void interruptSignalHandler(int signal_number, siginfo_t *info, void *context); /// internalThreadStart - The initial function called by a thread. Sets some /// thread specific data, registers the thread to the GC and calls the /// given routine of th. /// void Thread::internalThreadStart(vmkit::Thread* th) { - th->baseSP = System::GetCallerAddress(); + th->baseSP = StackWalker_getCallFrameAddress(); // Set the alternate stack as the second page of the thread's // stack. @@ -339,11 +484,11 @@ void Thread::internalThreadStart(vmkit:: sigaltstack(&st, NULL); // Set the SIGSEGV handler to diagnose errors. - struct sigaction sa; - sigset_t mask; - sigfillset(&mask); + struct sigaction sa = {}; +// sigset_t mask; +// sigfillset(&mask); sa.sa_flags = SA_SIGINFO | SA_ONSTACK; - sa.sa_mask = mask; +// sa.sa_mask = mask; sa.sa_sigaction = sigsegvHandler; sigaction(SIGSEGV, &sa, NULL); sigaction(SIGBUS, &sa, NULL); @@ -398,3 +543,47 @@ void Thread::releaseThread(vmkit::Thread index = (index & ~TheStackManager.baseAddr) >> 20; TheStackManager.used[index] = 0; } + +isolate_id_t Thread::getValidIsolateID(isolate_id_t isolateID) +{ + if (isolateID != CURRENT_ISOLATE) return isolateID; + return Thread::get()->getIsolateID(); +} + +bool Thread::runsDeadIsolate() const +{ + return runningDeadIsolate; +} + +void Thread::markRunningDeadIsolate() +{ + runningDeadIsolate = true; +} + +void Thread::setIsolateID(isolate_id_t newIsolateID) +{ + isolateID = newIsolateID; +} + +isolate_id_t Thread::getIsolateID() const +{ + return isolateID; +} + +bool Thread::isCurrentThread() +{ + return (pthread_t)internalThreadID == pthread_self(); +} + +void Thread::throwNullPointerException(void* methodIP) const +{ + vmkit::FrameInfo* FI = MyVM->IPToFrameInfo(methodIP); + if (FI->Metadata == NULL) { + fprintf(stderr, "Thread %p received a SIGSEGV: either the VM code or an external\n" + "native method is bogus. Aborting...\n", (void*)this); + abort(); + } + + MyVM->nullPointerException(); + UNREACHABLE(); +} Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 11:46:36 2013 @@ -315,6 +315,7 @@ void BaseIntrinsics::init(llvm::Module* constantPtrZero = ConstantInt::get(pointerSizeType, 0); constantPtrNull = Constant::getNullValue(ptrType); + constantPtr32Null = Constant::getNullValue(ptr32Type); constantPtrLogSize = ConstantInt::get(Type::getInt32Ty(Context), kWordSizeLog2); arrayPtrType = PointerType::getUnqual(ArrayType::get(Type::getInt8Ty(Context), 0)); @@ -405,10 +406,10 @@ Frames* VmkitModule::addToVM(VirtualMach frame->FrameSize = FI->getFrameSize(); frame->Metadata = meta; frame->SourceIndex = I->Loc.getLine(); - frame->ReturnAddress = JCE->getLabelAddress(I->Label); - // If the safe point is fro an NPE, increment the return address to + frame->ReturnAddress = (void*)JCE->getLabelAddress(I->Label); + // If the safe point is from an NPE, increment the return address to // not clash with post calls. - if (I->Loc.getCol() == 1) frame->ReturnAddress += 1; + if (I->Loc.getCol() == 1) frame->ReturnAddress = (void*)((uintptr_t)frame->ReturnAddress + 1); int i = 0; for (llvm::GCFunctionInfo::live_iterator KI = FI->live_begin(I), KE = FI->live_end(I); KI != KE; ++KI) { Modified: vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll (original) +++ vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll Thu Apr 25 11:46:36 2013 @@ -70,7 +70,9 @@ declare void @fieldWriteBarrier(i8*, i8* declare void @nonHeapWriteBarrier(i8**, i8*) +; ExceptionBuffer. A size of 0 means an undefined size. +%ExceptionBuffer = type {i8*, i32, %ExceptionBuffer*, [0 x i8]} declare i32 @_setjmp(i8*) nounwind -declare void @registerSetjmp(i8*) nounwind -declare void @unregisterSetjmp(i8*) nounwind +declare void @registerSetjmp(%ExceptionBuffer*) nounwind +declare void @unregisterSetjmp(%ExceptionBuffer*) nounwind Modified: vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp Thu Apr 25 11:46:36 2013 @@ -19,25 +19,25 @@ namespace vmkit { -void MethodInfoHelper::scan(word_t closure, FrameInfo* FI, word_t ip, word_t addr) { - //word_t spaddr = (word_t)addr + FI->FrameSize + sizeof(void*); - word_t spaddr = System::GetCallerOfAddress(addr); +void MethodInfoHelper::scan(word_t closure, FrameInfo* FI, void* ip, void* callFrame) { + //void* spaddr = (void*)((intptr_t)callFrame + FI->FrameSize + sizeof(void*)); + void* spaddr = StackWalker::getCallerCallFrameAddress(callFrame); for (uint16 i = 0; i < FI->NumLiveOffsets; ++i) { - word_t obj = *(word_t*)(spaddr + FI->LiveOffsets[i]); + void* obj = *(void**)((intptr_t)spaddr + FI->LiveOffsets[i]); // Verify that obj does not come from a JSR bytecode. - if (!(obj & 1)) { - Collector::scanObject((void**)(spaddr + FI->LiveOffsets[i]), closure); + if (!((uintptr_t)obj & 1)) { + Collector::scanObject((void**)((intptr_t)spaddr + FI->LiveOffsets[i]), closure); } } } -void MethodInfoHelper::print(word_t ip, word_t addr) { +void MethodInfoHelper::print(void* ip, void* callFrame) { Dl_info info; - int res = dladdr((void*)ip, &info); + int res = dladdr(ip, &info); if (res != 0 && info.dli_sname != NULL) { - fprintf(stderr, "; %p (%p) in %s\n", (void*)ip, (void*)addr, info.dli_sname); + fprintf(stderr, "; %p (%p) in %s\n", ip, callFrame, info.dli_sname); } else { - fprintf(stderr, "; %p in Unknown method\n", (void*)ip); + fprintf(stderr, "; %p in Unknown method\n", ip); } } @@ -71,9 +71,9 @@ FunctionMap::FunctionMap(BumpPtrAllocato // Create a dummy FrameInfo, so that methods don't have to null check. static FrameInfo emptyInfo; -FrameInfo* FunctionMap::IPToFrameInfo(word_t ip) { +FrameInfo* FunctionMap::IPToFrameInfo(void* ip) { FunctionMapLock.acquire(); - llvm::DenseMap::iterator I = Functions.find(ip); + llvm::DenseMap::iterator I = Functions.find(ip); FrameInfo* res = NULL; if (I != Functions.end()) { res = I->second; @@ -87,7 +87,7 @@ FrameInfo* FunctionMap::IPToFrameInfo(wo } -void FunctionMap::addFrameInfo(word_t ip, FrameInfo* meth) { +void FunctionMap::addFrameInfo(void* ip, FrameInfo* meth) { FunctionMapLock.acquire(); addFrameInfoNoLock(ip, meth); FunctionMapLock.release(); Modified: vmkit/trunk/lib/vmkit/Runtime/Object.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/Object.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/Object.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/Object.cpp Thu Apr 25 11:46:36 2013 @@ -39,11 +39,13 @@ extern "C" void EmptyDestructor() { } extern "C" void registerSetjmp(ExceptionBuffer* buffer) { - buffer->init(); + void* callFrame = StackWalker_getCallFrameAddress(); + void* retAddr = StackWalker::getReturnAddressFromCallFrame(callFrame); + buffer->addToThreadExceptionList(retAddr); } extern "C" void unregisterSetjmp(ExceptionBuffer* buffer) { - buffer->remove(); + buffer->removeFromThreadExceptionList(); } void VirtualMachine::waitForExit() { Modified: vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp Thu Apr 25 11:46:36 2013 @@ -39,6 +39,32 @@ uint32 UTF8::readerHasher(const uint16* return (r1 & 255) + ((r0 & 255) << 8); } +std::string UTF8::toString() const +{ + std::string contents; + contents.resize(size); + + for (ssize_t i = 0; i < size; ++i) + contents[i] = (std::string::value_type)(elements[i]); + + return contents; +} + +int UTF8::compare(const char *s) const +{ + int len = strlen(s); + int diff = size - len; + if (diff != 0) return diff; + + for (int i = 0; (i < size) && (diff == 0); ++i) + diff = (char)(elements[i]) - s[i]; + return diff; +} + +void UTF8::dump() const +{ + std::cout << (const void *)this << ": " << toString() << std::endl; +} const UTF8* UTF8Map::lookupOrCreateAsciiz(const char* asciiz) { sint32 size = strlen(asciiz); Modified: vmkit/trunk/mmtk/java/build.xml.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/build.xml.in?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/build.xml.in (original) +++ vmkit/trunk/mmtk/java/build.xml.in Thu Apr 25 11:46:36 2013 @@ -1,7 +1,7 @@ - + Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:46:36 2013 @@ -113,6 +113,8 @@ void Collector::scanObject(void** ptr, w if ((*ptr) != NULL) { assert(((gc*)(*ptr))->getVirtualTable()); } + if (vmkit::Thread::get()->MyVM->resetDeadIsolateReference(NULL, ptr)) + return; JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr); } @@ -122,6 +124,8 @@ void Collector::markAndTrace(void* sourc assert(((gc*)(*ptr_))->getVirtualTable()); } if ((*(void**)ptr) != NULL) assert(((gc*)(*(void**)ptr))->getVirtualTable()); + if (vmkit::Thread::get()->MyVM->resetDeadIsolateReference(source, ptr_)) + return; JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr); } @@ -130,6 +134,8 @@ void Collector::markAndTraceRoot(void* p if ((*ptr_) != NULL) { assert(((gc*)(*ptr_))->getVirtualTable()); } + if (vmkit::Thread::get()->MyVM->resetDeadIsolateReference(NULL, ptr_)) + return; JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true); } Modified: vmkit/trunk/mmtk/mmtk-j3/Collection.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Collection.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/Collection.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/Collection.cpp Thu Apr 25 11:46:36 2013 @@ -41,6 +41,7 @@ extern "C" void Java_org_j3_mmtk_Collect JnJVM_org_j3_bindings_Bindings_collect__I(why); + th->MyVM->endCollectionBeforeUnblockingThreads(); th->MyVM->rendezvous.finishRV(); th->MyVM->endCollection(); } Added: vmkit/trunk/tests/debug.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/debug.txt?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/debug.txt (added) +++ vmkit/trunk/tests/debug.txt Thu Apr 25 11:46:36 2013 @@ -0,0 +1,30 @@ +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticExposer_1.0.0.jar +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticClient_1.0.0.jar +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticClient_1.0.1.jar +start 10 11 12 + + +stop 10 11 12 + +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticExposer_1.0.0.jar +start 10 +stop 10 +framework uninstall 10 +framework meminfo -gc +framework meminfo -gc + +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.looper_1.0.0.jar +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.tier_1.0.0.jar +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.loopClient_1.0.0.jar +install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.isolateKiller_1.0.0.jar +start 10 11 12 + +framework call ijvm.isolate.isolatemanager.IsolateManager killBundles ijvm.tests.tier ijvm.tests.looper + +framework call ijvm.isolate.isolatemanager.IsolateManager killBundle ijvm.tests.looper + +framework call ijvm.isolate.isolatemanager.IsolateManager killBundle ijvm.tests.tierImpl + +framework call ijvm.tests.looper.LoopController cancelLoop + +framework meminfo -gc Added: vmkit/trunk/tests/i-jvm-log.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/i-jvm-log.txt?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/i-jvm-log.txt (added) +++ vmkit/trunk/tests/i-jvm-log.txt Thu Apr 25 11:46:36 2013 @@ -0,0 +1,129 @@ +I-JVM + +============================================================================== +Direct access to static string: +============================================================================== + +INFO[2:21:22.804 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:21:22.805 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:21:22.805 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:21:23.432 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:21:23.432 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:21:23.433 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:21:23.806 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:21:23.806 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:21:23.807 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:21:24.433 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:21:24.434 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:21:24.434 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| + +============================================================================== +Access to static string through a getter function: +============================================================================== + +INFO[2:42:21.715 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:21.987 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:21.988 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:21.988 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:22.989 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:22.990 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:22.990 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:23.990 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:23.991 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:23.991 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:24.991 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:24.992 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:24.992 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:25.992 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:25.993 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:25.993 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:26.993 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:26.993 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:26.994 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:27.994 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:27.995 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:27.995 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:28.996 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:28.996 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:28.996 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:42:29.996 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:42:29.997 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:42:29.997 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| + +============================================================================== +Direct and getter-based access to static object (Integer): +============================================================================== + +INFO[17:57:28.139 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:28.744 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:28.744 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:28.776 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 +INFO[17:57:29.776 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:29.776 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:29.777 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 +INFO[17:57:30.777 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:30.777 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:30.777 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 +INFO[17:57:31.778 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:31.778 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:31.778 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 +INFO[17:57:32.778 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:32.779 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:32.779 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 +INFO[17:57:33.779 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:33.779 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:33.779 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 +INFO[17:57:34.780 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:34.780 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:34.780 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 +INFO[17:57:35.780 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:35.781 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:35.781 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 +INFO[17:57:36.781 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> +INFO[17:57:36.781 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| +INFO[17:57:36.781 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 + +============================================================================== +Forced isolate termination: +============================================================================== + +INFO[17:59:55.807 @ b5bab9e4 ijvm.tests.isolatekiller.Activator.killTheIsolate] Killed TierService bundle. +INFO[17:59:55.808 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... + +Exception in thread "Tier worker" java.lang.InterruptedException + at ijvm.tests.tier.Activator.run(Activator.java:68) + at java.lang.Thread.run(Thread.java:743) + at java.lang.VMThread.run(VMThread.java:120) + +INFO[17:59:58.809 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... +INFO[18:0:1.810 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... +INFO[18:0:4.810 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... +INFO[18:0:7.811 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... +INFO[18:0:10.811 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... +INFO[18:0:13.812 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... +INFO[18:0:15.809 @ b5bab9e4 ijvm.tests.isolatekiller.Activator.killTheIsolate] Cancelling LoopController loop... +INFO[18:0:15.830 @ b5bab9e4 ijvm.tests.looper.LoopControllerImpl.cancelLoop] Cancel looping +INFO[18:0:15.830 @ b5bab9e4 ijvm.tests.isolatekiller.Activator.killTheIsolate] Cancelled LoopController loop. +INFO[18:0:16.813 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Done looping + +INFO[18:0:19.454 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.callMeBack] ijvm.tests.looper.LoopControllerImpl.callMeBack +java.lang.InterruptedException + at ijvm.tests.tier.TierServiceImpl.callBack(TierServiceImpl.java:57) + at ijvm.tests.looper.LoopControllerImpl.callMeBack(LoopControllerImpl.java:38) + at ijvm.tests.tier.TierServiceImpl.beforeLeaving(TierServiceImpl.java:47) + at ijvm.tests.tier.TierServiceImpl.thenAnotherThing(TierServiceImpl.java:35) + at ijvm.tests.tier.TierServiceImpl.doSomething(TierServiceImpl.java:23) + at ijvm.tests.loopclient.Activator.run(Activator.java:54) + at java.lang.Thread.run(Thread.java:743) + at java.lang.VMThread.run(VMThread.java:120) + +INFO[18:0:21.548 @ 9bd7e20 ijvm.tests.loopclient.Activator.run] ijvm.tests.loopclient.Activator.run +java.lang.InterruptedException + at ijvm.tests.tier.TierServiceImpl.beforeLeaving(TierServiceImpl.java:47) + at ijvm.tests.tier.TierServiceImpl.thenAnotherThing(TierServiceImpl.java:35) + at ijvm.tests.tier.TierServiceImpl.doSomething(TierServiceImpl.java:23) + at ijvm.tests.loopclient.Activator.run(Activator.java:54) + at java.lang.Thread.run(Thread.java:743) + at java.lang.VMThread.run(VMThread.java:120) + +INFO[18:0:21.549 @ 9bd7e20 ijvm.tests.loopclient.Activator.run] Loop client done. Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,28 @@ + + + ijvm.isolate.IsolateManager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF Thu Apr 25 11:46:36 2013 @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: IsolateManager +Bundle-SymbolicName: ijvm.isolate.IsolateManager;singleton:=true +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.isolate.IsolateManagerActivator +Import-Package: org.osgi.framework;version="1.3.0", + org.osgi.service.packageadmin;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.4 +Bundle-Vendor: Koutheir Attouchi +Export-Package: ijvm.isolate.isolatemanager Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties Thu Apr 25 11:46:36 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,40 @@ +package ijvm.isolate; + + +import ijvm.isolate.isolatemanager.IsolateManager; +import ijvm.isolate.util.IsolateLogger; + +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +public class IsolateManagerActivator + implements BundleActivator +{ + private Logger log; + private IsolateManagerImpl serviceImpl; + + public void start(BundleContext context) throws Exception + { + log = IsolateLogger.createLogger(IsolateManagerActivator.class.getName()); + log.info("STARTING"); + + // Create the service implementation + serviceImpl = new IsolateManagerImpl(log); + serviceImpl.open(context); + + // Register the service + context.registerService(IsolateManager.class.getName(), serviceImpl, new Hashtable()); + } + + public void stop(BundleContext context) throws Exception + { + serviceImpl.close(); + serviceImpl = null; + + log.info("DONE"); + log = null; + } +} Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,167 @@ +package ijvm.isolate; + +import ijvm.isolate.isolatemanager.IsolateManager; +import ijvm.isolate.vm.IJVM; + +import java.security.InvalidParameterException; +import java.util.ArrayList; +import java.util.Dictionary; +import java.util.List; +import java.util.logging.Logger; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.FrameworkListener; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.Version; +import org.osgi.service.packageadmin.PackageAdmin; + + +class IsolateManagerImpl + implements IsolateManager, FrameworkListener +{ + private Logger log; + private BundleContext context; + private List isolatesToKill; + + public IsolateManagerImpl(Logger log) + { + this.log = log; + isolatesToKill = new ArrayList(); + } + + public void open(BundleContext context) + { + this.context = context; + // We need to know when packages are refreshed + context.addFrameworkListener(this); + } + + public void close() + { + context.removeFrameworkListener(this); + } + + Bundle getBundle(String symbolicName) + { + Bundle[] bundles = context.getBundles(); + for (int i=0; i < bundles.length; ++i) { + if (symbolicName.equals(bundles[i].getSymbolicName())) + return bundles[i]; + } + return null; + } + + public void killBundle(String bundleName) throws Exception + { + log.info("Killing bundle: " + bundleName); + killBundles(new Bundle[] {getBundle(bundleName)}); + log.info("Killed bundle."); + } + + public void killBundles(String bundleName1, String bundleName2) throws Exception + { + log.info("Killing bundles: " + bundleName1 + ", " + bundleName2); + killBundles(new Bundle[] {getBundle(bundleName1), getBundle(bundleName2)}); + log.info("Killed bundles."); + } + + public void killBundles(Bundle[] bundles) throws Exception + { + // We kill bundles asynchronously + final Object intializedLock = new Object(); + final Bundle[] theBundles = bundles; + + Thread worker = new Thread(new Runnable() { + public void run() + { + try { + killBundlesThread(intializedLock, theBundles); + } catch (Exception e) { + log.info(IsolateManagerImpl.class.getName() + ".killBundles"); + e.printStackTrace(); + } + } + }, "Bundles killer"); + worker.start(); + + synchronized (intializedLock) { + intializedLock.wait(); + } + // At this point, we are sure the bundle execution is denied + } + + void killBundlesThread(final Object intializedLock, final Bundle[] bundles) throws Exception + { + synchronized (isolatesToKill) { + while (!isolatesToKill.isEmpty()) { + log.info("Previous killBundles operation pending..."); + isolatesToKill.wait(4000); + } + } + + long[] isolateID = new long[bundles.length]; + for (int i = 0; i < bundles.length; ++i) { + String activatorClassName = (String)bundles[i].getHeaders().get("Bundle-Activator"); + Object activatorObject = bundles[i].loadClass(activatorClassName).newInstance(); + isolateID[i] = IJVM.getObjectIsolateID(activatorObject); + activatorObject = null; + } + + // Disable bundle execution + log.info("Denying bundles execution..."); + IJVM.disableIsolates(isolateID, true, false); + + synchronized (intializedLock) { // Enable caller to continue + intializedLock.notify(); + } + + // Stop and uninstall the bundles + // NOTE: As the bundle Activator.stop() method is specially patched to return directly + // without doing anything, we can call it. + log.info("Stopping and uninstalling bundles..."); + for (int i = 0; i < bundles.length; ++i) { + bundles[i].stop(); + bundles[i].uninstall(); + } + + synchronized (isolatesToKill) { + for (int i = 0; i < bundles.length; ++i) + isolatesToKill.add(i, new Long(isolateID[i])); + + isolatesToKill.notifyAll(); + } + + log.info("Refreshing framework..."); + ServiceReference pkgAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); + PackageAdmin pkgAdmin = (PackageAdmin)context.getService(pkgAdminRef); + pkgAdmin.refreshPackages(bundles); + } + + public void frameworkEvent(FrameworkEvent event) + { + if (event.getType() != FrameworkEvent.PACKAGES_REFRESHED) return; + + log.info("Framework refreshed."); + + long[] isolateID = null; + + synchronized (isolatesToKill) { + int isolateCount = isolatesToKill.size(); + if (isolateCount > 0) { + isolateID = new long[isolateCount]; + for (int i = 0; i < isolateCount; ++i) + isolateID[i] = ((Long)isolatesToKill.get(i)).longValue(); + + isolatesToKill.clear(); + isolatesToKill.notifyAll(); + } + } + + if (isolateID == null) return; + + log.info("Resetting isolate references..."); + IJVM.disableIsolates(isolateID, true, true); + } +} Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,11 @@ +package ijvm.isolate.isolatemanager; + +import org.osgi.framework.Bundle; +import org.osgi.framework.Version; + +public interface IsolateManager +{ + public void killBundles(Bundle[] bundles) throws Exception; + public void killBundles(String bundleName1, String bundleName2) throws Exception; + public void killBundle(String bundleName) throws Exception; +} Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,47 @@ +package ijvm.isolate.util; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.logging.ConsoleHandler; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +public class IsolateLogger + extends java.util.logging.Formatter +{ + public static Logger createLogger(String className) + { + Logger log = Logger.getAnonymousLogger(); + + Handler logConsoleHandler = new ConsoleHandler(); + logConsoleHandler.setFormatter(new IsolateLogger()); + log.addHandler(logConsoleHandler); + + log.setUseParentHandlers(false); + log.setLevel(Level.INFO); + return log; + } + + public String format(LogRecord record) + { + Calendar cal = GregorianCalendar.getInstance(); + cal.setTime(new Date(record.getMillis())); + String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + + cal.get(Calendar.MINUTE) + ":" + + cal.get(Calendar.SECOND) + "." + + cal.get(Calendar.MILLISECOND); + + StringBuffer str = new StringBuffer(256); + str.append(record.getLevel().getName() + + "[" + logTime + + " @ " + Integer.toHexString(record.getThreadID()) + " " + + record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + + record.getMessage() + "\n" + ); + + return str.toString(); + } +} Added: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java (added) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,9 @@ +package ijvm.isolate.vm; + +import java.util.ArrayList; + +public class IJVM +{ + public static native int getObjectIsolateID(Object object); + public static native void disableIsolates(long[] isolateID, boolean denyIsolateExecution, boolean resetIsolateReferences); +} Added: vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.StaticClient/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/.project (added) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,34 @@ + + + ijvm.tests.StaticClient + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.pde.api.tools.apiAnalysisBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.api.tools.apiAnalysisNature + + Added: vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF Thu Apr 25 11:46:36 2013 @@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: StaticClient +Bundle-SymbolicName: ijvm.tests.StaticClient +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.staticclient.Activator +Import-Package: ijvm.tests.staticexposer, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.4 Added: vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties Thu Apr 25 11:46:36 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java (added) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,41 @@ +package ijvm.tests.logging; + +import java.util.*; +import java.util.logging.*; + +public class InlineFormatter + extends java.util.logging.Formatter +{ + public static Logger createLogger(String className) + { + Logger log = Logger.getAnonymousLogger(); + + Handler logConsoleHandler = new ConsoleHandler(); + logConsoleHandler.setFormatter(new InlineFormatter()); + log.addHandler(logConsoleHandler); + + log.setUseParentHandlers(false); + log.setLevel(Level.INFO); + return log; + } + + public String format(LogRecord record) + { + Calendar cal = GregorianCalendar.getInstance(); + cal.setTime(new Date(record.getMillis())); + String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + + cal.get(Calendar.MINUTE) + ":" + + cal.get(Calendar.SECOND) + "." + + cal.get(Calendar.MILLISECOND); + + StringBuffer str = new StringBuffer(256); + str.append(record.getLevel().getName() + + "[" + logTime + + " @ " + Integer.toHexString(record.getThreadID()) + " " + + record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + + record.getMessage() + "\n" + ); + + return str.toString(); + } +} Added: vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,93 @@ +package ijvm.tests.staticclient; + +import java.util.logging.Logger; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.util.tracker.ServiceTracker; + +import ijvm.tests.logging.InlineFormatter; +import ijvm.tests.staticexposer.StaticExposer; + + +public class Activator + implements BundleActivator, Runnable +{ + private StaticExposer service; + private ServiceTracker serviceTracker; + private Thread thread; + boolean stopThread; + Logger log; + + public void start(BundleContext context) throws Exception + { + log = InlineFormatter.createLogger(Activator.class.getName()); + log.info("STARTING"); + + serviceTracker = new ServiceTracker(context, StaticExposer.class.getName(), null); + serviceTracker.open(); + service = (StaticExposer)serviceTracker.getService(); + + stopThread = false; + thread = new Thread(this, "Sync Client"); + thread.start(); + } + + public void stop(BundleContext context) throws Exception + { + stopThread = true; + thread.join(); + thread = null; + + serviceTracker.close(); + serviceTracker = null; + + log.info("DONE"); + log = null; + } + + public void run() + { + try { + while (!stopThread) { + log.info(">>|"); +// sync1(); + sync2(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void sync1() throws InterruptedException + { +// synchronized(service.theStaticString) { + synchronized(service.getStaticString()) { + log.info("|*|"); + Thread.sleep(1000); + log.info("|>>"); + } + } + + private void sync2() throws InterruptedException + { + synchronized(service.getStaticInteger()) { + int r = xync3(); + int m = xync4(); + + log.info("|*| r = " + r + ", m = " + m); + Thread.sleep(1000); + log.info("|>>"); + } + } + + private int xync3() + { + return service.getStaticInteger().intValue(); + } + + private int xync4() + { + return service.theStaticInteger.intValue(); + } +} Added: vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.StaticExposer/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/.project (added) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,34 @@ + + + ijvm.tests.StaticExposer + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.pde.api.tools.apiAnalysisBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.api.tools.apiAnalysisNature + + Added: vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF Thu Apr 25 11:46:36 2013 @@ -0,0 +1,9 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: StaticExposer +Bundle-SymbolicName: ijvm.tests.StaticExposer +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.staticexposer.Activator +Import-Package: org.osgi.framework;version="1.3.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.4 +Export-Package: ijvm.tests.staticexposer;uses:="org.osgi.framework" Added: vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties Thu Apr 25 11:46:36 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,25 @@ +package ijvm.tests.staticexposer; + +import java.util.Hashtable; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +public class Activator + implements BundleActivator +{ + private StaticExposer service; + + public void start(BundleContext context) throws Exception + { + service = new StaticExposerImpl(); + + Hashtable properties = new Hashtable(); + context.registerService(StaticExposer.class.getName(), service, properties); + } + + public void stop(BundleContext context) throws Exception + { + service = null; + } +} Added: vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java (added) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,10 @@ +package ijvm.tests.staticexposer; + +public interface StaticExposer +{ + public String theStaticString = "Hello World Two"; + public Integer theStaticInteger = new Integer((int)(Math.random() * 1000.0)); + + public String getStaticString(); + public Integer getStaticInteger(); +} Added: vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,15 @@ +package ijvm.tests.staticexposer; + +public class StaticExposerImpl + implements StaticExposer +{ + public String getStaticString() + { + return theStaticString; + } + + public Integer getStaticInteger() + { + return theStaticInteger; + } +} Added: vmkit/trunk/tests/ijvm.tests.loopClient/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/.classpath?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.loopClient/.classpath Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.loopClient/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/.project (added) +++ vmkit/trunk/tests/ijvm.tests.loopClient/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.loopClient + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF Thu Apr 25 11:46:36 2013 @@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: LoopClient +Bundle-SymbolicName: ijvm.tests.loopClient +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.loopclient.Activator +Import-Package: ijvm.tests.tier, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.4 Added: vmkit/trunk/tests/ijvm.tests.loopClient/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/build.properties?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.loopClient/build.properties Thu Apr 25 11:46:36 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java (added) +++ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,41 @@ +package ijvm.tests.logging; + +import java.util.*; +import java.util.logging.*; + +public class InlineFormatter + extends java.util.logging.Formatter +{ + public static Logger createLogger(String className) + { + Logger log = Logger.getAnonymousLogger(); + + Handler logConsoleHandler = new ConsoleHandler(); + logConsoleHandler.setFormatter(new InlineFormatter()); + log.addHandler(logConsoleHandler); + + log.setUseParentHandlers(false); + log.setLevel(Level.INFO); + return log; + } + + public String format(LogRecord record) + { + Calendar cal = GregorianCalendar.getInstance(); + cal.setTime(new Date(record.getMillis())); + String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + + cal.get(Calendar.MINUTE) + ":" + + cal.get(Calendar.SECOND) + "." + + cal.get(Calendar.MILLISECOND); + + StringBuffer str = new StringBuffer(256); + str.append(record.getLevel().getName() + + "[" + logTime + + " @ " + Integer.toHexString(record.getThreadID()) + " " + + record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + + record.getMessage() + "\n" + ); + + return str.toString(); + } +} Added: vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,101 @@ +package ijvm.tests.loopclient; + +import java.util.ArrayList; +import java.util.logging.Logger; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceListener; +import org.osgi.util.tracker.ServiceTracker; + +import ijvm.tests.logging.InlineFormatter; +import ijvm.tests.tier.TierService; +import ijvm.tests.tier.Utility; + +public class Activator + implements BundleActivator, ServiceListener, Runnable +{ + private BundleContext context; + private Logger log; + + private ServiceTracker serviceTracker; + private TierService service; + + private Thread thread; + private ArrayList utilArray; + + public void start(BundleContext context) throws Exception + { + this.context = context; + log = InlineFormatter.createLogger(Activator.class.getName()); + log.info("STARTING"); + + serviceTracker = new ServiceTracker(context, TierService.class.getName(), null); + serviceTracker.open(); + service = (TierService)serviceTracker.getService(); + context.addServiceListener(this, "(objectclass=" + TierService.class.getName() + ")"); + + thread = new Thread(this, "Loop Client"); + thread.start(); + } + + public void stop(BundleContext bundleContext) throws Exception + { + log.info("Stopping..."); + + this.context = null; + + thread.join(); + thread = null; + + serviceTracker.close(); + serviceTracker = null; + service = null; + + log.info("DONE"); + log = null; + } + + public void serviceChanged(ServiceEvent event) + { + Object serviceObj = context.getService(event.getServiceReference()); + + switch(event.getType()) { + case ServiceEvent.REGISTERED: + if (TierService.class.isInstance(serviceObj)) + service = (TierService)serviceObj; + break; + + case ServiceEvent.UNREGISTERING: + if (TierService.class.isInstance(serviceObj)) + service = null; + break; + } + } + + public void run() + { + log.info("Loop client running..."); + + utilArray = new ArrayList(1); + utilArray.add( + service.getSomething()); + + try { + service.doSomething(); + } catch (Exception e) { + log.info(Activator.class.getName() + ".run"); + e.printStackTrace(); + } + + try { + ((Utility)utilArray.get(0)).getSomething(); + } catch (Exception e) { + log.info(Activator.class.getName() + ".run"); + e.printStackTrace(); + } + + log.info("Loop client done."); + } +} Added: vmkit/trunk/tests/ijvm.tests.looper/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/.classpath?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.looper/.classpath Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.looper/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/.project (added) +++ vmkit/trunk/tests/ijvm.tests.looper/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.looper + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF Thu Apr 25 11:46:36 2013 @@ -0,0 +1,9 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Looper +Bundle-SymbolicName: ijvm.tests.looper +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.looper.Activator +Import-Package: org.osgi.framework;version="1.3.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.4 +Export-Package: ijvm.tests.looper Added: vmkit/trunk/tests/ijvm.tests.looper/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/build.properties?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.looper/build.properties Thu Apr 25 11:46:36 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java (added) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,41 @@ +package ijvm.tests.logging; + +import java.util.*; +import java.util.logging.*; + +public class InlineFormatter + extends java.util.logging.Formatter +{ + public static Logger createLogger(String className) + { + Logger log = Logger.getAnonymousLogger(); + + Handler logConsoleHandler = new ConsoleHandler(); + logConsoleHandler.setFormatter(new InlineFormatter()); + log.addHandler(logConsoleHandler); + + log.setUseParentHandlers(false); + log.setLevel(Level.INFO); + return log; + } + + public String format(LogRecord record) + { + Calendar cal = GregorianCalendar.getInstance(); + cal.setTime(new Date(record.getMillis())); + String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + + cal.get(Calendar.MINUTE) + ":" + + cal.get(Calendar.SECOND) + "." + + cal.get(Calendar.MILLISECOND); + + StringBuffer str = new StringBuffer(256); + str.append(record.getLevel().getName() + + "[" + logTime + + " @ " + Integer.toHexString(record.getThreadID()) + " " + + record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + + record.getMessage() + "\n" + ); + + return str.toString(); + } +} Added: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,39 @@ +package ijvm.tests.looper; + +import ijvm.tests.logging.InlineFormatter; + +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + + + +public class Activator + implements BundleActivator +{ + private Logger log; + private LoopController service; + + public void start(BundleContext context) throws Exception + { + log = InlineFormatter.createLogger(Activator.class.getName()); + log.info("STARTING"); + + service = new LoopControllerImpl(log); + + context.registerService(LoopController.class.getName(), service, new Hashtable()); + } + + public void stop(BundleContext context) throws Exception + { + log.info("Stopping..."); + + service.cancelLoop(); + service = null; + + log.info("DONE"); + log = null; + } +} Added: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java (added) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,6 @@ +package ijvm.tests.looper; + +public interface CallBack +{ + public void callBack() throws Exception; +} Added: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java (added) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,9 @@ +package ijvm.tests.looper; + +public interface LoopController +{ + public void loop() throws Exception; + public void callMeBack(CallBack cb) throws Exception; + public void cancelLoop(); + public void keepThis(Object o); +} Added: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,50 @@ +package ijvm.tests.looper; + +import java.util.logging.Logger; + +public class LoopControllerImpl + implements LoopController +{ + protected boolean cancelLoop; + private Logger log; + private Object keptObj; + + public LoopControllerImpl(Logger log) + { + this.log = log; + } + + public void loop() throws Exception + { + log.info("Start looping"); + + cancelLoop = false; + while (!cancelLoop) { + log.info("Still looping..."); + Thread.sleep(10000); + } + + log.info("Done looping"); + } + + public void cancelLoop() + { + log.info("Cancel looping"); + cancelLoop = true; + } + + public void callMeBack(CallBack cb) throws Exception + { + try { + cb.callBack(); + } catch (Exception e) { + log.info(LoopControllerImpl.class.getName() + ".callMeBack"); + e.printStackTrace(); + } + } + + public void keepThis(Object o) + { + keptObj = o; + } +} Added: vmkit/trunk/tests/ijvm.tests.tier/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/.classpath?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.tier/.classpath Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.tier/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/.project (added) +++ vmkit/trunk/tests/ijvm.tests.tier/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.tier + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF Thu Apr 25 11:46:36 2013 @@ -0,0 +1,9 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Tier +Bundle-SymbolicName: ijvm.tests.tier +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.tier.Activator +Import-Package: org.osgi.framework;version="1.3.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.4 +Export-Package: ijvm.tests.tier Added: vmkit/trunk/tests/ijvm.tests.tier/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/build.properties?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.tier/build.properties Thu Apr 25 11:46:36 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java (added) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,41 @@ +package ijvm.tests.logging; + +import java.util.*; +import java.util.logging.*; + +public class InlineFormatter + extends java.util.logging.Formatter +{ + public static Logger createLogger(String className) + { + Logger log = Logger.getAnonymousLogger(); + + Handler logConsoleHandler = new ConsoleHandler(); + logConsoleHandler.setFormatter(new InlineFormatter()); + log.addHandler(logConsoleHandler); + + log.setUseParentHandlers(false); + log.setLevel(Level.INFO); + return log; + } + + public String format(LogRecord record) + { + Calendar cal = GregorianCalendar.getInstance(); + cal.setTime(new Date(record.getMillis())); + String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + + cal.get(Calendar.MINUTE) + ":" + + cal.get(Calendar.SECOND) + "." + + cal.get(Calendar.MILLISECOND); + + StringBuffer str = new StringBuffer(256); + str.append(record.getLevel().getName() + + "[" + logTime + + " @ " + Integer.toHexString(record.getThreadID()) + " " + + record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + + record.getMessage() + "\n" + ); + + return str.toString(); + } +} Added: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,26 @@ +package ijvm.tests.tier; + +import ijvm.tests.logging.InlineFormatter; + +import java.util.logging.Logger; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +public class Activator + implements BundleActivator +{ + private Logger log; + + public void start(BundleContext bundleContext) throws Exception + { + log = InlineFormatter.createLogger(Activator.class.getName()); + log.info("STARTING"); + } + + public void stop(BundleContext bundleContext) throws Exception + { + log.info("DONE"); + log = null; + } +} Added: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java (added) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ +package ijvm.tests.tier; + +public interface TierService +{ + public void doSomething() throws Exception; + public Utility getSomething(); +} Added: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java (added) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ +package ijvm.tests.tier; + +public interface Utility +{ + public int getSomething(); + public void setSomething(int x); +} Added: vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath Thu Apr 25 11:46:36 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.tierImpl/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/.project?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/.project (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/.project Thu Apr 25 11:46:36 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.tierImpl + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF Thu Apr 25 11:46:36 2013 @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: TierImpl +Bundle-SymbolicName: ijvm.tests.tierImpl +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.tierImpl.Activator +Import-Package: ijvm.tests.looper, + ijvm.tests.tier, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.4 Added: vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties Thu Apr 25 11:46:36 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,41 @@ +package ijvm.tests.logging; + +import java.util.*; +import java.util.logging.*; + +public class InlineFormatter + extends java.util.logging.Formatter +{ + public static Logger createLogger(String className) + { + Logger log = Logger.getAnonymousLogger(); + + Handler logConsoleHandler = new ConsoleHandler(); + logConsoleHandler.setFormatter(new InlineFormatter()); + log.addHandler(logConsoleHandler); + + log.setUseParentHandlers(false); + log.setLevel(Level.INFO); + return log; + } + + public String format(LogRecord record) + { + Calendar cal = GregorianCalendar.getInstance(); + cal.setTime(new Date(record.getMillis())); + String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + + cal.get(Calendar.MINUTE) + ":" + + cal.get(Calendar.SECOND) + "." + + cal.get(Calendar.MILLISECOND); + + StringBuffer str = new StringBuffer(256); + str.append(record.getLevel().getName() + + "[" + logTime + + " @ " + Integer.toHexString(record.getThreadID()) + " " + + record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + + record.getMessage() + "\n" + ); + + return str.toString(); + } +} Added: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,117 @@ +package ijvm.tests.tierImpl; + +import ijvm.tests.logging.InlineFormatter; +import ijvm.tests.looper.LoopController; +import ijvm.tests.tier.TierService; + +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceListener; +import org.osgi.util.tracker.ServiceTracker; + + +public class Activator + implements BundleActivator, ServiceListener, Runnable +{ + private BundleContext context; + private Logger log; + + private ServiceTracker loopControllerTracker; + private LoopController loopControllerService; + + private TierServiceImpl serviceImpl; + + private Thread thread; + private boolean stopThread; + + + public void start(BundleContext context) throws Exception + { + this.context = context; + log = InlineFormatter.createLogger(Activator.class.getName()); + log.info("STARTING"); + + loopControllerTracker = new ServiceTracker(context, LoopController.class.getName(), null); + loopControllerTracker.open(); + loopControllerService = (LoopController)loopControllerTracker.getService(); + context.addServiceListener(this, "(objectclass=" + LoopController.class.getName() + ")"); + + serviceImpl = new TierServiceImpl(log); + serviceImpl.setLoopControllerService(loopControllerService); + + context.registerService(TierService.class.getName(), serviceImpl, new Hashtable()); + +// thread = new Thread(this, "Tier worker"); +// stopThread = false; +// thread.start(); + } + + public void stop(BundleContext bundleContext) throws Exception + { + log.info("Stopping..."); + + this.context = null; + + if (thread != null) { + stopThread = true; + thread.join(); + thread = null; + } + + serviceImpl = null; + + loopControllerTracker.close(); + loopControllerTracker = null; + loopControllerService = null; + + log.info("DONE"); + log = null; + } + + public void serviceChanged(ServiceEvent event) + { + Object serviceObj = context.getService(event.getServiceReference()); + + switch(event.getType()) { + case ServiceEvent.REGISTERED: + if (LoopController.class.isInstance(serviceObj)) + serviceImpl.setLoopControllerService((LoopController)serviceObj); + break; + + case ServiceEvent.UNREGISTERING: + if (LoopController.class.isInstance(serviceObj)) + serviceImpl.setLoopControllerService(null); + break; + } + } + + public void run() + { + log.info("Tier thread running..."); + +// for (;;) {} + + try { +/* + boolean done; + for (done = false; !done; ) { + done = false; + } + + Thread.sleep(1000); +*/ + while (!stopThread) { + Thread.sleep(1000); + } + } catch (InterruptedException e) { + log.info(Activator.class.getName() + ".run"); + e.printStackTrace(); + } + + log.info("Tier thread done."); + } +} Added: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,77 @@ +package ijvm.tests.tierImpl; + +import ijvm.tests.looper.CallBack; +import ijvm.tests.looper.LoopController; +import ijvm.tests.tier.TierService; +import ijvm.tests.tier.Utility; + +import java.util.ArrayList; +import java.util.logging.Logger; + +public class TierServiceImpl + implements TierService, CallBack +{ + private Logger log; + private LoopController loopControllerService; + + TierServiceImpl(Logger log) + { + this.loopControllerService = null; + this.log = log; + } + + public void setLoopControllerService(LoopController loopControllerService) + { + this.loopControllerService = loopControllerService; + } + + public void doSomething() throws Exception + { + log.info("Now doing something"); + + try { + thenAnotherThing(); + } catch (Exception e) { + log.info(TierServiceImpl.class.getName() + ".doSomething"); + e.printStackTrace(); + } + + log.info("Done something"); + } + + public void thenAnotherThing() throws Exception + { + try { + beforeLeaving(); + } catch (Exception e) { + log.info(TierServiceImpl.class.getName() + ".thenAnotherThing"); + e.printStackTrace(); + } + } + + public void beforeLeaving() throws Exception + { + try { + loopControllerService.callMeBack(this); + } catch (Exception e) { + log.info(TierServiceImpl.class.getName() + ".beforeLeaving"); + e.printStackTrace(); + } + } + + public void callBack() throws Exception + { + try { + loopControllerService.keepThis(this); + loopControllerService.loop(); + } catch (Exception e) { + log.info(TierServiceImpl.class.getName() + ".callBack"); + e.printStackTrace(); + } + } + + public Utility getSomething() + { + return new UtilityImpl(22); + } +} Added: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java Thu Apr 25 11:46:36 2013 @@ -0,0 +1,30 @@ +package ijvm.tests.tierImpl; + +import ijvm.tests.tier.Utility; + +public class UtilityImpl + implements Utility +{ + int something; + + UtilityImpl(int x) + { + something = x; + } + + protected void finalize() throws Throwable + { + System.out.println("UtilityImpl.finalize()"); + something = -1; + } + + public int getSomething() + { + return something; + } + + public void setSomething(int x) + { + something = x; + } +} Added: vmkit/trunk/tests/minimal.xargs URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/minimal.xargs?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/minimal.xargs (added) +++ vmkit/trunk/tests/minimal.xargs Thu Apr 25 11:46:36 2013 @@ -0,0 +1,28 @@ +-Dorg.knopflerfish.framework.main.verbosity=0 +-Dorg.knopflerfish.gosg.jars=file:jars/ +-Forg.knopflerfish.framework.debug.errors=true +-Forg.knopflerfish.framework.debug.packages=false +-Forg.knopflerfish.framework.debug.classloader=false +-Forg.osgi.framework.system.packages.extra= + +-Forg.knopflerfish.startlevel.use=true + +-init + +-install log/log_api-3.1.2.jar +-install console/console_api-3.0.3.jar +-istart cm/cm_api-3.0.4.jar +-istart log/log-3.1.2.jar +-istart console/console-3.0.3.jar +-istart consoletty/consoletty-3.0.1.jar +-istart frameworkcommands/frameworkcommands-3.0.4.jar +-istart logcommands/logcommands-3.1.1.jar +-istart useradmin/useradmin_api-3.0.2.jar + +-istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.isolate.IsolateManager_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.looper_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.tier_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.tierImpl_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.loopClient_1.0.0.jar + +-launch Added: vmkit/trunk/tests/sun-jvm-log.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/sun-jvm-log.txt?rev=180279&view=auto ============================================================================== --- vmkit/trunk/tests/sun-jvm-log.txt (added) +++ vmkit/trunk/tests/sun-jvm-log.txt Thu Apr 25 11:46:36 2013 @@ -0,0 +1,58 @@ +Sun JVM + +Direct access to static string. + +INFO[2:24:52.372 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:24:52.373 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:24:52.378 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:24:53.373 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:24:53.373 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:24:53.373 @ c vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:24:54.374 @ c vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:24:54.374 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:24:54.374 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:24:55.374 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:24:55.375 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:24:55.375 @ c vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:24:56.375 @ c vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:24:56.375 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:24:56.375 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:24:57.376 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:24:57.376 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:24:57.376 @ c vmkit.tests.staticstringclient.Activator.sync] |*| + +Access to static string through a getter function. + +INFO[2:45:5.298 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:5.308 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:5.309 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:6.308 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:6.308 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:6.308 @ c vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:7.309 @ c vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:7.309 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:7.309 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:8.310 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:8.310 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:8.310 @ c vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:9.310 @ c vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:9.310 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:9.310 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:10.311 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:10.311 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:10.311 @ c vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:11.312 @ c vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:11.312 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:11.312 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:12.312 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:12.313 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:12.313 @ c vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:13.313 @ c vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:13.313 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:13.313 @ b vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:14.314 @ b vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:14.314 @ b vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:14.314 @ c vmkit.tests.staticstringclient.Activator.sync] |*| +INFO[2:45:15.314 @ c vmkit.tests.staticstringclient.Activator.sync] |>> +INFO[2:45:15.315 @ c vmkit.tests.staticstringclient.Activator.run] >>| +INFO[2:45:15.315 @ b vmkit.tests.staticstringclient.Activator.sync] |*| Modified: vmkit/trunk/tools/precompiler/trainer/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/tools/precompiler/trainer/Makefile (original) +++ vmkit/trunk/tools/precompiler/trainer/Makefile Thu Apr 25 11:46:36 2013 @@ -33,7 +33,7 @@ generated.bc: $(PRECOMPILER) HelloWorld. Precompiled.bc: HelloWorld.class $(LibDir)/StaticGCPass$(SHLIBEXT) $(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc $(Echo) "Building precompiled bootstrap code" $(Verb) $(MKDIR) $(ObjDir) - $(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim -O3 -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc -o $(ObjDir)/Precompiled.s + $(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim $(PRECOMPILER_FLAGS) -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc -o $(ObjDir)/Precompiled.s $(Verb) $(CC) -c $(ObjDir)/Precompiled.s -o $(ObjDir)/Precompiled.o $(Verb) $(Archive) $(LibDir)/libPrecompiled.a $(ObjDir)/Precompiled.o $(Verb) $(Ranlib) $(LibDir)/libPrecompiled.a Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180279&r1=180278&r2=180279&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 11:46:36 2013 @@ -124,7 +124,11 @@ int main(int argc, char **argv) { vmkit::VmkitModule::initialise(argc, argv); vmkit::Collector::initialise(argc, argv); - JavaAOTCompiler* Comp = new JavaAOTCompiler("AOT"); + // WARNING: This is a silly method to discover that we are compiling MMTk. + // Please change to anything more deterministic. + bool compilingMMTk = (DisableExceptions && DisableCooperativeGC && DisableStubs && AssumeCompiled); + + JavaAOTCompiler* Comp = new JavaAOTCompiler("AOT", compilingMMTk); vmkit::BumpPtrAllocator allocator; JnjvmBootstrapLoader* loader = new(allocator, "Bootstrap loader") From peter.senna at gmail.com Thu Apr 25 09:49:00 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:00 -0000 Subject: [vmkit-commits] [vmkit] r180284 - Modified header access. Debug version mode, have to modify llvm intrinsics constants Message-ID: <20130425164724.39CCD2A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:47:23 2013 New Revision: 180284 URL: http://llvm.org/viewvc/llvm-project?rev=180284&view=rev Log: Modified header access. Debug version mode, have to modify llvm intrinsics constants (cherry picked from commit 52f0a707b6cb7503c47f665cce1c09e429fab50e) Modified: vmkit/trunk/include/vmkit/GC.h vmkit/trunk/include/vmkit/System.h vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp vmkit/trunk/lib/j3/VMCore/JavaObject.cpp vmkit/trunk/lib/j3/VMCore/Jni.cpp vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Modified: vmkit/trunk/include/vmkit/GC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/GC.h?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/GC.h (original) +++ vmkit/trunk/include/vmkit/GC.h Thu Apr 25 11:47:23 2013 @@ -33,7 +33,7 @@ public: virtual ~gcRoot() {} virtual void tracer(word_t closure) {} - word_t& header(){return _header; } + word_t& header(){return toHeader()->_header; } inline gcHeader* toHeader() { return (gcHeader*)((uintptr_t)this - gcHeader::hiddenHeaderSize()); } Modified: vmkit/trunk/include/vmkit/System.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/System.h?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/System.h (original) +++ vmkit/trunk/include/vmkit/System.h Thu Apr 25 11:47:23 2013 @@ -203,9 +203,9 @@ public: static uint8_t* GetLastBytePtr(word_t ptr) { #if ARCH_PPC - return ((uint8_t*)ptr) + 2 * vmkit::kWordSize - 1; + return ((uint8_t*)ptr) + vmkit::kWordSize - 1; #else - return ((uint8_t*)ptr) + vmkit::kWordSize; + return ((uint8_t*)ptr); #endif } Modified: vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h (original) +++ vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h Thu Apr 25 11:47:23 2013 @@ -36,7 +36,8 @@ public: llvm_gcroot(Class, 0); res = (VMStaticInstance*)gc::operator new(sizeof(VMStaticInstance), &VT); res->OwningClass = Class; - + printf("VMStaticInstance operator new @%p\n", res); + fflush(NULL); return res; } Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:47:23 2013 @@ -1915,7 +1915,7 @@ void JavaJIT::invokeNew(uint16 index) { Class* cl = 0; Value* Cl = getResolvedClass(index, true, true, &cl); - + Value* VT = 0; Value* Size = 0; Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:47:23 2013 @@ -12,6 +12,8 @@ #include "debug.h" #include "types.h" +#include "vmkit/System.h" + #include "ClasspathReflect.h" #include "JavaArray.h" #include "JavaClass.h" @@ -270,6 +272,8 @@ JavaObject* UserClassArray::doNew(sint32 uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); res = (JavaObject*)gc::operator new(size, VT); JavaArray::setSize(res, n); + printf("UserClassArray operator new @%p\n", res); + fflush(NULL); return res; } @@ -451,7 +455,8 @@ JavaObject* UserClass::doNew(Jnjvm* vm, && "Uninitialized class when allocating."); assert(getVirtualVT() && "No VT\n"); res = (JavaObject*)gc::operator new(getVirtualSize(), getVirtualVT()); - + printf("UserClass operator new @%p\n", res); + fflush(NULL); return res; } Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp Thu Apr 25 11:47:23 2013 @@ -159,7 +159,10 @@ JavaConstantPool::operator new(size_t sz uint32 ctpSize) { // NOTICE: 'size' is not the final size of the object, as it does more allocations in the constructor uint32 size = sz + ctpSize * (sizeof(void*) + sizeof(sint32) + sizeof(uint8)); - return allocator.Allocate(size, "Constant pool"); + void* res = allocator.Allocate(size, "Constant pool"); + printf("JavaConstantPool operator new @%p\n", res); + fflush(NULL); + return res; } JavaConstantPool::JavaConstantPool(Class* cl, Reader& reader, uint32 size) { Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 11:47:23 2013 @@ -74,6 +74,9 @@ void JavaObject::waitIntern( vmkit::LockSystem& table = thread->getJVM()->lockSystem; if (!owner(self)) { + printf("IN JavaObject.cpp: 77 EXCEPTION\n"); + thread->printBacktrace(); + thread->getJVM()->exit(); thread->getJVM()->illegalMonitorStateException(self); UNREACHABLE(); } @@ -128,6 +131,12 @@ void JavaObject::notify(JavaObject* self vmkit::LockSystem& table = thread->getJVM()->lockSystem; if (!owner(self)) { + fflush(NULL); + printf("IN JavaObject.cpp: 128 EXCEPTION\n"); + thread->printBacktrace(); + fflush(NULL); + thread->getJVM()->exit(); + thread->getJVM()->illegalMonitorStateException(self); UNREACHABLE(); } @@ -140,6 +149,10 @@ void JavaObject::notifyAll(JavaObject* s vmkit::LockSystem& table = thread->getJVM()->lockSystem; if (!owner(self)) { + printf("IN JavaObject.cpp: 140 EXCEPTION\n"); + thread->printBacktrace(); + thread->getJVM()->exit(); + thread->getJVM()->illegalMonitorStateException(self); UNREACHABLE(); } Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Thu Apr 25 11:47:23 2013 @@ -3851,6 +3851,7 @@ jint MonitorExit(JNIEnv *env, jobject _o if (Obj != NULL) { if (!JavaObject::owner(Obj)) { + printf("IN Jni.cpp: 3854 EXCEPTION\n"); JavaThread::get()->getJVM()->illegalMonitorStateException(Obj); } Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:47:23 2013 @@ -1122,6 +1122,7 @@ void Jnjvm::loadBootstrap() { (void (*)(vmkit::Thread*))FinalizerThread::finalizerStart); referenceThread = new ReferenceThread(this); + printf("Reference Thread is @%p\n", referenceThread); referenceThread->start( (void (*)(vmkit::Thread*))ReferenceThread::enqueueStart); Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:47:23 2013 @@ -483,6 +483,8 @@ public: VMClassLoader* res = 0; llvm_gcroot(res, 0); res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT); + printf("VMClassLoader operator new @%p\n", res); + fflush(NULL); return res; } Modified: vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h (original) +++ vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h Thu Apr 25 11:47:23 2013 @@ -40,7 +40,12 @@ public: ReferenceQueue(uint8_t s) { + printf("Allocating ReferenceQueue !\n"); References = new gc*[INITIAL_QUEUE_SIZE]; + if(*((gc**)0x5000B030)){ + printf("HEADER OF EXCEPTION OBJ : %08llX\n", ((gc*)(0x5000B030))->header()); + } + printf("ReferenceQueue (initial size = %d\trange : start @%p - end @%p\n", INITIAL_QUEUE_SIZE, References, References + INITIAL_QUEUE_SIZE); memset(References, 0, INITIAL_QUEUE_SIZE * sizeof(gc*)); QueueLength = INITIAL_QUEUE_SIZE; CurrentIndex = 0; Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:47:23 2013 @@ -19,6 +19,9 @@ #include #include +#include "../../j3/VMCore/JavaObject.h" +#include "../../j3/VMCore/JavaClass.h" +#include "../../j3/VMCore/UTF8.h" namespace vmkit { @@ -189,6 +192,7 @@ void ThinLock::acquire(gc* object, LockS } assert(owner(object, table) && "Not owner after quitting acquire!"); + printf("LOCK ACQUIRED curThread = %08llX, OWNER of object @%p on ThreadIDMask = %08llX\n", id, object, object->header() & System::GetThreadIDMask()); } /// release - Release the lock. @@ -199,6 +203,7 @@ void ThinLock::release(gc* object, LockS word_t oldValue = 0; word_t newValue = 0; word_t yieldedValue = 0; + if ((object->header() & ~NonLockBitsMask) == id) { do { oldValue = object->header(); @@ -218,6 +223,9 @@ void ThinLock::release(gc* object, LockS yieldedValue = __sync_val_compare_and_swap(&(object->header()), oldValue, newValue); } while ((object->header() & ThinCountMask) == count); } + + printf("LOCK RELEASED curThread = %08llX, OWNER of object @%p on ThreadIDMask = %08llX\n", id, object, object->header() & System::GetThreadIDMask()); + } /// owner - Returns true if the curren thread is the owner of this object's @@ -225,11 +233,19 @@ void ThinLock::release(gc* object, LockS bool ThinLock::owner(gc* object, LockSystem& table) { llvm_gcroot(object, 0); if (object->header() & FatMask) { + printf("OWNER on FatMask\n"); FatLock* obj = table.getFatLockFromID(object->header()); if (obj != NULL) return obj->owner(); } else { + bool res = false; uint64 id = vmkit::Thread::get()->getThreadID(); - if ((object->header() & System::GetThreadIDMask()) == id) return true; + res = ((object->header() & System::GetThreadIDMask()) == id); + printf("CHECK OWNER curThread = %08llX, OWNER of object @%p (header @%p) on ThreadIDMask = %08llX\n", id, object, &object->header(), object->header() & System::GetThreadIDMask()); + fflush(NULL); + if (res) + return true; + else + printf("THREAD IS NOT THE OWNER OF OBJECT %p OF TYPE %s\n", object, j3::UTF8Buffer(((j3::JavaVirtualTable*)(object->getVirtualTable()))->cl->getName()).cString()); } return false; } Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 11:47:23 2013 @@ -525,6 +525,8 @@ void* Thread::operator new(size_t sz) { void* res = (void*)TheStackManager.allocate(); // Make sure the thread information is cleared. if (res != NULL) memset(res, 0, sz); + printf("Thread operator new @%p\n", res); + fflush(NULL); return res; } Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:47:23 2013 @@ -210,8 +210,8 @@ void Collector::initialise(int argc, cha } extern "C" void* MMTkMutatorAllocate(uint32_t size, VirtualTable* VT) { - void* val = MutatorThread::get()->Allocator.Allocate(size); - ((void**)val)[0] = VT; + gc* val = (gc*)MutatorThread::get()->Allocator.Allocate(size); + val->setVirtualTable(VT); return val; } Modified: vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h (original) +++ vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h Thu Apr 25 11:47:23 2013 @@ -28,7 +28,7 @@ struct MMTkVirtualTable : public Virtual struct MMTkObject { MMTkVirtualTable* virtualTable; - word_t header; + gcHeader header; }; struct MMTkArray : public MMTkObject { Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180284&r1=180283&r2=180284&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:47:23 2013 @@ -19,7 +19,7 @@ extern "C" word_t Java_org_j3_mmtk_Objec } extern "C" word_t Java_org_j3_mmtk_ObjectModel_GC_1HEADER_1OFFSET__ (MMTkObject* OM) { - return gcHeader::hiddenHeaderSize() + sizeof(void*); + return 0; } extern "C" word_t Java_org_j3_mmtk_ObjectModel_readAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { @@ -35,16 +35,16 @@ extern "C" gcHeader* Java_org_j3_mmtk_Ob return obj ? obj->toHeader() : 0; } -extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { - return obj ? obj->toHeader() : 0; +extern "C" gc* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { + return obj; } extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { - return *vmkit::System::GetLastBytePtr(reinterpret_cast(obj)); + return *vmkit::System::GetLastBytePtr(reinterpret_cast(&(obj->header()))); } extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2B (MMTkObject* OM, gc* obj, uint8_t val) { - *vmkit::System::GetLastBytePtr(reinterpret_cast(obj)) = val; + *vmkit::System::GetLastBytePtr(reinterpret_cast(&(obj->header()))) = val; } extern "C" gc* Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 (MMTkObject* OM, gcHeader* obj) { @@ -88,10 +88,10 @@ extern "C" word_t Java_org_j3_mmtk_Objec MMTkObject* OM, gc* src, int allocator) { size_t size = vmkit::Thread::get()->MyVM->getObjectSize(src); size = llvm::RoundUpToAlignment(size, sizeof(void*)); - word_t res = JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II( + gc* res = (gc*)JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II( src, src->getVirtualTable(), size, allocator); - assert((((word_t*)res)[1] & ~vmkit::GCBitMask) == (((word_t*)src)[1] & ~vmkit::GCBitMask)); - return res; + assert((res->header() & ~vmkit::GCBitMask) == (src->header() & ~vmkit::GCBitMask)); + return (word_t)res; } extern "C" void Java_org_j3_mmtk_ObjectModel_copyTo__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2 ( From peter.senna at gmail.com Thu Apr 25 09:49:02 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:02 -0000 Subject: [vmkit-commits] [vmkit] r180282 - use of accessor to get header of object Message-ID: <20130425164659.695472A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:46:59 2013 New Revision: 180282 URL: http://llvm.org/viewvc/llvm-project?rev=180282&view=rev Log: use of accessor to get header of object (cherry picked from commit 17baa0ffd0a427aab836c3f876dd8420dc053369) Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180282&r1=180281&r2=180282&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:46:59 2013 @@ -306,8 +306,8 @@ bool FatLock::acquire(gc* obj) { internalLock.unlock(); return false; } - assert(obj->header & ThinLock::FatMask); - assert((obj->header & ~ThinLock::NonLockBitsMask) == getID()); + assert(obj->header() & ThinLock::FatMask); + assert((obj->header() & ~ThinLock::NonLockBitsMask) == getID()); return true; } From peter.senna at gmail.com Thu Apr 25 09:49:08 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:08 -0000 Subject: [vmkit-commits] [vmkit] r180286 - Undo erroneous changes Message-ID: <20130425164737.429E12A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:47:36 2013 New Revision: 180286 URL: http://llvm.org/viewvc/llvm-project?rev=180286&view=rev Log: Undo erroneous changes (cherry picked from commit 711c66b795a6fc464e4c8d6a3a361ac3d8c7cfeb) Modified: vmkit/trunk/include/j3/J3Intrinsics.h vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Modified: vmkit/trunk/include/j3/J3Intrinsics.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=180286&r1=180285&r2=180286&view=diff ============================================================================== --- vmkit/trunk/include/j3/J3Intrinsics.h (original) +++ vmkit/trunk/include/j3/J3Intrinsics.h Thu Apr 25 11:47:36 2013 @@ -103,8 +103,8 @@ public: llvm::Function* GetFinalFloatFieldFunction; llvm::Function* GetFinalDoubleFieldFunction; + llvm::Constant* JavaArraySizeOffsetConstant; llvm::Constant* JavaArrayElementsOffsetConstant; - llvm::Constant* HeaderArraySizeOffsetConstant; llvm::Constant* HeaderObjectLockOffsetConstant; llvm::Constant* JavaObjectVTOffsetConstant; Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180286&r1=180285&r2=180286&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 11:47:36 2013 @@ -116,9 +116,8 @@ void J3Intrinsics::init(llvm::Module* mo - JavaArrayElementsOffsetConstant = constantOne; - //JavaArraySizeOffsetConstant = constantOne; - HeaderArraySizeOffsetConstant = constantZero; + JavaArrayElementsOffsetConstant = constantTwo; + JavaArraySizeOffsetConstant = constantOne; // JavaObjectLockOffsetConstant = constantOne; HeaderObjectLockOffsetConstant = constantZero; @@ -256,3 +255,4 @@ void J3Intrinsics::init(llvm::Module* mo OffsetHandlerIsolateIDInExceptionBufferConstant = constantOne; OffsetSetJmpBufferInExceptionBufferConstant = constantThree; } + Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180286&r1=180285&r2=180286&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 11:47:36 2013 @@ -2164,12 +2164,16 @@ void JavaJIT::compileOpcodes(Reader& rea TheVT = new BitCastInst(TheVT, intrinsics->ptrType, "", currentBlock); Instruction* res = invoke(intrinsics->AllocateFunction, size, TheVT, "", currentBlock); + Value* cast = new BitCastInst(res, intrinsics->JavaArrayType, "", + currentBlock); - - Value* header = objectToHeader(res); // Set the size + Value* gep4[2] = { intrinsics->constantZero, + intrinsics->JavaArraySizeOffsetConstant }; + Value* GEP = GetElementPtrInst::Create(cast, gep4, "", currentBlock); + arg1 = new IntToPtrInst(arg1, intrinsics->ptrType, "", currentBlock); - new StoreInst(arg1, header, currentBlock); + new StoreInst(arg1, GEP, currentBlock); addHighLevelType(res, dcl ? dcl : upcalls->ArrayOfObject); res = new BitCastInst(res, intrinsics->JavaObjectType, "", currentBlock); Modified: vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp?rev=180286&r1=180285&r2=180286&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Thu Apr 25 11:47:36 2013 @@ -133,7 +133,7 @@ bool LowerConstantCalls::runOnFunction(F Value* val = Call.getArgument(0); // get the array Value* array = new BitCastInst(val, intrinsics->JavaArrayType, "", CI); - Value* args[2] = { intrinsics->constantZero, + Value* args[2] = { intrinsics->constantZero, intrinsics->JavaArraySizeOffsetConstant }; Value* ptr = GetElementPtrInst::Create(array, args, "", CI); Value* load = new LoadInst(ptr, "", CI); From peter.senna at gmail.com Thu Apr 25 09:49:24 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:24 -0000 Subject: [vmkit-commits] [vmkit] r180285 - Modified lock , JavaArray size / elements access. Message-ID: <20130425164731.463D52A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:47:30 2013 New Revision: 180285 URL: http://llvm.org/viewvc/llvm-project?rev=180285&view=rev Log: Modified lock , JavaArray size / elements access. (cherry picked from commit 3e25e3bb4a434434914d49221430be25efe82c28) Modified: vmkit/trunk/include/j3/J3Intrinsics.h vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.h vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Modified: vmkit/trunk/include/j3/J3Intrinsics.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=180285&r1=180284&r2=180285&view=diff ============================================================================== --- vmkit/trunk/include/j3/J3Intrinsics.h (original) +++ vmkit/trunk/include/j3/J3Intrinsics.h Thu Apr 25 11:47:30 2013 @@ -30,9 +30,8 @@ public: llvm::Type* JavaArrayDoubleType; llvm::Type* JavaArrayObjectType; - llvm::Type* ExceptionBufferType; llvm::Type* VTType; - llvm::Type* JavaVTType; + llvm::Type* ObjectHeaderType; llvm::Type* JavaObjectType; llvm::Type* JavaArrayType; llvm::Type* JavaCommonClassType; @@ -45,7 +44,7 @@ public: llvm::Type* UTF8Type; llvm::Type* JavaMethodType; llvm::Type* JavaFieldType; - llvm::Type* AttributeType; + llvm::Type* AttributType; llvm::Type* JavaThreadType; llvm::Type* MutatorThreadType; llvm::Type* J3DenseMapType; @@ -60,7 +59,6 @@ public: llvm::Function* PrintMethodEndFunction; llvm::Function* InitialiseClassFunction; llvm::Function* InitialisationCheckFunction; - llvm::Function* InitialisationCheckForJavaObjectFunction; llvm::Function* ForceInitialisationCheckFunction; llvm::Function* ForceLoadedCheckFunction; llvm::Function* ClassLookupFunction; @@ -84,10 +82,6 @@ public: llvm::Function* MultiCallNewFunction; llvm::Function* GetArrayClassFunction; -// llvm::Function *CodeMarker1Function, *CodeMarker2Function; - llvm::Function* SetIsolateFunction; - llvm::Function* GetCachedValueFunction; - llvm::Function* GetClassDelegateePtrFunction; llvm::Function* GetClassDelegateeFunction; llvm::Function* RuntimeDelegateeFunction; llvm::Function* ArrayLengthFunction; @@ -109,9 +103,9 @@ public: llvm::Function* GetFinalFloatFieldFunction; llvm::Function* GetFinalDoubleFieldFunction; - llvm::Constant* JavaArraySizeOffsetConstant; llvm::Constant* JavaArrayElementsOffsetConstant; - llvm::Constant* JavaObjectLockOffsetConstant; + llvm::Constant* HeaderArraySizeOffsetConstant; + llvm::Constant* HeaderObjectLockOffsetConstant; llvm::Constant* JavaObjectVTOffsetConstant; llvm::Constant* OffsetAccessInCommonClassConstant; @@ -123,8 +117,6 @@ public: llvm::Constant* OffsetStaticInstanceInTaskClassMirrorConstant; llvm::Constant* OffsetInitializedInTaskClassMirrorConstant; llvm::Constant* OffsetStatusInTaskClassMirrorConstant; - llvm::Constant* OffsetCommonClassInClassConstant; - llvm::Constant* OffsetCommonClassInJavaVirtualTableConstant; llvm::Constant* OffsetDoYieldInThreadConstant; llvm::Constant* OffsetIsolateIDInThreadConstant; @@ -158,11 +150,6 @@ public: llvm::Function* ArrayStoreExceptionFunction; llvm::Function* ArithmeticExceptionFunction; llvm::Function* ThrowExceptionFromJITFunction; - - llvm::Constant* CurrentIsolateID; - llvm::Constant* OffsetHandlerMethodInExceptionBufferConstant; - llvm::Constant* OffsetHandlerIsolateIDInExceptionBufferConstant; - llvm::Constant* OffsetSetJmpBufferInExceptionBufferConstant; }; } Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180285&r1=180284&r2=180285&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 11:47:30 2013 @@ -46,6 +46,10 @@ void J3Intrinsics::init(llvm::Module* mo ResolvedConstantPoolType = ptrPtrType; + + ObjectHeaderType = PointerType::getUnqual(module->getPointerSize() == Module::Pointer32 ? + Type::getInt32Ty(Context) : Type::getInt64Ty(Context)); + JavaObjectType = PointerType::getUnqual(module->getTypeByName("JavaObject")); @@ -111,11 +115,17 @@ void J3Intrinsics::init(llvm::Module* mo sizeof(JavaObject) + sizeof(ssize_t)); - JavaArrayElementsOffsetConstant = constantTwo; - JavaArraySizeOffsetConstant = constantOne; - JavaObjectLockOffsetConstant = constantOne; + + JavaArrayElementsOffsetConstant = constantOne; + //JavaArraySizeOffsetConstant = constantOne; + HeaderArraySizeOffsetConstant = constantZero; + + // JavaObjectLockOffsetConstant = constantOne; + HeaderObjectLockOffsetConstant = constantZero; + JavaObjectVTOffsetConstant = constantZero; + OffsetClassInVTConstant = ConstantInt::get(Type::getInt32Ty(Context), JavaVirtualTable::getClassIndex()); Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180285&r1=180284&r2=180285&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:47:30 2013 @@ -25,6 +25,7 @@ #include #include "vmkit/JIT.h" +#include "vmkit/GC.h" #include "debug.h" #include "JavaArray.h" @@ -724,22 +725,23 @@ llvm::Function* JavaJIT::nativeCompile(w return llvmFunction; } +llvm::Value* JavaJIT::objectToHeader(Value* obj) { + obj = new PtrToIntInst(obj, intrinsics->pointerSizeType, "", currentBlock); + Value* d = ConstantInt::get(intrinsics->pointerSizeType, gcHeader::hiddenHeaderSize()); + obj = BinaryOperator::CreateSub(obj, d, "", currentBlock); + return new IntToPtrInst(obj, intrinsics->ObjectHeaderType, "", currentBlock); +} + void JavaJIT::monitorEnter(Value* obj) { - std::vector gep; - gep.push_back(intrinsics->constantZero); - gep.push_back(intrinsics->JavaObjectLockOffsetConstant); - Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock); - + Value* lockPtr = objectToHeader(obj); + Value* lock = new LoadInst(lockPtr, "", currentBlock); - lock = new PtrToIntInst(lock, intrinsics->pointerSizeType, "", currentBlock); + Value* NonLockBitsMask = ConstantInt::get(intrinsics->pointerSizeType, vmkit::ThinLock::NonLockBitsMask); lock = BinaryOperator::CreateAnd(lock, NonLockBitsMask, "", currentBlock); - lockPtr = new BitCastInst(lockPtr, - PointerType::getUnqual(intrinsics->pointerSizeType), - "", currentBlock); Value* threadId = getMutatorThreadPtr(); threadId = new PtrToIntInst(threadId, intrinsics->pointerSizeType, "", currentBlock); @@ -768,14 +770,10 @@ void JavaJIT::monitorEnter(Value* obj) { } void JavaJIT::monitorExit(Value* obj) { - std::vector gep; - gep.push_back(intrinsics->constantZero); - gep.push_back(intrinsics->JavaObjectLockOffsetConstant); - Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock); - lockPtr = new BitCastInst(lockPtr, - PointerType::getUnqual(intrinsics->pointerSizeType), - "", currentBlock); + Value* lockPtr = objectToHeader(obj); + Value* lock = new LoadInst(lockPtr, "", currentBlock); + Value* NonLockBitsMask = ConstantInt::get( intrinsics->pointerSizeType, vmkit::ThinLock::NonLockBitsMask); Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.h?rev=180285&r1=180284&r2=180285&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.h (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.h Thu Apr 25 11:47:30 2013 @@ -163,6 +163,9 @@ private: llvm::PHINode* endNode; llvm::Value* jmpBuffer; + + /// return the header of an object + llvm::Value* objectToHeader(llvm::Value* obj); /// arraySize - Get the size of the array. llvm::Value* arraySize(llvm::Value* obj) { Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180285&r1=180284&r2=180285&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 11:47:30 2013 @@ -2164,16 +2164,12 @@ void JavaJIT::compileOpcodes(Reader& rea TheVT = new BitCastInst(TheVT, intrinsics->ptrType, "", currentBlock); Instruction* res = invoke(intrinsics->AllocateFunction, size, TheVT, "", currentBlock); - Value* cast = new BitCastInst(res, intrinsics->JavaArrayType, "", - currentBlock); + + Value* header = objectToHeader(res); // Set the size - Value* gep4[2] = { intrinsics->constantZero, - intrinsics->JavaArraySizeOffsetConstant }; - Value* GEP = GetElementPtrInst::Create(cast, gep4, "", currentBlock); - arg1 = new IntToPtrInst(arg1, intrinsics->ptrType, "", currentBlock); - new StoreInst(arg1, GEP, currentBlock); + new StoreInst(arg1, header, currentBlock); addHighLevelType(res, dcl ? dcl : upcalls->ArrayOfObject); res = new BitCastInst(res, intrinsics->JavaObjectType, "", currentBlock); From peter.senna at gmail.com Thu Apr 25 09:49:33 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:33 -0000 Subject: [vmkit-commits] [vmkit] r180283 - Added hidden header and integrated it to mmtk objectmodel. Hidden header is not used for the moment Message-ID: <20130425164710.3C7532A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:47:09 2013 New Revision: 180283 URL: http://llvm.org/viewvc/llvm-project?rev=180283&view=rev Log: Added hidden header and integrated it to mmtk objectmodel. Hidden header is not used for the moment (cherry picked from commit a3d6a995400135666570623369bb0c657ec311c2) Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java vmkit/trunk/mmtk/magic/LowerMagic.cpp vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180283&r1=180282&r2=180283&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original) +++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:47:09 2013 @@ -21,12 +21,14 @@ int Collector::verbose = 0; extern "C" void* gcmalloc(uint32_t sz, void* _VT) { gc* res = 0; + gcHeader* head = 0; VirtualTable* VT = (VirtualTable*)_VT; sz += gcHeader::hiddenHeaderSize(); sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); - res = (gc*)malloc(sz); - memset((void*)res, 0, sz); - + head = (gcHeader*)malloc(sz); + memset((void*)head, 0, sz); + res = head->toReference(); + lock.acquire(); __InternalSet__.insert(res); lock.release(); Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180283&r1=180282&r2=180283&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original) +++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:47:09 2013 @@ -43,7 +43,7 @@ public final class Bindings { Selected.Mutator mutator = Selected.Mutator.get(); int allocator = mutator.checkAllocator(size, 0, 0); Address res = mutator.alloc(size, 0, 0, allocator, 0); - res.store(virtualTable); + setVT(res, virtualTable); mutator.postAlloc(res.toObjectReference(), virtualTable, size, allocator); return res; } @@ -131,6 +131,9 @@ public final class Bindings { } @Inline + private static native void setVT(Address addr , ObjectReference virtualTable); + + @Inline private static native void memcpy( ObjectReference to, ObjectReference from, int size); Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerMagic.cpp?rev=180283&r1=180282&r2=180283&view=diff ============================================================================== --- vmkit/trunk/mmtk/magic/LowerMagic.cpp (original) +++ vmkit/trunk/mmtk/magic/LowerMagic.cpp Thu Apr 25 11:47:09 2013 @@ -21,6 +21,7 @@ #include +#include "vmkit/GC.h" #include "vmkit/System.h" using namespace llvm; @@ -582,11 +583,18 @@ bool LowerMagic::runOnFunction(Function& res = new ZExtInst(res, FCur->getReturnType(), "", CI); CI->replaceAllUsesWith(res); CI->eraseFromParent(); - } else if (!strcmp(FCur->getName().data(), AddressToObjectReferenceMethod) || - !strcmp(FCur->getName().data(), AddressToWordMethod)) { - Value* Val = Call.getArgument(0); - Val = new BitCastInst(Val, FCur->getReturnType(), "", CI); - CI->replaceAllUsesWith(Val); + } else if (!strcmp(FCur->getName().data(), AddressToObjectReferenceMethod)){ + Value* Val = Call.getArgument(0); + Val = new PtrToIntInst(Val, pointerSizeType, "", CI); + Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); + Val = BinaryOperator::CreateAdd(Val, M, "", CI); + Val = new IntToPtrInst(Val, FCur->getReturnType(), "", CI); + CI->replaceAllUsesWith(Val); + CI->eraseFromParent(); + } else if(!strcmp(FCur->getName().data(), AddressToWordMethod)) { + Value* Val = Call.getArgument(0); + Val = new BitCastInst(Val, FCur->getReturnType(), "", CI); + CI->replaceAllUsesWith(Val); CI->eraseFromParent(); } else if (!strcmp(FCur->getName().data(), AddressAttemptWordAtOffsetMethod)) { Value* Ptr = Call.getArgument(0); @@ -974,7 +982,10 @@ bool LowerMagic::runOnFunction(Function& CI->eraseFromParent(); } else if (!strcmp(FCur->getName().data(), ObjectReferenceToAddressMethod)) { Value* Val = Call.getArgument(0); - Val = new BitCastInst(Val, FCur->getReturnType(), "", CI); + Val = new PtrToIntInst(Val, pointerSizeType, "", CI); + Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); + Val = BinaryOperator::CreateSub(Val, M, "", CI); + Val = new IntToPtrInst(Val, FCur->getReturnType(), "", CI); CI->replaceAllUsesWith(Val); CI->eraseFromParent(); } else if (!strcmp(FCur->getName().data(), ObjectReferenceToObjectMethod)) { Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180283&r1=180282&r2=180283&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:47:09 2013 @@ -61,7 +61,7 @@ extern "C" void* JnJVM_org_j3_bindings_B extern "C" void* gcmalloc(uint32_t sz, void* VT) { sz += gcHeader::hiddenHeaderSize(); sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); - return (gc*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT); + return ((gcHeader*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT))->toReference(); } extern "C" void addFinalizationCandidate(gc* obj) __attribute__((always_inline)); Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180283&r1=180282&r2=180283&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:47:09 2013 @@ -19,7 +19,7 @@ extern "C" word_t Java_org_j3_mmtk_Objec } extern "C" word_t Java_org_j3_mmtk_ObjectModel_GC_1HEADER_1OFFSET__ (MMTkObject* OM) { - return sizeof(void*); + return gcHeader::hiddenHeaderSize() + sizeof(void*); } extern "C" word_t Java_org_j3_mmtk_ObjectModel_readAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { @@ -31,12 +31,12 @@ extern "C" void Java_org_j3_mmtk_ObjectM obj->header() = val; } -extern "C" gc* Java_org_j3_mmtk_ObjectModel_objectStartRef__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { - return obj; +extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_objectStartRef__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { + return obj ? obj->toHeader() : 0; } -extern "C" gc* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { - return obj; +extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { + return obj ? obj->toHeader() : 0; } extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { @@ -47,8 +47,8 @@ extern "C" void Java_org_j3_mmtk_ObjectM *vmkit::System::GetLastBytePtr(reinterpret_cast(obj)) = val; } -extern "C" gc* Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 (MMTkObject* OM, gc* obj) { - return obj; +extern "C" gc* Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 (MMTkObject* OM, gcHeader* obj) { + return obj ? obj->toReference() : 0; } extern "C" word_t Java_org_j3_mmtk_ObjectModel_prepareAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { @@ -62,6 +62,14 @@ Java_org_j3_mmtk_ObjectModel_attemptAvai return (val == oldValue); } +extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2( + gcHeader* header, VirtualTable* VT) ALWAYS_INLINE; + +extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2( + gcHeader* header, VirtualTable* VT) { + header->toReference()->setVirtualTable(VT); +} + extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I( void* res, void* src, int size) ALWAYS_INLINE; From peter.senna at gmail.com Thu Apr 25 09:49:46 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:46 -0000 Subject: [vmkit-commits] [vmkit] r180287 - Removed GC header from JavaObject. Have to remove useless logs. Message-ID: <20130425164752.0894A2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:47:51 2013 New Revision: 180287 URL: http://llvm.org/viewvc/llvm-project?rev=180287&view=rev Log: Removed GC header from JavaObject. Have to remove useless logs. (cherry picked from commit e41d165843b2724abb26adabd7424e0edddba27b) Modified: vmkit/trunk/include/vmkit/GC.h vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java vmkit/trunk/mmtk/magic/LowerMagic.cpp vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp vmkit/trunk/tools/vmjc/vmjc.cpp Modified: vmkit/trunk/include/vmkit/GC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/GC.h?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/GC.h (original) +++ vmkit/trunk/include/vmkit/GC.h Thu Apr 25 11:47:51 2013 @@ -28,7 +28,6 @@ public: class gcRoot { private: - word_t _header; public: virtual ~gcRoot() {} virtual void tracer(word_t closure) {} Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:47:51 2013 @@ -655,8 +655,8 @@ Constant* JavaAOTCompiler::CreateConstan Elmts.push_back(getVirtualTable(cl->virtualVT)); // lock - Constant* L = ConstantInt::get(Type::getInt64Ty(getLLVMContext()), 0); - Elmts.push_back(ConstantExpr::getIntToPtr(L, JavaIntrinsics.ptrType)); +// Constant* L = ConstantInt::get(Type::getInt64Ty(getLLVMContext()), 0); +// Elmts.push_back(ConstantExpr::getIntToPtr(L, JavaIntrinsics.ptrType)); return ConstantStruct::get(STy, Elmts); } Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:47:51 2013 @@ -1429,7 +1429,7 @@ void JavaJIT::loadConstant(uint16 index) void JavaJIT::JITVerifyNull(Value* obj) { if (TheCompiler->hasExceptionsEnabled()) { if (nbHandlers == 0 && vmkit::System::SupportsHardwareNullCheck()) { - Value* indexes[2] = { intrinsics->constantZero, intrinsics->constantZero }; + Value* indexes[2] = { intrinsics->constantZero, intrinsics->JavaObjectVTOffsetConstant }; Value* VTPtr = GetElementPtrInst::Create(obj, indexes, "", currentBlock); Instruction* VT = new LoadInst(VTPtr, "", true, currentBlock); VT->setDebugLoc(DebugLoc::get(currentBytecodeIndex, 1, DbgSubprogram)); Modified: vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Thu Apr 25 11:47:51 2013 @@ -143,7 +143,7 @@ bool LowerConstantCalls::runOnFunction(F } else if (V == intrinsics->GetVTFunction) { Changed = true; Value* val = Call.getArgument(0); // get the object - Value* indexes[2] = { intrinsics->constantZero, intrinsics->constantZero }; + Value* indexes[2] = { intrinsics->constantZero, intrinsics->JavaObjectVTOffsetConstant }; Value* VTPtr = GetElementPtrInst::Create(val, indexes, "", CI); Value* VT = new LoadInst(VTPtr, "", CI); CI->replaceAllUsesWith(VT); Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll Thu Apr 25 11:47:51 2013 @@ -5,11 +5,8 @@ ;;; A virtual table is an array of function pointers. %VT = type [0 x i32 (...)*] -;;; Java VT (partial definition, only needed fields) -%JavaVT = type { i8*, i8*, i8*, [ 1 x i8* ], %JavaCommonClass* } - -;;; The root of all Java Objects: a VT and a lock. -%JavaObject = type { %VT*, i8* } +;;; The root of all Java Objects: a VT (and a lock moved into GC header). +%JavaObject = type { %VT* } ;;; Types for Java arrays. A size of 0 means an undefined size. %JavaArray = type { %JavaObject, i8* } @@ -25,15 +22,15 @@ %ArrayUInt8 = type { %JavaObject, i8*, [0 x i8] } ;;; The task class mirror. -;;; Field 0: The class state -;;; Field 1: The initialization state -;;; Field 2: The static instance +;;; Field 1: The class state +;;; Field 2: The initialization state +;;; Field 3: The static instance %TaskClassMirror = type { i8, i1, i8* } %CircularBase = type { %VT*, %CircularBase*, %CircularBase* } ;;; Field 0: the parent (circular base) -;;; Field 1: isolate_id_t IsolateID +;;; Field 1: size_t IsolateID ;;; Field 2: void* MyVM ;;; Field 3: void* baseSP ;;; Field 4: bool doYield @@ -44,21 +41,21 @@ ;;; field 9: void* routine ;;; field 10: void* lastKnownFrame ;;; field 11: void* lastExceptionBuffer -%Thread = type { %CircularBase, i32, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8*, i1 } +%Thread = type { %CircularBase, i8*, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8* } %JavaThread = type { %MutatorThread, i8*, %JavaObject* } %JavaConstantPool = type { %JavaClass*, i32, i8*, i32*, i8** } -%Attribute = type { %UTF8*, i32, i32 } +%Attribut = type { %UTF8*, i32, i32 } -%UTF8 = type { i32, [0 x i16] } +%UTF8 = type { i8*, [0 x i16] } -%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribute*, i16, %JavaClass*, i32, +%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribut*, i16, %JavaClass*, i32, i16 } -%JavaMethod = type { i8*, i16, %Attribute*, i16, %JavaClass*, +%JavaMethod = type { i8*, i16, %Attribut*, i16, %JavaClass*, %UTF8*, %UTF8*, i8, i8*, i32 } %JavaClassPrimitive = type { %JavaCommonClass, i32 } @@ -91,11 +88,10 @@ declare void @listAllTypes(%JavaObject, %JavaField, %JavaMethod, %UTF8, - %Attribute, + %Attribut, %JavaThread, %MutatorThread, - %J3DenseMap, - %JavaVT); + %J3DenseMap); ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;; Constant calls for J3 runtime internal objects field accesses ;;;;;;;;; @@ -117,7 +113,7 @@ declare %VT* @getIMT(%VT*) readnone declare %JavaCommonClass* @getClass(%JavaObject*) readnone ;;; getLock - Get the lock of an object. -declare i8* @getLock(%JavaObject*) +;;;declare i8* @getLock(%JavaObject*) ;;; getVTFromCommonClass - Get the VT of a class from its runtime ;;; representation. @@ -148,7 +144,7 @@ declare %VT* @getVTInDisplay(%VT**, i32) declare i32 @getDepth(%VT*) readnone ;;; getStaticInstance - Get the static instance of this class. -declare i8* @j3GetStaticInstance(%JavaClass*) readnone +declare i8* @getStaticInstance(%JavaClass*) readnone ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -165,8 +161,7 @@ declare %JavaObject* @j3MultiCallNew(%Ja ;;; initialisationCheck - Checks if the class has been initialized and ;;; initializes if not. This is used for initialization barriers in an isolate ;;; environment, and in some specific scenario in a single environment. -declare %JavaClass* @j3InitialisationCheck(%JavaClass*) -declare %JavaClass* @j3InitialisationCheckForJavaObject(%JavaObject*) +declare %JavaClass* @initialisationCheck(%JavaClass*) readnone ;;; forceInitialisationCheck - Force to check initialization. The difference ;;; between this function and the initialisationCheck function is that the @@ -184,9 +179,8 @@ declare void @forceLoadedCheck(%JavaComm ;;; getConstantPoolAt - Get the value in the constant pool of this class. ;;; This function is removed by J3's LLVM pass, therefore it does ;;; not have an actual implementation. -declare i8* @getConstantPoolAt(i8* (%JavaClass*, i32, ...)*, i32, +declare i8* @getConstantPoolAt(i8* (%JavaClass*, i32, ...)*, i8**, %JavaClass*, i32, ...) -declare i8* @j3GetCachedValue(%JavaClass*, i32, i32) ;;; j3VirtualTableLookup - Look up the offset in a virtual table of a ;;; specific function. @@ -224,13 +218,11 @@ declare i1 @isSecondaryClass(%VT*, %VT*) ;;; getClassDelegatee - Returns the java/lang/Class representation of the ;;; class. This method is lowered to the GEP to the class delegatee in ;;; the common class. -declare %JavaObject** @j3GetClassDelegateePtr(%JavaCommonClass*) -declare %JavaObject* @j3GetClassDelegatee(%JavaCommonClass*) +declare %JavaObject* @getClassDelegatee(%JavaCommonClass*) ;;; j3RuntimeDelegatee - Returns the java/lang/Class representation of the ;;; class. This method is called if the class delegatee has not been created ;;; yet. -declare %JavaObject** @j3RuntimeDelegateePtr(%JavaCommonClass*) declare %JavaObject* @j3RuntimeDelegatee(%JavaCommonClass*) ;;; j3GetArrayClass - Get the array user class of the user class. Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original) +++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:47:51 2013 @@ -49,9 +49,13 @@ extern "C" void addFinalizationCandidate } extern "C" void* AllocateMagicArray(int32_t sz, void* length) { - gc* res = (gc*)malloc(sz); - memset((void*)res, 0, sz); - ((void**)res)[0] = length; + sz += gcHeader::hiddenHeaderSize(); + gcHeader* head = 0; + gc* res = 0; + head = (gcHeader*)malloc(sz); + memset((void*)head, 0, sz); + res = head->toReference(); + res->setVirtualTable((VirtualTable*)length); return res; } Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original) +++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:47:51 2013 @@ -134,6 +134,9 @@ public final class Bindings { private static native void setVT(Address addr , ObjectReference virtualTable); @Inline + private static native int hiddenHeaderSize(); + + @Inline private static native void memcpy( ObjectReference to, ObjectReference from, int size); Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerMagic.cpp?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/mmtk/magic/LowerMagic.cpp (original) +++ vmkit/trunk/mmtk/magic/LowerMagic.cpp Thu Apr 25 11:47:51 2013 @@ -983,6 +983,12 @@ bool LowerMagic::runOnFunction(Function& } else if (!strcmp(FCur->getName().data(), ObjectReferenceToAddressMethod)) { Value* Val = Call.getArgument(0); Val = new PtrToIntInst(Val, pointerSizeType, "", CI); + + /* + * REMOVE ObjectReferenceToAddress offset !!! + */ + + Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); Val = BinaryOperator::CreateSub(Val, M, "", CI); Val = new IntToPtrInst(Val, FCur->getReturnType(), "", CI); Modified: vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h (original) +++ vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h Thu Apr 25 11:47:51 2013 @@ -28,7 +28,6 @@ struct MMTkVirtualTable : public Virtual struct MMTkObject { MMTkVirtualTable* virtualTable; - gcHeader header; }; struct MMTkArray : public MMTkObject { Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:47:51 2013 @@ -70,6 +70,13 @@ extern "C" void Java_org_j3_bindings_Bin header->toReference()->setVirtualTable(VT); } +extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2() ALWAYS_INLINE; + +extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2() { + return gcHeader::hiddenHeaderSize(); +} + + extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I( void* res, void* src, int size) ALWAYS_INLINE; Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180287&r1=180286&r2=180287&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 11:47:51 2013 @@ -182,6 +182,13 @@ int main(int argc, char **argv) { } } + printf("Verifying Generated Module...\n"); + if(llvm::verifyModule(*(Comp->getLLVMModule()), llvm::PrintMessageAction)){ + printf("ERROR !!!\n"); + return 1; + } + printf("Verification OK\n"); + std::string ErrorInfo; std::auto_ptr Out (new raw_fd_ostream(OutputFilename.c_str(), ErrorInfo, From peter.senna at gmail.com Thu Apr 25 09:49:52 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:52 -0000 Subject: [vmkit-commits] [vmkit] r180288 - Removed useless logs Message-ID: <20130425164759.AFBF42A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:47:59 2013 New Revision: 180288 URL: http://llvm.org/viewvc/llvm-project?rev=180288&view=rev Log: Removed useless logs (cherry picked from commit 63a2a76a510bbe65d59d08f35858c6e38fc62ba3) Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180288&r1=180287&r2=180288&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:47:59 2013 @@ -272,8 +272,6 @@ JavaObject* UserClassArray::doNew(sint32 uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize); res = (JavaObject*)gc::operator new(size, VT); JavaArray::setSize(res, n); - printf("UserClassArray operator new @%p\n", res); - fflush(NULL); return res; } @@ -455,8 +453,6 @@ JavaObject* UserClass::doNew(Jnjvm* vm, && "Uninitialized class when allocating."); assert(getVirtualVT() && "No VT\n"); res = (JavaObject*)gc::operator new(getVirtualSize(), getVirtualVT()); - printf("UserClass operator new @%p\n", res); - fflush(NULL); return res; } Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp?rev=180288&r1=180287&r2=180288&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp Thu Apr 25 11:47:59 2013 @@ -160,8 +160,6 @@ JavaConstantPool::operator new(size_t sz // NOTICE: 'size' is not the final size of the object, as it does more allocations in the constructor uint32 size = sz + ctpSize * (sizeof(void*) + sizeof(sint32) + sizeof(uint8)); void* res = allocator.Allocate(size, "Constant pool"); - printf("JavaConstantPool operator new @%p\n", res); - fflush(NULL); return res; } Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180288&r1=180287&r2=180288&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:47:59 2013 @@ -1122,7 +1122,6 @@ void Jnjvm::loadBootstrap() { (void (*)(vmkit::Thread*))FinalizerThread::finalizerStart); referenceThread = new ReferenceThread(this); - printf("Reference Thread is @%p\n", referenceThread); referenceThread->start( (void (*)(vmkit::Thread*))ReferenceThread::enqueueStart); Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180288&r1=180287&r2=180288&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:47:59 2013 @@ -483,8 +483,6 @@ public: VMClassLoader* res = 0; llvm_gcroot(res, 0); res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT); - printf("VMClassLoader operator new @%p\n", res); - fflush(NULL); return res; } Modified: vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h?rev=180288&r1=180287&r2=180288&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h (original) +++ vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h Thu Apr 25 11:47:59 2013 @@ -40,12 +40,7 @@ public: ReferenceQueue(uint8_t s) { - printf("Allocating ReferenceQueue !\n"); References = new gc*[INITIAL_QUEUE_SIZE]; - if(*((gc**)0x5000B030)){ - printf("HEADER OF EXCEPTION OBJ : %08llX\n", ((gc*)(0x5000B030))->header()); - } - printf("ReferenceQueue (initial size = %d\trange : start @%p - end @%p\n", INITIAL_QUEUE_SIZE, References, References + INITIAL_QUEUE_SIZE); memset(References, 0, INITIAL_QUEUE_SIZE * sizeof(gc*)); QueueLength = INITIAL_QUEUE_SIZE; CurrentIndex = 0; Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180288&r1=180287&r2=180288&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:47:59 2013 @@ -192,7 +192,6 @@ void ThinLock::acquire(gc* object, LockS } assert(owner(object, table) && "Not owner after quitting acquire!"); - printf("LOCK ACQUIRED curThread = %08llX, OWNER of object @%p on ThreadIDMask = %08llX\n", id, object, object->header() & System::GetThreadIDMask()); } /// release - Release the lock. @@ -224,8 +223,6 @@ void ThinLock::release(gc* object, LockS } while ((object->header() & ThinCountMask) == count); } - printf("LOCK RELEASED curThread = %08llX, OWNER of object @%p on ThreadIDMask = %08llX\n", id, object, object->header() & System::GetThreadIDMask()); - } /// owner - Returns true if the curren thread is the owner of this object's @@ -233,19 +230,13 @@ void ThinLock::release(gc* object, LockS bool ThinLock::owner(gc* object, LockSystem& table) { llvm_gcroot(object, 0); if (object->header() & FatMask) { - printf("OWNER on FatMask\n"); FatLock* obj = table.getFatLockFromID(object->header()); if (obj != NULL) return obj->owner(); } else { bool res = false; uint64 id = vmkit::Thread::get()->getThreadID(); res = ((object->header() & System::GetThreadIDMask()) == id); - printf("CHECK OWNER curThread = %08llX, OWNER of object @%p (header @%p) on ThreadIDMask = %08llX\n", id, object, &object->header(), object->header() & System::GetThreadIDMask()); - fflush(NULL); - if (res) - return true; - else - printf("THREAD IS NOT THE OWNER OF OBJECT %p OF TYPE %s\n", object, j3::UTF8Buffer(((j3::JavaVirtualTable*)(object->getVirtualTable()))->cl->getName()).cString()); + if (res) return true; } return false; } Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180288&r1=180287&r2=180288&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 11:47:59 2013 @@ -525,8 +525,6 @@ void* Thread::operator new(size_t sz) { void* res = (void*)TheStackManager.allocate(); // Make sure the thread information is cleared. if (res != NULL) memset(res, 0, sz); - printf("Thread operator new @%p\n", res); - fflush(NULL); return res; } From peter.senna at gmail.com Thu Apr 25 09:49:52 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:49:52 -0000 Subject: [vmkit-commits] [vmkit] r180290 - Added AddressAttemptObjectReference implementation. Message-ID: <20130425164816.E1BE62A6C02D@llvm.org> Author: peter.senna Date: Thu Apr 25 11:48:16 2013 New Revision: 180290 URL: http://llvm.org/viewvc/llvm-project?rev=180290&view=rev Log: Added AddressAttemptObjectReference implementation. (cherry picked from commit d549d47f8f80fed8b90eec95898ec4b619bec1ec) Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerMagic.cpp?rev=180290&r1=180289&r2=180290&view=diff ============================================================================== --- vmkit/trunk/mmtk/magic/LowerMagic.cpp (original) +++ vmkit/trunk/mmtk/magic/LowerMagic.cpp Thu Apr 25 11:48:16 2013 @@ -119,8 +119,8 @@ static const char* AddressPrepareWordAtO //static const char* AddressAttemptIntAtOffsetMethod; static const char* AddressAttemptWordMethod; static const char* AddressAttemptWordAtOffsetMethod; -//static const char* AddressAttemptObjectReferenceMethod; -//static const char* AddressAttemptObjectReferenceAtOffsetMethod; +static const char* AddressAttemptObjectReferenceMethod; +static const char* AddressAttemptObjectReferenceAtOffsetMethod; //static const char* AddressAttemptAddressMethod; //static const char* AddressAttemptAddressAtOffsetMethod; @@ -257,6 +257,7 @@ static void initialiseFunctions(Module* AddressToWordMethod = "JnJVM_org_vmmagic_unboxed_Address_toWord__"; AddressPrepareWordMethod = "JnJVM_org_vmmagic_unboxed_Address_prepareWord__"; AddressAttemptWordAtOffsetMethod = "JnJVM_org_vmmagic_unboxed_Address_attempt__Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Offset_2"; + AddressAttemptObjectReferenceAtOffsetMethod = "JnJVM_org_vmmagic_unboxed_Address_attempt__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Offset_2"; AddressPrepareWordAtOffsetMethod = "JnJVM_org_vmmagic_unboxed_Address_prepareWord__Lorg_vmmagic_unboxed_Offset_2"; AddressLoadWordAtOffsetMethod = "JnJVM_org_vmmagic_unboxed_Address_loadWord__Lorg_vmmagic_unboxed_Offset_2"; AddressStoreWordAtOffsetMethod = "JnJVM_org_vmmagic_unboxed_Address_store__Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Offset_2"; @@ -269,6 +270,7 @@ static void initialiseFunctions(Module* AddressLoadObjectReferenceAtOffsetMethod = "JnJVM_org_vmmagic_unboxed_Address_loadObjectReference__Lorg_vmmagic_unboxed_Offset_2"; AddressLEMethod = "JnJVM_org_vmmagic_unboxed_Address_LE__Lorg_vmmagic_unboxed_Address_2"; AddressAttemptWordMethod = "JnJVM_org_vmmagic_unboxed_Address_attempt__Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Word_2"; + AddressAttemptObjectReferenceMethod = "JnJVM_org_vmmagic_unboxed_Address_attempt__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2"; AddressNEMethod = "JnJVM_org_vmmagic_unboxed_Address_NE__Lorg_vmmagic_unboxed_Address_2"; AddressToLongMethod = "JnJVM_org_vmmagic_unboxed_Address_toLong__"; AddressMinusExtentMethod = "JnJVM_org_vmmagic_unboxed_Address_minus__Lorg_vmmagic_unboxed_Extent_2"; @@ -596,7 +598,8 @@ bool LowerMagic::runOnFunction(Function& Val = new BitCastInst(Val, FCur->getReturnType(), "", CI); CI->replaceAllUsesWith(Val); CI->eraseFromParent(); - } else if (!strcmp(FCur->getName().data(), AddressAttemptWordAtOffsetMethod)) { + } else if (!strcmp(FCur->getName().data(), AddressAttemptWordAtOffsetMethod) || + !strcmp(FCur->getName().data(), AddressAttemptObjectReferenceAtOffsetMethod)) { Value* Ptr = Call.getArgument(0); Value* Old = Call.getArgument(1); Value* Val = Call.getArgument(2); @@ -617,7 +620,8 @@ bool LowerMagic::runOnFunction(Function& CI->replaceAllUsesWith(res); CI->eraseFromParent(); - } else if (!strcmp(FCur->getName().data(), AddressAttemptWordMethod)) { + } else if (!strcmp(FCur->getName().data(), AddressAttemptWordMethod) || + !strcmp(FCur->getName().data(), AddressAttemptObjectReferenceMethod)) { Value* Ptr = Call.getArgument(0); Value* Old = Call.getArgument(1); Value* Val = Call.getArgument(2); @@ -983,12 +987,6 @@ bool LowerMagic::runOnFunction(Function& } else if (!strcmp(FCur->getName().data(), ObjectReferenceToAddressMethod)) { Value* Val = Call.getArgument(0); Val = new PtrToIntInst(Val, pointerSizeType, "", CI); - - /* - * REMOVE ObjectReferenceToAddress offset !!! - */ - - Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); Val = BinaryOperator::CreateSub(Val, M, "", CI); Val = new IntToPtrInst(Val, FCur->getReturnType(), "", CI); From peter.senna at gmail.com Thu Apr 25 09:50:00 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:50:00 -0000 Subject: [vmkit-commits] [vmkit] r180281 - Added extra memory allocation for hidden GC header. Have to change pointer returned. Message-ID: <20130425164655.446A42A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:46:54 2013 New Revision: 180281 URL: http://llvm.org/viewvc/llvm-project?rev=180281&view=rev Log: Added extra memory allocation for hidden GC header. Have to change pointer returned. (cherry picked from commit cb88168006b8c12be66df37ad11adfcbc59a5ff5) Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180281&r1=180280&r2=180281&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original) +++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:46:54 2013 @@ -22,6 +22,7 @@ int Collector::verbose = 0; extern "C" void* gcmalloc(uint32_t sz, void* _VT) { gc* res = 0; VirtualTable* VT = (VirtualTable*)_VT; + sz += gcHeader::hiddenHeaderSize(); sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); res = (gc*)malloc(sz); memset((void*)res, 0, sz); Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180281&r1=180280&r2=180281&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:46:54 2013 @@ -59,6 +59,7 @@ extern "C" void* JnJVM_org_j3_bindings_B int sz, void* VT) ALWAYS_INLINE; extern "C" void* gcmalloc(uint32_t sz, void* VT) { + sz += gcHeader::hiddenHeaderSize(); sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); return (gc*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT); } From peter.senna at gmail.com Thu Apr 25 09:50:11 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:50:11 -0000 Subject: [vmkit-commits] [vmkit] r180289 - Applyed patch from llvm repository. Message-ID: <20130425164812.B63A62A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:48:11 2013 New Revision: 180289 URL: http://llvm.org/viewvc/llvm-project?rev=180289&view=rev Log: Applyed patch from llvm repository. (cherry picked from commit f8942a207a40cb9e47467d9e7ed0b46909686372) Modified: vmkit/trunk/autoconf/configure.ac vmkit/trunk/configure vmkit/trunk/include/j3/JavaLLVMCompiler.h vmkit/trunk/include/vmkit/JIT.h vmkit/trunk/lib/j3/ClassLib/Makefile vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp vmkit/trunk/lib/vmkit/Compiler/JIT.cpp vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp vmkit/trunk/tools/vmjc/vmjc.cpp Modified: vmkit/trunk/autoconf/configure.ac URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/autoconf/configure.ac?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/autoconf/configure.ac (original) +++ vmkit/trunk/autoconf/configure.ac Thu Apr 25 11:48:11 2013 @@ -31,12 +31,12 @@ dnl=== dnl===-----------------------------------------------------------------------=== dnl Initialize autoconf and define the package name, version number and dnl email address for reporting bugs. -AC_INIT([vmkit],[0.31svn],[nicolas.geoffray at gmail.com]) +AC_INIT([vmkit],[0.32svn],[nicolas.geoffray at gmail.com]) dnl Provide a copyright substitution and ensure the copyright notice is included dnl in the output of --version option of the generated configure script. -AC_SUBST(VMKIT_COPYRIGHT,["Copyright (c) 2003-2011 Universite Pierre et Marie Curie."]) -AC_COPYRIGHT([Copyright (c) 2003-2011 Universite Pierre et Marie Curie.]) +AC_SUBST(VMKIT_COPYRIGHT,["Copyright (c) 2003-2012 Universite Pierre et Marie Curie."]) +AC_COPYRIGHT([Copyright (c) 2003-2012 Universite Pierre et Marie Curie.]) dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we dnl use some autoconf macros only available in 2.59. Modified: vmkit/trunk/configure URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/configure?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/configure (original) +++ vmkit/trunk/configure Thu Apr 25 11:48:11 2013 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for vmkit 0.31svn. +# Generated by GNU Autoconf 2.68 for vmkit 0.32svn. # # Report bugs to . # @@ -13,7 +13,7 @@ # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (c) 2003-2011 Universite Pierre et Marie Curie. +# Copyright (c) 2003-2012 Universite Pierre et Marie Curie. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -562,8 +562,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='vmkit' PACKAGE_TARNAME='vmkit' -PACKAGE_VERSION='0.31svn' -PACKAGE_STRING='vmkit 0.31svn' +PACKAGE_VERSION='0.32svn' +PACKAGE_STRING='vmkit 0.32svn' PACKAGE_BUGREPORT='nicolas.geoffray at gmail.com' PACKAGE_URL='' @@ -1269,7 +1269,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures vmkit 0.31svn to adapt to many kinds of systems. +\`configure' configures vmkit 0.32svn to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1335,7 +1335,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of vmkit 0.31svn:";; + short | recursive ) echo "Configuration of vmkit 0.32svn:";; esac cat <<\_ACEOF @@ -1435,14 +1435,14 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -vmkit configure 0.31svn +vmkit configure 0.32svn generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (c) 2003-2011 Universite Pierre et Marie Curie. +Copyright (c) 2003-2012 Universite Pierre et Marie Curie. _ACEOF exit fi @@ -1898,7 +1898,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by vmkit $as_me 0.31svn, which was +It was created by vmkit $as_me 0.32svn, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2247,7 +2247,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -VMKIT_COPYRIGHT="Copyright (c) 2003-2011 Universite Pierre et Marie Curie." +VMKIT_COPYRIGHT="Copyright (c) 2003-2012 Universite Pierre et Marie Curie." @@ -6323,7 +6323,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by vmkit $as_me 0.31svn, which was +This file was extended by vmkit $as_me 0.32svn, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6389,7 +6389,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -vmkit config.status 0.31svn +vmkit config.status 0.32svn configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Modified: vmkit/trunk/include/j3/JavaLLVMCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaLLVMCompiler.h?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaLLVMCompiler.h (original) +++ vmkit/trunk/include/j3/JavaLLVMCompiler.h Thu Apr 25 11:48:11 2013 @@ -51,8 +51,7 @@ protected: llvm::Module* TheModule; llvm::DIBuilder* DebugFactory; J3Intrinsics JavaIntrinsics; - const llvm::TargetData* TheTargetData; - bool compilingMMTk; + const llvm::DataLayout* TheDataLayout; private: bool enabledException; @@ -85,9 +84,8 @@ private: llvm::DenseMap staticAPs; public: - JavaLLVMCompiler(const std::string &ModuleID, bool compilingMMTk=false); - - bool isCompilingMMTk() {return compilingMMTk;} + JavaLLVMCompiler(const std::string &ModuleID); + virtual bool isStaticCompiling() = 0; virtual bool emitFunctionName() = 0; virtual void* GenerateStub(llvm::Function* F) = 0; @@ -125,7 +123,7 @@ public: cooperativeGC = false; } - virtual JavaCompiler* Create(const std::string& ModuleID, bool compilingMMTk=false) = 0; + virtual JavaCompiler* Create(const std::string& ModuleID) = 0; virtual ~JavaLLVMCompiler(); @@ -196,7 +194,7 @@ public: virtual llvm::Constant* getNativeClass(CommonClass* cl) = 0; virtual llvm::Constant* getJavaClass(CommonClass* cl) = 0; virtual llvm::Constant* getJavaClassPtr(CommonClass* cl) = 0; - virtual llvm::Constant* getStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE) = 0; + virtual llvm::Constant* getStaticInstance(Class* cl) = 0; virtual llvm::Constant* getVirtualTable(JavaVirtualTable*) = 0; virtual llvm::Constant* getMethodInClass(JavaMethod* meth) = 0; Modified: vmkit/trunk/include/vmkit/JIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/JIT.h?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/JIT.h (original) +++ vmkit/trunk/include/vmkit/JIT.h Thu Apr 25 11:48:11 2013 @@ -33,7 +33,7 @@ namespace llvm { class JIT; class Module; class PointerType; - class TargetData; + class DataLayout; class TargetMachine; class Type; } Modified: vmkit/trunk/lib/j3/ClassLib/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Makefile?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/Makefile (original) +++ vmkit/trunk/lib/j3/ClassLib/Makefile Thu Apr 25 11:48:11 2013 @@ -13,6 +13,8 @@ EXTRA_DIST = ArrayCopy.inc \ ClasspathConstructor.inc \ ClasspathField.inc \ ClasspathMethod.inc \ + DefineClass.inc \ + Reflect.inc \ SetProperties.inc \ Unsafe.inc Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:48:11 2013 @@ -15,7 +15,7 @@ #include "llvm/PassManager.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/TargetRegistry.h" -#include "llvm/Target/TargetData.h" +#include "llvm/DataLayout.h" #include "vmkit/UTF8.h" #include "vmkit/Thread.h" @@ -1851,8 +1851,8 @@ JavaAOTCompiler::JavaAOTCompiler(const s options.NoFramePointerElim = true; TargetMachine* TM = TheTarget->createTargetMachine( vmkit::VmkitModule::getHostTriple(), "", "", options); - TheTargetData = TM->getTargetData(); - TheModule->setDataLayout(TheTargetData->getStringRepresentation()); + TheDataLayout = TM->getDataLayout(); + TheModule->setDataLayout(TheDataLayout->getStringRepresentation()); TheModule->setTargetTriple(TM->getTargetTriple()); JavaIntrinsics.init(TheModule); initialiseAssessorInfo(); @@ -1939,7 +1939,7 @@ void JavaAOTCompiler::printStats() { Module* Mod = getLLVMModule(); for (Module::const_global_iterator i = Mod->global_begin(), e = Mod->global_end(); i != e; ++i) { - size += TheTargetData->getTypeAllocSize(i->getType()); + size += TheDataLayout->getTypeAllocSize(i->getType()); } fprintf(stdout, "%lluB\n", (unsigned long long int)size); } Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:48:11 2013 @@ -20,8 +20,6 @@ #include #include #include -#include -#include "llvm/Analysis/DIBuilder.h" #include #include "vmkit/JIT.h" @@ -61,7 +59,6 @@ void JavaJIT::updateStackInfo(Opinfo& in } bool JavaJIT::needsInitialisationCheck(Class* cl) { -/* if (cl->isReadyForCompilation() || (!cl->isInterface() && compilingClass->isSubclassOf(cl))) { return false; @@ -75,13 +72,6 @@ bool JavaJIT::needsInitialisationCheck(C } return true; -*/ - bool needs_check = cl->needsInitialisationCheck(); - - if (needs_check && TheCompiler->isCompilingMMTk() && cl->isReadyForCompilation(0)) - needs_check = false; - - return needs_check; } void JavaJIT::checkYieldPoint() { @@ -106,7 +96,7 @@ bool JavaJIT::canBeInlined(JavaMethod* m if (isSynchro(meth->access)) return false; if (isNative(meth->access)) return false; - JavaAttribute* codeAtt = meth->lookupAttribute(JavaAttribute::codeAttribute); + Attribut* codeAtt = meth->lookupAttribut(Attribut::codeAttribut); if (codeAtt == NULL) return false; Reader reader(codeAtt, meth->classDef->bytes); @@ -119,7 +109,7 @@ bool JavaJIT::canBeInlined(JavaMethod* m if (handlers != 0) return false; reader.cursor = start; - JavaJIT jit(TheCompiler, meth, llvmFunction, customizing ? customizeFor : NULL, compilingMMTk); + JavaJIT jit(TheCompiler, meth, llvmFunction, customizing ? customizeFor : NULL); jit.inlineMethods = inlineMethods; jit.inlineMethods[meth] = true; if (!jit.analyzeForInlining(reader, codeLen)) return false; @@ -218,18 +208,14 @@ void JavaJIT::invokeVirtual(uint16 index PHINode* node = 0; Value* indexes2[2]; indexes2[0] = intrinsics->constantZero; - - Value* targetObject = getTarget(signature); - targetObject = new LoadInst(targetObject, "", false, currentBlock); - if (!thisReference) JITVerifyNull(targetObject); - if (!TheCompiler->isCompilingMMTk()) - CallInst::Create(intrinsics->InitialisationCheckForJavaObjectFunction, targetObject, "", currentBlock); + bool nullChecked = false; if (meth) { LLVMMethodInfo* LMI = TheCompiler->getMethodInfo(meth); Constant* Offset = LMI->getOffset(); indexes2[1] = Offset; } else { + nullChecked = true; GlobalVariable* GV = new GlobalVariable(*llvmFunction->getParent(), Type::getInt32Ty(*llvmContext), false, @@ -251,6 +237,9 @@ void JavaJIT::invokeVirtual(uint16 index Args.push_back(TheCompiler->getNativeClass(compilingClass)); Args.push_back(ConstantInt::get(Type::getInt32Ty(*llvmContext), index)); Args.push_back(GV); + Value* targetObject = getTarget(signature); + targetObject = new LoadInst(targetObject, "", false, currentBlock); + if (!thisReference) JITVerifyNull(targetObject); Args.push_back(targetObject); load = invoke(intrinsics->VirtualLookupFunction, Args, "", currentBlock); node->addIncoming(load, currentBlock); @@ -261,7 +250,7 @@ void JavaJIT::invokeVirtual(uint16 index } makeArgs(it, index, args, signature->nbArguments + 1); - + if (!nullChecked && !thisReference) JITVerifyNull(args[0]); Value* VT = CallInst::Create(intrinsics->GetVTFunction, args[0], "", currentBlock); @@ -311,6 +300,14 @@ llvm::Value* JavaJIT::getJavaThreadPtr(l return new BitCastInst(mutatorThreadPtr, intrinsics->JavaThreadType, "", currentBlock); } +llvm::Value* JavaJIT::getIsolateIDPtr(llvm::Value* mutatorThreadPtr) { + Value* GEP[3] = { intrinsics->constantZero, + intrinsics->OffsetThreadInMutatorThreadConstant, + intrinsics->OffsetIsolateIDInThreadConstant }; + + return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "", currentBlock); +} + llvm::Value* JavaJIT::getVMPtr(llvm::Value* mutatorThreadPtr) { Value* GEP[3] = { intrinsics->constantZero, intrinsics->OffsetThreadInMutatorThreadConstant, @@ -372,80 +369,6 @@ static llvm::Function* GetNativeCallee(J return callee; } -/* -Value* JavaJIT::getCommonClass(Value* ClassOrObject) -{ - Type *Ty = ClassOrObject->getType(); - - if (Ty == intrinsics->JavaObjectType) { - // This is equivalent to "JavaObject::getClass(targetObject)" - - ClassOrObject = new BitCastInst(ClassOrObject, intrinsics->ptrPtrType, "", currentBlock); - ClassOrObject = new LoadInst(ClassOrObject, "", currentBlock); - ClassOrObject = new BitCastInst(ClassOrObject, intrinsics->JavaVTType, "objectVT", currentBlock); - - Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetCommonClassInJavaVirtualTableConstant}; - ClassOrObject = GetElementPtrInst::Create(ClassOrObject, GEP, "", currentBlock); - ClassOrObject = new LoadInst(ClassOrObject, "commonClass", currentBlock); - } else if (Ty == intrinsics->JavaClassType) { - Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetCommonClassInClassConstant}; - ClassOrObject = GetElementPtrInst::Create(ClassOrObject, GEP, "targetCommonClass", currentBlock); - } - - assert((ClassOrObject->getType() == intrinsics->JavaCommonClassType) && "Invalid target class or object."); - return ClassOrObject; -} -*/ - -Value* JavaJIT::getClassDelegateePtr(CommonClass* cl) -{ - Value* obj = TheCompiler->getNativeClass(cl); - obj = new BitCastInst(obj, intrinsics->JavaCommonClassType, "", currentBlock); - return CallInst::Create(intrinsics->GetClassDelegateePtrFunction, obj, "", currentBlock); -} - -bool JavaJIT::shouldMethodChangeCurrentIsolate() -{ - JnjvmClassLoader* loader = compilingClass->classLoader; - - // We are compiling the Java runtime: - // This code must run in the isolate ID of its caller, so as to account consumed resources - // to the caller. - if (loader == loader->bootstrapLoader) return false; - - // We are compiling the method: - // This code must run in the isolate ID of its caller, so as to enable initializing - // the class (not the object) in any desired isolate ID. - if (compilingMethod->name->equals(loader->bootstrapLoader->clinitName)) return false; - - return true; -} - -Value* JavaJIT::setCurrentIsolateForCompilingMethod(Value* currentIsolateID, bool alwaysSet) -{ - Constant *isolateID; - if (this->shouldMethodChangeCurrentIsolate()) - isolateID = ConstantInt::get(Type::getInt32Ty(TheCompiler->getLLVMContext()), compilingClass->classLoader->getIsolateID()); - else if (alwaysSet) - isolateID = intrinsics->CurrentIsolateID; - else - return NULL; - - if (!currentIsolateID) currentIsolateID = intrinsics->constantPtr32Null; - - Value *Args[] = {isolateID, currentIsolateID}; - // Return the old isolate value, whether it was set or not - return CallInst::Create(intrinsics->SetIsolateFunction, Args, "oldIsolateID", currentBlock); -} - -void JavaJIT::restoreCurrentIsolateForCompilingMethod(Value* oldIsolateID, bool alwaysRestore) -{ - if (!oldIsolateID || (!alwaysRestore && !this->shouldMethodChangeCurrentIsolate())) return; - - Value *Args[] = {oldIsolateID, intrinsics->constantPtr32Null}; - CallInst::Create(intrinsics->SetIsolateFunction, Args, "", currentBlock); -} - llvm::Function* JavaJIT::nativeCompile(word_t natPtr) { PRINT_DEBUG(JNJVM_COMPILE, 1, COLOR_NORMAL, "native compile %s.%s\n", @@ -548,7 +471,7 @@ llvm::Function* JavaJIT::nativeCompile(w uint32 index = 0; if (stat) { - Value* cl = getClassDelegateePtr(compilingClass); + Value* cl = TheCompiler->getJavaClassPtr(compilingClass); nativeArgs.push_back(cl); index = 2; } else { @@ -649,8 +572,6 @@ llvm::Function* JavaJIT::nativeCompile(w } nativeArgs[0] = nativeFunc; - Value *oldIsolateID = this->setCurrentIsolateForCompilingMethod(NULL, false); - // Synchronize before saying we're entering native if (isSynchro(compilingMethod->access)) { nbHandlers = 1; @@ -696,8 +617,6 @@ llvm::Function* JavaJIT::nativeCompile(w if (isSynchro(compilingMethod->access)) endSynchronize(); - this->restoreCurrentIsolateForCompilingMethod(oldIsolateID, false); - BasicBlock* ifNormal = createBasicBlock(""); BasicBlock* ifException = createBasicBlock(""); Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr())); @@ -820,7 +739,7 @@ void JavaJIT::beginSynchronize() { obj = new LoadInst( thisObject, "", false, currentBlock); } else { - obj = getClassDelegateePtr(compilingClass); + obj = TheCompiler->getJavaClassPtr(compilingClass); obj = new LoadInst(obj, "", false, currentBlock); } monitorEnter(obj); @@ -833,7 +752,7 @@ void JavaJIT::endSynchronize() { obj = new LoadInst( thisObject, "", false, currentBlock); } else { - obj = getClassDelegateePtr(compilingClass); + obj = TheCompiler->getJavaClassPtr(compilingClass); obj = new LoadInst(obj, "", false, currentBlock); } monitorExit(obj); @@ -880,7 +799,7 @@ static void removeUnusedObjects(std::vec Instruction* JavaJIT::inlineCompile(BasicBlock*& curBB, BasicBlock* endExBlock, std::vector& args) { - JavaAttribute* codeAtt = compilingMethod->lookupAttribute(JavaAttribute::codeAttribute); + Attribut* codeAtt = compilingMethod->lookupAttribut(Attribut::codeAttribut); Reader reader(codeAtt, compilingClass->bytes); uint16 maxStack = reader.readU2(); uint16 maxLocals = reader.readU2(); @@ -1054,7 +973,7 @@ llvm::Function* JavaJIT::javaCompile() { DbgSubprogram = TheCompiler->getDebugFactory()->createFunction( DIDescriptor(), "", "", DIFile(), 0, DIType(), false, false, 0); - JavaAttribute* codeAtt = compilingMethod->lookupAttribute(JavaAttribute::codeAttribute); + Attribut* codeAtt = compilingMethod->lookupAttribut(Attribut::codeAttribut); if (!codeAtt) { fprintf(stderr, "I haven't verified your class file and it's malformed:" @@ -1172,26 +1091,20 @@ llvm::Function* JavaJIT::javaCompile() { // Now that arguments have been setup, we can proceed with runtime calls. #if JNJVM_EXECUTE > 0 - if (!TheCompiler->isCompilingMMTk() && compilingClass->name->elements[0] == 'i') { - Value* arg = TheCompiler->getMethodInClass(compilingMethod); + { + Value* arg = TheCompiler->getMethodInClass(compilingMethod); - llvm::CallInst::Create(intrinsics->PrintMethodStartFunction, arg, "", + llvm::CallInst::Create(intrinsics->PrintMethodStartFunction, arg, "", currentBlock); } #endif - Value *currentIsolateID = NULL; nbHandlers = readExceptionTable(reader, codeLen); if (nbHandlers != 0) { - jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "ExceptionBufferBytes", currentBlock); - jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ExceptionBufferType, "ExceptionBuffer", currentBlock); - - Value *GEP[] = {intrinsics->constantZero, intrinsics->OffsetHandlerIsolateIDInExceptionBufferConstant}; - currentIsolateID = GetElementPtrInst::Create(jmpBuffer, GEP, "handlerIsolateID", currentBlock); + jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "", currentBlock); + jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ptrType, "", currentBlock); } - Value *oldIsolateID = this->setCurrentIsolateForCompilingMethod(currentIsolateID, nbHandlers != 0); - reader.cursor = start; exploreOpcodes(reader, codeLen); @@ -1269,13 +1182,11 @@ llvm::Function* JavaJIT::javaCompile() { endSynchronize(); } - this->restoreCurrentIsolateForCompilingMethod(oldIsolateID, false); - #if JNJVM_EXECUTE > 0 - if (!TheCompiler->isCompilingMMTk() && compilingClass->name->elements[0] == 'i') { + { Value* arg = TheCompiler->getMethodInClass(compilingMethod); CallInst::Create(intrinsics->PrintMethodEndFunction, arg, "", currentBlock); - } + } #endif finishExceptions(); @@ -1334,8 +1245,8 @@ llvm::Function* JavaJIT::javaCompile() { UTF8Buffer(compilingClass->name).cString(), UTF8Buffer(compilingMethod->name).cString()); - JavaAttribute* annotationsAtt = - compilingMethod->lookupAttribute(JavaAttribute::annotationsAttribute); + Attribut* annotationsAtt = + compilingMethod->lookupAttribut(Attribut::annotationsAttribut); if (annotationsAtt) { Reader reader(annotationsAtt, compilingClass->bytes); @@ -1346,10 +1257,11 @@ llvm::Function* JavaJIT::javaCompile() { const UTF8* name = compilingClass->ctpInfo->UTF8At(AR.AnnotationNameIndex); if (name->equals(TheCompiler->InlinePragma)) { - llvmFunction->removeFnAttr(llvm::Attribute::NoInline); - llvmFunction->addFnAttr(llvm::Attribute::AlwaysInline); + llvmFunction->removeFnAttr( + Attributes::get(*llvmContext, Attributes::NoInline)); + llvmFunction->addFnAttr(Attributes::AlwaysInline); } else if (name->equals(TheCompiler->NoInlinePragma)) { - llvmFunction->addFnAttr(llvm::Attribute::NoInline); + llvmFunction->addFnAttr(Attributes::NoInline); } } } @@ -1384,7 +1296,7 @@ void JavaJIT::loadConstant(uint16 index) Value* val = TheCompiler->getString(str); push(val, false, upcalls->newString); } else { - JavaString** str = (JavaString**)ctpInfo->getCachedValue(index); + JavaString** str = (JavaString**)ctpInfo->ctpRes[index]; if ((str != NULL) && !TheCompiler->isStaticCompiling()) { Value* val = TheCompiler->getStringPtr(str); val = new LoadInst(val, "", currentBlock); @@ -1659,7 +1571,7 @@ Instruction* JavaJIT::lowerDoubleOps(con Instruction* JavaJIT::invokeInline(JavaMethod* meth, std::vector& args, bool customized) { - JavaJIT jit(TheCompiler, meth, llvmFunction, customized ? customizeFor : NULL, compilingMMTk); + JavaJIT jit(TheCompiler, meth, llvmFunction, customized ? customizeFor : NULL); jit.unifiedUnreachable = unifiedUnreachable; jit.inlineMethods = inlineMethods; jit.inlineMethods[meth] = true; @@ -1824,11 +1736,13 @@ Value* JavaJIT::getConstantPoolAt(uint32 // This makes unswitch loop very unhappy time-wise, but makes GVN happy // number-wise. IMO, it's better to have this than Unswitch. + JavaConstantPool* ctp = compilingClass->ctpInfo; + Value* CTP = TheCompiler->getResolvedConstantPool(ctp); Value* Cl = TheCompiler->getNativeClass(compilingClass); std::vector Args; Args.push_back(resolver); - Args.push_back(compilingMMTk ? intrinsics->constantZero : intrinsics->CurrentIsolateID); + Args.push_back(CTP); Args.push_back(Cl); Args.push_back(ConstantInt::get(Type::getInt32Ty(*llvmContext), index)); if (additionalArg) Args.push_back(additionalArg); @@ -1972,8 +1886,6 @@ Value* JavaJIT::ldResolved(uint16 index, } object = TheCompiler->getStaticInstance(field->classDef); - if (!object) - object = CallInst::Create(intrinsics->GetStaticInstanceFunction, Cl, "", currentBlock); } else { object = new LoadInst( object, "", false, currentBlock); @@ -2406,11 +2318,7 @@ Instruction* JavaJIT::invoke(Value *F, s if (jmpBuffer != NULL) { BasicBlock* doCall = createBasicBlock(""); ifException = createBasicBlock(""); - - Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetSetJmpBufferInExceptionBufferConstant, intrinsics->constantZero}; - Value *setjmpBuffer = GetElementPtrInst::Create(jmpBuffer, GEP, "setjmpBuffer", currentBlock); - Instruction* check = CallInst::Create(intrinsics->SetjmpFunction, setjmpBuffer, "", currentBlock); - + Instruction* check = CallInst::Create(intrinsics->SetjmpFunction, jmpBuffer, "", currentBlock); check = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, check, intrinsics->constantZero, ""); BranchInst::Create(doCall, ifException, check, currentBlock); currentBlock = doCall; @@ -2427,14 +2335,6 @@ Instruction* JavaJIT::invoke(Value *F, s BranchInst::Create(ifNormal, currentBlock); currentBlock = ifException; - - // Restore the isolate ID of the current method. - // The called method had an exception and might not have restored the isolate ID as necessary. - Value* GEP[] = {intrinsics->constantZero, intrinsics->OffsetHandlerIsolateIDInExceptionBufferConstant}; - Value *handlerIsolateID = GetElementPtrInst::Create(jmpBuffer, GEP, "", currentBlock); - handlerIsolateID = new LoadInst(handlerIsolateID, "handlerIsolateID", currentBlock); - this->restoreCurrentIsolateForCompilingMethod(handlerIsolateID, true); - CallInst::Create(intrinsics->UnregisterSetjmpFunction, jmpBuffer, "", currentBlock); BranchInst::Create(currentExceptionBlock, currentBlock); currentBlock = ifNormal; Modified: vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp Thu Apr 25 11:48:11 2013 @@ -22,7 +22,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/Target/TargetData.h" +#include "llvm/DataLayout.h" #include <../lib/ExecutionEngine/JIT/JIT.h> #include <../lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h> @@ -177,8 +177,8 @@ JavaJITCompiler::JavaJITCompiler(const s executionEngine = engine.create(); executionEngine->RegisterJITEventListener(&listener); - TheTargetData = executionEngine->getTargetData(); - TheModule->setDataLayout(TheTargetData->getStringRepresentation()); + TheDataLayout = executionEngine->getDataLayout(); + TheModule->setDataLayout(TheDataLayout->getStringRepresentation()); TheModule->setTargetTriple(vmkit::VmkitModule::getHostTriple()); JavaIntrinsics.init(TheModule); initialiseAssessorInfo(); Modified: vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp Thu Apr 25 11:48:11 2013 @@ -12,7 +12,7 @@ #include "llvm/PassManager.h" #include "llvm/Analysis/DIBuilder.h" #include "llvm/Analysis/LoopPass.h" -#include "llvm/Target/TargetData.h" +#include "llvm/DataLayout.h" #include "vmkit/JIT.h" @@ -108,13 +108,13 @@ llvm::FunctionPass* createLowerConstantC void JavaLLVMCompiler::addJavaPasses() { JavaNativeFunctionPasses = new FunctionPassManager(TheModule); - JavaNativeFunctionPasses->add(new TargetData(TheModule)); + JavaNativeFunctionPasses->add(new DataLayout(TheModule)); J3FunctionPasses = new FunctionPassManager(TheModule); J3FunctionPasses->add(createLowerConstantCallsPass(this)); JavaFunctionPasses = new FunctionPassManager(TheModule); - JavaFunctionPasses->add(new TargetData(TheModule)); + JavaFunctionPasses->add(new DataLayout(TheModule)); vmkit::VmkitModule::addCommandLinePasses(JavaFunctionPasses); } Modified: vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp Thu Apr 25 11:48:11 2013 @@ -14,7 +14,7 @@ #include "llvm/Module.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/MutexGuard.h" -#include "llvm/Target/TargetData.h" +#include "llvm/DataLayout.h" #include "vmkit/JIT.h" @@ -38,7 +38,7 @@ using namespace llvm; Type* LLVMClassInfo::getVirtualType() { if (!virtualType) { std::vector fields; - const TargetData* targetData = Compiler->TheTargetData; + const DataLayout* targetData = Compiler->TheDataLayout; const StructLayout* sl = 0; StructType* structType = 0; LLVMContext& context = Compiler->getLLVMModule()->getContext(); @@ -109,7 +109,7 @@ Type* LLVMClassInfo::getStaticType() { StructType* structType = StructType::get(context, fields, false); staticType = PointerType::getUnqual(structType); - const TargetData* targetData = Compiler->TheTargetData; + const DataLayout* targetData = Compiler->TheDataLayout; const StructLayout* sl = targetData->getStructLayout(structType); // TODO: put that elsewhere. @@ -191,9 +191,9 @@ Function* LLVMMethodInfo::getMethod(Clas result->setGC("vmkit"); if (Compiler->useCooperativeGC()) { - result->addFnAttr(Attribute::NoInline); + result->addFnAttr(Attributes::NoInline); } - result->addFnAttr(Attribute::NoUnwind); + result->addFnAttr(Attributes::NoUnwind); Compiler->functions.insert(std::make_pair(result, methodDef)); if (!Compiler->isStaticCompiling() && !customizing && methodDef->code) { @@ -468,8 +468,8 @@ Function* LLVMSignatureInfo::createFunct } res->setGC("vmkit"); - res->addFnAttr(Attribute::NoInline); - res->addFnAttr(Attribute::NoUnwind); + res->addFnAttr(Attributes::NoInline); + res->addFnAttr(Attributes::NoUnwind); if (virt) { Compiler->virtualBufs[FTy] = res; @@ -558,8 +558,8 @@ Function* LLVMSignatureInfo::createFunct } res->setGC("vmkit"); - res->addFnAttr(Attribute::NoInline); - res->addFnAttr(Attribute::NoUnwind); + res->addFnAttr(Attributes::NoInline); + res->addFnAttr(Attributes::NoUnwind); if (virt) { Compiler->virtualAPs[FTy] = res; @@ -676,8 +676,8 @@ Function* LLVMSignatureInfo::createFunct } stub->setGC("vmkit"); - stub->addFnAttr(Attribute::NoInline); - stub->addFnAttr(Attribute::NoUnwind); + stub->addFnAttr(Attributes::NoInline); + stub->addFnAttr(Attributes::NoUnwind); if (virt) { Compiler->virtualStubs[FTy] = stub; Modified: vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/EscapeAnalysis.cpp Thu Apr 25 11:48:11 2013 @@ -127,7 +127,7 @@ static bool escapes(Value* Ins, std::map CallSite::arg_iterator B = CS.arg_begin(), E = CS.arg_end(); for (CallSite::arg_iterator A = B; A != E; ++A) { if (A->get() == Ins && - !CS.paramHasAttr(A - B + 1, Attribute::NoCapture)) { + !CS.paramHasAttr(A - B + 1, Attributes::NoCapture)) { return true; } } Modified: vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp Thu Apr 25 11:48:11 2013 @@ -16,7 +16,7 @@ #include "llvm/Support/CallSite.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/Target/TargetData.h" +#include "llvm/DataLayout.h" #include "llvm/Transforms/Utils/Cloning.h" #include "vmkit/JIT.h" @@ -45,7 +45,7 @@ bool InlineMalloc::runOnFunction(Functio Function* ArrayWriteBarrier = F.getParent()->getFunction("arrayWriteBarrier"); Function* NonHeapWriteBarrier = F.getParent()->getFunction("nonHeapWriteBarrier"); bool Changed = false; - const TargetData *TD = getAnalysisIfAvailable(); + const DataLayout *TD = getAnalysisIfAvailable(); for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) { BasicBlock *Cur = BI; for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) { Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 11:48:11 2013 @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -32,7 +33,7 @@ #include #include #include -#include +#include #include #include #include <../lib/ExecutionEngine/JIT/JIT.h> Modified: vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp (original) +++ vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp Thu Apr 25 11:48:11 2013 @@ -23,7 +23,7 @@ #include "llvm/MC/MCSymbol.h" #include "llvm/MC/MCStreamer.h" #include "llvm/Target/Mangler.h" -#include "llvm/Target/TargetData.h" +#include "llvm/DataLayout.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetLoweringObjectFile.h" #include "llvm/Target/TargetMachine.h" @@ -289,7 +289,7 @@ Constant* FindMetadata(const Function& F /// either condition is detected in a function which uses the GC. /// void VmkitAOTGCMetadataPrinter::finishAssembly(AsmPrinter &AP) { - unsigned IntPtrSize = AP.TM.getTargetData()->getPointerSize(); + unsigned IntPtrSize = AP.TM.getDataLayout()->getPointerSize(0); AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection()); Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180289&r1=180288&r2=180289&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 11:48:11 2013 @@ -34,7 +34,7 @@ #include "llvm/Support/SystemUtils.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Signals.h" -#include "llvm/Target/TargetData.h" +#include "llvm/DataLayout.h" #include "llvm/Target/TargetMachine.h" From peter.senna at gmail.com Thu Apr 25 09:50:55 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:50:55 -0000 Subject: [vmkit-commits] [vmkit] r180291 - Modified writeBarrierCAS to store object reference instead of address Message-ID: <20130425164822.21ABE2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:48:21 2013 New Revision: 180291 URL: http://llvm.org/viewvc/llvm-project?rev=180291&view=rev Log: Modified writeBarrierCAS to store object reference instead of address (cherry picked from commit bb2b1d203edb905eea32c38b73bcfb3f83e0b19f) Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180291&r1=180290&r2=180291&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original) +++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:48:21 2013 @@ -176,7 +176,7 @@ public final class Bindings { Selected.Mutator mutator = Selected.Mutator.get(); return mutator.objectReferenceTryCompareAndSwap(src, slot, old, value, slot.toWord(), slot.toWord(), Constants.INSTANCE_FIELD); } else { - return slot.attempt(old.toAddress().toWord(), value.toAddress().toWord()); + return slot.attempt(old, value); } } From peter.senna at gmail.com Thu Apr 25 09:51:19 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:51:19 -0000 Subject: [vmkit-commits] [vmkit] r180294 - Port to GNU Classpath 0.99 Message-ID: <20130425164947.6454D2A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:49:46 2013 New Revision: 180294 URL: http://llvm.org/viewvc/llvm-project?rev=180294&view=rev Log: Port to GNU Classpath 0.99 (cherry picked from commit ceed20f214aa31de4c47ef685ee68c3f066031c3) Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp vmkit/trunk/tests/ThreadTest.java Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc Thu Apr 25 11:49:46 2013 @@ -25,75 +25,109 @@ using namespace j3; extern "C" { -JNIEXPORT jobject JNICALL Java_java_lang_reflect_Constructor_getParameterTypes( +bool getClassAndMethodPointerByVMConstructor(JavaObject* vmCons, UserCommonClass** cls, JavaMethod** m) + __attribute__ ((noinline)); + +bool getClassAndMethodPointerByVMConstructor(JavaObject* vmCons, UserCommonClass** cls, JavaMethod** m) { + JavaObject* res = 0; + JavaField* field = 0; + JavaField* fieldSlot = 0; + UserCommonClass* cl = 0; + // Local object references + llvm_gcroot(vmCons, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + // Store local reference + cl = JavaObject::getClass(vmCons); + if (cl->isClass()) { + const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz"); + const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;"); + const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot"); + const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I"); + if (name && nameSlot && type && typeSlot) { + field = cl->asClass()->lookupField(name, type, false, true,0); + fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0); + res = field->getInstanceObjectField(vmCons); + int slot = fieldSlot->getInstanceInt32Field(vmCons); + *cls = JavaObjectClass::getClass((JavaObjectClass*)res); + *m = &((*cls)->asClass()->virtualMethods[slot]); + return true; + } + } + END_NATIVE_EXCEPTION + return false; +} + +JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMConstructor_getParameterTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectConstructor* cons) { +JavaObject* cons) { - JavaObject* res = 0; + JavaObject* res = 0; + UserCommonClass* cls = 0; + JavaMethod* method = 0; + // Local object references + llvm_gcroot(cons, 0); + llvm_gcroot(res, 0); - llvm_gcroot(cons, 0); - llvm_gcroot(res, 0); + BEGIN_NATIVE_EXCEPTION(0) + // Store local reference - BEGIN_NATIVE_EXCEPTION(0) - - verifyNull(cons); - UserClass* cl = JavaObjectConstructor::getClass(cons); - JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); - JnjvmClassLoader* loader = cl->classLoader; + if (getClassAndMethodPointerByVMConstructor(cons, &cls,&method)) { + res = method->getParameterTypes(cls->classLoader); + } // FIXME (INTI) : Throw an exception here - res = meth->getParameterTypes(loader); - END_NATIVE_EXCEPTION + END_NATIVE_EXCEPTION - return (jobject)res; + return (jobject)res; } -JNIEXPORT jint JNICALL Java_java_lang_reflect_Constructor_getModifiersInternal( +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMConstructor_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectConstructor* cons) { +JavaObject* cons) { - llvm_gcroot(cons, 0); - jint res = 0; + jint res = 0; - BEGIN_NATIVE_EXCEPTION(0) + UserCommonClass* cls = 0; + JavaMethod* method = 0; + // Local object references + llvm_gcroot(cons, 0); - verifyNull(cons); - JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); - res = meth->access; + BEGIN_NATIVE_EXCEPTION(0) + // Store local reference - END_NATIVE_EXCEPTION + if (getClassAndMethodPointerByVMConstructor(cons, &cls,&method)) { + res = method->access; + } // FIXME (INTI) : Throw an exception here - return res; + END_NATIVE_EXCEPTION + + return res; } -JavaObject* proceedConstructor(JavaObjectConstructor* cons, - ArrayObject* args, - JavaObject* Clazz, jint index) +JavaObject* proceedRealConstructor(ArrayObject* args, + UserCommonClass* clazz, JavaMethod* method) __attribute__ ((noinline)); -JavaObject* proceedConstructor(JavaObjectConstructor* cons, - ArrayObject* args, - JavaObject* Clazz, jint index) { +JavaObject* proceedRealConstructor(ArrayObject* args, + UserCommonClass* clazz, JavaMethod* method) { JavaObject* res = 0; JavaObject* excp = 0; - llvm_gcroot(cons, 0); llvm_gcroot(args, 0); - llvm_gcroot(Clazz, 0); llvm_gcroot(res, 0); llvm_gcroot(excp, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); - UserClass* cl = JavaObjectConstructor::getClass(cons); sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; - Signdef* sign = meth->getSignature(); + Signdef* sign = method->getSignature(); sint32 size = sign->nbArguments; - if (isAbstract(cl->access)) vm->instantiationException(cl); + if (isAbstract(clazz->access)) vm->instantiationException(clazz); vmkit::ThreadAllocator allocator; // Allocate a buffer to store the arguments. @@ -101,8 +135,7 @@ JavaObject* proceedConstructor(JavaObjec (jvalue*)allocator.Allocate(size * sizeof(jvalue)) : NULL; if (nbArgs == size) { - UserCommonClass* _cl = UserCommonClass::resolvedImplClass(vm, Clazz, false); - UserClass* cl = _cl->asClass(); + UserClass* cl = clazz->asClass(); if (cl) { cl->initialiseClass(vm); res = cl->doNew(vm); @@ -119,7 +152,7 @@ JavaObject* proceedConstructor(JavaObjec JavaThread* th = JavaThread::get(); TRY { - meth->invokeIntSpecialBuf(vm, cl, res, buf); + method->invokeIntSpecialBuf(vm, cl, res, buf); } CATCH { excp = th->getJavaException(); } END_CATCH; @@ -147,73 +180,76 @@ JavaObject* proceedConstructor(JavaObjec return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Constructor_constructNative( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMConstructor_construct( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectConstructor* cons, ArrayObject* args, JavaObject* Clazz, jint index) { +JavaObject* cons, ArrayObject* args) { JavaObject* res = 0; + JavaMethod* m = 0; + UserCommonClass* cls = 0; llvm_gcroot(res, 0); llvm_gcroot(cons, 0); llvm_gcroot(args, 0); - llvm_gcroot(Clazz, 0); BEGIN_NATIVE_EXCEPTION(0) - - res = proceedConstructor(cons, args, Clazz, index); - + if (getClassAndMethodPointerByVMConstructor(cons,&cls, &m)){ + res = proceedRealConstructor(args, cls, m); + } // FIXME (INTI) : Throw an exception here END_NATIVE_EXCEPTION - return res; } JNIEXPORT -ArrayObject* JNICALL Java_java_lang_reflect_Constructor_getExceptionTypes( +ArrayObject* JNICALL Java_java_lang_reflect_VMConstructor_getExceptionTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectConstructor* cons) { +JavaObject* cons) { ArrayObject* res = 0; - + JavaMethod* m = 0; + UserCommonClass* cls = 0; llvm_gcroot(res, 0); llvm_gcroot(cons, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(cons); - UserClass* cl = JavaObjectConstructor::getClass(cons); - JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); - JnjvmClassLoader* loader = cl->classLoader; - - res = (ArrayObject*)meth->getExceptionTypes(loader); + verifyNull(cons); + if (getClassAndMethodPointerByVMConstructor(cons, &cls, & m)) { + JnjvmClassLoader* loader = cls->classLoader; + res = (ArrayObject*)m->getExceptionTypes(loader); + } // FIXME (INTI) : Throw an exception here END_NATIVE_EXCEPTION + return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Constructor_getSignature( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMConstructor_getSignature( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectConstructor* Meth) { +JavaObject* Meth) { JavaObject* result = 0; - + JavaMethod* m = 0; + UserCommonClass* cls = 0; llvm_gcroot(result, 0); llvm_gcroot(Meth, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Meth); - JavaMethod* meth = JavaObjectConstructor::getInternalMethod(Meth); - Jnjvm* vm = JavaThread::get()->getJVM(); - result = vm->internalUTF8ToStr(meth->type); + verifyNull(Meth); + if (getClassAndMethodPointerByVMConstructor(Meth, &cls, & m)) { + Jnjvm* vm = JavaThread::get()->getJVM(); + result = vm->internalUTF8ToStr(m->type); + } // FIXME (INTI) : Throw an exception here - END_NATIVE_EXCEPTION + END_NATIVE_EXCEPTION return result; } Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc Thu Apr 25 11:49:46 2013 @@ -19,31 +19,68 @@ using namespace j3; extern "C" { +bool getClassAndFieldPointerByVMField(JavaObject* vmField, UserCommonClass** cls, JavaField** m) + __attribute__ ((noinline)); -JNIEXPORT jint JNICALL Java_java_lang_reflect_Field_getModifiersInternal( +bool getClassAndFieldPointerByVMField(JavaObject* vmField, UserCommonClass** cls, JavaField** m) { + JavaObject* res = 0; + JavaField* field = 0; + JavaField* fieldSlot = 0; + UserCommonClass* cl = 0; + // Local object references + llvm_gcroot(vmField, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + // Store local reference + cl = JavaObject::getClass(vmField); + if (cl->isClass()) { + const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz"); + const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;"); + const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot"); + const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I"); + if (name && nameSlot && type && typeSlot) { + field = cl->asClass()->lookupField(name, type, false, true,0); + fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0); + res = field->getInstanceObjectField(vmField); + int slot = fieldSlot->getInstanceInt32Field(vmField); + *cls = JavaObjectClass::getClass((JavaObjectClass*)res); + *m = &((*cls)->asClass()->virtualFields[slot]); + return true; + } + } + END_NATIVE_EXCEPTION + return false; +} + +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field) { +JavaObject* Field) { jint res = 0; llvm_gcroot(Field, 0); BEGIN_NATIVE_EXCEPTION(0) - JavaField* field = JavaObjectField::getInternalField(Field); - res = field->access; + UserCommonClass* cls = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (getClassAndFieldPointerByVMField(Field, &cls, &field)) { + res = field->access; + } // FIXME : throw an exception in other case + END_NATIVE_EXCEPTION return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Field_getType( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_getType( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field) { +JavaObject* Field) { JavaObject* res = 0; @@ -53,22 +90,25 @@ JavaObjectField* Field) { BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); - JnjvmClassLoader* loader = cl->classLoader; - UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); - res = fieldCl->getClassDelegatee(vm); + + UserCommonClass* cls = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (getClassAndFieldPointerByVMField(Field, &cls, &field)) { + JnjvmClassLoader* loader = cls->classLoader; + UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); + res = fieldCl->getClassDelegatee(vm); + } // FIXME : throw an exception in other case END_NATIVE_EXCEPTION return res; } -JNIEXPORT jint JNICALL Java_java_lang_reflect_Field_getInt( +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getInt( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jint res = 0; @@ -78,13 +118,18 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } const Typedef* type = field->getSignature(); bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -129,11 +174,11 @@ JavaObjectField* Field, JavaObject* obj) } -JNIEXPORT jlong JNICALL Java_java_lang_reflect_Field_getLong( +JNIEXPORT jlong JNICALL Java_java_lang_reflect_VMField_getLong( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jlong res = 0; @@ -143,12 +188,18 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -199,11 +250,11 @@ JavaObjectField* Field, JavaObject* obj) return res; } -JNIEXPORT jboolean JNICALL Java_java_lang_reflect_Field_getBoolean( +JNIEXPORT jboolean JNICALL Java_java_lang_reflect_VMField_getBoolean( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jboolean res = 0; @@ -213,12 +264,19 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -245,11 +303,11 @@ JavaObjectField* Field, JavaObject* obj) } -JNIEXPORT jfloat JNICALL Java_java_lang_reflect_Field_getFloat( +JNIEXPORT jfloat JNICALL Java_java_lang_reflect_VMField_getFloat( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jfloat res = 0; llvm_gcroot(Field, 0); @@ -258,12 +316,19 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -320,11 +385,11 @@ JavaObjectField* Field, JavaObject* obj) return res; } -JNIEXPORT jbyte JNICALL Java_java_lang_reflect_Field_getByte( +JNIEXPORT jbyte JNICALL Java_java_lang_reflect_VMField_getByte( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jbyte res = 0; llvm_gcroot(Field, 0); @@ -333,12 +398,19 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -364,11 +436,11 @@ JavaObjectField* Field, JavaObject* obj) return res; } -JNIEXPORT jchar JNICALL Java_java_lang_reflect_Field_getChar( +JNIEXPORT jchar JNICALL Java_java_lang_reflect_VMField_getChar( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jchar res = 0; llvm_gcroot(Field, 0); @@ -377,12 +449,19 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -409,11 +488,11 @@ JavaObjectField* Field, JavaObject* obj) } -JNIEXPORT jshort JNICALL Java_java_lang_reflect_Field_getShort( +JNIEXPORT jshort JNICALL Java_java_lang_reflect_VMField_getShort( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jshort res = 0; @@ -423,12 +502,19 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -460,11 +546,11 @@ JavaObjectField* Field, JavaObject* obj) return res; } -JNIEXPORT jdouble JNICALL Java_java_lang_reflect_Field_getDouble( +JNIEXPORT jdouble JNICALL Java_java_lang_reflect_VMField_getDouble( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { jdouble res = 0; llvm_gcroot(Field, 0); @@ -473,12 +559,19 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -540,11 +633,11 @@ JavaObjectField* Field, JavaObject* obj) return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Field_get( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_get( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj) { +JavaObject* Field, JavaObject* obj) { JavaObject* res = 0; @@ -555,12 +648,19 @@ JavaObjectField* Field, JavaObject* obj) BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -622,11 +722,11 @@ JavaObjectField* Field, JavaObject* obj) return res; } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_set( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_set( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, JavaObject* val) { +JavaObject* Field, JavaObject* obj, JavaObject* val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -635,14 +735,21 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + jvalue buf; bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -713,11 +820,11 @@ JavaObjectField* Field, JavaObject* obj, END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setBoolean( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setBoolean( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jboolean val) { +JavaObject* Field, JavaObject* obj, jboolean val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -725,12 +832,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -755,11 +869,11 @@ JavaObjectField* Field, JavaObject* obj, } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setByte( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setByte( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jbyte val) { +JavaObject* Field, JavaObject* obj, jbyte val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -767,12 +881,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -826,11 +947,11 @@ JavaObjectField* Field, JavaObject* obj, END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setChar( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setChar( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jchar val) { +JavaObject* Field, JavaObject* obj, jchar val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -838,12 +959,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -890,11 +1018,11 @@ JavaObjectField* Field, JavaObject* obj, END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setShort( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setShort( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jshort val) { +JavaObject* Field, JavaObject* obj, jshort val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -902,12 +1030,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -954,11 +1089,11 @@ JavaObjectField* Field, JavaObject* obj, END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setInt( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setInt( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jint val) { +JavaObject* Field, JavaObject* obj, jint val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -966,12 +1101,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -1013,11 +1155,11 @@ JavaObjectField* Field, JavaObject* obj, END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setLong( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setLong( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jlong val) { +JavaObject* Field, JavaObject* obj, jlong val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1025,12 +1167,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -1066,11 +1215,11 @@ JavaObjectField* Field, JavaObject* obj, END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setFloat( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setFloat( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jfloat val) { +JavaObject* Field, JavaObject* obj, jfloat val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1078,12 +1227,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } @@ -1113,11 +1269,11 @@ JavaObjectField* Field, JavaObject* obj, END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setDouble( +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setDouble( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectField* Field, JavaObject* obj, jdouble val) { +JavaObject* Field, JavaObject* obj, jdouble val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1125,12 +1281,19 @@ JavaObjectField* Field, JavaObject* obj, BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* cl = JavaObjectField::getClass(Field); - JavaField* field = JavaObjectField::getInternalField(Field); + //UserClass* cl = JavaObjectField::getClass(Field); + //JavaField* field = JavaObjectField::getInternalField(Field); + + UserCommonClass* cl = 0; + JavaField* field = 0;//JavaObjectField::getInternalField(Field); + if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { + // FIXME : throw an exception in other case + } + bool stat = isStatic(field->access); if (stat) { - cl->initialiseClass(vm); + cl->asClass()->initialiseClass(vm); } else { verifyNull(obj); } Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc Thu Apr 25 11:49:46 2013 @@ -25,30 +25,69 @@ using namespace j3; extern "C" { -JNIEXPORT jint JNICALL Java_java_lang_reflect_Method_getModifiersInternal( +bool getClassAndMethodPointerFromVMMethod(JavaObject* vmMethod, UserCommonClass** cls, JavaMethod** m) + __attribute__ ((noinline)); + +bool getClassAndMethodPointerFromVMMethod(JavaObject* vmMethod, UserCommonClass** cls, JavaMethod** m) { + JavaObject* res = 0; + JavaField* field = 0; + JavaField* fieldSlot = 0; + UserCommonClass* cl = 0; + // Local object references + llvm_gcroot(vmMethod, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + // Store local reference + cl = JavaObject::getClass(vmMethod); + if (cl->isClass()) { + const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz"); + const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;"); + const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot"); + const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I"); + if (name && nameSlot && type && typeSlot) { + field = cl->asClass()->lookupField(name, type, false, true,0); + fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0); + res = field->getInstanceObjectField(vmMethod); + int slot = fieldSlot->getInstanceInt32Field(vmMethod); + *cls = JavaObjectClass::getClass((JavaObjectClass*)res); + if (!*cls) return false; + *m = &((*cls)->asClass()->virtualMethods[slot]); + if (!*m) return false; + return true; + } + } + END_NATIVE_EXCEPTION + return false; +} + +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMMethod_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectMethod* Meth) { +JavaObject* Meth) { jint res = 0; llvm_gcroot(Meth, 0); BEGIN_NATIVE_EXCEPTION(0) - JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - res = meth->access; + JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); + UserCommonClass* cls = 0; + if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { + res = meth->access; + } // FIXME : throw an exception in other case END_NATIVE_EXCEPTION return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_getReturnType( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getReturnType( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectMethod* Meth) { +JavaObject* Meth) { JavaObject* res = 0; llvm_gcroot(Meth, 0); @@ -56,10 +95,15 @@ JavaObjectMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) - UserClass* cl = JavaObjectMethod::getClass(Meth); - JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - JnjvmClassLoader* loader = cl->classLoader; - res = meth->getReturnType(loader); + //UserClass* cl = JavaObjectMethod::getClass(Meth); + //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + + JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); + UserCommonClass* cls = 0; + if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getReturnType(loader); + } // FIXME : throw an exception in other case END_NATIVE_EXCEPTION @@ -67,11 +111,11 @@ JavaObjectMethod* Meth) { } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_getParameterTypes( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getParameterTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectMethod* Meth) { +JavaObject* Meth) { JavaObject* res = 0; llvm_gcroot(Meth, 0); @@ -79,23 +123,30 @@ JavaObjectMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) - UserClass* cl = JavaObjectMethod::getClass(Meth); - JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - JnjvmClassLoader* loader = cl->classLoader; + //UserClass* cl = JavaObjectMethod::getClass(Meth); + //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + + JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); + UserCommonClass* cls = 0; + if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getParameterTypes(loader); + } // FIXME : throw an exception in other case + - res = meth->getParameterTypes(loader); END_NATIVE_EXCEPTION return res; } -JavaObject* proceedMethod(JavaObjectMethod* Meth, JavaObject* obj, - ArrayObject* args, JavaObject* Cl, jint index) + +JavaObject* proceedVMMethod(JavaObject* Meth, JavaObject* obj, + ArrayObject* args) __attribute__((noinline)); -JavaObject* proceedMethod(JavaObjectMethod* Meth, JavaObject* obj, - ArrayObject* args, JavaObject* Cl, jint index) { +JavaObject* proceedVMMethod(JavaObject* Meth, JavaObject* obj, + ArrayObject* args) { JavaObject* res = 0; JavaObject* exc = 0; @@ -104,12 +155,15 @@ JavaObject* proceedMethod(JavaObjectMeth llvm_gcroot(Meth, 0); llvm_gcroot(obj, 0); llvm_gcroot(args, 0); - llvm_gcroot(Cl, 0); llvm_gcroot(exc, 0); Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* _cl = 0;//UserCommonClass::resolvedImplClass(vm, Cl, false); + JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); - JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + if (!getClassAndMethodPointerFromVMMethod(Meth, &_cl, &meth)) { + // FIXME : throw an exception + } sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; Signdef* sign = meth->getSignature(); @@ -120,7 +174,7 @@ JavaObject* proceedMethod(JavaObjectMeth (jvalue*)allocator.Allocate(size * sizeof(jvalue)) : NULL; if (nbArgs == size) { - UserCommonClass* _cl = UserCommonClass::resolvedImplClass(vm, Cl, false); + //UserCommonClass* _cl = UserCommonClass::resolvedImplClass(vm, Cl, false); UserClass* cl = (UserClass*)_cl; if (isVirtual(meth->access)) { @@ -234,33 +288,32 @@ JavaObject* proceedMethod(JavaObjectMeth #undef RUN_METH -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_invokeNative( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_invoke( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectMethod* Meth, JavaObject* obj, ArrayObject* args, JavaObject* Cl, jint index) { +JavaObject* Meth, JavaObject* obj, ArrayObject* args) { JavaObject* res = 0; llvm_gcroot(res, 0); llvm_gcroot(Meth, 0); llvm_gcroot(obj, 0); llvm_gcroot(args, 0); - llvm_gcroot(Cl, 0); BEGIN_NATIVE_EXCEPTION(0) - res = proceedMethod(Meth, obj, args, Cl, index); + res = proceedVMMethod(Meth, obj, args); END_NATIVE_EXCEPTION return res; } -JNIEXPORT ArrayObject* JNICALL Java_java_lang_reflect_Method_getExceptionTypes( +JNIEXPORT ArrayObject* JNICALL Java_java_lang_reflect_VMMethod_getExceptionTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectMethod* Meth) { +JavaObject* Meth) { ArrayObject* res = 0; llvm_gcroot(Meth, 0); @@ -269,21 +322,28 @@ JavaObjectMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - UserClass* cl = JavaObjectMethod::getClass(Meth); - JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - JnjvmClassLoader* loader = cl->classLoader; - res = meth->getExceptionTypes(loader); + //UserClass* cl = JavaObjectMethod::getClass(Meth); + //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + + JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); + UserCommonClass* cls = 0; + if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getExceptionTypes(loader); + } // FIXME : throw an exception in other case + + END_NATIVE_EXCEPTION return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_getSignature( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getSignature( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectMethod* Meth) { +JavaObject* Meth) { JavaObject* result = 0; llvm_gcroot(Meth, 0); @@ -292,9 +352,16 @@ JavaObjectMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - Jnjvm* vm = JavaThread::get()->getJVM(); - result = vm->internalUTF8ToStr(meth->type); + //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + + JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); + UserCommonClass* cls = 0; + if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { + Jnjvm* vm = JavaThread::get()->getJVM(); + result = vm->internalUTF8ToStr(meth->type); + } // FIXME : throw an exception in other case + + END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 11:49:46 2013 @@ -16,64 +16,97 @@ namespace j3 { -JavaMethod* JavaObjectConstructor::getInternalMethod(JavaObjectConstructor* self) { + +JavaMethod* JavaObjectVMConstructor::getInternalMethod(JavaObjectVMConstructor* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); return &(cls->asClass()->virtualMethods[self->slot]); } +JavaMethod* JavaObjectConstructor::getInternalMethod(JavaObjectConstructor* self) { + llvm_gcroot(self, 0); + return JavaObjectVMConstructor::getInternalMethod(self->vmCons); +} -JavaMethod* JavaObjectMethod::getInternalMethod(JavaObjectMethod* self) { + +JavaMethod* JavaObjectVMMethod::getInternalMethod(JavaObjectVMMethod* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); return &(cls->asClass()->virtualMethods[self->slot]); } +JavaMethod* JavaObjectMethod::getInternalMethod(JavaObjectMethod* self) { + llvm_gcroot(self, 0); + return JavaObjectVMMethod::getInternalMethod(self->vmMethod); +} + JavaObjectConstructor* JavaObjectConstructor::createFromInternalConstructor(JavaMethod * cons, int i) { JavaObjectConstructor* ret = 0; + JavaObject* vmConsInstance = 0; + UserClass* VMConsClass = 0; + UserClass* ConstructorClass = 0; llvm_gcroot(ret, 0); - + llvm_gcroot(cons, 0); + llvm_gcroot(vmConsInstance, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* Cons = vm->upcalls->newConstructor; - ret = (JavaObjectConstructor*)Cons->doNew(vm); + VMConsClass = vm->upcalls->newVMConstructor; + vmConsInstance = VMConsClass->doNew(vm); JavaObject* const* Cl = cons->classDef->getDelegateePtr(); - vm->upcalls->initConstructor->invokeIntSpecial(vm, Cons, ret, - Cl, i); - + vm->upcalls->initVMConstructor->invokeIntSpecial(vm, VMConsClass, vmConsInstance, Cl, i); + ConstructorClass = vm->upcalls->newConstructor; + ret = (JavaObjectConstructor*)ConstructorClass->doNew(vm); + vm->upcalls->initConstructor->invokeIntSpecial(vm, ConstructorClass, ret, &vmConsInstance); return ret; } JavaObjectMethod* JavaObjectMethod::createFromInternalMethod(JavaMethod* meth, int i) { JavaObjectMethod* ret = 0; + JavaObjectVMMethod* vmMeth = 0; JavaString* str = 0; llvm_gcroot(ret, 0); llvm_gcroot(str, 0); + llvm_gcroot(vmMeth, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* Meth = vm->upcalls->newMethod; - ret = (JavaObjectMethod*)Meth->doNew(vm); + + UserClass* VMMeth = vm->upcalls->newVMMethod; + vmMeth = (JavaObjectVMMethod*)VMMeth->doNew(vm); + + str = vm->internalUTF8ToStr(meth->name); JavaObject* const* Cl = meth->classDef->getDelegateePtr(); - vm->upcalls->initMethod->invokeIntSpecial(vm, Meth, ret, - Cl, &str, i); + vm->upcalls->initVMMethod->invokeIntSpecial(vm, VMMeth, vmMeth, Cl, &str, i); + + //vmMeth->name = str; + //vmMeth->declaringClass = (JavaObject*)Cl; // I don't like this + //vmMeth->slot = i; + + UserClass* Meth = vm->upcalls->newMethod; + ret = (JavaObjectMethod*)Meth->doNew(vm); + + vm->upcalls->initMethod->invokeIntSpecial(vm, Meth, ret,&vmMeth); return ret; } JavaObjectField* JavaObjectField::createFromInternalField(JavaField* field, int i) { JavaObjectField* ret = 0; JavaString* name = 0; + JavaObject* vmField = 0; + llvm_gcroot(ret, 0); llvm_gcroot(name, 0); + llvm_gcroot(vmField, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - UserClass* Field = vm->upcalls->newField; - ret = (JavaObjectField*)Field->doNew(vm); + UserClass* VMFieldClass = vm->upcalls->newVMField; + vmField = VMFieldClass->doNew(vm); name = vm->internalUTF8ToStr(field->name); JavaObject* const* Cl = field->classDef->getDelegateePtr(); - vm->upcalls->initField->invokeIntSpecial(vm, Field, ret, - Cl, &name, i); - + vm->upcalls->initVMField->invokeIntSpecial(vm, VMFieldClass, vmField,Cl,&name, i); + UserClass* FieldClass = vm->upcalls->newField; + ret = (JavaObjectField*)FieldClass->doNew(vm); + vm->upcalls->initField->invokeIntSpecial(vm, FieldClass, ret, &vmField); return ret; } } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:49:46 2013 @@ -71,77 +71,137 @@ public: static int getModifiers(JavaObjectClass* Cl); }; +class JavaObjectVMField : public JavaObject { +private: + JavaObjectClass* declaringClass; + JavaObject* name; + uint32 slot; + // others +public: + static void staticTracer(JavaObjectVMField* obj, word_t closure) { + vmkit::Collector::markAndTrace(obj, &obj->name, closure); + vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + } + + static JavaField* getInternalField(JavaObjectVMField* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return &(cls->asClass()->virtualFields[self->slot]); + } + + static UserClass* getClass(JavaObjectVMField* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); + } +}; + class JavaObjectField : public JavaObject { private: uint8 flag; - JavaObjectClass* declaringClass; - JavaObject* name; - uint32 slot; + JavaObject* p; + JavaObjectVMField* vmField; public: static void staticTracer(JavaObjectField* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->name, closure); - vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + vmkit::Collector::markAndTrace(obj, &obj->p, closure); + vmkit::Collector::markAndTrace(obj, &obj->vmField, closure); } static JavaField* getInternalField(JavaObjectField* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return &(cls->asClass()->virtualFields[self->slot]); + return JavaObjectVMField::getInternalField(self->vmField); } static UserClass* getClass(JavaObjectField* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); + return JavaObjectVMField::getClass(self->vmField); } static JavaObjectField* createFromInternalField(JavaField* field, int i); }; +class JavaObjectVMMethod : public JavaObject { +private: + JavaObjectClass* declaringClass; + JavaString* name; + uint32 slot; +public: + static void staticTracer(JavaObjectVMMethod* obj, word_t closure) { + vmkit::Collector::markAndTrace(obj, &obj->name, closure); + vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + } + + static JavaMethod* getInternalMethod(JavaObjectVMMethod* self); + + static UserClass* getClass(JavaObjectVMMethod* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); + } +}; + class JavaObjectMethod : public JavaObject { private: uint8 flag; - JavaObjectClass* declaringClass; - JavaObject* name; - uint32 slot; + JavaObject* p; + JavaObjectVMMethod* vmMethod; public: static void staticTracer(JavaObjectMethod* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->name, closure); - vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + vmkit::Collector::markAndTrace(obj, &obj->p, closure); + vmkit::Collector::markAndTrace(obj, &obj->vmMethod, closure); } static JavaMethod* getInternalMethod(JavaObjectMethod* self); static UserClass* getClass(JavaObjectMethod* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); + return JavaObjectVMMethod::getClass(self->vmMethod); } static JavaObjectMethod* createFromInternalMethod(JavaMethod* meth, int i); }; -class JavaObjectConstructor : public JavaObject { + +class JavaObjectVMConstructor : public JavaObject { private: - uint8 flag; JavaObjectClass* declaringClass; uint32 slot; public: - static void staticTracer(JavaObjectConstructor* obj, word_t closure) { + static void staticTracer(JavaObjectVMConstructor* obj, word_t closure) { vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); } + + static JavaMethod* getInternalMethod(JavaObjectVMConstructor* self); + + static UserClass* getClass(JavaObjectVMConstructor* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); + } +}; + +class JavaObjectConstructor : public JavaObject { +private: + uint8 flag; + JavaObject* p; + JavaObjectVMConstructor* vmCons; + +public: + static void staticTracer(JavaObjectConstructor* obj, word_t closure) { + vmkit::Collector::markAndTrace(obj, &obj->p, closure); + vmkit::Collector::markAndTrace(obj, &obj->vmCons, closure); + } static JavaMethod* getInternalMethod(JavaObjectConstructor* self); static UserClass* getClass(JavaObjectConstructor* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); + return JavaObjectVMConstructor::getClass(self->vmCons); } static JavaObjectConstructor* createFromInternalConstructor(JavaMethod* cons, int i); Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Apr 25 11:49:46 2013 @@ -68,13 +68,19 @@ JavaMethod* Classpath::initString; JavaMethod* Classpath::getCallingClassLoader; JavaMethod* Classpath::initConstructor; Class* Classpath::newConstructor; +JavaMethod* Classpath::initVMConstructor; +Class* Classpath::newVMConstructor; ClassArray* Classpath::constructorArrayClass; ClassArray* Classpath::constructorArrayAnnotation; JavaField* Classpath::constructorSlot; JavaMethod* Classpath::initMethod; +JavaMethod* Classpath::initVMMethod; JavaMethod* Classpath::initField; +JavaMethod* Classpath::initVMField; Class* Classpath::newField; +Class* Classpath::newVMField; Class* Classpath::newMethod; +Class* Classpath::newVMMethod; ClassArray* Classpath::methodArrayClass; ClassArray* Classpath::fieldArrayClass; JavaField* Classpath::methodSlot; @@ -495,6 +501,21 @@ extern "C" void nativeJavaObjectConstruc JavaObjectConstructor::staticTracer(obj, closure); } +extern "C" void nativeJavaObjectVMFieldTracer( + JavaObjectVMField* obj, word_t closure) { + JavaObjectVMField::staticTracer(obj, closure); +} + +extern "C" void nativeJavaObjectVMMethodTracer( + JavaObjectVMMethod* obj, word_t closure) { + JavaObjectVMMethod::staticTracer(obj, closure); +} + +extern "C" void nativeJavaObjectVMConstructorTracer( + JavaObjectVMConstructor* obj, word_t closure) { + JavaObjectVMConstructor::staticTracer(obj, closure); +} + extern "C" void nativeJavaObjectVMThreadTracer( JavaObjectVMThread* obj, word_t closure) { JavaObjectVMThread::staticTracer(obj, closure); @@ -581,12 +602,19 @@ void Classpath::initialiseClasspath(Jnjv UPCALL_METHOD(loader, "java/lang/String", "", "([CIIZ)V", ACC_VIRTUAL); initConstructor = - UPCALL_METHOD(loader, "java/lang/reflect/Constructor", "", + UPCALL_METHOD(loader, "java/lang/reflect/Constructor", "", + "(Ljava/lang/reflect/VMConstructor;)V", ACC_VIRTUAL); + + initVMConstructor = + UPCALL_METHOD(loader, "java/lang/reflect/VMConstructor", "", "(Ljava/lang/Class;I)V", ACC_VIRTUAL); newConstructor = UPCALL_CLASS(loader, "java/lang/reflect/Constructor"); + newVMConstructor = + UPCALL_CLASS(loader, "java/lang/reflect/VMConstructor"); + constructorArrayClass = UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Constructor", 1); @@ -598,11 +626,18 @@ void Classpath::initialiseClasspath(Jnjv initMethod = UPCALL_METHOD(loader, "java/lang/reflect/Method", "", - "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL); + "(Ljava/lang/reflect/VMMethod;)V", ACC_VIRTUAL); + + initVMMethod = + UPCALL_METHOD(loader, "java/lang/reflect/VMMethod", "", + "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL); newMethod = UPCALL_CLASS(loader, "java/lang/reflect/Method"); + newVMMethod = + UPCALL_CLASS(loader, "java/lang/reflect/VMMethod"); + methodArrayClass = UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Method", 1); @@ -611,11 +646,18 @@ void Classpath::initialiseClasspath(Jnjv initField = UPCALL_METHOD(loader, "java/lang/reflect/Field", "", - "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL); + "(Ljava/lang/reflect/VMField;)V", ACC_VIRTUAL); + + initVMField = + UPCALL_METHOD(loader, "java/lang/reflect/VMField", "", + "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL); newField = UPCALL_CLASS(loader, "java/lang/reflect/Field"); + newVMField = + UPCALL_CLASS(loader, "java/lang/reflect/VMField"); + fieldArrayClass = UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Field", 1); Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h Thu Apr 25 11:49:46 2013 @@ -62,6 +62,7 @@ class Class; class ClassArray; class JnjvmClassLoader; + class Classpath : public vmkit::PermanentObject { public: ISOLATE_STATIC UserClass* newClassLoader; @@ -78,16 +79,22 @@ public: ISOLATE_STATIC JavaMethod* initString; ISOLATE_STATIC JavaMethod* getCallingClassLoader; ISOLATE_STATIC JavaMethod* initConstructor; + ISOLATE_STATIC JavaMethod* initVMConstructor; ISOLATE_STATIC UserClassArray* constructorArrayClass; ISOLATE_STATIC UserClassArray* constructorArrayAnnotation; ISOLATE_STATIC UserClass* newConstructor; + ISOLATE_STATIC UserClass* newVMConstructor; ISOLATE_STATIC JavaField* constructorSlot; ISOLATE_STATIC JavaMethod* initMethod; + ISOLATE_STATIC JavaMethod* initVMMethod; ISOLATE_STATIC JavaMethod* initField; + ISOLATE_STATIC JavaMethod* initVMField; ISOLATE_STATIC UserClassArray* methodArrayClass; ISOLATE_STATIC UserClassArray* fieldArrayClass; ISOLATE_STATIC UserClass* newMethod; + ISOLATE_STATIC UserClass* newVMMethod; ISOLATE_STATIC UserClass* newField; + ISOLATE_STATIC UserClass* newVMField; ISOLATE_STATIC JavaField* methodSlot; ISOLATE_STATIC JavaField* fieldSlot; ISOLATE_STATIC UserClassArray* classArrayClass; Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Thu Apr 25 11:49:46 2013 @@ -902,6 +902,18 @@ void Classpath::initialiseClasspath(Jnjv (word_t)nativeJavaObjectFieldTracer, "nativeJavaObjectFieldTracer"); + newVMConstructor->getVirtualVT()->setNativeTracer( + (word_t)nativeJavaObjectVMConstructorTracer, + "nativeJavaObjectVMConstructorTracer"); + + newVMMethod->getVirtualVT()->setNativeTracer( + (word_t)nativeJavaObjectVMMethodTracer, + "nativeJavaObjectVMMethodTracer"); + + newVMField->getVirtualVT()->setNativeTracer( + (word_t)nativeJavaObjectVMFieldTracer, + "nativeJavaObjectVMFieldTracer"); + //TODO: Fix native tracer for java.lang.Thread to not trace through // the eetop field to our internal JavaThread. //newVMThread->getVirtualVT()->setNativeTracer( Modified: vmkit/trunk/tests/ThreadTest.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ThreadTest.java?rev=180294&r1=180293&r2=180294&view=diff ============================================================================== --- vmkit/trunk/tests/ThreadTest.java (original) +++ vmkit/trunk/tests/ThreadTest.java Thu Apr 25 11:49:46 2013 @@ -4,7 +4,13 @@ public class ThreadTest extends Thread { } public static void main(String[] args) throws InterruptedException { - for(int i = 0; i < 10000; ++i) { + int count = 10000; + try { + count = Integer.parseInt(args[0]); + } + catch (Exception e) { + } + for(int i = 0; i < count ; ++i) { Thread t1 = new ThreadTest(); Thread t2 = new ThreadTest(); t1.start(); From peter.senna at gmail.com Thu Apr 25 09:51:21 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:51:21 -0000 Subject: [vmkit-commits] [vmkit] r180295 - Remove useless log Message-ID: <20130425164951.BA8682A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:49:51 2013 New Revision: 180295 URL: http://llvm.org/viewvc/llvm-project?rev=180295&view=rev Log: Remove useless log (cherry picked from commit 1e61fe27696dfacce6ab9bd90f494a65521a90d0) Modified: vmkit/trunk/tools/vmjc/vmjc.cpp Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180295&r1=180294&r2=180295&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 11:49:51 2013 @@ -178,12 +178,9 @@ int main(int argc, char **argv) { } } - printf("Verifying Generated Module...\n"); if(llvm::verifyModule(*(Comp->getLLVMModule()), llvm::PrintMessageAction)){ - printf("ERROR !!!\n"); return 1; } - printf("Verification OK\n"); std::string ErrorInfo; std::auto_ptr Out From peter.senna at gmail.com Thu Apr 25 09:51:37 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:51:37 -0000 Subject: [vmkit-commits] [vmkit] r180298 - Minor corrections in ObjectModel. Message-ID: <20130425165007.AD2112A6C02E@llvm.org> Author: peter.senna Date: Thu Apr 25 11:50:07 2013 New Revision: 180298 URL: http://llvm.org/viewvc/llvm-project?rev=180298&view=rev Log: Minor corrections in ObjectModel. (cherry picked from commit 771ed80d50b507949ca0b9872aff9d19508f82c3) Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180298&r1=180297&r2=180298&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:50:07 2013 @@ -35,8 +35,8 @@ extern "C" gcHeader* Java_org_j3_mmtk_Ob return obj ? obj->toHeader() : 0; } -extern "C" gc* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { - return obj; +extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { + return obj ? obj->toHeader() : 0; } extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) { @@ -70,9 +70,9 @@ extern "C" void Java_org_j3_bindings_Bin header->toReference()->setVirtualTable(VT); } -extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2() ALWAYS_INLINE; +extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() ALWAYS_INLINE; -extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2() { +extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() { return gcHeader::hiddenHeaderSize(); } From peter.senna at gmail.com Thu Apr 25 09:51:51 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:51:51 -0000 Subject: [vmkit-commits] [vmkit] r180300 - vmkit is using now GNU Classpath 0.99. However, annotations are not yet supported. Message-ID: <20130425165021.AD7F22A6C02F@llvm.org> Author: peter.senna Date: Thu Apr 25 11:50:21 2013 New Revision: 180300 URL: http://llvm.org/viewvc/llvm-project?rev=180300&view=rev Log: vmkit is using now GNU Classpath 0.99. However, annotations are not yet supported. (cherry picked from commit 108b7061398f90dc9ab58f2cc8249becec195db0) Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc?rev=180300&r1=180299&r2=180300&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc Thu Apr 25 11:50:21 2013 @@ -25,21 +25,7 @@ using namespace j3; extern "C" { -bool getClassAndMethodPointerByVMConstructor(JavaObjectVMConstructor* vmCons, UserCommonClass** cls, JavaMethod** m) - __attribute__ ((noinline)); - -bool getClassAndMethodPointerByVMConstructor(JavaObjectVMConstructor* vmCons, UserCommonClass** cls, JavaMethod** m) { - JavaObject* res = 0; - // Local object references - llvm_gcroot(vmCons, 0); - llvm_gcroot(res, 0); - BEGIN_NATIVE_EXCEPTION(0) - *cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(vmCons); - *m = JavaObjectVMConstructor::getInternalMethod(vmCons); - END_NATIVE_EXCEPTION - return true; -} JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMConstructor_getParameterTypes( #ifdef NATIVE_JNI @@ -56,10 +42,10 @@ JavaObjectVMConstructor* cons) { BEGIN_NATIVE_EXCEPTION(0) // Store local reference - - if (getClassAndMethodPointerByVMConstructor(cons, &cls,&method)) { - res = method->getParameterTypes(cls->classLoader); - } // FIXME (INTI) : Throw an exception here + verifyNull(cons); + cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); + method = JavaObjectVMConstructor::getInternalMethod(cons); + res = method->getParameterTypes(cls->classLoader); END_NATIVE_EXCEPTION @@ -74,17 +60,15 @@ JavaObjectVMConstructor* cons) { jint res = 0; - UserCommonClass* cls = 0; JavaMethod* method = 0; // Local object references llvm_gcroot(cons, 0); BEGIN_NATIVE_EXCEPTION(0) // Store local reference - - if (getClassAndMethodPointerByVMConstructor(cons, &cls,&method)) { - res = method->access; - } // FIXME (INTI) : Throw an exception here + verifyNull(cons); + method = JavaObjectVMConstructor::getInternalMethod(cons); + res = method->access; END_NATIVE_EXCEPTION @@ -177,9 +161,12 @@ JavaObjectVMConstructor* cons, ArrayObje llvm_gcroot(args, 0); BEGIN_NATIVE_EXCEPTION(0) - if (getClassAndMethodPointerByVMConstructor(cons,&cls, &m)){ - res = proceedRealConstructor(args, cls, m); - } // FIXME (INTI) : Throw an exception here + verifyNull(cons); + + cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); + m = JavaObjectVMConstructor::getInternalMethod(cons); + res = proceedRealConstructor(args, cls, m); + END_NATIVE_EXCEPTION return res; } @@ -199,11 +186,11 @@ JavaObjectVMConstructor* cons) { BEGIN_NATIVE_EXCEPTION(0) - verifyNull(cons); - if (getClassAndMethodPointerByVMConstructor(cons, &cls, & m)) { - JnjvmClassLoader* loader = cls->classLoader; - res = (ArrayObject*)m->getExceptionTypes(loader); - } // FIXME (INTI) : Throw an exception here + verifyNull(cons); + cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); + m = JavaObjectVMConstructor::getInternalMethod(cons); + JnjvmClassLoader* loader = cls->classLoader; + res = (ArrayObject*)m->getExceptionTypes(loader); END_NATIVE_EXCEPTION @@ -215,23 +202,21 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMConstructor* Meth) { +JavaObjectVMConstructor* cons) { JavaObject* result = 0; JavaMethod* m = 0; - UserCommonClass* cls = 0; llvm_gcroot(result, 0); - llvm_gcroot(Meth, 0); + llvm_gcroot(cons, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Meth); - if (getClassAndMethodPointerByVMConstructor(Meth, &cls, & m)) { - Jnjvm* vm = JavaThread::get()->getJVM(); - result = vm->internalUTF8ToStr(m->type); - } // FIXME (INTI) : Throw an exception here + verifyNull(cons); + m = JavaObjectVMConstructor::getInternalMethod(cons); + Jnjvm* vm = JavaThread::get()->getJVM(); + result = vm->internalUTF8ToStr(m->type); - END_NATIVE_EXCEPTION + END_NATIVE_EXCEPTION return result; } Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc?rev=180300&r1=180299&r2=180300&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc Thu Apr 25 11:50:21 2013 @@ -19,23 +19,6 @@ using namespace j3; extern "C" { -bool getClassAndFieldPointerByVMField(JavaObjectVMField* vmField, UserCommonClass** cls, JavaField** m) - __attribute__ ((noinline)); - -bool getClassAndFieldPointerByVMField(JavaObjectVMField* vmField, UserCommonClass** cls, JavaField** m) { - JavaObject* res = 0; - // Local object references - llvm_gcroot(vmField, 0); - llvm_gcroot(res, 0); - - BEGIN_NATIVE_EXCEPTION(0) - // Store local reference - *cls = (UserCommonClass*)JavaObjectVMField::getClass(vmField); - *m = JavaObjectVMField::getInternalField(vmField); - END_NATIVE_EXCEPTION - return true; -} - JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, @@ -46,13 +29,11 @@ JavaObjectVMField* Field) { llvm_gcroot(Field, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); - UserCommonClass* cls = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (getClassAndFieldPointerByVMField(Field, &cls, &field)) { - res = field->access; - } // FIXME : throw an exception in other case + JavaField* field = JavaObjectVMField::getInternalField(Field); + res = field->access; END_NATIVE_EXCEPTION @@ -71,16 +52,15 @@ JavaObjectVMField* Field) { llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cls = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (getClassAndFieldPointerByVMField(Field, &cls, &field)) { + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + JnjvmClassLoader* loader = cls->classLoader; UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); res = fieldCl->getClassDelegatee(vm); - } // FIXME : throw an exception in other case END_NATIVE_EXCEPTION @@ -99,15 +79,10 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); const Typedef* type = field->getSignature(); bool stat = isStatic(field->access); @@ -169,16 +144,10 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -245,17 +214,10 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -297,17 +259,10 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -379,17 +334,10 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -430,17 +378,10 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -483,17 +424,10 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -540,17 +474,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -629,17 +557,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -718,15 +640,9 @@ JavaObjectVMField* Field, JavaObject* ob BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + verifyNull(Field); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); jvalue buf; bool stat = isStatic(field->access); @@ -813,17 +729,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -862,17 +772,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -940,17 +844,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -1011,17 +909,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -1082,17 +974,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -1148,17 +1034,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -1208,17 +1088,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { @@ -1262,17 +1136,11 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - //UserClass* cl = JavaObjectField::getClass(Field); - //JavaField* field = JavaObjectField::getInternalField(Field); - - UserCommonClass* cl = 0; - JavaField* field = 0;//JavaObjectField::getInternalField(Field); - if (!getClassAndFieldPointerByVMField(Field, &cl, &field)) { - // FIXME : throw an exception in other case - } - + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc?rev=180300&r1=180299&r2=180300&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc Thu Apr 25 11:50:21 2013 @@ -25,22 +25,6 @@ using namespace j3; extern "C" { -bool getClassAndMethodPointerFromVMMethod(JavaObjectVMMethod* vmMethod, UserCommonClass** cls, JavaMethod** m) - __attribute__ ((noinline)); - -bool getClassAndMethodPointerFromVMMethod(JavaObjectVMMethod* vmMethod, UserCommonClass** cls, JavaMethod** m) { - JavaObject* res = 0; - // Local object references - llvm_gcroot(vmMethod, 0); - llvm_gcroot(res, 0); - - BEGIN_NATIVE_EXCEPTION(0) - *cls = (UserCommonClass*)JavaObjectVMMethod::getClass(vmMethod); - *m = JavaObjectVMMethod::getInternalMethod(vmMethod); - END_NATIVE_EXCEPTION - return true; -} - JNIEXPORT jint JNICALL Java_java_lang_reflect_VMMethod_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, @@ -52,11 +36,8 @@ JavaObjectVMMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) - JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); - UserCommonClass* cls = 0; - if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { - res = meth->access; - } // FIXME : throw an exception in other case + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + res = meth->access; END_NATIVE_EXCEPTION @@ -74,16 +55,12 @@ JavaObjectVMMethod* Meth) { llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Meth); - //UserClass* cl = JavaObjectMethod::getClass(Meth); - //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - - JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); - UserCommonClass* cls = 0; - if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { - JnjvmClassLoader* loader = cls->classLoader; - res = meth->getReturnType(loader); - } // FIXME : throw an exception in other case + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getReturnType(loader); END_NATIVE_EXCEPTION @@ -102,18 +79,12 @@ JavaObjectVMMethod* Meth) { llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Meth); - //UserClass* cl = JavaObjectMethod::getClass(Meth); - //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - - JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); - UserCommonClass* cls = 0; - if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { - JnjvmClassLoader* loader = cls->classLoader; - res = meth->getParameterTypes(loader); - } // FIXME : throw an exception in other case - - + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getParameterTypes(loader); END_NATIVE_EXCEPTION @@ -138,12 +109,8 @@ JavaObject* proceedVMMethod(JavaObjectVM llvm_gcroot(exc, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* _cl = 0;//UserCommonClass::resolvedImplClass(vm, Cl, false); - JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); - - if (!getClassAndMethodPointerFromVMMethod(Meth, &_cl, &meth)) { - // FIXME : throw an exception - } + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* _cl = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; Signdef* sign = meth->getSignature(); @@ -281,7 +248,7 @@ JavaObjectVMMethod* Meth, JavaObject* ob llvm_gcroot(args, 0); BEGIN_NATIVE_EXCEPTION(0) - + verifyNull(Meth); res = proceedVMMethod(Meth, obj, args); END_NATIVE_EXCEPTION @@ -302,17 +269,11 @@ JavaObjectVMMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - //UserClass* cl = JavaObjectMethod::getClass(Meth); - //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - - JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); - UserCommonClass* cls = 0; - if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { - JnjvmClassLoader* loader = cls->classLoader; - res = meth->getExceptionTypes(loader); - } // FIXME : throw an exception in other case - + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getExceptionTypes(loader); END_NATIVE_EXCEPTION @@ -332,16 +293,9 @@ JavaObjectVMMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - //JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); - - JavaMethod* meth = 0;//JavaObjectMethod::getInternalMethod(Meth); - UserCommonClass* cls = 0; - if (getClassAndMethodPointerFromVMMethod(Meth, &cls, &meth)) { - Jnjvm* vm = JavaThread::get()->getJVM(); - result = vm->internalUTF8ToStr(meth->type); - } // FIXME : throw an exception in other case - - + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + Jnjvm* vm = JavaThread::get()->getJVM(); + result = vm->internalUTF8ToStr(meth->type); END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180300&r1=180299&r2=180300&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 11:50:21 2013 @@ -74,13 +74,12 @@ JavaObjectMethod* JavaObjectMethod::crea str = vm->internalUTF8ToStr(meth->name); - JavaObject* const* Cl = meth->classDef->getDelegateePtr(); + JavaObject* Cl = meth->classDef->getDelegatee(); - vm->upcalls->initVMMethod->invokeIntSpecial(vm, VMMeth, vmMeth, Cl, &str, i); - - //vmMeth->name = str; - //vmMeth->declaringClass = (JavaObject*)Cl; // I don't like this - //vmMeth->slot = i; + vm->upcalls->initVMMethod->invokeIntSpecial(vm, VMMeth, vmMeth); + vmMeth->name = str; + vmMeth->declaringClass = (JavaObjectClass*)Cl; // I don't like this + vmMeth->slot = i; UserClass* Meth = vm->upcalls->newMethod; ret = (JavaObjectMethod*)Meth->doNew(vm); Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180300&r1=180299&r2=180300&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:50:21 2013 @@ -123,7 +123,7 @@ public: }; class JavaObjectVMMethod : public JavaObject { -private: +public: JavaObjectClass* declaringClass; JavaString* name; uint32 slot; Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=180300&r1=180299&r2=180300&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Apr 25 11:50:21 2013 @@ -630,8 +630,8 @@ void Classpath::initialiseClasspath(Jnjv initVMMethod = UPCALL_METHOD(loader, "java/lang/reflect/VMMethod", "", - "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL); - + "()V", ACC_VIRTUAL); + // Ljava/lang/Class;Ljava/lang/String;I newMethod = UPCALL_CLASS(loader, "java/lang/reflect/Method"); From peter.senna at gmail.com Thu Apr 25 09:52:05 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:05 -0000 Subject: [vmkit-commits] [vmkit] r180297 - Fixing some performance issues in native implementation of VMConstructor, VMField, VMMethod Message-ID: <20130425165002.BC6522A6C02D@llvm.org> Author: peter.senna Date: Thu Apr 25 11:50:02 2013 New Revision: 180297 URL: http://llvm.org/viewvc/llvm-project?rev=180297&view=rev Log: Fixing some performance issues in native implementation of VMConstructor, VMField, VMMethod (cherry picked from commit 56310bce50e865e3100b325b618967872ef09cca) Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc?rev=180297&r1=180296&r2=180297&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc Thu Apr 25 11:50:02 2013 @@ -25,45 +25,27 @@ using namespace j3; extern "C" { -bool getClassAndMethodPointerByVMConstructor(JavaObject* vmCons, UserCommonClass** cls, JavaMethod** m) +bool getClassAndMethodPointerByVMConstructor(JavaObjectVMConstructor* vmCons, UserCommonClass** cls, JavaMethod** m) __attribute__ ((noinline)); -bool getClassAndMethodPointerByVMConstructor(JavaObject* vmCons, UserCommonClass** cls, JavaMethod** m) { +bool getClassAndMethodPointerByVMConstructor(JavaObjectVMConstructor* vmCons, UserCommonClass** cls, JavaMethod** m) { JavaObject* res = 0; - JavaField* field = 0; - JavaField* fieldSlot = 0; - UserCommonClass* cl = 0; // Local object references llvm_gcroot(vmCons, 0); llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) - // Store local reference - cl = JavaObject::getClass(vmCons); - if (cl->isClass()) { - const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz"); - const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;"); - const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot"); - const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I"); - if (name && nameSlot && type && typeSlot) { - field = cl->asClass()->lookupField(name, type, false, true,0); - fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0); - res = field->getInstanceObjectField(vmCons); - int slot = fieldSlot->getInstanceInt32Field(vmCons); - *cls = JavaObjectClass::getClass((JavaObjectClass*)res); - *m = &((*cls)->asClass()->virtualMethods[slot]); - return true; - } - } + *cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(vmCons); + *m = JavaObjectVMConstructor::getInternalMethod(vmCons); END_NATIVE_EXCEPTION - return false; + return true; } JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMConstructor_getParameterTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* cons) { +JavaObjectVMConstructor* cons) { JavaObject* res = 0; UserCommonClass* cls = 0; @@ -88,7 +70,7 @@ JNIEXPORT jint JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* cons) { +JavaObjectVMConstructor* cons) { jint res = 0; @@ -184,7 +166,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* cons, ArrayObject* args) { +JavaObjectVMConstructor* cons, ArrayObject* args) { JavaObject* res = 0; JavaMethod* m = 0; @@ -207,7 +189,7 @@ ArrayObject* JNICALL Java_java_lang_refl #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* cons) { +JavaObjectVMConstructor* cons) { ArrayObject* res = 0; JavaMethod* m = 0; @@ -233,7 +215,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Meth) { +JavaObjectVMConstructor* Meth) { JavaObject* result = 0; JavaMethod* m = 0; Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc?rev=180297&r1=180296&r2=180297&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc Thu Apr 25 11:50:02 2013 @@ -19,45 +19,28 @@ using namespace j3; extern "C" { -bool getClassAndFieldPointerByVMField(JavaObject* vmField, UserCommonClass** cls, JavaField** m) +bool getClassAndFieldPointerByVMField(JavaObjectVMField* vmField, UserCommonClass** cls, JavaField** m) __attribute__ ((noinline)); -bool getClassAndFieldPointerByVMField(JavaObject* vmField, UserCommonClass** cls, JavaField** m) { +bool getClassAndFieldPointerByVMField(JavaObjectVMField* vmField, UserCommonClass** cls, JavaField** m) { JavaObject* res = 0; - JavaField* field = 0; - JavaField* fieldSlot = 0; - UserCommonClass* cl = 0; // Local object references llvm_gcroot(vmField, 0); llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) // Store local reference - cl = JavaObject::getClass(vmField); - if (cl->isClass()) { - const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz"); - const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;"); - const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot"); - const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I"); - if (name && nameSlot && type && typeSlot) { - field = cl->asClass()->lookupField(name, type, false, true,0); - fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0); - res = field->getInstanceObjectField(vmField); - int slot = fieldSlot->getInstanceInt32Field(vmField); - *cls = JavaObjectClass::getClass((JavaObjectClass*)res); - *m = &((*cls)->asClass()->virtualFields[slot]); - return true; - } - } + *cls = (UserCommonClass*)JavaObjectVMField::getClass(vmField); + *m = JavaObjectVMField::getInternalField(vmField); END_NATIVE_EXCEPTION - return false; + return true; } JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field) { +JavaObjectVMField* Field) { jint res = 0; llvm_gcroot(Field, 0); @@ -80,7 +63,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field) { +JavaObjectVMField* Field) { JavaObject* res = 0; @@ -108,7 +91,7 @@ JNIEXPORT jint JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jint res = 0; @@ -178,7 +161,7 @@ JNIEXPORT jlong JNICALL Java_java_lang_r #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jlong res = 0; @@ -254,7 +237,7 @@ JNIEXPORT jboolean JNICALL Java_java_lan #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jboolean res = 0; @@ -307,7 +290,7 @@ JNIEXPORT jfloat JNICALL Java_java_lang_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jfloat res = 0; llvm_gcroot(Field, 0); @@ -389,7 +372,7 @@ JNIEXPORT jbyte JNICALL Java_java_lang_r #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jbyte res = 0; llvm_gcroot(Field, 0); @@ -440,7 +423,7 @@ JNIEXPORT jchar JNICALL Java_java_lang_r #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jchar res = 0; llvm_gcroot(Field, 0); @@ -492,7 +475,7 @@ JNIEXPORT jshort JNICALL Java_java_lang_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jshort res = 0; @@ -550,7 +533,7 @@ JNIEXPORT jdouble JNICALL Java_java_lang #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { jdouble res = 0; llvm_gcroot(Field, 0); @@ -637,7 +620,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj) { +JavaObjectVMField* Field, JavaObject* obj) { JavaObject* res = 0; @@ -726,7 +709,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, JavaObject* val) { +JavaObjectVMField* Field, JavaObject* obj, JavaObject* val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -824,7 +807,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jboolean val) { +JavaObjectVMField* Field, JavaObject* obj, jboolean val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -873,7 +856,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jbyte val) { +JavaObjectVMField* Field, JavaObject* obj, jbyte val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -951,7 +934,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jchar val) { +JavaObjectVMField* Field, JavaObject* obj, jchar val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1022,7 +1005,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jshort val) { +JavaObjectVMField* Field, JavaObject* obj, jshort val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1093,7 +1076,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jint val) { +JavaObjectVMField* Field, JavaObject* obj, jint val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1159,7 +1142,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jlong val) { +JavaObjectVMField* Field, JavaObject* obj, jlong val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1219,7 +1202,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jfloat val) { +JavaObjectVMField* Field, JavaObject* obj, jfloat val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -1273,7 +1256,7 @@ JNIEXPORT void JNICALL Java_java_lang_re #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Field, JavaObject* obj, jdouble val) { +JavaObjectVMField* Field, JavaObject* obj, jdouble val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc?rev=180297&r1=180296&r2=180297&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc Thu Apr 25 11:50:02 2013 @@ -25,47 +25,27 @@ using namespace j3; extern "C" { -bool getClassAndMethodPointerFromVMMethod(JavaObject* vmMethod, UserCommonClass** cls, JavaMethod** m) +bool getClassAndMethodPointerFromVMMethod(JavaObjectVMMethod* vmMethod, UserCommonClass** cls, JavaMethod** m) __attribute__ ((noinline)); -bool getClassAndMethodPointerFromVMMethod(JavaObject* vmMethod, UserCommonClass** cls, JavaMethod** m) { +bool getClassAndMethodPointerFromVMMethod(JavaObjectVMMethod* vmMethod, UserCommonClass** cls, JavaMethod** m) { JavaObject* res = 0; - JavaField* field = 0; - JavaField* fieldSlot = 0; - UserCommonClass* cl = 0; // Local object references llvm_gcroot(vmMethod, 0); llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) - // Store local reference - cl = JavaObject::getClass(vmMethod); - if (cl->isClass()) { - const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz("clazz"); - const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz("Ljava/lang/Class;"); - const UTF8* nameSlot = cl->classLoader->hashUTF8->lookupAsciiz("slot"); - const UTF8* typeSlot = cl->classLoader->hashUTF8->lookupAsciiz("I"); - if (name && nameSlot && type && typeSlot) { - field = cl->asClass()->lookupField(name, type, false, true,0); - fieldSlot = cl->asClass()->lookupField(nameSlot, typeSlot, false, true,0); - res = field->getInstanceObjectField(vmMethod); - int slot = fieldSlot->getInstanceInt32Field(vmMethod); - *cls = JavaObjectClass::getClass((JavaObjectClass*)res); - if (!*cls) return false; - *m = &((*cls)->asClass()->virtualMethods[slot]); - if (!*m) return false; - return true; - } - } + *cls = (UserCommonClass*)JavaObjectVMMethod::getClass(vmMethod); + *m = JavaObjectVMMethod::getInternalMethod(vmMethod); END_NATIVE_EXCEPTION - return false; + return true; } JNIEXPORT jint JNICALL Java_java_lang_reflect_VMMethod_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Meth) { +JavaObjectVMMethod* Meth) { jint res = 0; llvm_gcroot(Meth, 0); @@ -87,7 +67,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Meth) { +JavaObjectVMMethod* Meth) { JavaObject* res = 0; llvm_gcroot(Meth, 0); @@ -115,7 +95,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Meth) { +JavaObjectVMMethod* Meth) { JavaObject* res = 0; llvm_gcroot(Meth, 0); @@ -141,11 +121,11 @@ JavaObject* Meth) { } -JavaObject* proceedVMMethod(JavaObject* Meth, JavaObject* obj, +JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj, ArrayObject* args) __attribute__((noinline)); -JavaObject* proceedVMMethod(JavaObject* Meth, JavaObject* obj, +JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj, ArrayObject* args) { JavaObject* res = 0; @@ -292,7 +272,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Meth, JavaObject* obj, ArrayObject* args) { +JavaObjectVMMethod* Meth, JavaObject* obj, ArrayObject* args) { JavaObject* res = 0; llvm_gcroot(res, 0); @@ -313,7 +293,7 @@ JNIEXPORT ArrayObject* JNICALL Java_java #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Meth) { +JavaObjectVMMethod* Meth) { ArrayObject* res = 0; llvm_gcroot(Meth, 0); @@ -343,7 +323,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_ #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObject* Meth) { +JavaObjectVMMethod* Meth) { JavaObject* result = 0; llvm_gcroot(Meth, 0); From peter.senna at gmail.com Thu Apr 25 09:52:10 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:10 -0000 Subject: [vmkit-commits] [vmkit] r180299 - Add memcpy for Address Objects. Message-ID: <20130425165014.BB8992A6C02E@llvm.org> Author: peter.senna Date: Thu Apr 25 11:50:14 2013 New Revision: 180299 URL: http://llvm.org/viewvc/llvm-project?rev=180299&view=rev Log: Add memcpy for Address Objects. (cherry picked from commit 5684342534953cb65bc5bb03df0d3d7ee2c82497) Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180299&r1=180298&r2=180299&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original) +++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:50:14 2013 @@ -118,16 +118,17 @@ public final class Bindings { } @Inline - private static Address copy(ObjectReference from, + private static ObjectReference copy(ObjectReference from, ObjectReference virtualTable, int size, int allocator) { + int wholeSize = size + hiddenHeaderSize(); Selected.Collector plan = Selected.Collector.get(); - allocator = plan.copyCheckAllocator(from, size, 0, allocator); - Address to = plan.allocCopy(from, size, 0, 0, allocator); - memcpy(to.toObjectReference(), from, size); + allocator = plan.copyCheckAllocator(from, wholeSize, 0, allocator); + Address to = plan.allocCopy(from, wholeSize, 0, 0, allocator); + memcpy(to, from.toAddress(), wholeSize); plan.postCopy(to.toObjectReference(), virtualTable, size, allocator); - return to; + return to.toObjectReference(); } @Inline @@ -138,8 +139,13 @@ public final class Bindings { @Inline private static native void memcpy( + Address to, Address from, int size); + + @Inline + private static native void memcpy( ObjectReference to, ObjectReference from, int size); + @Inline private static void arrayWriteBarrier(ObjectReference ref, Address slot, ObjectReference value) { if (Selected.Constraints.get().needsObjectReferenceWriteBarrier()) { Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180299&r1=180298&r2=180299&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:50:14 2013 @@ -85,6 +85,15 @@ extern "C" void Java_org_j3_bindings_Bin memcpy(res, src, size); } +extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_Address_2I( + void* res, void* src, int size) ALWAYS_INLINE; + +extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_Address_2I( + void* res, void* src, int size) { + memcpy(res, src, size); +} + + extern "C" word_t JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II( gc* obj, VirtualTable* VT, int size, int allocator); From peter.senna at gmail.com Thu Apr 25 09:52:13 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:13 -0000 Subject: [vmkit-commits] [vmkit] r180296 - Added extra error information Message-ID: <20130425164957.9085C2A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:49:57 2013 New Revision: 180296 URL: http://llvm.org/viewvc/llvm-project?rev=180296&view=rev Log: Added extra error information (cherry picked from commit 9a86569d30cb7e006d7e34b560690bc311850c42) Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180296&r1=180295&r2=180296&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:49:57 2013 @@ -2128,7 +2128,7 @@ void mainCompilerStart(JavaThread* th) { ClassBytes* bytes = Reader::openFile(bootstrapLoader, name); if (!bytes) { - fprintf(stderr, "Can't find zip file.\n"); + fprintf(stderr, "Can't find zip file '%s'.\n", name); goto end; } From peter.senna at gmail.com Thu Apr 25 09:52:16 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:16 -0000 Subject: [vmkit-commits] [vmkit] r180301 - Corrected Object Copy in generational GC (hidden header stuff) Message-ID: <20130425165027.ED5A62A6C02F@llvm.org> Author: peter.senna Date: Thu Apr 25 11:50:27 2013 New Revision: 180301 URL: http://llvm.org/viewvc/llvm-project?rev=180301&view=rev Log: Corrected Object Copy in generational GC (hidden header stuff) (cherry picked from commit dbeee0d18fae66a6b5ae693e761006ddbc3a01c3) Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180301&r1=180300&r2=180301&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original) +++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:50:27 2013 @@ -126,7 +126,7 @@ public final class Bindings { Selected.Collector plan = Selected.Collector.get(); allocator = plan.copyCheckAllocator(from, wholeSize, 0, allocator); Address to = plan.allocCopy(from, wholeSize, 0, 0, allocator); - memcpy(to, from.toAddress(), wholeSize); + memcpy(to.toObjectReference(), from, size); plan.postCopy(to.toObjectReference(), virtualTable, size, allocator); return to.toObjectReference(); } @@ -139,13 +139,8 @@ public final class Bindings { @Inline private static native void memcpy( - Address to, Address from, int size); - - @Inline - private static native void memcpy( ObjectReference to, ObjectReference from, int size); - @Inline private static void arrayWriteBarrier(ObjectReference ref, Address slot, ObjectReference value) { if (Selected.Constraints.get().needsObjectReferenceWriteBarrier()) { From peter.senna at gmail.com Thu Apr 25 09:52:17 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:17 -0000 Subject: [vmkit-commits] [vmkit] r180293 - Make addition when comparing 2 addresses (for lt, gt, le, ge). Message-ID: <20130425164939.8929C2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:49:39 2013 New Revision: 180293 URL: http://llvm.org/viewvc/llvm-project?rev=180293&view=rev Log: Make addition when comparing 2 addresses (for lt, gt, le, ge). NULL ObjectReference is 0 and Object Address is ObjectReference MINUS header size. So when MINUS is done, NULL ObjectReference's address is GREATER than 0 (addresses are unsigned). E.G: if foo is NULL ObjectReference and bar is 0x42 Address, foo.toAddress().GE(bar) return true! Additionning header's size to addresses when comparing solves the problem. (cherry picked from commit c11b95ad63a0d0d837cf274c3773a757ffa9144e) Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerMagic.cpp?rev=180293&r1=180292&r2=180293&view=diff ============================================================================== --- vmkit/trunk/mmtk/magic/LowerMagic.cpp (original) +++ vmkit/trunk/mmtk/magic/LowerMagic.cpp Thu Apr 25 11:49:39 2013 @@ -536,6 +536,9 @@ bool LowerMagic::runOnFunction(Function& Value* Val2 = Call.getArgument(1); Val1 = new PtrToIntInst(Val1, pointerSizeType, "", CI); Val2 = new PtrToIntInst(Val2, pointerSizeType, "", CI); + Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); + Val1 = BinaryOperator::CreateAdd(Val1, M, "", CI); + Val2 = BinaryOperator::CreateAdd(Val2, M, "", CI); Value* res = new ICmpInst(CI, ICmpInst::ICMP_ULT, Val1, Val2, ""); res = new ZExtInst(res, FCur->getReturnType(), "", CI); CI->replaceAllUsesWith(res); @@ -545,6 +548,9 @@ bool LowerMagic::runOnFunction(Function& Value* Val2 = Call.getArgument(1); Val1 = new PtrToIntInst(Val1, pointerSizeType, "", CI); Val2 = new PtrToIntInst(Val2, pointerSizeType, "", CI); + Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); + Val1 = BinaryOperator::CreateAdd(Val1, M, "", CI); + Val2 = BinaryOperator::CreateAdd(Val2, M, "", CI); Value* res = new ICmpInst(CI, ICmpInst::ICMP_UGT, Val1, Val2, ""); res = new ZExtInst(res, FCur->getReturnType(), "", CI); CI->replaceAllUsesWith(res); @@ -572,6 +578,9 @@ bool LowerMagic::runOnFunction(Function& Value* Val2 = Call.getArgument(1); Val1 = new PtrToIntInst(Val1, pointerSizeType, "", CI); Val2 = new PtrToIntInst(Val2, pointerSizeType, "", CI); + Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); + Val1 = BinaryOperator::CreateAdd(Val1, M, "", CI); + Val2 = BinaryOperator::CreateAdd(Val2, M, "", CI); Value* res = new ICmpInst(CI, ICmpInst::ICMP_ULE, Val1, Val2, ""); res = new ZExtInst(res, FCur->getReturnType(), "", CI); CI->replaceAllUsesWith(res); @@ -581,6 +590,9 @@ bool LowerMagic::runOnFunction(Function& Value* Val2 = Call.getArgument(1); Val1 = new PtrToIntInst(Val1, pointerSizeType, "", CI); Val2 = new PtrToIntInst(Val2, pointerSizeType, "", CI); + Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize()); + Val1 = BinaryOperator::CreateAdd(Val1, M, "", CI); + Val2 = BinaryOperator::CreateAdd(Val2, M, "", CI); Value* res = new ICmpInst(CI, ICmpInst::ICMP_UGE, Val1, Val2, ""); res = new ZExtInst(res, FCur->getReturnType(), "", CI); CI->replaceAllUsesWith(res); From peter.senna at gmail.com Thu Apr 25 09:52:37 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:37 -0000 Subject: [vmkit-commits] [vmkit] r180302 - VMKit original code. Debugging enabled. Dacapo testing enabled. (Really) Minor bug fixes. Message-ID: <20130425165100.C181D2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:50:58 2013 New Revision: 180302 URL: http://llvm.org/viewvc/llvm-project?rev=180302&view=rev Log: VMKit original code. Debugging enabled. Dacapo testing enabled. (Really) Minor bug fixes. (cherry picked from commit 742860dff1b971d701c0d32cb90f720d7f76d87e) Added: vmkit/trunk/docs/amd64-system-v-abi.pdf vmkit/trunk/docs/vmkit-critics.txt vmkit/trunk/llvm.patch vmkit/trunk/tests/dacapo/ vmkit/trunk/tests/dacapo/2006-10/ vmkit/trunk/tests/dacapo/2006-10-MR2/ vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile vmkit/trunk/tests/dacapo/2006-10/Makefile vmkit/trunk/tests/dacapo/9.12-bach/ vmkit/trunk/tests/dacapo/9.12-bach/Makefile vmkit/trunk/tests/dacapo/Makefile vmkit/trunk/tests/dacapo/Makefile.inc vmkit/trunk/tests/dacapo/jars/ vmkit/trunk/tests/dacapo/jars/download.txt Modified: vmkit/trunk/.gitignore vmkit/trunk/CREDITS.TXT vmkit/trunk/Makefile vmkit/trunk/Makefile.common.in vmkit/trunk/Makefile.rules vmkit/trunk/include/j3/J3Intrinsics.h vmkit/trunk/include/j3/JavaAOTCompiler.h vmkit/trunk/include/vmkit/Thread.h vmkit/trunk/include/vmkit/UTF8.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.h vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp vmkit/trunk/lib/j3/VMCore/JavaObject.cpp vmkit/trunk/lib/j3/VMCore/JavaObject.h vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.h vmkit/trunk/lib/j3/VMCore/Jnjvm.h vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/Reader.h vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp vmkit/trunk/mmtk/java/build.xml.in vmkit/trunk/tools/precompiler/trainer/Makefile Modified: vmkit/trunk/.gitignore URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.gitignore?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/.gitignore (original) +++ vmkit/trunk/.gitignore Thu Apr 25 11:50:58 2013 @@ -1 +1,39 @@ *~ +*.bc +*.class +*.jar + +.settings +.metadata +.fuse* + +bin +Debug+Asserts + +Makefile.common +Makefile.config +Makefile.llvmbuild + +config.log +config.status +configure.out + +mmtk/java/src/org/j3/config/Selected.java +mmtk/java/build.xml +mmtk/inline/*.inc + +tools/j3/*.inc +tools/precompiler/*.inc +tools/llvm-config +tools/llcj/LinkPaths.h + +lib/j3/LLVMRuntime/*.inc +lib/vmkit/Compiler/*.inc +lib/j3/ClassLib/Classpath.h + +include/vmkit/config.h + +tests/logs.zip +tests/dacapo/*/j3 +tests/dacapo/*/ijvm +tests/dacapo/logs Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:50:58 2013 @@ -35,3 +35,6 @@ N: Gael Thomas E: gael.thomas at lip6.fr W: http://lip6.fr/Gael.Thomas/ D: Primary architect of JnJVM + +N: Koutheir Attouchi +E: koutheir at gmail.com Modified: vmkit/trunk/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/Makefile (original) +++ vmkit/trunk/Makefile Thu Apr 25 11:50:58 2013 @@ -27,4 +27,3 @@ FilesToConfig := \ include/llvm/Config/config.h \ lib/j3/Classpath/Classpath.h \ FilesToConfigPATH := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig)) - Modified: vmkit/trunk/Makefile.common.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/Makefile.common.in (original) +++ vmkit/trunk/Makefile.common.in Thu Apr 25 11:50:58 2013 @@ -16,6 +16,47 @@ ifeq ($(BUILD_FRAMETABLE), 1) BUILT_SOURCES = FrametablesSymbols.inc FrametablesExterns.inc endif +ENABLE_OPTIMIZED := 0 +REQUIRES_FRAME_POINTER := 1 + +ifeq ($(ENABLE_OPTIMIZED), 0) + CFLAGS += -O0 + CXXFLAGS += -O0 + + LLC_CPP_FLAGS := -O=0 + LLC_ASM_FLAGS := -O=0 -asm-verbose + LLC_GLIBJ_FLAGS := + + OPT_BC_WITH_GC_FLAGS := -inline + OPT_MMTK_FLAGS := + OPT_VMJC_FLAGS := -std-compile-opts + + VMJC_MMTK_FLAGS := + VMJC_GLIBJ_FLAGS := -jit-emit-debug -std-compile-opts + + PRECOMPILER_FLAGS := + + KEEP_SYMBOLS := 1 + DEBUG_RUNTIME := 1 + DEBUG_SYMBOLS := 1 +else + CFLAGS += -O2 -g0 + CXXFLAGS += -O2 -g0 + + LLC_CPP_FLAGS := + LLC_ASM_FLAGS := -O=2 -disable-debug-info-print + LLC_GLIBJ_FLAGS := -disable-debug-info-print + + OPT_BC_WITH_GC_FLAGS := -std-compile-opts -strip-debug + OPT_MMTK_FLAGS := -std-compile-opts -strip-debug + OPT_VMJC_FLAGS := -std-compile-opts -strip-debug + + PRECOMPILER_FLAGS := -O3 + + VMJC_MMTK_FLAGS := -std-compile-opts + VMJC_GLIBJ_FLAGS := -std-compile-opts +endif + # Include LLVM's Master Makefile. include $(LLVM_OBJ_ROOT)/Makefile.common Modified: vmkit/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/Makefile.rules (original) +++ vmkit/trunk/Makefile.rules Thu Apr 25 11:50:58 2013 @@ -15,7 +15,7 @@ ifdef VMKIT_RUNTIME LLVMRuntime.inc : $(LLVMAS) $(LLC) $(VMKIT_RUNTIME) $(Echo) "Building LLVM runtime with $(VMKIT_RUNTIME)" - $(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) -march=cpp -cppgen=contents -o $@ + $(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=contents -o $@ all-local:: LLVMRuntime.inc @@ -37,18 +37,18 @@ glibj.zip.s : $(LOPT) $(LLC) $(VMJC) glibj.zip.bc : $(Echo) "Compiling glibj.zip to llvm" $(Verb) if test -d $(GLIBJ); then \ - $(VMJC) -f -std-compile-opts $(GLIBJ)/glibj.zip -o glibj.zip.bc; \ + $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ)/glibj.zip -o glibj.zip.bc; \ else \ - $(VMJC) -f -std-compile-opts $(GLIBJ) -o glibj.zip.bc; \ + $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ) -o glibj.zip.bc; \ fi glibj-optimized.zip.bc : glibj.zip.bc $(Echo) "Optimizing glibj.zip" - $(Verb) $(LOPT) -std-compile-opts -f glibj.zip.bc -o glibj-optimized.zip.bc + $(Verb) $(LOPT) $(OPT_VMJC_FLAGS) -f glibj.zip.bc -o glibj-optimized.zip.bc glibj.zip.s : glibj-optimized.zip.bc $(Echo) "Compiling glibj.zip.bc to native" - $(Verb) $(LLC) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s + $(Verb) $(LLC) $(LLC_GLIBJ_FLAGS) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s $(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG) @@ -74,20 +74,22 @@ ifeq ($(COMPILE_MMTK), 1) all:: $(Verb) $(ANT) -buildfile $(PROJ_OBJ_ROOT)/mmtk/java/build.xml $(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@) - $(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) -std-compile-opts -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc - $(Verb) $(VMJC) -std-compile-opts -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled - $(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -std-compile-opts -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc + $(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc + $(Verb) $(VMJC) $(VMJC_MMTK_FLAGS) -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled + $(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) $(OPT_MMTK_FLAGS) -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc $(Verb) $(LLVMLINK) -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc - $(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $(LibDir)/FinalMMTk.bc + $(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -StaticGCPass -o $(LibDir)/FinalMMTk.bc $(Verb) $(MKDIR) $(ObjDir) - $(Verb) $(LLC) -disable-fp-elim -disable-cfi -disable-debug-info-print -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s + $(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-fp-elim -disable-cfi -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s + $(Verb) $(GREP) -v '\.loc[^0-9]\+[0-9]\+ 0' $(ObjDir)/FinalMMTk.s > $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc + $(Verb) $(MV) -f $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc $(ObjDir)/FinalMMTk.s $(Verb) $(LLVMCC) -c $(ObjDir)/FinalMMTk.s -o $(ObjDir)/FinalMMTk.o $(Verb) $(Archive) $(LibDir)/libFinalMMTk.a $(ObjDir)/FinalMMTk.o $(Verb) $(Ranlib) $(LibDir)/libFinalMMTk.a - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkMallocInline.inc - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc - $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkMallocInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc + $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc endif clean-local:: @@ -108,11 +110,11 @@ AModule := $(LibDir)/lib$(MODU $(ObjectsBCWithGC): $(ObjDir)/%_gc.bc: $(ObjDir)/%.ll $(LOPT) $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)" - $(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $@ + $(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) $(OPT_BC_WITH_GC_FLAGS) -StaticGCPass -o $@ $(ObjectsSWithGC): $(ObjDir)/%_gc.s: $(ObjDir)/%_gc.bc $(LLC) $(Echo) "Compiling $*.bc to $*.s for $(BuildMode) build" - $(Verb) $(LLC) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@ + $(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@ $(ObjectsWithGC): $(ObjDir)/%_gc.o: $(ObjDir)/%_gc.s $(ObjDir)/.dir $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG) Added: vmkit/trunk/docs/amd64-system-v-abi.pdf URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/docs/amd64-system-v-abi.pdf?rev=180302&view=auto ============================================================================== --- vmkit/trunk/docs/amd64-system-v-abi.pdf (added) +++ vmkit/trunk/docs/amd64-system-v-abi.pdf Thu Apr 25 11:50:58 2013 @@ -0,0 +1,11590 @@ +%PDF-1.4 +%ÐÔÅØ +1 0 obj +<< /S /GoTo /D (chapter.1) >> +endobj +4 0 obj +(Introduction) +endobj +5 0 obj +<< /S /GoTo /D (chapter.2) >> +endobj +8 0 obj +(Software Installation) +endobj +9 0 obj +<< /S /GoTo /D (chapter.3) >> +endobj +12 0 obj +(Low Level System Information) +endobj +13 0 obj +<< /S /GoTo /D (section.3.1) >> +endobj +16 0 obj +(Machine Interface) +endobj +17 0 obj +<< /S /GoTo /D (subsection.3.1.1) >> +endobj +20 0 obj +(Processor Architecture) +endobj +21 0 obj +<< /S /GoTo /D (subsection.3.1.2) >> +endobj +24 0 obj +(Data Representation) +endobj +25 0 obj +<< /S /GoTo /D (section.3.2) >> +endobj +28 0 obj +(Function Calling Sequence) +endobj +29 0 obj +<< /S /GoTo /D (subsection.3.2.1) >> +endobj +32 0 obj +(Registers and the Stack Frame) +endobj +33 0 obj +<< /S /GoTo /D (subsection.3.2.2) >> +endobj +36 0 obj +(The Stack Frame) +endobj +37 0 obj +<< /S /GoTo /D (subsection.3.2.3) >> +endobj +40 0 obj +(Parameter Passing) +endobj +41 0 obj +<< /S /GoTo /D (section.3.3) >> +endobj +44 0 obj +(Operating System Interface) +endobj +45 0 obj +<< /S /GoTo /D (subsection.3.3.1) >> +endobj +48 0 obj +(Exception Interface) +endobj +49 0 obj +<< /S /GoTo /D (subsection.3.3.2) >> +endobj +52 0 obj +(Virtual Address Space) +endobj +53 0 obj +<< /S /GoTo /D (subsection.3.3.3) >> +endobj +56 0 obj +(Page Size) +endobj +57 0 obj +<< /S /GoTo /D (subsection.3.3.4) >> +endobj +60 0 obj +(Virtual Address Assignments) +endobj +61 0 obj +<< /S /GoTo /D (section.3.4) >> +endobj +64 0 obj +(Process Initialization) +endobj +65 0 obj +<< /S /GoTo /D (subsection.3.4.1) >> +endobj +68 0 obj +(Initial Stack and Register State) +endobj +69 0 obj +<< /S /GoTo /D (subsection.3.4.2) >> +endobj +72 0 obj +(Thread State) +endobj +73 0 obj +<< /S /GoTo /D (subsection.3.4.3) >> +endobj +76 0 obj +(Auxiliary Vector) +endobj +77 0 obj +<< /S /GoTo /D (section.3.5) >> +endobj +80 0 obj +(Coding Examples) +endobj +81 0 obj +<< /S /GoTo /D (subsection.3.5.1) >> +endobj +84 0 obj +(Architectural Constraints) +endobj +85 0 obj +<< /S /GoTo /D (subsection.3.5.2) >> +endobj +88 0 obj +(Conventions) +endobj +89 0 obj +<< /S /GoTo /D (subsection.3.5.3) >> +endobj +92 0 obj +(Position-Independent Function Prologue) +endobj +93 0 obj +<< /S /GoTo /D (subsection.3.5.4) >> +endobj +96 0 obj +(Data Objects) +endobj +97 0 obj +<< /S /GoTo /D (subsection.3.5.5) >> +endobj +100 0 obj +(Function Calls) +endobj +101 0 obj +<< /S /GoTo /D (subsection.3.5.6) >> +endobj +104 0 obj +(Branching) +endobj +105 0 obj +<< /S /GoTo /D (subsection.3.5.7) >> +endobj +108 0 obj +(Variable Argument Lists) +endobj +109 0 obj +<< /S /GoTo /D (section.3.6) >> +endobj +112 0 obj +(DWARF Definition) +endobj +113 0 obj +<< /S /GoTo /D (subsection.3.6.1) >> +endobj +116 0 obj +(DWARF Release Number) +endobj +117 0 obj +<< /S /GoTo /D (subsection.3.6.2) >> +endobj +120 0 obj +(DWARF Register Number Mapping) +endobj +121 0 obj +<< /S /GoTo /D (section.3.7) >> +endobj +124 0 obj +(Stack Unwind Algorithm) +endobj +125 0 obj +<< /S /GoTo /D (chapter.4) >> +endobj +128 0 obj +(Object Files) +endobj +129 0 obj +<< /S /GoTo /D (section.4.1) >> +endobj +132 0 obj +(ELF Header) +endobj +133 0 obj +<< /S /GoTo /D (subsection.4.1.1) >> +endobj +136 0 obj +(Machine Information) +endobj +137 0 obj +<< /S /GoTo /D (subsection.4.1.2) >> +endobj +140 0 obj +(Number of Program Headers) +endobj +141 0 obj +<< /S /GoTo /D (section.4.2) >> +endobj +144 0 obj +(Sections) +endobj +145 0 obj +<< /S /GoTo /D (subsection.4.2.1) >> +endobj +148 0 obj +(Section Flags) +endobj +149 0 obj +<< /S /GoTo /D (subsection.4.2.2) >> +endobj +152 0 obj +(Section types) +endobj +153 0 obj +<< /S /GoTo /D (subsection.4.2.3) >> +endobj +156 0 obj +(Special Sections) +endobj +157 0 obj +<< /S /GoTo /D (subsection.4.2.4) >> +endobj +160 0 obj +(EH\137FRAME sections) +endobj +161 0 obj +<< /S /GoTo /D (section.4.3) >> +endobj +164 0 obj +(Symbol Table) +endobj +165 0 obj +<< /S /GoTo /D (section.4.4) >> +endobj +168 0 obj +(Relocation) +endobj +169 0 obj +<< /S /GoTo /D (subsection.4.4.1) >> +endobj +172 0 obj +(Relocation Types) +endobj +173 0 obj +<< /S /GoTo /D (subsection.4.4.2) >> +endobj +176 0 obj +(Large Models) +endobj +177 0 obj +<< /S /GoTo /D (chapter.5) >> +endobj +180 0 obj +(Program Loading and Dynamic Linking) +endobj +181 0 obj +<< /S /GoTo /D (section.5.1) >> +endobj +184 0 obj +(Program Loading) +endobj +185 0 obj +<< /S /GoTo /D (subsection.5.1.1) >> +endobj +188 0 obj +(Program header) +endobj +189 0 obj +<< /S /GoTo /D (section.5.2) >> +endobj +192 0 obj +(Dynamic Linking) +endobj +193 0 obj +<< /S /GoTo /D (subsection.5.2.1) >> +endobj +196 0 obj +(Program Interpreter) +endobj +197 0 obj +<< /S /GoTo /D (subsection.5.2.2) >> +endobj +200 0 obj +(Initialization and Termination Functions) +endobj +201 0 obj +<< /S /GoTo /D (chapter.6) >> +endobj +204 0 obj +(Libraries) +endobj +205 0 obj +<< /S /GoTo /D (section.6.1) >> +endobj +208 0 obj +(C Library) +endobj +209 0 obj +<< /S /GoTo /D (subsection.6.1.1) >> +endobj +212 0 obj +(Global Data Symbols) +endobj +213 0 obj +<< /S /GoTo /D (subsection.6.1.2) >> +endobj +216 0 obj +(Floating Point Environment Functions) +endobj +217 0 obj +<< /S /GoTo /D (section.6.2) >> +endobj +220 0 obj +(Unwind Library Interface) +endobj +221 0 obj +<< /S /GoTo /D (subsection.6.2.1) >> +endobj +224 0 obj +(Exception Handler Framework) +endobj +225 0 obj +<< /S /GoTo /D (subsection.6.2.2) >> +endobj +228 0 obj +(Data Structures) +endobj +229 0 obj +<< /S /GoTo /D (subsection.6.2.3) >> +endobj +232 0 obj +(Throwing an Exception) +endobj +233 0 obj +<< /S /GoTo /D (subsection.6.2.4) >> +endobj +236 0 obj +(Exception Object Management) +endobj +237 0 obj +<< /S /GoTo /D (subsection.6.2.5) >> +endobj +240 0 obj +(Context Management) +endobj +241 0 obj +<< /S /GoTo /D (subsection.6.2.6) >> +endobj +244 0 obj +(Personality Routine) +endobj +245 0 obj +<< /S /GoTo /D (section.6.3) >> +endobj +248 0 obj +(Unwinding Through Assembler Code) +endobj +249 0 obj +<< /S /GoTo /D (chapter.7) >> +endobj +252 0 obj +(Development Environment) +endobj +253 0 obj +<< /S /GoTo /D (chapter.8) >> +endobj +256 0 obj +(Execution Environment) +endobj +257 0 obj +<< /S /GoTo /D (chapter.9) >> +endobj +260 0 obj +(Conventions) +endobj +261 0 obj +<< /S /GoTo /D (section.9.1) >> +endobj +264 0 obj +(C++) +endobj +265 0 obj +<< /S /GoTo /D (section.9.2) >> +endobj +268 0 obj +(Fortran) +endobj +269 0 obj +<< /S /GoTo /D (subsection.9.2.1) >> +endobj +272 0 obj +(Names) +endobj +273 0 obj +<< /S /GoTo /D (subsection.9.2.2) >> +endobj +276 0 obj +(Representation of Fortran Types) +endobj +277 0 obj +<< /S /GoTo /D (subsection.9.2.3) >> +endobj +280 0 obj +(Argument Passing) +endobj +281 0 obj +<< /S /GoTo /D (subsection.9.2.4) >> +endobj +284 0 obj +(Functions) +endobj +285 0 obj +<< /S /GoTo /D (subsection.9.2.5) >> +endobj +288 0 obj +(COMMON blocks) +endobj +289 0 obj +<< /S /GoTo /D (subsection.9.2.6) >> +endobj +292 0 obj +(Intrinsics) +endobj +293 0 obj +<< /S /GoTo /D (appendix.A) >> +endobj +296 0 obj +(Linux Conventions) +endobj +297 0 obj +<< /S /GoTo /D (section.A.1) >> +endobj +300 0 obj +(Execution of 32-bit Programs) +endobj +301 0 obj +<< /S /GoTo /D (section.A.2) >> +endobj +304 0 obj +(AMD64 Linux Kernel Conventions) +endobj +305 0 obj +<< /S /GoTo /D (subsection.A.2.1) >> +endobj +308 0 obj +(Calling Conventions) +endobj +309 0 obj +<< /S /GoTo /D (subsection.A.2.2) >> +endobj +312 0 obj +(Stack Layout) +endobj +313 0 obj +<< /S /GoTo /D (subsection.A.2.3) >> +endobj +316 0 obj +(Required Processor Features) +endobj +317 0 obj +<< /S /GoTo /D (subsection.A.2.4) >> +endobj +320 0 obj +(Miscellaneous Remarks) +endobj +321 0 obj +<< /S /GoTo /D [322 0 R /Fit ] >> +endobj +324 0 obj << +/Length 527 +/Filter /FlateDecode +>> +stream +x^•TËnÛ0¼û+x”zËå›=ÅFR4 ˆÑKӃBѵâ‡J:8__ZT·VÒöÄ5œ™}³åèãg®£ “d¹"(8ʈ°´"˂|Ïîuãw㠓4û––éÓÓ¶tySVû´1+÷y8¤øvßø°#ÍrçÇ?–óN50”â(bÀ*A& Á¢IÓŵ=wpë²ñ®iƒO;_Cå|]W!}ÞµQÝïü¾9’Ã@héXªÝuÈW͋cDÌ|¨O^)ÄäÔ«1\(v4&H£ÉDrжwvSD3E:ùpè'(%0¥b Árž€‹Ò­s¿MÈEÞ<Ÿl̗©.s +T[OÓ¾¸8äC‚ˆ ¡>$ÖyÞ§ð¥}(;+ҏÉS@!ôž2š\R0”—Ó?·ÉLa ‘›bÿcjº/‚Ïë‡~Œ2ûéÀ2ò\ˆ¿!k4 ´ÈæÊÆ­ýv;$BAÈß²C"qúh‰dÂ-0 :o·ý³^“Q|­F춦Ø?^#¢M4P_43µTĺÅiç`¥M°]Ž«º­=~ˆ»?aA(sѐ÷ˆ׉Ö=ÿ…Ö^”¶WÏÿÑ­½(øûe›+W¾®Úà||>”ÌÀU»n|…‰m‘q 4ח¯Äì6gW½¿Ø]|ÏX½ÑÓ?P¨?aç{t³ý7¥8± +endstream +endobj +322 0 obj << +/Type /Page +/Contents 324 0 R +/Resources 323 0 R +/MediaBox [0 0 612 792] +/Parent 328 0 R +>> endobj +325 0 obj << +/D [322 0 R /XYZ 109.854 704.063 null] +>> endobj +326 0 obj << +/D [322 0 R /XYZ 110.854 666.202 null] +>> endobj +323 0 obj << +/Font << /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +358 0 obj << +/Length 929 +/Filter /FlateDecode +>> +stream +x^՘]oÚ0†ïû+r™HKæï$»£_R«V +êͶ  Í sÌÚõ×ώM%Nj½áD(þxìó¾ÇÎñàèã9‰=D¢8‰¡7{‚(¡Ä£1‰(¡Þ`ä}ñOŠ\‰\•Á·ÁeÕ+Ã"¤µ×µ¥õ…¿T’g•a’ÿšÇ–µg'­õ§g`îúÔ×>¯SÏ<}'%Ï2n¹!ÐUU/Ê̐…ùH̅þɕ»'¬]ót™“…©þñklm·@Z×àÕåùæûNå!ûB!Û¶ÔnÞ¦ còkü†¡‚#[³‹9¸cÉsóK; Æïã¨ÑÆi7%{%Â1]~›\~×K£”!f>ë…P¯DH!û^ïú”wr<¾°§’Ø@”¦fÕÌóW„ÜÓåbê*#úà"€èù[0þd¿ ŽþùjO +endstream +endobj +357 0 obj << +/Type /Page +/Contents 358 0 R +/Resources 356 0 R +/MediaBox [0 0 612 792] +/Parent 328 0 R +/Annots [ 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R ] +>> endobj +329 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 507.154 194.663 517.527] +/A << /S /GoTo /D (chapter.1) >> +>> endobj +330 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 480.753 236.829 491.126] +/A << /S /GoTo /D (chapter.2) >> +>> endobj +331 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 452.069 287.459 464.725] +/A << /S /GoTo /D (chapter.3) >> +>> endobj +332 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 439.93 244.456 450.148] +/A << /S /GoTo /D (section.3.1) >> +>> endobj +333 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 425.485 304.758 435.702] +/A << /S /GoTo /D (subsection.3.1.1) >> +>> endobj +334 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 408.57 292.815 421.256] +/A << /S /GoTo /D (subsection.3.1.2) >> +>> endobj +335 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 394.124 286.789 406.81] +/A << /S /GoTo /D (section.3.2) >> +>> endobj +336 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 379.678 340.79 392.365] +/A << /S /GoTo /D (subsection.3.2.1) >> +>> endobj +337 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 367.701 277.214 377.919] +/A << /S /GoTo /D (subsection.3.2.2) >> +>> endobj +338 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 350.787 283.167 363.473] +/A << /S /GoTo /D (subsection.3.2.3) >> +>> endobj +339 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 336.341 288.63 349.027] +/A << /S /GoTo /D (section.3.3) >> +>> endobj +340 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 321.895 289.36 334.581] +/A << /S /GoTo /D (subsection.3.3.1) >> +>> endobj +341 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 307.449 302.391 320.135] +/A << /S /GoTo /D (subsection.3.3.2) >> +>> endobj +342 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 293.003 242.173 305.69] +/A << /S /GoTo /D (subsection.3.3.3) >> +>> endobj +343 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 278.558 335.614 291.244] +/A << /S /GoTo /D (subsection.3.3.4) >> +>> endobj +344 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 266.58 257.893 276.798] +/A << /S /GoTo /D (section.3.4) >> +>> endobj +345 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 249.666 343.456 262.352] +/A << /S /GoTo /D (subsection.3.4.1) >> +>> endobj +346 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 237.545 256.292 247.906] +/A << /S /GoTo /D (subsection.3.4.2) >> +>> endobj +347 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 220.774 275.552 233.46] +/A << /S /GoTo /D (subsection.3.4.3) >> +>> endobj +348 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 206.328 242.627 219.015] +/A << /S /GoTo /D (section.3.5) >> +>> endobj +349 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 194.351 316.067 204.569] +/A << /S /GoTo /D (subsection.3.5.1) >> +>> endobj +350 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 179.905 255.324 190.123] +/A << /S /GoTo /D (subsection.3.5.2) >> +>> endobj +351 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 162.991 389.472 175.677] +/A << /S /GoTo /D (subsection.3.5.3) >> +>> endobj +352 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 148.545 257.619 161.231] +/A << /S /GoTo /D (subsection.3.5.4) >> +>> endobj +353 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 136.568 265.617 146.785] +/A << /S /GoTo /D (subsection.3.5.5) >> +>> endobj +354 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 119.653 245.342 132.34] +/A << /S /GoTo /D (subsection.3.5.6) >> +>> endobj +360 0 obj << +/D [357 0 R /XYZ 110.854 534.398 null] +>> endobj +356 0 obj << +/Font << /F47 359 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +398 0 obj << +/Length 1153 +/Filter /FlateDecode +>> +stream +x^ՙMsâF†ïþ¥ªH«ù–rcˆ½‰ËË&‡l*5€ÀŠ…D ±»Î¯Ï|IŒ°\)XäSciúéîy§§ý~zõn„h+@§7Ò ƒøKÀ,)“<“(¨m½.ÅN°b?‚î“Ñ&ø»8ùÖä÷×Ýz®°mÝsÍBKpˆ_ÄpqV¢¥ÿ6‹ü<á›M’­ÄBgH®íõ‘êc¦ú>•|þ ]úœ}K²…ÙVé*/’ò~-ŒÚÖ»±0ߍ„^XRâæG zêã+^$j @Õ+P«F™+endstream +endobj +397 0 obj << +/Type /Page +/Contents 398 0 R +/Resources 396 0 R +/MediaBox [0 0 612 792] +/Parent 328 0 R +/Annots [ 355 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R ] +>> endobj +355 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 650.662 312.863 663.348] +/A << /S /GoTo /D (subsection.3.5.7) >> +>> endobj +361 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 638.685 250.135 648.902] +/A << /S /GoTo /D (section.3.6) >> +>> endobj +362 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 624.239 319.248 634.457] +/A << /S /GoTo /D (subsection.3.6.1) >> +>> endobj +363 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 607.325 367.893 620.011] +/A << /S /GoTo /D (subsection.3.6.2) >> +>> endobj +364 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 592.879 278.158 605.565] +/A << /S /GoTo /D (section.3.7) >> +>> endobj +365 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 566.639 191.208 579.296] +/A << /S /GoTo /D (chapter.4) >> +>> endobj +366 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 554.357 216.039 564.718] +/A << /S /GoTo /D (section.4.1) >> +>> endobj +367 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 539.911 297.465 550.272] +/A << /S /GoTo /D (subsection.4.1.1) >> +>> endobj +368 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 523.14 333.976 535.827] +/A << /S /GoTo /D (subsection.4.1.2) >> +>> endobj +369 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 511.163 197.796 521.381] +/A << /S /GoTo /D (section.4.2) >> +>> endobj +370 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 494.249 260.297 506.935] +/A << /S /GoTo /D (subsection.4.2.1) >> +>> endobj +371 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 479.803 259.628 492.489] +/A << /S /GoTo /D (subsection.4.2.2) >> +>> endobj +372 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 465.357 274.236 478.043] +/A << /S /GoTo /D (subsection.4.2.3) >> +>> endobj +373 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 452.083 300.143 463.597] +/A << /S /GoTo /D (subsection.4.2.4) >> +>> endobj +374 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 436.465 223.738 449.152] +/A << /S /GoTo /D (section.4.3) >> +>> endobj +375 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 424.488 209.081 434.706] +/A << /S /GoTo /D (section.4.4) >> +>> endobj +376 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 407.574 278.588 420.26] +/A << /S /GoTo /D (subsection.4.4.1) >> +>> endobj +377 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 393.128 262.055 405.814] +/A << /S /GoTo /D (subsection.4.4.2) >> +>> endobj +378 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 366.888 335.494 379.545] +/A << /S /GoTo /D (chapter.5) >> +>> endobj +379 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 352.281 241.289 364.967] +/A << /S /GoTo /D (section.5.1) >> +>> endobj +380 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 337.835 271.559 350.521] +/A << /S /GoTo /D (subsection.5.1.1) >> +>> endobj +381 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 323.389 241.958 336.076] +/A << /S /GoTo /D (section.5.2) >> +>> endobj +382 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 308.944 290.149 321.63] +/A << /S /GoTo /D (subsection.5.2.1) >> +>> endobj +383 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 296.966 388.299 307.184] +/A << /S /GoTo /D (subsection.5.2.2) >> +>> endobj +384 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 270.542 177.603 280.915] +/A << /S /GoTo /D (chapter.6) >> +>> endobj +385 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 253.651 204.096 266.337] +/A << /S /GoTo /D (section.6.1) >> +>> endobj +386 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 239.205 298.482 251.891] +/A << /S /GoTo /D (subsection.6.1.1) >> +>> endobj +387 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 224.759 378.724 237.445] +/A << /S /GoTo /D (subsection.6.1.2) >> +>> endobj +388 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 210.313 279.987 223] +/A << /S /GoTo /D (section.6.2) >> +>> endobj +389 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 195.868 343.194 208.554] +/A << /S /GoTo /D (subsection.6.2.1) >> +>> endobj +390 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 183.891 269.574 194.108] +/A << /S /GoTo /D (subsection.6.2.2) >> +>> endobj +391 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 166.976 308.13 179.662] +/A << /S /GoTo /D (subsection.6.2.3) >> +>> endobj +392 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 152.53 344.281 165.216] +/A << /S /GoTo /D (subsection.6.2.4) >> +>> endobj +393 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 138.084 298.625 150.77] +/A << /S /GoTo /D (subsection.6.2.5) >> +>> endobj +394 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 123.638 290.185 136.325] +/A << /S /GoTo /D (subsection.6.2.6) >> +>> endobj +399 0 obj << +/D [397 0 R /XYZ 110.851 704.063 null] +>> endobj +396 0 obj << +/Font << /F36 327 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +420 0 obj << +/Length 730 +/Filter /FlateDecode +>> +stream +x^ݗMSÛ0†ïü +í¡Z}Yê-2m CÓSۃIDðàØԎ)üûJ–’ÐôÐ4ô´òÄYí³»zW>õ¨+ 1&¼7¾zÝÃÃ(œÿ.—ÿ‹1гô.'„ø„ôlíËjZ¥…IlÛ8}Ó°h3BÄTò"-m§óÞE:Ѧ×TB·ñº¿fÆû²Ú°¨Wú¾Òµ9^éâȖ7Î.÷‡¼HâðéÞæF]œ#ÀÉ&+««Bç«Yåϲ*ÿÙОQ-ÍR>G³ÕS¦/ºižÏ/Ìk$fÛì·3³¹\¶`–éó4Þù‚¥Oec:P¨ýê¹×é&@ê+endstream +endobj +419 0 obj << +/Type /Page +/Contents 420 0 R +/Resources 418 0 R +/MediaBox [0 0 612 792] +/Parent 328 0 R +/Annots [ 395 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R ] +>> endobj +395 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 650.662 337.587 663.348] +/A << /S /GoTo /D (section.6.3) >> +>> endobj +400 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 624.422 266.597 637.079] +/A << /S /GoTo /D (chapter.7) >> +>> endobj +401 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 600.305 250.972 610.678] +/A << /S /GoTo /D (chapter.8) >> +>> endobj +402 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 573.904 192.954 584.277] +/A << /S /GoTo /D (chapter.9) >> +>> endobj +403 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 559.339 178.739 569.7] +/A << /S /GoTo /D (section.9.1) >> +>> endobj +404 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 544.893 192.297 555.254] +/A << /S /GoTo /D (section.9.2) >> +>> endobj +405 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 530.447 228.736 540.808] +/A << /S /GoTo /D (subsection.9.2.1) >> +>> endobj +406 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 513.676 349.458 526.362] +/A << /S /GoTo /D (subsection.9.2.2) >> +>> endobj +407 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 499.23 283.143 511.916] +/A << /S /GoTo /D (subsection.9.2.3) >> +>> endobj +408 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 487.109 242.699 497.47] +/A << /S /GoTo /D (subsection.9.2.4) >> +>> endobj +409 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 472.664 284.865 483.025] +/A << /S /GoTo /D (subsection.9.2.5) >> +>> endobj +410 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 458.218 240.033 468.579] +/A << /S /GoTo /D (subsection.9.2.6) >> +>> endobj +411 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 431.936 226.512 442.309] +/A << /S /GoTo /D (appendix.A) >> +>> endobj +412 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 415.046 298.888 427.732] +/A << /S /GoTo /D (section.A.1) >> +>> endobj +413 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 403.069 326.672 413.286] +/A << /S /GoTo /D (section.A.2) >> +>> endobj +414 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 386.154 293.52 398.84] +/A << /S /GoTo /D (subsection.A.2.1) >> +>> endobj +415 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 371.708 258.958 384.394] +/A << /S /GoTo /D (subsection.A.2.2) >> +>> endobj +416 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 357.262 332.326 369.949] +/A << /S /GoTo /D (subsection.A.2.3) >> +>> endobj +417 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [155.288 345.285 310.09 355.503] +/A << /S /GoTo /D (subsection.A.2.4) >> +>> endobj +421 0 obj << +/D [419 0 R /XYZ 109.854 704.063 null] +>> endobj +418 0 obj << +/Font << /F36 327 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +448 0 obj << +/Length 951 +/Filter /FlateDecode +>> +stream +x^ݘ]OÛ0†ïù¹l%blǎãÝh·"í´IcšLã–Hm’Tƒ¿“ÚI[j(H|®ŽS¹±ûø=¯s8Ü;è1áQ†D$ˆ7{„`qæqÁgÜÆÞ¯ÖiR”mŸrÜÊÆ&ے¶ÔÕTíßӃ^Â?‘äœ.^" Ïç Qšwˆ´}‚á¿ßTÿkÜR¹6oëގôM™diažU›Æ ™¤j +¿Ê€·PÛç¿i "e£‡=Ÿ0ÄXÃC-Ooš©2I'þy–¤å&‘bÛ8oå +,×m$ Œ ð(KË<›š‡íR#‡Mc$Ú6ö+ƒ®añ‹Y¬³ŸGƒ ›^¥*ç6ç“Z¤õÓÆډ`€…{¹9šœ¬M*“:/:å½ÓÎׁë³aÚô3‹#‚÷Üܗ «+@ˆSæù  KƒÊêœ‡Ì$G?Öi™\bLGª:ÕðkĶ µaÁË¥+CX£`+¤ƒ=2 öY,p¥ÜZÅ:¯EAMöF8bA9ÅõŸ1ôt–‰#NšžOãqЅØì&0’0òÚ¹gœ=H2¬ÔëîJ™Ï˜Ü6äNÃMÜ»Z Ýb+••èÂÐ#>Fæ>œ×éÇI[³¯-Ä YˆêiœÙ$(¯­9UyŠØD×u.¶­3hÁ;$yª1s¥î¹†v®GÙlV'e?…éÌÔ2K»PcïLó:õ»@ž&ۍ`€œ® d Ôïšw擨æ +ÎÚ ¬ „®Ü„ä[~Ñ`(¸›"ª=]®fvߏu1ʓ›²Î”{›Ò;¶›²°yÎ递5Üñ3·(oëŠ …ÓÖ@yÆÐfw¡§Ùheê+2.x°mˆ j &†úž> endobj +422 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 516.665 318.853 529.351] +/A << /S /GoTo /D (table.3.1) >> +>> endobj +423 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 502.219 282.485 514.905] +/A << /S /GoTo /D (table.3.2) >> +>> endobj +424 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 487.773 316.067 500.459] +/A << /S /GoTo /D (table.3.3) >> +>> endobj +425 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 475.796 253.614 486.013] +/A << /S /GoTo /D (table.3.4) >> +>> endobj +426 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 461.284 222.579 471.567] +/A << /S /GoTo /D (table.3.5) >> +>> endobj +427 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 436.798 263.871 447.159] +/A << /S /GoTo /D (table.4.1) >> +>> endobj +428 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 420.027 402.598 432.713] +/A << /S /GoTo /D (table.4.2) >> +>> endobj +429 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 405.581 261.899 418.267] +/A << /S /GoTo /D (table.4.3) >> +>> endobj +430 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 391.135 233.983 403.822] +/A << /S /GoTo /D (table.4.4) >> +>> endobj +431 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 376.69 417.721 389.376] +/A << /S /GoTo /D (table.4.5) >> +>> endobj +432 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 362.244 321.651 374.93] +/A << /S /GoTo /D (table.4.6) >> +>> endobj +433 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 347.798 327.64 360.484] +/A << /S /GoTo /D (table.4.7) >> +>> endobj +434 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 333.352 304.363 346.038] +/A << /S /GoTo /D (table.4.8) >> +>> endobj +435 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 318.906 330.963 331.592] +/A << /S /GoTo /D (table.4.9) >> +>> endobj +436 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 304.46 240.332 317.147] +/A << /S /GoTo /D (table.4.10) >> +>> endobj +437 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 290.015 305.188 302.701] +/A << /S /GoTo /D (table.4.11) >> +>> endobj +438 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 265.606 267.207 278.292] +/A << /S /GoTo /D (table.5.1) >> +>> endobj +439 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 241.198 322.642 253.884] +/A << /S /GoTo /D (table.7.1) >> +>> endobj +440 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 219.114 221.383 229.475] +/A << /S /GoTo /D (table.9.1) >> +>> endobj +441 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 204.669 222.71 215.03] +/A << /S /GoTo /D (table.9.2) >> +>> endobj +442 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 190.223 222.71 200.584] +/A << /S /GoTo /D (table.9.3) >> +>> endobj +443 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 175.777 229.345 186.138] +/A << /S /GoTo /D (table.9.4) >> +>> endobj +444 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 161.331 228.018 171.692] +/A << /S /GoTo /D (table.9.5) >> +>> endobj +445 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 134.597 294.07 147.284] +/A << /S /GoTo /D (table.A.1) >> +>> endobj +449 0 obj << +/D [447 0 R /XYZ 110.851 704.063 null] +>> endobj +450 0 obj << +/D [447 0 R /XYZ 110.854 534.398 null] +>> endobj +446 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +505 0 obj << +/Length 1021 +/Filter /FlateDecode +>> +stream +x^՘]s›:†ïó+¸„™B%! è]×gÒif<OoNÎt›¸L1døèIÿýY±‚Ø ˜|¶ÎMV"¿ÏîjY1Y½ŸñÀbÜ Â€Z‹+‹R⅂["àžàÂZ¬¬ìÏIY9.ÄίÐΒu]84´ãÒùwñéý̗ð¯^$kV ¼È÷-WpEñ=긔À?Ÿ/Uª +\há„Äþu ˸¾؞ã +BÞ¼¡,¥Ú5±\Ê=Î;70ã†IR¹³$NWè‰/*[k7„[þ+2 at H:¦àÑ%!h‡0F—ežÖ•IÂϹ2ŸÊVí&Î s÷¶ûùF¥f¯Ÿòæ ں퇉zªA˜`+s˜0ÁÐW»=ã5>élK¿Ÿ?¦uÙ-#Ó-™]Ǝ«í®€|fbbÌóO’ô¡¥¿Oß­“eŸ“'p¦^~ï>a#îӗO€—1Hˆ0…ƒ—/,—ÏçbŠîÄy‘dR8] +Ž ŒÁ–¡ÃçŽÏ¦’#òñäԄ§PW& ċ"ý]I/3£OujNq읱DŸzvŸ¢ÁÚäùÑÇÅÑÿ“á$_ +endstream +endobj +504 0 obj << +/Type /Page +/Contents 505 0 R +/Resources 503 0 R +/MediaBox [0 0 612 792] +/Parent 328 0 R +/Annots [ 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 508 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 509 0 R 498 0 R 499 0 R 500 0 R 501 0 R ] +>> endobj +476 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 516.665 218.406 529.351] +/A << /S /GoTo /D (figure.3.1) >> +>> endobj +477 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 502.219 238.646 514.905] +/A << /S /GoTo /D (figure.3.2) >> +>> endobj +478 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 490.242 305.379 500.459] +/A << /S /GoTo /D (figure.3.3) >> +>> endobj +479 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 473.327 229.811 486.013] +/A << /S /GoTo /D (figure.3.4) >> +>> endobj +480 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 458.881 290.4 471.567] +/A << /S /GoTo /D (figure.3.5) >> +>> endobj +481 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 444.435 295.899 457.122] +/A << /S /GoTo /D (figure.3.6) >> +>> endobj +482 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 429.99 302.008 442.676] +/A << /S /GoTo /D (figure.3.7) >> +>> endobj +483 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 415.544 336.415 428.23] +/A << /S /GoTo /D (figure.3.8) >> +>> endobj +484 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 403.423 254.905 413.784] +/A << /S /GoTo /D (figure.3.9) >> +>> endobj +485 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 386.652 278.397 399.338] +/A << /S /GoTo /D (figure.3.10) >> +>> endobj +486 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 372.206 268.546 384.893] +/A << /S /GoTo /D (figure.3.11) >> +>> endobj +487 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 357.76 368.156 370.447] +/A << /S /GoTo /D (figure.3.12) >> +>> endobj +488 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 343.763 349.541 356.001] +/A << /S /GoTo /D (figure.3.13) >> +>> endobj +489 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 328.869 430.238 341.555] +/A << /S /GoTo /D (figure.3.14) >> +>> endobj +490 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 314.871 362.154 327.109] +/A << /S /GoTo /D (figure.3.15) >> +>> endobj +491 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 299.977 442.851 312.663] +/A << /S /GoTo /D (figure.3.16) >> +>> endobj +492 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 285.531 500.394 298.218] +/A << /S /GoTo /D (figure.3.17) >> +>> endobj +508 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 273.554 187.168 283.772] +/A << /S /GoTo /D (figure.3.17) >> +>> endobj +493 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 259.108 337.574 269.326] +/A << /S /GoTo /D (figure.3.18) >> +>> endobj +494 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 244.519 369.602 254.88] +/A << /S /GoTo /D (figure.3.19) >> +>> endobj +495 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 227.748 396.68 240.434] +/A << /S /GoTo /D (figure.3.20) >> +>> endobj +496 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 213.302 428.708 225.988] +/A << /S /GoTo /D (figure.3.21) >> +>> endobj +497 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 198.856 500.394 211.543] +/A << /S /GoTo /D (figure.3.22) >> +>> endobj +509 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 184.859 192.476 197.097] +/A << /S /GoTo /D (figure.3.22) >> +>> endobj +498 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 169.965 368.143 182.651] +/A << /S /GoTo /D (figure.3.23) >> +>> endobj +499 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 157.988 362.154 168.205] +/A << /S /GoTo /D (figure.3.24) >> +>> endobj +500 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 141.073 421.259 153.759] +/A << /S /GoTo /D (figure.3.25) >> +>> endobj +501 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 126.627 281.469 139.313] +/A << /S /GoTo /D (figure.3.26) >> +>> endobj +506 0 obj << +/D [504 0 R /XYZ 109.854 704.063 null] +>> endobj +507 0 obj << +/D [504 0 R /XYZ 110.854 529.663 null] +>> endobj +503 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +555 0 obj << +/Length 1700 +/Filter /FlateDecode +>> +stream +x^ÍX]s›8}ï¯ð#ÌÄTÁ‰7é$ÛLœv;»ÝÉÈ ÇL0x+bǸN¿2}±„Ò=÷ãèȇW¯^ýp@©sÎW³e‘'"1yà±@ ®ÒÁ¿Žï1á9'Îéb™gIÖ¸COÈõ8ráÅq´æ=YÝ|$œä­°yV4ðHûüI ÷õÛoŸ‡h?Ú+‰JàQýބÁ¦&B´uœ©<õâ`ß¿`c0‡Ñæ1óóŸy9•9Â};swfu«þPopþ²ñúÎÆ@›™Ë[èÌB¿¨ÊD¥«Jµ]q+oÔtý¨‰¥^ÈÜ:J)v*ÍV Û-“׆s†øJʼn÷j*îùÖàqV´¡:k…º»¦£ Yh+°{qæÆ  ÆöíÿbѾ¤ »¤´J¥~"UÞŸ²â‘^²Âê�! �ºV •žñ}ü¸†ÚÇ'ñS6=Z·gši Еå/Y]”ôÞÃ⮂Îû0õYVV ÜÄp )m’ÚGP/€Yˆ½Šòe‹òõnÎTxŒò@‹„!ôcß â‰öRõ]VwÇÙ Úeõð¸Â£ÌÐyzÃO ȕ>1S„ୁ 7¬ V¥ªNªl‰ç&ct/¼¸:›`§ÂÓ*s©S5Žižj沸µÏÚõúãQn ¿â2t¯Þæ™fû;ý#‘µô°¡6ý‰Vazs+¸<ÚïòîT®`gŸùŽÖÔkºÅŒˆ@¿ÖoîÍ}¥}“$e…¼¤ßkÃu;S*Êä'ͪrã“UÕ˜Óµ_=quØ*~AUUªH” ”]–k¶ã†ëX¼­)õ¤jCSê‘ÂhÊ ©êN].ì²õÌ]l]èÔè¬ía*7¦ä¡s¨Vy–̍yÜ$u„¡8âîbsyý! +¯ÃàzrúϱÏzu;%÷Ø/t@ún±'¨è]6 ž±¬®«!Jy߇L!b3õmRüa£ƒuÕ(“ÞpÜ.”,0ÿc×ÕÅ Wƒv?u½œChv\ümç'â…Ô*z·Ò”3Œêàà¹G·öcf,«ò¦’ DF#`7l†q®dŠáöÃè19ƒ+õYÕxé Ù ´œ4ø—²Ç „cª‚ðk²Äœ0<^V5~ Ë$Åîô_ŸËêGÆ.þÿ¥û'2»™iÈ> endobj +502 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 650.662 341.388 663.348] +/A << /S /GoTo /D (figure.3.27) >> +>> endobj +536 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 636.216 340.575 648.902] +/A << /S /GoTo /D (figure.3.28) >> +>> endobj +537 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 624.096 264.876 634.457] +/A << /S /GoTo /D (figure.3.29) >> +>> endobj +538 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 607.325 323.981 620.011] +/A << /S /GoTo /D (figure.3.30) >> +>> endobj +539 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 592.879 431.302 605.565] +/A << /S /GoTo /D (figure.3.31) >> +>> endobj +540 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 578.433 429.484 591.119] +/A << /S /GoTo /D (figure.3.32) >> +>> endobj +541 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 563.987 248.976 576.673] +/A << /S /GoTo /D (figure.3.33) >> +>> endobj +542 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 549.541 292.851 562.228] +/A << /S /GoTo /D (figure.3.34) >> +>> endobj +543 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 535.095 388.205 547.782] +/A << /S /GoTo /D (figure.3.35) >> +>> endobj +544 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 520.65 329.637 533.336] +/A << /S /GoTo /D (figure.3.36) >> +>> endobj +545 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 506.204 331.621 518.89] +/A << /S /GoTo /D (figure.3.37) >> +>> endobj +546 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 484.264 245.938 494.482] +/A << /S /GoTo /D (figure.4.1) >> +>> endobj +547 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 459.856 251.641 470.073] +/A << /S /GoTo /D (figure.5.1) >> +>> endobj +548 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 442.941 413.979 455.627] +/A << /S /GoTo /D (figure.5.2) >> +>> endobj +549 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 428.495 298.087 441.181] +/A << /S /GoTo /D (figure.5.3) >> +>> endobj +550 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 404.087 344.556 416.773] +/A << /S /GoTo /D (figure.6.1) >> +>> endobj +551 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 379.678 291.093 392.365] +/A << /S /GoTo /D (figure.9.1) >> +>> endobj +552 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.791 365.232 302.881 377.919] +/A << /S /GoTo /D (figure.9.2) >> +>> endobj +556 0 obj << +/D [554 0 R /XYZ 110.851 704.063 null] +>> endobj +557 0 obj << +/D [554 0 R /XYZ 110.854 312.201 null] +>> endobj +553 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +581 0 obj << +/Length 2064 +/Filter /FlateDecode +>> +stream +x^XKsÛ8¾çWè’ZªÊb€ɝ“Ûãdìݔ£Ú©™©$A+$¨âÏüúíFƒ©ÐÏ\„f£4º¿~@Ë7ﮅœ1æ§QÄgË팅ÏX:“Qèó0ž-7³ß½Ç}9_pz*¯eÊFoŒ¼f¯b6{]i'Ù¦$©]^®TN¼ÿܞ×De†Æ÷iê•&Þr¯Ìך֏kÜx_®tÕÌÿ\~œ³ ý0”¤ã=®ïF›êy.#ÏG©w×p‡ÁõàŸËFX¤´4€iۂK?Ž#8ÈJ}0ë¼ÝÀ­‹½®×Uvh²Ò£ÜÒ&@Bz…ÞdmAÌOÞQè¢íˆ.7:'ò +wo»IIãÇ9ó”;à¦]Øks?LÇ7_ev"õӘÍÀ{œØ<°‹À—1þv3ë¯ +Ndd/e6D䪚³ÄÛiútê!9T¿­3`¼z˜ó7¨ãNýM׸ù´õEâGR:ë'½õÃ[ÿ|ƒjòÔ«õ­Žªˆ€ðÜKª<Ì4:/…6 \™yxYUdž!WxŸªrW©‚Öޖj“™àsèài³£Ç9½«›/×÷çwWø Ճ92.;°Leá2ë\+ÓœŒµ&Œ…ú:g§I¦Ñx—§†æèš`YMóçˆUë|»˜ +ˆui•½ñ@Á1°¼ËÖ{Õ¹ù¿óà“Õ :–ó¹•6kÝ­Ís‹^iG_‹×úZÄ#_ǞZ•­õjâzÿ¯ÕFWµõ_ê‹„G’s\ó|ÐÝV¦;á ×™õËð¸i‡oKg”Ö z¨lµjœõä‰Ñbg4yšëãq®_ð¾3šÀäh”žšJ¹ < .n+”Sh¤þçfÓíšÀ»(ëz MÆDùê°÷}|ºƒ,ýQ¹nZW6áÃçü¯ÔÍB5Nü„}«ìDZúJo¶uºn +¨§$&"s©d£·ªÍÖè3"¡#âîî×ï¯}£ŒÛã“nºÜ~îJ£ù?—"=O»¥àw ÙV"H¼Ë¹À”Ç8œy¼Ô«lÌí²šÔ)ÓÐÛÕ4­vs@[f~‚OÎ=,݄¨ ! MÀÂٗBt|ùR0žLÂ?ò#Á:9£õ¦¦Uží ÅûB Ü:LF.¤@PI¤Ü&HL" mbE*² 9nj„\á ·ÈfP ¬Œ“ë²À]kâÛv¸Ç,H|Ê}P¬[g꟦’Ro¥úÏåíg$"·rMM !tÙV%U·Ugµl á6;¡M>˜ªLA6[¸†±µÝք>9x׈=Ãƒ˜ +š®ñÎÒ¶ÎÞd‚ùq";/½­ÔӔ/…ð𒓲ö‡-jB }¢©•ê–ÐO R«Uí+p–ú"9ÕdàPøSÞIMm”ñ¶ª³¿¹ ¤Kéóääõò҆P›’cÌ ;ëPÐÃ0¬ÏDÈ5ýIÄy8³-Ëÿs«»ÏŠVo[³QµÌ£]˜{èRz'FêŽþm +%JŒ8:0ŠŸ¶ˆ‹(”p·Ï“5;Á¿Òú×Ù7ýeú%‹%S–*táF}R ‘OQþ +â“G$ûJÛì$AÓõþÑ6Ì+§¾ cz¥àlÿGüødÁm‹'JÕØ"…üC™Qû ðA2ü[‰äÁ'¯EW-lËfsÆ0‘ÂÕ è"1îm”ú©äÒBÁ ^& Î|÷+endstream +endobj +580 0 obj << +/Type /Page +/Contents 581 0 R +/Resources 579 0 R +/MediaBox [0 0 612 792] +/Parent 558 0 R +/Annots [ 577 0 R 578 0 R ] +>> endobj +577 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [313.376 466.353 330.313 479.039] +/A << /S /GoTo /D (figure.3.5) >> +>> endobj +578 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [258.589 359.753 275.526 372.439] +/A << /S /GoTo /D (figure.3.3) >> +>> endobj +582 0 obj << +/D [580 0 R /XYZ 109.854 704.063 null] +>> endobj +579 0 obj << +/Font << /F36 327 0 R /F47 359 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +585 0 obj << +/Length 405 +/Filter /FlateDecode +>> +stream +x^m’ÁnÛ0 †ïy +_È@¥’´¤DÃP4E[¬E ˜oëN,§F)°aÙÓOÝ`vù“"?Rº)g—÷zž!*g ee“LP £3k´¢*ëì»+endstream +endobj +584 0 obj << +/Type /Page +/Contents 585 0 R +/Resources 583 0 R +/MediaBox [0 0 612 792] +/Parent 558 0 R +>> endobj +586 0 obj << +/D [584 0 R /XYZ 110.851 704.063 null] +>> endobj +583 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +594 0 obj << +/Length 1471 +/Filter /FlateDecode +>> +stream +x^WI—Û6 ¾ûWè(¿Œ9â¦%=%“ä5éK·Ì-Ɂ–8¶^µ¸ZâÌ¿/@¶ìºy½˜H€àð#üúquÿNe‘P,Ë3=>Eœ',×*ҙbZé豊>Ç{s˜ì°ÞÄ|ýõñC”DU°œKZñ¾›†5Ï㾚˩î;\sÿN¦àZ t &Z1Q¤dò¸·àPªøÕÇ7©:d¬ÈJʙP‘bRædÁoy͘ÈSæ¼Ì 從l9̓½áV§L‰léWü?¿õHñšGÛ5×ñ÷Év#ØMõO45…³}ÏSÒ,ƒbëLàÜ:x¦ùÃЗvûÁ¡»áR0! SÊ#V·‡Æ¶¶›ênVBù}„ö:Ñï´æ1!à”ãÁ–õ—$¥™(Z°>ÖMãmš±' âÀ¨¾Õ•¥EeßÀf[7›ø‹˜&< cEšíó•ù© ’+ªÁ@xÆ´¾"“·ßK{p)ÌããÞRáHàq8Ö£ÿøluG2íBØ áXr-Mº"á©oš¯ÿq¼²‡šÞxš»Ø7W(ÒœGC½Å³ËD:èPíü¡àn¨D®Ài€‘þOƒ‡!-Ô«7,dhÐ^x‘nËÁ+!Bàõi¼uSce5²åö¨†í﮼h–„º«\#-¡J"«Þâ¡1eXRꎲ³7Klo`A_(ÖúJkM('âEñ,N€¥„+Ÿþ9…•pöޗ§ë¦îþ +s“Ÿ+ñ~ßHâq¨\ŸµÀw4Ž§ÜQK + úO®û‘´Ç…ø‚B jôΆS•ôìFû$Ӕé,wýSAK\¶zû¸ú{Åá0IÄOm$Ïr–AU¶«Ï_“¨‚I8/“EÝÒ6âZ3Å5ÈMôiõÇê56¥°e +[bë=)ô§y"Àg¼Ð×Í`ÁŠT¤.6Vä:ÚH–r¿*\=hŨHAðE +Ò²?q€®4Mã ¢îm“*Ç&úܯ6Xûɝi½6t‡ó¬k¿‹ñKçv̨OT玺y:Õq!%Œ®]&­§~+endstream +endobj +593 0 obj << +/Type /Page +/Contents 594 0 R +/Resources 592 0 R +/MediaBox [0 0 612 792] +/Parent 558 0 R +/Annots [ 587 0 R 588 0 R 590 0 R 589 0 R 598 0 R 591 0 R ] +>> endobj +587 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [171.097 466.851 177.573 481.174] +/A << /S /GoTo /D (Hfootnote.1) >> +>> endobj +588 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [234.811 466.851 241.287 481.174] +/A << /S /GoTo /D (Hfootnote.2) >> +>> endobj +590 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [476.436 264.61 482.911 278.933] +/A << /S /GoTo /D (Hfootnote.3) >> +>> endobj +589 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [366.396 140.517 500.394 153.035] +/Subtype/Link/A<> +>> endobj +598 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [109.858 127.132 189.559 139.082] +/Subtype/Link/A<> +>> endobj +591 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [175.382 115.177 189.828 129.124] +/A << /S /GoTo /D (section.9.1) >> +>> endobj +595 0 obj << +/D [593 0 R /XYZ 109.854 704.063 null] +>> endobj +2 0 obj << +/D [593 0 R /XYZ 110.854 666.202 null] +>> endobj +596 0 obj << +/D [593 0 R /XYZ 128.787 179.535 null] +>> endobj +597 0 obj << +/D [593 0 R /XYZ 128.787 155.625 null] +>> endobj +599 0 obj << +/D [593 0 R /XYZ 128.787 131.715 null] +>> endobj +592 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +602 0 obj << +/Length 301 +/Filter /FlateDecode +>> +stream +x^]Q±nà ÝóŒ Մ;6ݒ¦‘©S½5¨ƒeK‰ÙXQþ¾¶!:q÷x÷î=Ø«õ^f%Ïò HQ+endstream +endobj +601 0 obj << +/Type /Page +/Contents 602 0 R +/Resources 600 0 R +/MediaBox [0 0 612 792] +/Parent 558 0 R +>> endobj +603 0 obj << +/D [601 0 R /XYZ 110.851 704.063 null] +>> endobj +6 0 obj << +/D [601 0 R /XYZ 110.854 666.202 null] +>> endobj +600 0 obj << +/Font << /F47 359 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +610 0 obj << +/Length 1437 +/Filter /FlateDecode +>> +stream +x^WKÛ6¾ûWèVˆY¾Iõ¶›4À úˆ’ ÐÚt¬Â’IŽ³ÿ¾Cõp"o6=¤)ræã<¾Þ®¿¾”&á’kX²Þ%ŒQb•L”‘DI•¬·É»ôù>?v®Y®¸¢©X~X¿Jh²’±LàŽ×õ’ÑôŒ;^»%Sé¿â¸ôö¡í\‰ó»j·ä*­›2òâ +fg P€t͈Ñ¥ –+F)Mßä›}Q¹^€Úå7ŠDHÍ£A‰ z1ù³Y2›Ö׶u¼ÔMXٝÛt§ðÇõ÷äšP*F1<Šy‘w9žþÛñHëªnr)¡Áž$SªGÄ9Q,"úg)iZtpbm +³ÖÏLÚݦxO)ßYÏ`53ðÝág¸t‰òµšÊg SŠòï:7®c2ÑïjÜÎ5QoW#’»º/:üRßÿ vy2e‚ᣊî\_òŠø%+ðœìíÇ$¼Uj?f“ÿË4‚òK(É‚ +®2œPnzP»úÔ\CÍÄwšA#øÿE‘+ ¥¥þG·ù1ÇAËŠOüY‘æÕ6èø#´†X3ت-¾vÎUאiJ2¡ž€Œq )ŸWœ”He/-€xɠŐÌÐÀK‚NMù-")°1맅ûVBÞÓÇËSµÍKŸš‘ÖK#Ӈ£kŸ¦/‹O§Æۋ2ä!AyÚîkOaç×Ñ 0ÙÔMãÚc]m]µ‰k÷®;ƒõðàÝÛ%KÿÀùó_–J¥QD»ÉyÅhaŠ>ƒÍƒŠcS¯zfššÙ EFB^M£,2&åǏEՁCfC Ò×}6'LmFQ»C_f€Çû a¥–sr„"V럑sØAِ7ðŒ(Upj¬’+ýcaÑq<ƒdk\Œs© Ñõ%ÃÕGOìù!8Ê>¥²Kw®÷nX“Ú'Z²GÛ)6€¦YzjH˜y¢×4e*2=,…Òý"ÒÅó½–Ã.&Æme^uEÛæøï=U«üÙ‹áՙ¯èÀ —)ÞlûN¢->U±ÎU.¡˜„ZèÇòx(6E*®„”À ŽSȽ”<¯w82-¬˜åÊ ºË)±p¿mñûzñyá=K6tEœYB™J6åâÝšlá#$"™MÎak ÅOÉ|ö’·‹¿·¾Ç•Tz À®ÐnYÊA0 ál3ð×É W‚h6‰ +¨™6´>a5þ»¹½Ã ºÖϺ~çǏ²™+Îâ³ +É͛PâÃZÞ O.ׯÄIduøæ¶Q@çÛÓñX7]”~tͅ¶jÔÖ×Ïÿ +*R­ý…Sfªè„  Ÿ»ŠXD½)«ÃξÑÔm½ëÎþÑï+endstream +endobj +609 0 obj << +/Type /Page +/Contents 610 0 R +/Resources 608 0 R +/MediaBox [0 0 612 792] +/Parent 558 0 R +/Annots [ 604 0 R 605 0 R 606 0 R ] +>> endobj +604 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [142.065 337.218 148.541 351.54] +/A << /S /GoTo /D (Hfootnote.4) >> +>> endobj +605 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [144.674 282.772 161.611 295.458] +/A << /S /GoTo /D (figure.3.1) >> +>> endobj +606 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [410.862 224.988 417.338 239.311] +/A << /S /GoTo /D (Hfootnote.5) >> +>> endobj +611 0 obj << +/D [609 0 R /XYZ 109.854 704.063 null] +>> endobj +10 0 obj << +/D [609 0 R /XYZ 110.854 666.202 null] +>> endobj +14 0 obj << +/D [609 0 R /XYZ 110.854 479.85 null] +>> endobj +18 0 obj << +/D [609 0 R /XYZ 110.854 450.384 null] +>> endobj +22 0 obj << +/D [609 0 R /XYZ 110.854 424.416 null] +>> endobj +613 0 obj << +/D [609 0 R /XYZ 110.854 298.375 null] +>> endobj +614 0 obj << +/D [609 0 R /XYZ 128.787 218.812 null] +>> endobj +615 0 obj << +/D [609 0 R /XYZ 128.787 170.991 null] +>> endobj +608 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F65 612 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +618 0 obj << +/Length 2643 +/Filter /FlateDecode +>> +stream +x^­œ[oã¸Çßó)Ô7»»æò.qßæ +Ì+Ê%â%/$/‘Âeq}_ü1û¼z|Ù×óxÆùu¾`Ͼß-×Ë}söz^áÙës}˜ÿyýõêÓõÕ®HáÁ1ª„‘#BYq·¹úãO\ÜÃ/¿1U?N—n +Î(’•„ãuñýêïþ ’!Ži!i‰\.gHpu1UI!&Á¸@UÅFŒñÞúƒ_Ѿf‚ C2‚¸ «ß­WÛM½=^:’cŽ–y´¹€áüLüÛGÉ/…׃‘<„JÄtˆÌ[|ôØÀø+§iS*àmé—š”qšàM?È#Éh[ô°ú_½{¸TvxS>ÃKb„yÕVþøöõXà€DËa+#Y%ÂP)‘~ócyÄB$”þ¤1ÿî àn:Æé†ñhéÆðÈ"jøèu|äµ€´D°×÷M‘£óf„°¹¬’mèˆr)ay–m$Æ}O¶!À c¸xLÃ÷§¨èÄ©'¢,:HBP`PªLMü²MË8+:&¢oEl"fµ±GÔ>‡¨›ˆa˜Š`fÑVc+…bŸ«Púî‹Ë83:f¤oFlFfµ3²GÔE>‡¨›‘a‡Ÿ“` ‹3++ѐd5(̜ Æ϶Ñt†è yª ŽÂdüΗ”¡2}O²Ã™–+ŸšŽÆYÜ›oq¶,ª¶>Q[Q[88ý¸‘æÍ2m ÅÑ-•ó7ËÖ"¡éîàRkOÖü¶8êÀ»ŽRZA‘ÒL¤ar„(õ¥—Û×ÅѼ„yŽµ¨ôa± §§Ëÿárœ%˜oc¬Ë"jK°Q‡eQ‡¥/š^‚Á}Z”‚‡'òR&=F+úK†“›Õ¢NwM³zssZù ˆëÅoX?7ÒÈæ|#£ÐeQ5Ðõ‰:êrˆ:êZª´šÈ)Ô´‰$Þr&j 85e?Öw«Ír©Óô÷0™H~ ƒW_ûƈ³Àk€Äqê˧¯)ÖòˆÚå³GÔq˜CÔqè‹2ê(|ÿåã%|ÿèÉz`IJz1øü,…m¹0ëí(ôŽ~¾ºÅ/ôES‡ß(ñú|ñXñ–CÓÂ×£éàË éØó5%ŸÆžNk$jX +|”!F導(DÓ÷S:¸ó…-wfî+ýLS_ôÛ·ßMZÒ +a^fCs¹5e#ûø·ÝœŠÙ¿Ä©!xbëK /ù€—³‡ G”Ð Œ%/Ü£0•òÌi¤}áéÛːyD› Ù§iÉË¢iÉóE¿ÿÔ0åà‚3‹@5î#!■àªÔϱ“®®*Š¨p ð† +9¬qv€åêtYYT Y}¢­¢-_õݜ01ûçïÝ«+)9RjijËösêfqÕî—Fb ЙҘRsôõeýÚQc4Å xv)%®yþ?]Dš +endstream +endobj +617 0 obj << +/Type /Page +/Contents 618 0 R +/Resources 616 0 R +/MediaBox [0 0 612 792] +/Parent 622 0 R +>> endobj +619 0 obj << +/D [617 0 R /XYZ 110.851 704.063 null] +>> endobj +510 0 obj << +/D [617 0 R /XYZ 302.651 662.353 null] +>> endobj +616 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F33 620 0 R /F68 621 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +626 0 obj << +/Length 2235 +/Filter /FlateDecode +>> +stream +x^•XK“㶾ϯБªZÁx™œvíÝ*»ìCj'ÉÁëšPFBB‘2IyvüëÝ/P”†Úª\„Vh4úñuƒ¾ûäò…1ªÌ2»x|^[¨Ô¸Ež¥Ê¦ëÅãnñkòxðËßúîSf¦k­Qz].4/ªÛf¿\åZ'»ö¼©eǵôÂ(Wº¸cx=ùåÊê"9÷¾gªâÁd8–É& ÌðK“%_Omã›á°L—æéJV•É±Zš¤BßWÌx ÃA7SA+Ôn±2V+í ©JӜÕ:ÕaKKa`ªív¾C2Mú°o­í¶jdÝ&n¨š]$xœ*ÎÛ7¡êEæ3&w…S£ÁÖª\kC.3•¯×‹T9W°vnÖ®ÊX·XM–½¯‡C{ŽÊWsîËr¥3uÅe¥*²£Ü÷iš+—>íüïçБ7×àƜÇÍëYtgû¡íª½G_YÒ6õ+ó‡ƒg ÜõƒÒoU,¼r‡Z®\™Æˆ“°vWwéü± +MÀpµÝ Aó•é(H–o\2T¡fÖ©Úí`êlµ¸ج2¬Ü¶Í+PM;ðºÎÇîk&¥¨{à@aøbW •°¶[@t/I5´ÌÝȆSמ|Gm'`¢8-“_B/ Þ;/3eÂùRMfœËåÄa:G©ôg”…ÿ6KèÎÿiÁˆÝKè½ÌùC…Ó`ü"z×-ܛÊ)hž–†1Ÿ$Päȁ1-Ýù;Š³ƒV¥ùééx§o€0Ò¶ˆë°å™f³Ir´Y~WØ؄Ï},ã·èˆUØǹè5¬µÑÃd:Þ(“VÆA©…Á& +^\²÷{B¿¯¸ýÊbóÄ?²áŒ¶‰*Iù ùGÑNb§ŸY(ìbö=ÀÓRÝ_áÈý?¬§2Áó¡còز)°Ìua;P ÃÒÉå±»<žÚՕ“%¯ñm¯['+*=¼…sîLJœ5e–œBYÌp bÔ³>°œƒÑ+Ô>€M]<°ž{/Ëä5•TÐ[]+V¦ÐjMïÈB­‹ì0õ,‚s†yc/‰üm%\y$3W•<ƒùˆãÑcfá4§Ã•ü‹Þú\TÃÆbèà•‹O™ëüšÈw:héÖø?Ó¥ªÐX,xù,Tª2·9µöª„P]9•ÇöxˆÞ”ooÿŽ˜øµX3!ß|ˆf`‚ÀÙ]j1Ü»ßèØP‰èK²]t^‰>Å\²}[k«iàK¯Nita@çÄå‹ jÒ՟{!îLòùóG&BÃA)#ON܎½F5È3ö6<ŽRÐb+B‰X:ÄŠó+ÝKªÞ¡æGEP@ý0ÎЇǾ™ÔÛsµ“æäÌ"°ø*%ãoqvË ì–ô¤ú×ÏïãÓvMZTP$Ž=ON?•êëkAÌió +(icÒu§ôÌ{ ÔƧùõðOÜÑHBkØKhýŽé¾å¹ k‚H­Û}B˜sƒÇfÅpçE«‹.×-·¨1s»I ‘˜6ùŠ?¼mÞ|A/ +~ÌfNQ™A‰f.?áLxâcÄX£¬ôò‚cÞø‘‰ºêYԁ®½TRÕ¾X+ÔOçZÛ¾“Q{»Ê¬ÿf҈KYãA³ +endstream +endobj +625 0 obj << +/Type /Page +/Contents 626 0 R +/Resources 624 0 R +/MediaBox [0 0 612 792] +/Parent 622 0 R +/Annots [ 607 0 R 623 0 R ] +>> endobj +607 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [405.535 636.216 412.011 650.539] +/A << /S /GoTo /D (Hfootnote.6) >> +>> endobj +623 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [308.18 307.3 314.656 321.623] +/A << /S /GoTo /D (Hfootnote.7) >> +>> endobj +627 0 obj << +/D [625 0 R /XYZ 109.854 704.063 null] +>> endobj +628 0 obj << +/D [625 0 R /XYZ 110.854 395.132 null] +>> endobj +629 0 obj << +/D [625 0 R /XYZ 110.854 241.849 null] +>> endobj +630 0 obj << +/D [625 0 R /XYZ 128.787 203.34 null] +>> endobj +631 0 obj << +/D [625 0 R /XYZ 128.787 191.384 null] +>> endobj +624 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +634 0 obj << +/Length 1617 +/Filter /FlateDecode +>> +stream +x^íY[›F~÷¯à­XŠ's&oY¥+5R¥¶qՇ$ŠXÛH68€»J}Ï\À`³lÈ¢m*E+­‡á›oÎw.˜ù<#†?‚Q$x ¥@J©`u˜½ÿˆƒ5\|˜KÁ½yX!ÁØûàÝì÷ÙÍröò–I@@Z,7e1Æ1Ò0u¹އ·éöT$ó8dˆ¾š/ÁáMZ-nÓd¿vþˆ³mRÎ?.ß Náæ`A%’xÇuŒÚ݈…ŸIG ¨Öµ›©W +i…‰°XÀcQW.֚$…Ô(票êÌ‘ªç>Í!*(p;¯Uå}œ …åþ3Îü‚3¤a‡óCž¶¦¼+~iÉ“aGc 5‰ö6~4‰©8?{“Œ:®"ú‰¥ n\+Xžõ¶Fn“¨Ã¶Cb²zô]µˆaEU„°þzgö2cHˆ! i0­ ÏÜ ŒG„àu.#Dë7sme÷y¶VBhà1yÒ#íhŒÑÙǏ1çgo„‡„’O¬M )­z{„ä=b +MܶILV’¾«ñˆ¤àU<ê•s"£1†aP<ë×֓)ò\MŸÞpŠû¿ÇÞ!N˜ÚP[î’ù‚h¾¾ùÅë<)•å•3ŽIqH½}w>ªñÓvñœâðïÂÂ~¯jÈÊàôDe¬ñô§O—ŸW‚¿eãž}PqÌ[@°Ç>$.kêe^ô!™ÂÌZHTÈ^$xä`MGfJ°`ðdÈ9ïfÍoE¾-âCéBîTZÿ³ëA3’o|\î’ÒŸ¤ßù«q}ºfõ0Æ~ÈÇwûÄ-O”}ÚYü¦»†€›»µôx0”%)¬X¸Ñ:Åí…Üž3ß Çû9Áóð/þâa½øs"ÂÄݓåÙ"KÌÀv÷T霊ÖcSƒµp¾ëcJJ4_@_ï«]~Úî̝ÄFà|1ßhxˆ½qɁ¸È³×ì»qŽ!z S÷ÄÛð°ë-·]êJ›ø€¾ß¥«G‰37~¹ ýVÝn°ß‡z±yFx½yØ!,AÌú¬ÑÝ\ï‡é.iFl‚£ŒÞ*쉦5c_|èL°=€R¦ÿ$}x=î!NLJGun«p•ERólíó>j‹™`$@ÆEì"ÍÅü®²ꘘ!ËĎÅÙÚ Å{@?$îÊ%Ãâ´oÒ¥N*Û`–UqZUÍ)µ…´I™¥yæÌCr¸KŠòáŒz½/óW}å~¡æ<&ã¦ÕW=ÀŒš"s]šL÷û|W‰ç¹)òƒ³Št»óE ~¶Ù'›ª——[ÌñÒß̋INee,Þ%nd•gUœZ±Í×4sŸ±›UVyoýTpr寏E~,RؘؘÄ37¤•_i¬öà…uŸ! Æçv2°� �§ àJŠ‰˜ÝY‹:†üž|àx\jôƛ³_>j¾ü¤°ìªôg–A"xíÛ$š_ö†µ‚¦5ÄS`6I½¼Í-Ruú8¶›‹Ýu2$/Z¬ëœÀH1,"¨ªÏtÏ}[#-©ôzD˜Qž¨|öüúz¼Å´ÆxSÄÏ#­‘töJ½õö´÷rÐþz9‹¨W¤y¼ÿõ±û´ +endstream +endobj +633 0 obj << +/Type /Page +/Contents 634 0 R +/Resources 632 0 R +/MediaBox [0 0 612 792] +/Parent 622 0 R +>> endobj +635 0 obj << +/D [633 0 R /XYZ 110.851 704.063 null] +>> endobj +511 0 obj << +/D [633 0 R /XYZ 292.531 655.389 null] +>> endobj +632 0 obj << +/Font << /F36 327 0 R /F45 636 0 R /F51 451 0 R /F46 637 0 R /F15 638 0 R /F30 639 0 R /F33 620 0 R /F27 640 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +645 0 obj << +/Length 2531 +/Filter /FlateDecode +>> +stream +x^½YK“Û6¾Ï¯Ð\KUY0Hîm{¶œŠÝÙlª’(‘±"‘ +)y<ÿ>Ýè&I;§= l4Æ×/èíÃ͛»4›©LheÓÙÃz¦”9 M…†©‡jöKb„ž/””2¹;¶«CÓµó…¶2ù®Ün›ö‘>îë?Žu»ªç¿=|ÿæÎ8% +k5J•³…v"×$îaÓ óEªL2Ô,-U:©êaÕ7˚盚™e[•}E_ëI\³5 i¤Ákø´&iÚÕöXfåêwTµQ©HSGê¬ûrWÓ¶åsw<¼¦¾ž+›<6áî‰rÊǚg÷%.›¦öå0L¦ Ako·[š÷¶É½ õõ’QpO'^ñÔEpc§÷#æ>xGí»U]ÞFÃX9Å¢­;N%ý<ìï‡ DÍêåñ¡=Ô~Ç"¹+c“Ÿ~ƯnØÊÛê3 +,!ŽTÄóÓ\)ˆ¾«íœ'ï¿êvÀ 1]øpy߀À[ˆ ÷«ÙŒ‹Ha¥' ÖëI°*Āр7bàÕón'cP1…0…Ù1I €,BAÊÆ$¥FH3ñ¡52©å0ªn …>OÁ'D€;`á}-²·ÒJH—þ?á„u“Ýʞu/·M9+ü“hæàCNÇ`ñoØ×W¨5xî刂”Ã¥M¯ãFúâݪ +«§ã¾úò’Ur‘Å7¬"• }åró‹Ë5Z%w¨49C:& ֞¢'PK†²ÎÁ\™»~S¡'mPèɔ“+œ}<@œ‹ûUk³¬·]û£#…¦ŽIs뉄S¦ÃΧ¼ë_1×UŒ·8QJ'ã³ Ìݜ¯&¹ÈÈ$h¨Yú)&g¾Šizš¤”¿=ÖX)ƒE©Rž±ÅÒÓ\!|+*k­¯?€<*‰ÜAЂ™Ýq8ýlp=eÌE%ùw¤Ù@;âñ%NøDŠ¯ÄˆdHe€ä]Ù´déK©´ö꺀Í_—áð5É­b*G02QdRyôh‘;ƒ ҇çŽÂ†*Ëf‹€ïÃ÷5h[cR¿=4E|Œ40ù )©e‡OR>½¸hœŽè÷“\sÔpÑdbæ[õÐ3Žk<Ôl +YSǍ@A µå· Jôr„+§'žõK’ÀôZ¸,?zM;ú#Râåڃ[yKrï|eAiE.¿iA u ŽZá.¡÷×N›Q©æ]?;Öa +ü^·–ã*~|-’, H€X‚å£Jr”p1- uöY0¡jœ +®uŠË…ïãËÇØ ä…v:é»»hÔʄ˧Ôè5 zѐIa‹ì”Gï~¸ýç}Lª5àQ”’ü1—ï"eµ­Ë~<•CÍ=üø”€ñn…‚d_ù ï}PKäLvÂÉDÜѺ,ñærgO–Dà€€{ò¬»™²øJ‰EãvvóøW¨äÀYñØ7§àÍ„)a¬»Ì¼…(0¼ *E‘ÃýáGOÝÁnjÏÑVs2ø|èˁ©Tý›ÑìšSLîˆ|ûöéÜ=í¨œ;ëÄûª‰è¥A±©¶~Mò7à„{ZØ~ˆŠƒZýO©Öaå;>̆O=q@ã+À×~cTõ) Ap‰¾°U ®N•òúFS\±èÅ°|zzsŠ_!ºz2+â ýy2²Õ¼˜/F»òw ,‹:BøîÉ3ž¼%42 8›¬¦€ÉŠLýòÕ è±4Üu|ý_™ +k4›ñºöQ͇Ç8`šÚ’ó<ØZ “M\Aú<Ý_èíFyo\`Se _¤bεÀ²DHE+endstream +endobj +644 0 obj << +/Type /Page +/Contents 645 0 R +/Resources 643 0 R +/MediaBox [0 0 612 792] +/Parent 622 0 R +/Annots [ 641 0 R 642 0 R ] +>> endobj +641 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [152.693 276.993 159.169 291.316] +/A << /S /GoTo /D (Hfootnote.8) >> +>> endobj +642 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 204.764 116.334 219.087] +/A << /S /GoTo /D (Hfootnote.9) >> +>> endobj +646 0 obj << +/D [644 0 R /XYZ 109.854 704.063 null] +>> endobj +26 0 obj << +/D [644 0 R /XYZ 110.854 666.202 null] +>> endobj +30 0 obj << +/D [644 0 R /XYZ 110.854 535.125 null] +>> endobj +647 0 obj << +/D [644 0 R /XYZ 128.787 169.696 null] +>> endobj +648 0 obj << +/D [644 0 R /XYZ 128.787 145.785 null] +>> endobj +643 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F65 612 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +654 0 obj << +/Length 2389 +/Filter /FlateDecode +>> +stream +x^­YYÛF~Ÿ_Á—(Äê°O6ó;k Æð®ça$85âZ"e™ŒýVuuS¤Dk$;`Xì³Î¯ª¨Ow’Ö2­$лèÃÝ¿ï^ßß}ÿV8eZ‹è~‰D°ÌÚȨ„e°ô~ý¿-û¦X,…NbÉä‹¥äIü¡ËWiðm“ïýüSÙm‰z·~ì}]V]Ñ,~¿-•`FgÑRdÌȔ.x_·eWÖÕbi Oã75,¯ºv±Ô"3þtØ|÷Ïû»OG¹µbRóÈ$’¥VÊ-3{<á x6\ó±àÜÀ‘E:“̦‚ø²ÕwÜü–èäÍÞüœ ¡4<Ò6cZÚKLÀjŔ2”¯9ã ü ûb_7ϤȼYp?ö{Ѝåã¶{xîœ~¾«ôD&i™Pnv'UçÜ+0·J¾†ýs ¤š%™¸áˆ HnÀ+$–1% ñÍK¢/Kñw° ËdšMYxî/tügY÷-izê=K! (GK¼Ûu­ï€ëØóMl£ï¤ZÃa +ø+\‡Ï¸N\'¹ ô›¹?ak:®!EÌháD@蘇t#ÅìAÐ$ft'>+âñ}0\z j7EC™V9œI³c–AJŠáÒ¹†A?š9 7.œœÊ2pE€„‰ÆBŒJN{ÀqT¿š3·^Ès{ŸXÐ2“ ŠE·“úԀÇë-H0ùÂGþhf—wEÛ Á]¯àݯÉâД ü¥Pò@íãسN )dF<¦sb,%Š› A·z„LR¤1/KŠE)ààøƒË �R6~›2·ƒìÕl…˜‡„!WDåëÿõmWVa¢ "Ä­M r/eu²ð+Þ +Íï"fȟ…²!DÿñÈÌ@Œ ßk'ÀŽ‹„a\øï”çåôå+Gâxí‰.ð¬=ÝD'Á‰;×Uøð¯.)^`ÐaŠ“½è\°.þò„9‘ÁÌ`æDžŒOÒ;¡u2d$½4”´qÀÁ5<ËjíÀþ/ÿ +S…¹¹ƒ|JZ*c¼‹º•Åj[•Ÿú°~Ô؄TÃá £UÛ5ý؎ B7/ îýbpäQàè+endstream +endobj +653 0 obj << +/Type /Page +/Contents 654 0 R +/Resources 652 0 R +/MediaBox [0 0 612 792] +/Parent 622 0 R +/Annots [ 649 0 R 650 0 R 651 0 R ] +>> endobj +649 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [336.634 322.438 353.57 335.124] +/A << /S /GoTo /D (figure.3.3) >> +>> endobj +650 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [493.918 264.655 500.394 278.762] +/A << /S /GoTo /D (Hfootnote.10) >> +>> endobj +651 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [439.732 235.763 446.207 250.086] +/A << /S /GoTo /D (Hfootnote.11) >> +>> endobj +655 0 obj << +/D [653 0 R /XYZ 110.851 704.063 null] +>> endobj +512 0 obj << +/D [653 0 R /XYZ 259.165 655.389 null] +>> endobj +34 0 obj << +/D [653 0 R /XYZ 110.854 378.328 null] +>> endobj +656 0 obj << +/D [653 0 R /XYZ 128.787 174.272 null] +>> endobj +657 0 obj << +/D [653 0 R /XYZ 128.787 138.406 null] +>> endobj +652 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F45 636 0 R /F15 638 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +661 0 obj << +/Length 1616 +/Filter /FlateDecode +>> +stream +x^­XYoÛF~ׯÐ#D›½xå͎"Aܸ±‚¦ˆƒ¢VQŠTyÄu}gv–”(ӆô‰³³»Ãùæ&Ï“×ït8š)Èéb=‚³È×ÓÀ×LÂÖb5ýæ)&™šÍçÜ»ž î%U²3©fséw¬ºÎŠÍìûâÃëw*+ßsw–f&OR³"ÚdpÈé‘9)•½µÉê9â@ÅÁ2Z;ÅAmTFJ¯Ä{Ryû¶ÞZyÈ+èI˜€¨›$ý“Íæ¾ ½1•woMõ@'¶%‚¼§Å+VŠn_˜[Îe‘Ùócþ BÆc ·ìñßgGi€«º¡ÅŠä¸­„E»[¢.×øŒ¼4GÄàܚÖMIû–Ÿ­œ€£óH kfÄ?w* ¬@bkÂo­‹DZV•©÷e±êmƒïÃçÙÕE ‰ì£ù¡´bED‡Ñ-“úÍö•!S±Ë®÷¿..¹ü¤9Öވ…‘>Ñ|™ÔYêÞ{èuý|ƒÙô¥ ›¹J\$à)œpájc7­ ßÏ¡µéa]ºåb´ ©Î¸gÇNҍª/@Àºå>ïTĵ %<ÓĆ‚Þå‹ÁD $ÄRïÊ»ó²ÌÇtëEAÐ{5& +†±C?N·I5:D,ˆÕËåÔÛ²jþ… §ê#à›*~V Œq“ÑI¾ååøwÚ +endstream +endobj +660 0 obj << +/Type /Page +/Contents 661 0 R +/Resources 659 0 R +/MediaBox [0 0 612 792] +/Parent 622 0 R +/Annots [ 658 0 R ] +>> endobj +658 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [462.939 260.426 469.414 274.748] +/A << /S /GoTo /D (Hfootnote.12) >> +>> endobj +662 0 obj << +/D [660 0 R /XYZ 109.854 704.063 null] +>> endobj +38 0 obj << +/D [660 0 R /XYZ 110.854 666.202 null] +>> endobj +663 0 obj << +/D [660 0 R /XYZ 110.854 582.767 null] +>> endobj +664 0 obj << +/D [660 0 R /XYZ 110.854 275.868 null] +>> endobj +665 0 obj << +/D [660 0 R /XYZ 128.787 163.11 null] +>> endobj +659 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F46 637 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +671 0 obj << +/Length 1912 +/Filter /FlateDecode +>> +stream +x^µXߏÛ6~߿2°føC¤¤æ©¹l).×6ñ=4E µe[WYr%¹Û½¢ÿ{g8CYväíEžD‘£ápæ›o†zµ¼yñ&v3¥Df­ž-73¥S¡Ólæl,tœÌ–ëُÑG©’ùOËo^¼1çÂJ¤f&Ièëv®Òh{ÜußÍÚȨÙг<)°j¬ sÂØ,høôiS5y&Lm–(‘do§ÔY‘¤É íu±*÷yuE]ªœ1çõzJ¡–B*s²oEYŒ;çÈۂÎݪ²GùÙÂh%Œ1³…ŠE .÷‚eÝ7ó…16êæ +ü…/q´Ë«_çÊFE'æ ëâh¹+H¬*ò®'¡®ÜÖåG)õ*¯{Zmjð²_¼/ª¦Þ²jÖºªò®£©îny‘4ÇѾéÈRynâÅ6ÚJ܆¨Ÿ¬‡ ù?ß͕R‘ ?£kAˆYh-œúØJ a žˆ­Ih¡ÇÐÚkë&C”î„ñNXv]No>vðÌ/Â:,]«–J¨dÈ[‚¹“2Z7Çûª˜Ìt-N>ù6óNq!5| t +¸1ñy ~H“Û ß*LJƒqÉúÛbÂx¨ŽìdÇá¨ðŒ?!Êäëu‰Ö?'Ü`Á—ˆÕE^«¼yø¼šWNH{"ÙOWHÑ)aÓ!R WÛhS´¬Þ º|ïG:jE›÷eS³%9?ßþ{y÷Ï»÷Ý-§’M„‹Õy„ ô¼Ì¼^ˆÆ#½­z֍_N#Ì6–ä´†% ¶E &Tôr8¶‡¦ã•Ökݖ]À™û¹–Ñ‘Õ¶Å/DzeفË/?ìÄþAµZK!gN at WÐ,›2YB•‘"Îܳ’§ +Zv¤¼o‹¼/Öô’ûÉ8*7ôN·ÑCáO‡3ûCU ^Š5Ç#“"Ó Ê2v_M G×FȌŽ[Jà®o«žÆ¿{ՠЀ—μuJøªy¸¥ÑÈø%3þ„mùƒ¤‚g^N¹æ°‡²ß!™‡ JòUq °˜èc—÷´xAd8åó\#2¥ÁDõ¬¸Á0"<ޕmëú¦Å¢QeÍD–€ †°ð¹öži‰RöÇ®ä3ç +©àrB؃ÉùÀwTîðƒæX¯sPäìå#€úqÂ{.±²á³Uƒ üâ¼œt¡©º‡ÂyB­Q"Nr›Ô”7R+ƒ‘È l­zØøÁµÖ7ubPãÛ^²‰àérK}ÞKPã‚Åã”Î’ÓYr:Ë1;âjøfœÓüݓéˉ5ÎXÁò¯ò—ÀÈêåò:4îÛ§Rú哨eòó`§Îtô+V¨¼-sô<ÌP1ĕ«Åšú¬Î`øœÎ»Â$±c4án§"àã‘Q)ìð3ÿøö݂@«äEÇòÝ¿î~øMƒ`ÂÝI¢3Ÿ!OûV&¬9)7bH2Û-×°9¼x€ÕÒJ +ÿ±õ JúNÔóR›?v ¢HxX8Ö¬Þr^øe*—íÏ܁©DXhÜÏÑÍ8Þ4UÕ`” 3‚R+´äƒ)èÃcH½·xe¸gƒAWþŸG /åh‚ÃÞÿ¯@$㜏<+&u_ð½’6á+“¥³/¹Ÿ)k™˜«Ù‡›ïo^áØсe¸þ`€œ ÷y•&ŸÙ–‰Ìi‡’@ñ‰†›3”{Ù$:4¾v¥*Ú(J°²‚KWMÃãDÖE·jË{ŸK0]å}.ê.À×ùºŠnϘúaöY ´«¿Qùµ¼§‘ï2AC Oèlé¥;MÛ˜Îü嚟݉RN‡F0¤úʵõ$fR¸ ü…É„¦Ã…Þ3½Ñl¹Qô0Õð’÷¬  ‡9zxžÞ¨+֕· +endstream +endobj +670 0 obj << +/Type /Page +/Contents 671 0 R +/Resources 669 0 R +/MediaBox [0 0 612 792] +/Parent 675 0 R +/Annots [ 666 0 R ] +>> endobj +666 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [281.806 183.905 292.267 197.367] +/A << /S /GoTo /D (Hfootnote.13) >> +>> endobj +672 0 obj << +/D [670 0 R /XYZ 110.851 704.063 null] +>> endobj +673 0 obj << +/D [670 0 R /XYZ 110.854 219.483 null] +>> endobj +674 0 obj << +/D [670 0 R /XYZ 128.787 179.527 null] +>> endobj +669 0 obj << +/Font << /F46 637 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +678 0 obj << +/Length 1756 +/Filter /FlateDecode +>> +stream +x^µËrÛ6ðî¯à­ÔÄbà#·<ÜN2qœÆêL:I&‘ÅE*|ÄU¿¾»À‚")9u½Àb±Ø÷.øbuñô× róR!¸³Ú8Œ /p"z<ŒUî|r¹·X†©ï¾Þ,–Aœ¸‡Ô}ù䉙Ôë¿T֙ùV¶IÝV5HªºZvM±àÂý^ÈÒ+Ìú°–ÙÖ`­ÁÐê(>û>k<äs­Bíwª<,"â-ðë+M õ8Üb–wª#Uс/ƒd9Ù£>1»›¯/ß>¿½%¥ÙëµÎHŸ!éŒn SWó[æfúÂQV´¶síp0NÄԐFe}ӚxCM¢pz£­ÍH¾ƒ„KŒã{üÈìô’Ä!vhK6êT“ˆ‚Y È!VrÔb˜¸+&†DۗØÎ,­†"nd@,³¾3äf-³¬nr:Án#r›„""ZIÑ1Æü©…Gh»‘¹¶jfágúpäEÁÔDñRÒàÝ:6ën;²¸"úrÁ@^"ý­—好¯°´3Æê±äÈe|/ŠP͈qtdg=e'ˆ ²*E bQxd¡:6+f]&—ŠN%Ü%¼Ánå¾hGþqôŽÛÛ«Óëlýâ^ 4'q.(CÚ¢1”][wàí,*€5X§^%«~?½&}›\Â( É3Ù$ÀÄ®mDX£b”]Êù8çñ“3÷ÛZ—I±5ÇýNUÙ´4lÿ£aՃ–Û©]ÝPq´¡lBý?’R(ȁôTßFÐ vf²‡*ÆR¹æ+"¿±ªÉÕF÷hCq8w­q}Í3#B8˜÷Yfˆ ­gÖÑY|FZÔq‚⌭lÓ;êm‡GGEâ÷¢éz+禯²�! �+âmÉà ’ˆŸC–táPPó¢1íô9.Ì¢,vN îS‹ý€Á§fú¿$Ûhˆ‰S—† +o—]‘™e.;i0 ÈÖªi XK £‘2?„Ñc€²QSô .<ìisçÀOÓÈÃÀQ£j]¼Q 3/6›ô£“žd}6®­/=JÓ AÉcð¨[Ž%û0Š“Çï¾Â—æñâË©ÀW+endstream +endobj +677 0 obj << +/Type /Page +/Contents 678 0 R +/Resources 676 0 R +/MediaBox [0 0 612 792] +/Parent 675 0 R +/Annots [ 667 0 R 668 0 R ] +>> endobj +667 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [189.714 636.216 200.174 650.539] +/A << /S /GoTo /D (Hfootnote.14) >> +>> endobj +668 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [391.793 621.77 402.253 636.093] +/A << /S /GoTo /D (Hfootnote.15) >> +>> endobj +679 0 obj << +/D [677 0 R /XYZ 109.854 704.063 null] +>> endobj +680 0 obj << +/D [677 0 R /XYZ 110.854 666.202 null] +>> endobj +681 0 obj << +/D [677 0 R /XYZ 110.854 618.261 null] +>> endobj +682 0 obj << +/D [677 0 R /XYZ 110.854 580.358 null] +>> endobj +683 0 obj << +/D [677 0 R /XYZ 110.854 525.518 null] +>> endobj +684 0 obj << +/D [677 0 R /XYZ 110.854 507.042 null] +>> endobj +685 0 obj << +/D [677 0 R /XYZ 110.854 476.589 null] +>> endobj +686 0 obj << +/D [677 0 R /XYZ 110.854 456.093 null] +>> endobj +687 0 obj << +/D [677 0 R /XYZ 110.854 437.617 null] +>> endobj +688 0 obj << +/D [677 0 R /XYZ 110.854 406.715 null] +>> endobj +689 0 obj << +/D [677 0 R /XYZ 110.854 383.728 null] +>> endobj +690 0 obj << +/D [677 0 R /XYZ 110.854 357.332 null] +>> endobj +691 0 obj << +/D [677 0 R /XYZ 110.854 324.41 null] +>> endobj +692 0 obj << +/D [677 0 R /XYZ 110.854 291.488 null] +>> endobj +693 0 obj << +/D [677 0 R /XYZ 128.787 239.914 null] +>> endobj +694 0 obj << +/D [677 0 R /XYZ 128.787 155.616 null] +>> endobj +676 0 obj << +/Font << /F36 327 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +701 0 obj << +/Length 2385 +/Filter /FlateDecode +>> +stream +x^­YmÛ6þ¾¿Â_•5+’zí·æº9¤è6i²‡ë¡) +Y¢×Bdɑän|¿þf8CY’µI +ôˊ&‡Cr^žyÈ}ñpóíK­¤iªÕÃn%ƒHøÉ* +¡‚xõP¬~óÞû¡_À¹Þ©ï½Ú­7*ô½wïîþý†šåZz5릧Ʊ5¹)LA¿¶ça5šv¬EJéݲ.ž_²Â¼©×ïý¹–¡gÚÞ)ì›a¾Xÿþðã·/a»£ƒlt(”Šà }ZÒI`!ß˺®¬iÎôð¡/t¯|~]çf½‘iêeíZ&Þãé`ê¾Ã®ºx,¯Pß{ßW¦Àø©×ï  lú±ìzÓv$þhzÖ ³k< J¢‰ËšF*³ë7}³iËÇ}Û\mxcˆ i{M[˜–¼‚vØ9ƒù|öGֹѪjÖ*ôžºï¬J« ¬£b¡Ó„4J1u°=‡užšA:xåþîþõÛuzÿ]K•:ßInøԓ‚l­0”ÀYYeۊ…ÆŽ¢žf7Óә'ƒaã&”ã¸ÑŒ\àü£-Ê¥ðR‰ˆRå¤n—4AÔFB%)»:r +»çêÏ* EÇ£}ú{ôä“ždQM Bˆ+ÕESúeM.vO)é6äKëE%Ø[ ´v ¡—”&"ˆ’Õf$G±»Q*Ÿ©iëQkS at aƒC›%Ën±•\¤.ዿ» ó!+Ô…ŒM« ÂÑ{{î –<Җ0TROæÈ1VA÷VM?ç§|ª?°'æPGèGY`[ãðÁß4 Cg+·Ô8ºÃ¿P2~Mâۡ嘃[óŸ¯ïßüt÷ë¡9,7Š¸ƒ94íËíQ )55&/ÿÙÛ0…eô!‹V'C?­…à۟‹Ø.}€…`À?^4MõL :š@ÄÂҟZ[åíZ-}‡£@»œînV‰F“$ˀÊæ-û&„< ô4¶Î„>û¤©û¬¬çºoOýÞEÂÅ6X»kÇÞʞg1Ûpì+¦O·ÏªŠEyîÿLÛ,€¬ŠÊ¨d‚²Á_CÙH +¥ãéQGÁ‚–úÖ1€†:flìY:0—Âñ§œIÏ8£a¬Ù 2¼Þ…èX’8òxOû¦2ì©X„á°N9RÂAŸŽ‚>aޔ:Ç%Ž7m´Ž8¯('Êïù”˜ä$”U­ÉŠ3 o áx2¢¤Øτ–iƑ³ñ®{ph8¬éN9‡SÆi:7Í8úhQfÖØa2Ð +G¼Ÿü?±SabêPxv|t¿å1w<[b]ñ“ÓÝu$ê̎mLPc¬!UNçñÔíIÐòÚg=<åºÔt 69ç+à•`!™d$HNr)üº\ºÜ¨VP>”+u°Íp +µP_´Ò@„.ô%«­$°”tâèhÉÑ҇æÔÓnûŽôÒCšBŠ%±·/‹ÂâA’Ìa F­áàÛM^îÎÜiO òõé°µU :-$SjŠ2s|Jˆ"PÊ{ U±u…MGØñÍÝÃÍǤŠþ +Mç[F¨b°‰Vùáæ·ßýUƒ€Pö2ûdE+†p- ¡]­ÞÝüró‚Ÿ;"°+š™£$T¤EšÊ+֟Š4RJÆ"ˆÙƒ¯$ƒÎÏMÏÆF¶síeŠNE˜Ž.…R.èUïperwÙڔXÉÖ|9ýx*[‹ QD.€Þ-/~lMgZ2³}€€Ô©©~Eƒ>Kà˜÷ÌjøƲĪ˜pŸ}৒Õ& „Ÿ€ (ܬÙ[ÅoіÐ\ßU€µd<¡Ë!/°P,Ï>˜¬fIhåMÁZ”Câ¡÷æ§u +ñC?jC˜Òk”]îXZ\’£¢>_¹ª‘ã‰ø#gÞŽ§žÐA9Ö®´—Ek¬±·¡ïÓ¾´UÐΫû¶©H·6µžÄß-ygږKÝ,œT yÁ‰6û´NR“pÍìöaM ö+Ê<ëÝÊ{&'ÚאÁÔÉCZÃEѦ5|'i­’y Å®ºàu¶a1ú8Ü¥_ßl×A†kCɬL% û˜¾Ìáä’átˆHëQ"ú –Û8±ÉÙ'O¶õÌ;òÁ¾Á‚ÊS¡â÷eNí|Ÿ¹ªlÊz|¿š#“5.¦‰+š»emE¹C;ã)óSŲ6ÞâØí{¶K]˜ìG/öší‡z`¹…C^nM×®{2îyÎ]JƗŒé?6×ÌÿËI}þ0-Âl$s‡£ËØÃ-¾[@êDŠHé/—¸À—“‡+endstream +endobj +700 0 obj << +/Type /Page +/Contents 701 0 R +/Resources 699 0 R +/MediaBox [0 0 612 792] +/Parent 675 0 R +/Annots [ 695 0 R 696 0 R 697 0 R 698 0 R ] +>> endobj +695 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [345.277 538.895 355.738 552.357] +/A << /S /GoTo /D (Hfootnote.16) >> +>> endobj +696 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [380.185 396.543 390.646 408.397] +/A << /S /GoTo /D (Hfootnote.17) >> +>> endobj +697 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [270.067 321.845 280.528 336.168] +/A << /S /GoTo /D (Hfootnote.18) >> +>> endobj +698 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [455.066 292.954 465.527 307.276] +/A << /S /GoTo /D (Hfootnote.19) >> +>> endobj +702 0 obj << +/D [700 0 R /XYZ 110.851 704.063 null] +>> endobj +703 0 obj << +/D [700 0 R /XYZ 110.854 666.202 null] +>> endobj +704 0 obj << +/D [700 0 R /XYZ 110.854 634.174 null] +>> endobj +705 0 obj << +/D [700 0 R /XYZ 110.854 597.312 null] +>> endobj +706 0 obj << +/D [700 0 R /XYZ 110.854 572.904 null] +>> endobj +707 0 obj << +/D [700 0 R /XYZ 110.854 534.91 null] +>> endobj +708 0 obj << +/D [700 0 R /XYZ 110.854 497.598 null] +>> endobj +709 0 obj << +/D [700 0 R /XYZ 110.854 456.341 null] +>> endobj +710 0 obj << +/D [700 0 R /XYZ 128.787 272.331 null] +>> endobj +711 0 obj << +/D [700 0 R /XYZ 128.787 212.555 null] +>> endobj +712 0 obj << +/D [700 0 R /XYZ 128.787 188.645 null] +>> endobj +713 0 obj << +/D [700 0 R /XYZ 128.787 140.824 null] +>> endobj +699 0 obj << +/Font << /F36 327 0 R /F47 359 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +716 0 obj << +/Length 1806 +/Filter /FlateDecode +>> +stream +x^͚MÛ6†ïû+t)*1Ãïä”4 Ð+QÉû + ÒUˆ‰4£‰P¡™?•ÙÃù¸+$ I“È0ÃЈ1 C’ÒôÇ­óÝ}Qfå×ÅRIš–µžƒ\˜èô˶¾uw?/¨H³r›]ßåîJV. ÅÍa—ïkG7ò ×ÿ}VUyµXrAÒí~S”»Ì©m/d×Å¡v§õmîNö‡Ýµ%ŁF±q×ñU]”½!Â]›+‡ñPåëçî”ØGž¾¡*QÈ(L¬J!AdÂA¯F†ªvÍúŠuB øෆe^ÊÆYºŸ³ãBÂcfv\RĈê³û½pF÷Ýkɸ@\Û¥ã:müë:ä_X#ÌIØFª‘6t„Qðoí8®]Py¾¬²Å©_¹Âœ¹š’,-î­oÀ_]‹Ñž§TîÊuVåC>p_l÷a +sÌÐSèÎðŸÁ8Í«0‹¦ë†Å*À‚†„‘aK›¹GYp^O×Éi=·.ÜÑ®NwÆ–‰”HÁ:æG]´¸\&¤ñ·o -#Þ6²wE߆6+aÜy?<2äi£z#7qõ˜Ç)¬UÂy?‘Œ ¶³PðžÒ¥ó”c§¤õ”ê>à)# +1|’7{O–m³X¶ú·q‘X@œÅ +¯T׊q±¿²®CzA)Èddõǘz½ ,%í¸ÃɉC¾9IN’^r²MܲäMr²ÇM™í~,;Í2E£;Åq0úÙ©Ú``¨fh$ÆÜÆÀkTðx˜Š6çÙ)läcÃ\€Õ +xV]b!¦!(1CaŸ"¦ÙØRbª<¢†*µ;”â¥v¯ÒžiZH=FAòqM)¨H¡™d¢g¤ÁT9¢`£Åë¼Y Í¡€‡ÔUàqL+ƒÔ¯ @¢Ppò‰›8‰BÁyþ +ˊ5n£0‹5^±Ž51ÁN¼š.K"¢a&Öè^2›bU¾§ò…ÂÂtüz]ÃÆÕ«=v;< X(rlöR9Ô©€«ÛF¶¯€ Seºˆì.cÓnyP#Ô:ž ²½GóíÝãŒYÁ†"šöåÉ;Ùa‚³L¦e؛̣–+wNãôf+E= +ƂÁÓfìIÙÊÉÈh®˜ÃO kÏ£ìv³:è+´T8Tæ$ø¡+>a@ÀÄÅ$ýç0Çëß1g”ü펻ªՇ +Ȗ^°O†:¤Èh㥯êPŠ!6‘k¬’óÊ3(·ñ¹ôZʾôöSQ¼ dö¶ d®Yû^ölRØ{Ó]Ñícóê¶ï´ëâ`?èÆ%lþTÛÅØX8‡<ÞºòÄ\¡WèVõ`Îê»Â¸…XÕ¡uˆ¡®WwÈÞ°UÄ&-Ä9ìñòwí‰Éß „›[ɈHéH¶ŒyH+1PØËf¿ú®÷ãû·ÛÃ&­¾‚p;wñؾ¶×ëÛ2ϚÆÕ}¾ÚB5 at WîÿuVg®U#þò¸„Nv„G"Ðå@Èh¡Ì2ãJoÆ1(Ýo»‡U5°ßòX$T›|b +õX$T›ªQèòò5mvÌž.‹»“ªÙî©M1öviá>‡}GÌ9ìôbví¼ÏÊz›Ýwó­K »¡Ë¿ºBÕS?z]‡¬3úè7‡=^¿Ž=1_Tr Šº‰oˆ½p j:ÍO”ëùãéf0È+×5¨»§îÝþ®‰(°&ÿòË@næ:ÑÊц%>Od$•Ghž"ŒA+endstream +endobj +715 0 obj << +/Type /Page +/Contents 716 0 R +/Resources 714 0 R +/MediaBox [0 0 612 792] +/Parent 675 0 R +>> endobj +717 0 obj << +/D [715 0 R /XYZ 109.854 704.063 null] +>> endobj +513 0 obj << +/D [715 0 R /XYZ 296.949 655.389 null] +>> endobj +714 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F27 640 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +722 0 obj << +/Length 1752 +/Filter /FlateDecode +>> +stream +x^•XYÛ6~ϯؗ wu3ûTúsj?KæÁ…|Q†õCF¹Km÷ÀĦÞnÓ×®ºÈ…åj”Þ“¦¢Z* Bd <”yˆ¥8”‚É4ªíXìpŸ¢Ã÷;ӐadaX·5¥.’D1• :pü}‰±1È)(}+(…KÞVÔÐØj°˜ùh«3†CJú=´…¾…ÍÖ1J\-oJ}ÂUèQÀxÀ—­îȼۢ-Ö%éB<Ĉ‡‹>¿xhê~X²³¶•/Ä>¦+œE“à=¤X01NO}¿G¤¼Ð]Q–¨vSƒïó‚¶Áðb ð4§cÙ.w-km }âòc‹\¯fýà?4€YÌT¢æ( ©ŒÍyáhŠ³LòŸ¥$R±MRlØP*1¯‹rZ›En…¢ã =ßþvsõËÕÇK|$+œ:T€}ËՍ¢Ô6 4KãÚÄTOkþíMµ1K§»tñŸyt~ìË%M+'Ldg…p\Βl@ÛG¨¨S•°x^íÕшZ¼€ÞïÒ)‚µOŸ®.‘3HMЁ%4Ah6õÁûºÀ©Ïwÿ!º2†|¬»÷Çc´ˆF̲±ÿÿxA#_Ԙ¹Àãøƒ%0øÏb6ž ÌsJPžs‡0dn‹oE‹Ë+ª뭛C_} gÃü0eÀ9ºŠð§“~Ç>ÉýVSÀ’Ù+éP|ÿ€[[–ÌÑÊ&hÁ¢o–‰G˒=_]¿ÿðëÕç¯bJ ­Õ^!t‰B'ÝtHÕç*§ÓèD툩մ|ê¥üA”Mjþpg’³8ê}Qéæ_ÑàÇçBBhÇÄ+á"â<‡ÂœÄól~A¯œì“~]O¶öÌgobÌÛ! ƒåø»¹{'T¾ÀTîm¯§0ÏÁJ 7‰æLßրwn4táO+18ný‰H\#ƒ¬f\ÚÖÙ äß¿NúúÅË·H¼nôŽü±> endobj +718 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [294.851 134.049 311.787 146.736] +/A << /S /GoTo /D (figure.3.5) >> +>> endobj +723 0 obj << +/D [721 0 R /XYZ 110.851 704.063 null] +>> endobj +724 0 obj << +/D [721 0 R /XYZ 110.854 578.859 null] +>> endobj +725 0 obj << +/D [721 0 R /XYZ 110.854 542.518 null] +>> endobj +726 0 obj << +/D [721 0 R /XYZ 110.854 518.109 null] +>> endobj +727 0 obj << +/D [721 0 R /XYZ 110.854 404.447 null] +>> endobj +728 0 obj << +/D [721 0 R /XYZ 110.854 365.593 null] +>> endobj +729 0 obj << +/D [721 0 R /XYZ 110.854 326.739 null] +>> endobj +730 0 obj << +/D [721 0 R /XYZ 110.854 285.482 null] +>> endobj +731 0 obj << +/D [721 0 R /XYZ 110.854 249.096 null] +>> endobj +732 0 obj << +/D [721 0 R /XYZ 110.854 210.176 null] +>> endobj +720 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +735 0 obj << +/Length 1359 +/Filter /FlateDecode +>> +stream +x^­X[oÛ6~÷¯ÐK+ ëÖ¼µEáز£D²2Ëncûï;2)9–h¶týD‚¢¿ïܯo¯n˜LAFšÜÎa‹‘<‘‚#ÊUr;K>³j4¦œوŠá×Ãti²Ýʆ7Ùb³JíCò²Þ‰áúÞUëÉôÑnç«I‘Ú•óZÞ¼J×GåW÷e}öÍ!hÎGdØâût^6ÿ>äy¶\Œ>ß¾Kp2&q.-ûk‡óÍrºÎÊ%ªo ÞÞþ¸Œ²W+€0$®FcFðð}ÍzRSZ§+ûÑUUÍfwðöyR<å©4•ÈžM‘HÐÌè=jÉgªEí"5âF…„Àu«ÖÌ9ð#F‘Q$Š"͈Óÿö)¥óÑXb .±ÚL×vÿ½O‰Pü0‡83|?/ÃLj+p°¥ÐˆØÈX:“K»Þý  ÃC…$±ˆ¢Â2ÌX*³rs¾µc1 ±ˆFàaA"ÂDȹ…à2̲øï¥s=MVEˆI4 +ˆpEx„Œ"n’îž‚£b¢Ï„‰¨Ô2BL0'¡ I]Ìݺpë½[3·>¸õ1 at 9®‡²&HÓ^Ž?2×¼ÉUš¼¬sö.”^„UŠ«x0B[É!BŠ€Sõ“Cᬳ ‘‰â!#+¼…[2_¾THKb" ÀÁAõÒ§f ãd´8 ›Á,&Յ”I¡*Üé3ô+K«Ì¯e6s –Ý}Â÷@{+‘ÔPo™ðd…‹hŠ—ˆé¡B,FB{º¸e׳îÁC÷à•Rb¦— ‰PĕÚ‰œÅHEÀDç€ßšè%|Rg—]+endstream +endobj +734 0 obj << +/Type /Page +/Contents 735 0 R +/Resources 733 0 R +/MediaBox [0 0 612 792] +/Parent 675 0 R +/Annots [ 719 0 R ] +>> endobj +719 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [196.092 650.662 213.028 663.348] +/A << /S /GoTo /D (figure.3.6) >> +>> endobj +736 0 obj << +/D [734 0 R /XYZ 109.854 704.063 null] +>> endobj +514 0 obj << +/D [734 0 R /XYZ 266.655 613.924 null] +>> endobj +515 0 obj << +/D [734 0 R /XYZ 263.905 282.861 null] +>> endobj +733 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +741 0 obj << +/Length 1722 +/Filter /FlateDecode +>> +stream +x^XQ“›6~¿_áGNÚø"̇٠+ +¤¢+Ôti ?‚À”ƒyg5‰IñΎ‡ÉðÙ ;’*ZŒ7zW ¬¾Èn’_¦ >ïöý<(úrgwìõEtþڔMaíYxñU¡P'KHçà(OOH¯‹±ìˆ…bIª&»Û%_Š¥Ùd0ôBqXöÁϞ+ö\@Þ²@“£+*}\§qà õc*%ÅIÐÍ /ã†_Mˆ´ôj˜–”]ßk{èÚ +â_óÀ«7zxÖº¥‡ü¼æ0è½Åì.‘MÑf(X³m¯‹,?»gÞ î²;kÂ/@+˔œÊM.–’ç,W'L>EIt¿–Ip÷÷ûxà´Ga}$»ËöÜR,¦õ‘›ÆÇ +M¡%òàç®ú¢?XxñÈ+¢Å.#¦æ„‚qÀCéüB#‹Št¶ò÷ŪÃÒ!‚¶¼Ê—Ìûi1áGÖßxÚ¹ðË&†\,  ÜV–är§ËÏ$Ö®Æ@ +ôh<›n°­ž!ürDHXÌÏFáG„¿Ö2 L?@C''wUE¸·>‚‡Ã '†˜xÜŊ Á(LIñ‚<z”%IÅáÆàÉ+4=€ðьÖóÈi#_Ó¾Û/]«\¢8ݖè[äÿAÕTœžªÂeÌ¢üÄ¿pð¥[+˜È/½§u]“÷Úÿ;yO¡-EœœsÆ£lВ­æéR‹á²‡gvÓ¤“×dþaΦH#0à.mÀ¡wPßÆîÇ>‚ʦۚÒaô– FhR$ÎýÞÃYƒeãx 5ÎPU1~o|̔×1Ú¡(?3Dƒþ¤jB¹kúµÀÁÎ?ȍÙ+dÓðÑk$¬ó-¾Ë ÙÌ Ó—ÈG4[ïéÁüó’ëOß+1Ï3º<Ïèx{3¸yõx Qí®ƒ3œhÓéC–` »:\[ók."\d1"§ƒ>=Z!>Ç¿ÝO~+Ò(P-Α¦-›ÑÜñ«v_ʜñ‹™óÎb;¤*'> ècØ®GW]€¿ @R]°d at c¼ªÇ¦!•çR[Gݤ§µpÚÂ4ØF‘è`Ö}ÛN{ЯJÇw ìE¥XüTÐsÎúuáØè7맜PÏ*‡®÷9iÌÞÌcš_éê‰ݧhj„§ïˆâæÍã͗üt‹Vüô-„gùªÜß|ü­*x ñ2™g«ggº_ñ ˆ\Ú¬nþ¸¹Ç/s¨„VCrB6„3°àXw:å¯áä"Z¦,†=”LM°'ò¤!óìéµvéõrŸ.æÀ7W×zž››‡ ÊpF§uŸHüøc‹í!…ì(îþÏ+endstream +endobj +740 0 obj << +/Type /Page +/Contents 741 0 R +/Resources 739 0 R +/MediaBox [0 0 612 792] +/Parent 745 0 R +/Annots [ 737 0 R 738 0 R ] +>> endobj +737 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [432.834 442.274 449.77 454.96] +/A << /S /GoTo /D (table.3.1) >> +>> endobj +738 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [481.308 328.961 491.769 340.88] +/A << /S /GoTo /D (Hfootnote.20) >> +>> endobj +742 0 obj << +/D [740 0 R /XYZ 110.851 704.063 null] +>> endobj +42 0 obj << +/D [740 0 R /XYZ 110.854 666.202 null] +>> endobj +46 0 obj << +/D [740 0 R /XYZ 110.854 638.378 null] +>> endobj +743 0 obj << +/D [740 0 R /XYZ 110.854 472.323 null] +>> endobj +50 0 obj << +/D [740 0 R /XYZ 110.854 396.894 null] +>> endobj +54 0 obj << +/D [740 0 R /XYZ 110.854 266.732 null] +>> endobj +58 0 obj << +/D [740 0 R /XYZ 110.854 196.822 null] +>> endobj +744 0 obj << +/D [740 0 R /XYZ 128.787 132.286 null] +>> endobj +739 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F65 612 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +748 0 obj << +/Length 1390 +/Filter /FlateDecode +>> +stream +x^­˜]sÚ8†ïù¾„™E±¾¥Þ¥MÒM&›f››¶ÓqÀ°ž€M $íþú=F’1˜2öäÂ"WÎ‡~vpÂ0‘â,ž£yçë÷0×7AñUðº™9¨Rˆ3 +ãY0èüÝù8ìœ]Q+ Í9 †“+¶]Æü8æ°¾äJÚuŠe:—ÃÎÏ-ʐIÀ5C!“û +3%"Sv0p¼ƒ ¤¬¦(’@h£0<`U Rp©ë«0Yá1ª +ñžÑqò’Œaó" »qžg¹N¢õlU×Ã0¼œBwzÖ‹]9ƒëÏW÷—æ-Aéۅ6°’€WÄE3Q%$¡ÑÆæ2I§3Ëh¹Šf´Ê£ÅÙ1NmHrœ*Š+Õ0ؕ˜#À]´3TFÙ"ÏFñryb*oE‘ÃTt4•+&A‘¢ óf‰I(g3ç8[—Éɐ٠£§,÷AjCƒT•óVŽ² µÓ`¿™¢’‡ŒØ´Ys "*çëô4P-¨rœª¢ö‚2G +Òânaè)ŸYQ¼CYÐHV ‹ê͋ª§á`pڑkCŽ£TUSõ¦Cˆ<Å3#д€€FšJDÊ0JlõO籫w\”Z©Ìýó®6¤9\UeÇpyjh“7l€J\ÐaSe­.WÑèÙöcÛ.õLmHr˜ªŠN8{žZšj¨Ó†iؑ¢ +5¦qçЪ[ÊVñhÕّ`Պ4K¬ªÌÌÆuì)¯©„òM4LÈ%0…áìX«‹hzZéԊ¦ªàWò×R¤Ä Û¡’Œ€’Žé÷×íh€ÔF€ åP/…¶ïÀžêš2(ÒDüZî¼jµ–íO¿jE”󒪦ÊQ +$  +Øq’lõoœ{hQ¨ÖHÓÈÑ¢P®ñJ¶N—‹x”L’£®Ò† ǧªbۀìíßÞÔRø «¹¨ç¢¶¾”HÖCãû.{ H‡: àîJڗ[»ì%ö²÷j–E«$öïÍõÈÞuïÆGά¹Øµ4>mB.I÷!Ž–êdAÄê˜÷•P6T໼¿ç˜Âö }PÛ‚Ãþ¸º^\?Ö­"!$ И“¦… ¡a­w­O»ÊÕRõf÷é·yþç™!©(àw²’Ý×ǫ·÷P Õ´Êp{ÀÐVcWfÚCy!T×,v4ÿswáÑ Î ÕQKš¡Ç•ìmÉët|¢æ‡ËG3tœº-ÉÐqíќ¤ñ¯hd?@´aß«þúÎãépHáˆ4ìpJùEø`‡®ƒ.³€ªpS¾1-ÂH͇ßÜ4fP¥416¶‘Mñ²™©áíQL„Є¦¢F¶ó8ÿëB0âÎ?^›ÁEMlØ ,.Ìø05£›õì·‘?ìÔþ,,?l«Ëÿ +6 +endstream +endobj +747 0 obj << +/Type /Page +/Contents 748 0 R +/Resources 746 0 R +/MediaBox [0 0 612 792] +/Parent 745 0 R +>> endobj +749 0 obj << +/D [747 0 R /XYZ 109.854 704.063 null] +>> endobj +452 0 obj << +/D [747 0 R /XYZ 249.953 640.423 null] +>> endobj +453 0 obj << +/D [747 0 R /XYZ 268.137 268.319 null] +>> endobj +746 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +753 0 obj << +/Length 1307 +/Filter /FlateDecode +>> +stream +x^­WMÛ6½ûWèVˆ’"õ‘Ûn7 4@‹´1zIrÐJ´-@¢TJNâþú9”my½n•Æ€¡áh(¾y3ï׋׏"#™”†Ÿ(K–Ÿ×ï^?FScFÒ( h´Þ©åŠKö‡~P ÊFõÊ|Y2ª59>ŠV¢”o÷&ªV£²TÒ¥Òƒ7mÚý(·|~©Ì°Ïk¿R—Š ²©+„¶â‚šÍõ‚eÙÑ +O½°šϽ /œ©÷ÂÊÖ ÷q ÅN/˜¶P}ÿïî¤3ܹ[®¢,¿mIøu×ö +õ}õ·—”õî[¡T魆Ýhãˆøi)eØ£&_rĒË0¯êü©V8£h›§J«Ò/¹[ÊðÐW P ôà—Ö¨¦5 ,8ëÒ +,ìZ棾Z“oŠ\ëv@;³×Vé®ví~»óÚF¡Åùêº†Ãˆ¸›}? ôdýç:ví•C‹OX…\[Æ£©ã÷Œ÷ԁ¨[²Ð¥‘‚ 8ÉvùTì…Jÿ È°+0‡]n}·ä…ÂSµÝÚܱ2¼Ö(‡•kÔy®cZ€4 »|[éí8ÕíÕL:Ý +. lLÛ t +Ìl>L‘Òø·V+øft |BØX!,šÆ*ÆD°²[Ù +g‰à†c"8# à…ô(vðÂæOì~m÷ØLR°ðƒßËö]Ý楋“ÝU±C­MâÓ“"ñ X ¼B´5¹×Ny5¿NÅÍÑkŸcÔ8{xå«ÝÆ.½QÅÐ_^Ùo§òèê…+ §ï=Bµ»€)d¥Rµ¿¶5È*ô¾®QêÚJÊø).׬ ŒÚ½Óû89?ëX^`ÐƬK*!RfSFp~t¿‡qL¿Ñ)SOGÿ±ô;êªôÚ²4c½\¼]/þZ0 Ÿ * %©ˆ¡*Š((šÅÇÏ4(á%Ä^_eDiJ¤°Õ²>,~_ÜÛqZN9$N¢@D a#³”|."ÉðœÑðÏeLÃóóé!âà狳âl.3³$ÀZ /`GYzÄ͘$Àõ·dӃp +¸iBàw¸é·ÍÅï e·`€9öeöbIx"¦(þ8§>–ç-$]þU”@ÀÂ*J)‰y:EõV{0c«á+ӋÙ䉳gé5 +ÍHJÁ¿,"”û~ Ê+™‘,汿m2(>ö¾É÷|üú ßÕÜÿ‚ƒÉ7cïF2ؙ+endstream +endobj +752 0 obj << +/Type /Page +/Contents 753 0 R +/Resources 751 0 R +/MediaBox [0 0 612 792] +/Parent 745 0 R +/Annots [ 750 0 R ] +>> endobj +750 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [245.978 269.688 262.915 282.374] +/A << /S /GoTo /D (figure.3.8) >> +>> endobj +754 0 obj << +/D [752 0 R /XYZ 110.851 704.063 null] +>> endobj +516 0 obj << +/D [752 0 R /XYZ 260.85 451.555 null] +>> endobj +751 0 obj << +/Font << /F46 637 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +759 0 obj << +/Length 1464 +/Filter /FlateDecode +>> +stream +x^­YÉrÛ8½ë+x$«" v€¹9qRåTeâÄÊLU–#26+©T–ùúi€¬…† Gö+à JV#`ÂåVœL„‚åV"N›ûØqÊÛK¶hJ;xW]×ýPu[‰¡º5q»s`‚R¨êÎÄÕªšoÕz½ýpËý‡Ž+÷ô{SÚiÝ8]ŗEåDbóÝ$èñi÷ç‚a¨LÀÚ#Ù~ÚêOˆ†2Gå>ù2 ÀƒŸ™kØkÃ`ËìÒ˅ۊK¿›́“ ++š}`z69]’\†°¢Ñ(¾Ë\†¾þ@ë$V=\»VÏÛõö482S5eå\uPäûíÂÎìË×ì VQü>„¬ßb„ ;‰QÝ®ÑË-8¬–EÿÍÔMKcÖû+endstream +endobj +758 0 obj << +/Type /Page +/Contents 759 0 R +/Resources 757 0 R +/MediaBox [0 0 612 792] +/Parent 745 0 R +/Annots [ 755 0 R 756 0 R ] +>> endobj +755 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [463.22 331.545 480.156 344.231] +/A << /S /GoTo /D (table.3.3) >> +>> endobj +756 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 319.567 126.795 329.785] +/A << /S /GoTo /D (table.3.4) >> +>> endobj +760 0 obj << +/D [758 0 R /XYZ 109.854 704.063 null] +>> endobj +517 0 obj << +/D [758 0 R /XYZ 243.647 655.389 null] +>> endobj +62 0 obj << +/D [758 0 R /XYZ 110.854 461.276 null] +>> endobj +66 0 obj << +/D [758 0 R /XYZ 110.854 426.778 null] +>> endobj +761 0 obj << +/D [758 0 R /XYZ 110.854 376.04 null] +>> endobj +454 0 obj << +/D [758 0 R /XYZ 251.346 296.691 null] +>> endobj +757 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +765 0 obj << +/Length 1626 +/Filter /FlateDecode +>> +stream +x^­™]sÓ8†ïó+|éÌ­¾es׺³P–”³ã:jã!±ƒí+X!Á´—Álô÷èüjôÇ“0Š… ÁÕm@AŒ‹@rŒbèz5>†Wã‡ÉÍR'Tà!þ|s¾»FAvֈamŒ"ŽÂÄÍêú¡¬Á£:rÄdÔ% Ý9â\v‘UˆK¹«Šˆ*ŒàU$ª$’ðwD§…}MyQÛÆ'ŒÙ¦Zص»ûS—…™Ý>½‰‚0#4˜8ífÈ÷/:è©Ŕž¸O/∠+ÑOoQO¯-ú¾Øäó]T¹NJ]Õý´ÜïÞtЂ,æJž8qOKÆ(rotÀDÓÃji¾+ušUY‘[N«¤ú2†mCÏûQ¹ÀúЅJ„;7ƒ'Ìړ²÷£Bӓjk~Èçº4‰XŒ©¿ÿ6°Ë.`L"ˆåg‚DýÄõÈÚ¢—ßÆD„ƒP»î¢F)"ìԍØS£RöSDÔSk‹^›}½á4Ï ´oÙ\ÿ6·i7¬ŒOÍύP„©ìç6ˆ¨ç֝êI^”«diak]&þ 8†œ;^uã1C”?prG.‘㱂üë?†uävD_åcŽÃo&ؒe6oñ«O9¦g–«E`xN[G1HÆ~Ó1Œ¨GØÝŸsØà7ö<œ·k{ÆÙÕ\‚*}°W›‡™1À‰»Ú`¡½1J„†m§ò⯳?g¶ßî˜\",·Ý´ÙÐﲪ֥Y Ó"¯“,oVMÃz¡íå꺬lÛìþÉ]õÌÝÙ¤ ÛJ*ûß=Da»7â#Î?çúæs[¯DAífj3+™»W-,ÁÜ>—¹ÛuS{šãÝ©2$ÐãAÏ “Tôà,8.è)Dh$YÀ„¹æb~¿Ï½5x‚Rõ„—9 ۘ–É­+¨ÁÅHÚö'J]ëõféfHŸ¹ÿ˜Ðý^D='ÜçÃÿýv<¡ +endstream +endobj +764 0 obj << +/Type /Page +/Contents 765 0 R +/Resources 763 0 R +/MediaBox [0 0 612 792] +/Parent 745 0 R +/Annots [ 762 0 R ] +>> endobj +762 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 391.156 126.795 401.374] +/A << /S /GoTo /D (table.3.5) >> +>> endobj +766 0 obj << +/D [764 0 R /XYZ 110.851 704.063 null] +>> endobj +455 0 obj << +/D [764 0 R /XYZ 282.573 655.389 null] +>> endobj +456 0 obj << +/D [764 0 R /XYZ 298.09 366.396 null] +>> endobj +767 0 obj << +/D [764 0 R /XYZ 110.854 163.758 null] +>> endobj +763 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +771 0 obj << +/Length 1805 +/Filter /FlateDecode +>> +stream +x^­YIÛ6¾Ï¯Ð¥€ÜŽ.â–"‡¤IÐi›"SôFæØBmɕäYþ})’-oÓ¹Xùô–ï-|¤_]]<{ËDDҜÓèê&"T¡„°HðÑDFW³èsüvBx\V“)ã$6öå>]­—æf¤ŒS¿ð‹¬«r^¥+ÿrí¨çyQ÷?¶?&Û4y1÷ÓicŸ´åt³)²&/ ÿV¤+3›|½zÿì-'}]¥HQa¯å*Í O64‰•&-ÕÌL-Qš3D¥Œ¦$AI"üj¶L+6¥Çiý¼“ª‘TXn”!M|¥‘Pá+sߘ +´ÇyÑøSǍ¾`Ž·ÓjžùÑ¥d‹´rzQ j1«’ óüt+i©¢Þ40¹ýì?ÿ:ÎL1§ä./OŸ™)n×Cf 6ùy Ð)ƒŠU4@¸[˜Êxrˆ›>9‘ˆs Ô%ºÓ}Bp Œð‡d˜·Ëëàÿ(ÊbZø¨špœ|By|ë"*ÐgÏ7+cÁ¶3Y¹á˜fAÒœJðP³Û=ši™ìhV´’«ôÁ˛}ÊÔMa__ú·»¼YŒ…6‘IÑIrž¶1\óâ…âq«p‚$SC³L1Ip|»5K»h8ݬÀ,¯ÊbŸe«¼H›6›®†nÜ,—~´.!+L5á3 EL‹a¼ü½0Åx @Jð~ °ÙfCwÌÐD"öÝÐÊ4›ÊU&Aâ¼ ƒ[PércÂ|˜^§umm±ã¦õYÂa]92÷ysº.ixç7AÆÂE-Ҡµñ+UŽR%`6¥:´+¶ü $åÙ}ÜXW?©±ÄU("/g³Ê1I¸äñSÌ}Ü¶— °5‚20ðܲ—iÕ3ò,‘‡ &°A$LAÍe¡åù«¨×&Ë-ø¾ù*`=›1S ÞÁ»/¨½3÷ã FH.‡òÍç‹"¦ÞÕD#£ƔÊîéÉA)!è4õ¦¼+nÊj•ú†€‹¯—¥Ë>†¡ÜÙr3s ]j÷Kߣáa&ø­ú¶ÞV“`¾» HúŒx(¶›û|™§Uؒò‚0ÐHŽµ.g !c0t;Xwþ:›ÇÔ Ö°Ýˆ!Ö~óªò±hé< ÒñTIck#g%kÛ­‚ÿƒG‡ð‡yœƒmZHðÂï]s³i~wÎ{–ò}TK{Â�! �µü1²êl‡B­o$ &@¡j®s à@)õÓ+SácÞÉ~3v\ +çžS¢S0·wÊ®gó8l߸:pJp‚6$= ÔÜGú±àL˜œ‹ÀÖQ ôj™ê'åº J'¶Ñ…( +EÒ߶À)“¨7mò?ýPÕëý=Ý#ÕÝã°¾º§dO0}"ÿ0—V¾`ï܇ti°×oŒ9ÈÏbßzº¨cxœà=è Mn¶SÖ÷ûTá‡U9ÃÔ'߇t·eãÞ +ir02ÎðF_“#ÎxœÜ=ÎèË=%@¸$OÔ)Rìs+tÌ3cÛåâ@¿l¯óðá~ý¸éä}éü-ÄÉçÌó5Áx)qÖ.Ûgâï9ˆÒÐ%ìäÃy÷í_6#¬ÔX>0Ò?k2ªGΚ;$þ*$þîÉ®÷NöupÞtëëµ 7öÝeyÿ¼jÿH ‚ÆEéŸÝ)+óïe5s·h‚¹ å–<Ü}Ñ­.L¸¸ú‹Á@ íóƒçS3k…6á£À-+Wë4k–cgôt ¬í­¯¿½XHþ(–¡_÷ +  +Õߢ¥}iïŽÍ²©‹Ô^oöïüûÇÎp—¸í]v»Ûôï¨ÜéëyÐRÙ4Rm,Pm×\Ø|ÿÿgj™0¤…> endobj +768 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [140.738 463.825 157.675 476.511] +/A << /S /GoTo /D (figure.3.9) >> +>> endobj +772 0 obj << +/D [770 0 R /XYZ 109.854 704.063 null] +>> endobj +518 0 obj << +/D [770 0 R /XYZ 284.402 441.675 null] +>> endobj +769 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +777 0 obj << +/Length 1369 +/Filter /FlateDecode +>> +stream +x^¥VKÛ6¾ûWèR at .b†=“Ó.Ò+Y<ªª®6$ ûn<Ô$µýB–aK×ÆôfŽ§«`°³úLîŸÃªq®i®!ÆÉç!ö]ÓzDdÊc×ÑøÕ؎ôó?Iã}w¨ÒSä Óum} +P‹iE¥›œÝ?»`÷kãö¤;tk sÂkîÔû¦Úÿ9a)‰”@+• ԄAAÆ>+‚êÇ«ú–¢+5 \P%Ք*KA͝%"> endobj +773 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [470.51 374.896 493.424 387.583] +/A << /S /GoTo /D (figure.3.10) >> +>> endobj +774 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [444.334 118.905 467.248 131.591] +/A << /S /GoTo /D (figure.3.11) >> +>> endobj +778 0 obj << +/D [776 0 R /XYZ 110.851 704.063 null] +>> endobj +70 0 obj << +/D [776 0 R /XYZ 110.854 488.719 null] +>> endobj +74 0 obj << +/D [776 0 R /XYZ 110.854 416.341 null] +>> endobj +519 0 obj << +/D [776 0 R /XYZ 275.644 335.69 null] +>> endobj +775 0 obj << +/Font << /F71 779 0 R /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +783 0 obj << +/Length 1727 +/Filter /FlateDecode +>> +stream +x^­˜[SÛ8Çßù~Ûd¦Qu·Ô}¢K`Û¡t·¤{ëv“ðNb§Ž¡åÛï‘%;vˆ•&t˜ÁŽ,éôÓ9G—/G$ÂðG"B0R‚GR +Çq4]}úŒ£||ÙOÑתæ"bJ!Á¼Ï£Ë£ß^OŽ^ž2 = -&7% +q"#É1ÒPu2‹> NÓÛû GTàC„¼ŽÁƒãûoéUÂǓ«‹çç[´¡–j �@Õí<:ª í VXÆÁU~ó¢aÝI}mÃbþødg½ëÚ"ºe}Ó׈ª:ݵ¬/,69KÈ „FþJerg†#¢ñ Yßê؟C"êKûû.Y¹—,wÏ1¦ßªJ3W07Ùmy÷ópD ¤Ùª4‰ÿ’–¾í÷r÷L|'iVšbYøï‘ƈ(ÖE +FÜÉæ$ælðçÆ †ã܋iÓ¸\šlõb8âŒ8Ëlqm™­¼œ'S㫛ª®<É|™s +[sV­# ;{8pÏô$ôá¬ÆDÕ†6£|gÖBê¥h¿TÌ…ý.n”ê œM؉aÕL_šùnï¼N+ÕØòVª|+¾Bf3¾RÕbæ=±"&ÝÅ»ñÖzÒÜ2Þ\/éer=÷uÒÚéëF‹ØÖE*ÐSØ×Ú+Ùz£ÄH3b´¤Ò­X0z ëÃéƒz>ïN$w}¿~ã^NŠäƇ †s'’>d(õooïçÞúÂ?1œv6j‘øÕzû?™h× +endstream +endobj +782 0 obj << +/Type /Page +/Contents 783 0 R +/Resources 781 0 R +/MediaBox [0 0 612 792] +/Parent 780 0 R +>> endobj +784 0 obj << +/D [782 0 R /XYZ 109.854 704.063 null] +>> endobj +520 0 obj << +/D [782 0 R /XYZ 280.57 655.389 null] +>> endobj +781 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +787 0 obj << +/Length 1513 +/Filter /FlateDecode +>> +stream +x^µXK“Û6 ¾çWøVy&f(>$²·ÝînÓ¤™¬Ó™¶Édd›^«µ%W’“&¿¾ @êaKkç!ÉP×ó'ÏîD< C¢¥d“ùDJ”“H +Â`h¾šü\Mµ æŸÞ¾¸}3Ÿ~œ¿zvÇ£î¤H¡¢ EíùÆ ’ »JŒəWJ>}N¶C¶¸&Š*¯¶3»…)¦3Îi¯¡e:¨6i‰=&«Š¯(nòíÊõV°~­X¦ßÌS% Ò Ç_+SÚ>¡Ñžµ›ÕûÌB… "D„;pk0gĶõVØùC‘ìðcc’•Ýj­‘,¶N§Ê±ý²I—›vþ @‚„¡?ù•ÅûæÝD’“ÇÎööyšU%Á}¯Î8ˆŒådkªÜúæýë¡ubF„”çÝ*$¿Ä­1‹OÜʸs+÷nÉ»DïÖzÜ N'Û)©qšà'çOIxÜwçò]¨ \"ñcœÇ¢ÀÓÎyªï¼i,@–2x~{ÿç 9‘º¡ÕK+øø2 i”ø±Í!BV(ô%8DûŒd@ ô@ýÞùÀÛµö¢1èÞ¶~ƒ´¿µ{ÏpëïØ\]¿Da»P…Å]¤¦tî’*Í’E~¨¦ýëÚ¡fGµï¦Êݯj÷ƒY®XÚ4&z6z}@ » *)ô ƒ`•šAXŽAÐ㝞AV/3³EZáÇJyòPZ×Q\§UébLp¢ÕW¾¤•»ÙÊÀT–Õ|€ŽÒ쒬J—¥×;¥4ÞîýfŠüÌûé jŽwS.ƒ?F*˜MQ!a±¾$>¥§èÊte‹®hѕŽiÝa‰û±§–ì÷Ût† k@@ó>æË¡{ùj$1¹PèõñÌr“¶ÎoU‘dåÚ«-sØt¾½À?ý˜xóÛTÐ`~ûëÝ`ö‘@%vÞAQ{3>F-Nj&"+cï èiR« +°+²<›YºÞ5¶7Յ)¼™¶”ˆ ç²ïž$Ëa¶ƒïï‹ÄyÍ¢¢hðÝ ¾y3„€€¡8¦ìÒ}M%Os´¤MÚ I»…Š§{—r…%jéPz#éêØX[x-Gïސj 5|Œ€"c*uÏ +yA U'9šK†•¦lÊTٖ©0èËTéËTè3k[é¬Í²ê”<¨ƒ(Y%‹’íAë¬Mמaô¨Ìy¹GÈô|”LJ]@&vÁ£ €ú”K̹Ÿ5\b-—XË%æéÁ.ôPä‡=Š5™z֜¶ƒ +Äq>I­‡ù4‚ ðIÉ øD[ð{öðè´æÓÈ'¸ð=0ÐãÑ Ÿ¬ˆGÅ>Y”FBYm4ß'åÊJŽ*†ûr`—P±p„‚§Ä0¥4ø%_¥ÙFôíÉn¿5å+µGO s{:¹i¬Òry(Kãƌ=Ŏe¾2¨Yš&[zM,­+ÖK‹“Ž‚²ËK”óÅßp’F1[¡Ÿ[‹f’˯n"ß¹ùÙ`ý»O +›L¸# +¼ƒülÓ|Ôu+endstream +endobj +786 0 obj << +/Type /Page +/Contents 787 0 R +/Resources 785 0 R +/MediaBox [0 0 612 792] +/Parent 780 0 R +>> endobj +788 0 obj << +/D [786 0 R /XYZ 110.851 704.063 null] +>> endobj +78 0 obj << +/D [786 0 R /XYZ 110.854 244.286 null] +>> endobj +785 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +792 0 obj << +/Length 2671 +/Filter /FlateDecode +>> +stream +x^ÅZK“Û6¾Ï¯Ð‘ªŠ @27;*'åÖ§*‡ØJ„F´%R!©L&¿~»Ñ ¾†šÇfªÖ‡Øh+S¯ŒŽC ]·Åê@…:덈¢(x׬EìegwݥɏëÔQðc]µ]“—U×®¿Üþúý/ÊÀ\a¦µ›6Zm¤ µ04áíÁÂ0 ³}üÉÄƠ̂~Rî¼´—üx| ¢¶-µªºãÇc½–:¸çϊ~K”ä²ëʚ ]M¿¶ÚՅõ«mK·y at iQ<ÐA³x&Þ@/0f:ØáÆrÜ|š o‰\žN¶(óÎÒg}¶M^áz“ë–GdáùngÏM¦ä°M¸YVqƒUÐrÇ.A~K¤¶¼«¨e×Bw¶*lALnãn3“A]ÙåUið®(J‘µ=Œ#m’¶2–R“”÷ew+@‡%nw&ØÓØâ²c.rjØݖÿØï ƒìxޖºÀË&ßyŒ_Îö::Šr[ßÛÆíÝA(´PÅG¶¤Âž8NûøY³]4 Ñ *{‚i–´ÃËýHsÇ£¹cœûsɊ{v£0ãî<±Ñ>œ¶5¸úâ3»Xfc{PÙ$hÄ^F7óé\-Ïú¹ª–;[¡ÄqF[Û9pbµPWÚïó¶Ü±­sµú½A{P0~0¢áŒßŸ#åÛ¶>^üª„’¦½´ËӖd‡J` ¢óíÃD¢„G àÜ£ˆÞ(´#R‹0'z©è|ÍîUG&ø}FsDž_u… +pƒ—älO !‚Hu9m½®÷ORGGèdxFç4 îü@ù¦9Ó|$ UÆ Î§AÙ¢KÉL–†:Ò0ǐË(ȉþ*›î‚«ãÇHY©“½Î}\s‡¸ƒC-ˆZ2ÿ·Š Zñ\ýË굺òdɐ6&ƒ<íÉP«€vK¶’–©NЭ‡ŸÎÍÃïÖÒ c½ËŒH,=Ӂ÷ÛFVÞ¶m{æ…Lað "jî›úDºz¬ëD…ʤ^×ÑÒq¤aKÏA†;ŸEÈPfžE‡LVI˜%‘@ I¯ZA¬RNyÃf²4T«Íˆà-.隯ZSÆo±¦ñkŠkÊž£nžV¾ÊB‘$3åÇÚsü½4‰ î'âK¢ÅY˜ +õŠƒ| ’g簘XB"5þ1Áœè÷3oœ„IÏW¤Ë'ÀÇÇ˖­tŸ,„ìÉ{t2•C sßÞ S9Žd)3Pûâh£X™b.á"üÎòDœCOMá 2aîrƸւa{{j©)š¡¬LÓÞ,®|Z–L:Z²¨TãÈ,ít²4̌™Ù^4Ž$Œ†e¯+jé÷-П>mŽ*y2ÞB H¼P òɝ«Qc—Bõ¸Är5Lô,.rµ#õ¼Ú‘fRMɾžo!/’ª/±cb’s6 ‘ùIݲ];H¡ÂhpÔW¢šŽÍ³êϲׅ˜+a ÍË" ÔY62Ñë‹V¾bÞÓø‘(“]U^,ÃH©7ÝV ¤Wâ™s+‡á&"ŽøAeî(“‹ìé |ì](ðe\!—+û°AR‡Ïl¿<.3†‹ž©õº"a=+Uõ.و+M¼@®gÍõɨe +4æô©RëNí¸¥ÔNaLq¿S°_ °¤¶³mG=þÎÇp•êš|;)!÷‘ýž!P.… ßþWà!½½”¿2|E†lkx èB¥]¼X=å_ë¦ìzs¿ç¦¾kò]øÌëoС4€" óDìùÃ5À€Ð•}y9.À eYô¶ Dð •fšJH èîÚ~ù:Û]²Àgû+Q²¿‡î˹œö$S,ËçV™ŒtCÅ$W#=-n|£ÒrL¦u¨12ËÌÂ|\»wâí¿~Ž£0ùòµ ò¨DÆqv—»܍> endobj +789 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [481.174 369.616 491.635 383.939] +/A << /S /GoTo /D (Hfootnote.21) >> +>> endobj +793 0 obj << +/D [791 0 R /XYZ 109.854 704.063 null] +>> endobj +82 0 obj << +/D [791 0 R /XYZ 110.854 666.202 null] +>> endobj +794 0 obj << +/D [791 0 R /XYZ 128.787 170.428 null] +>> endobj +790 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F15 638 0 R /F27 640 0 R /F46 637 0 R /F45 636 0 R /F8 795 0 R /F7 796 0 R /F11 797 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +800 0 obj << +/Length 2179 +/Filter /FlateDecode +>> +stream +x^­X͒㸠¾ÏSø(WÚ\’¢D)·l¶j¶²U©ÚÎ)³Ú¢Ûª‘%G’»§÷éПGžélÆA P ðàûÇw?ü§¥Dž$zóxÜ(#…Rù&MŒÐÆn‹Í¿£ÇSÙmwq¢¢CSx¢Î@UDž¯ºây«“ÈÕ½{òÌëÊsY¹–^ú†Ÿ§¦ ztÔ+îήªf6€¶i´ßj]ûíläf§Œ0&¥í|ƒv_À¤Ž“ÈװͲ~Â7 ÷ß6¼¾UIô¹÷uá ât¯ç}S•úG돾%žõ5uõJÔ±iG¥`ðØùžeŽmsƽýð³Jæþ¼Ùª&m7VäV*ID–Ä#â8#¡X‘ÔÍÉÄÂ(½ÙÍÁ+&AЂ=ù',Þ(ÒÂʥſÀa(½ªTe"ÍZµ¹ûj¡½[}׉F ™$IÂ,$è‹XâóšŽT¤@°D&é·¶¿D ŽÖÞââï²#uG&™6ƒ¤ØîR›@NzrZëê'&çQ‰y²Ó©)¸nƒ!ˆã Só©FJÞd®9@‡ZéhíŽOòöÖ)7g/…‘ñ7}›%êmá›+|3Š³|½ù½èµv®ónð&Ê.”‚7׌‘Èì{FˆüzÌÆÖ|ݯ»Øäð¹v ßcgÿKì’5»ØX–‰$7­°/ɐð«/Êë°5‘\t¢¢³v.pØƌv>„¸Ö\T€8³º@sU` +×;¢:舄º‡ÌKUö̪CËâ¨Ù*5”jY,”½É´‹kC}ÈmôQkKT0‰™D*˜Üª­†÷¾Äˆdå³e +^ÊúFEçÎL…­¸WzqÁhº"OµÉàÔß¿,¦C]‡9¬ÕÏ¡ãbÝ?|KG›Œ S Ú¾H¬XÈx,Skª+J$¸úÐ[:åô Œ¤Ãß©<¶ºˆàT1z<F/úV#íÕF¦PÙþs-[Ï aȆ=^Ê +7Ø =¯_s‡–©`E9óìö«1Pa©²îúö:ÄÀd%ÜzÍ¡d'±Èõ JÏóNǀ®ÇfiÎA (]µ¡.Uã +^*B¢„¯ a@µÁ÷OeÇÒa§môØiOúÞ_øŸ„A#·ú«i9ôÿ&¦þÞ P Œ¡¿7z˜&€9 „°zvuy¹VŽe¦kþ9&يO6¡ÙÄ\PLA%¡0b}‰œç(¼aŽv(AÝ+±jïij+Ê(«…žÚ寠L*â5˜y@õµ`/„Ú?±]îŠwvañÒìý\ŽM“αvCæ?cÚøšV)²ÜUTŽûRö'bÏ`‹eP Kܛ,1˧ð۝G?E¹4 ’3M"„/MR®>„¾B©¹ s«k=±‡4FæËÉ×D‘0÷-|[¡–pì—py±²™iü¢ˆ ã,ÌiȊk S¯ÏNŠ—Ù3¨”×úSM×õjè}À/µ–ZU›‚舨o²Tbð9´UÏeA‚—–{Ìf᝞3éhð-$Ña/ùÉâéˆðhj­Éº{dCduDï_ùÙz÷‰Ûº$º^èI^‚Z:Ø« z”²–—Šåº“£¤º*átÛÒw«h‡ÿ—XB‚Û¥á˜Ä²ۖ‡>+Šé¦Êéæå_uUÌÿÍ0Ę NŸ+endstream +endobj +799 0 obj << +/Type /Page +/Contents 800 0 R +/Resources 798 0 R +/MediaBox [0 0 612 792] +/Parent 780 0 R +>> endobj +801 0 obj << +/D [799 0 R /XYZ 110.851 704.063 null] +>> endobj +798 0 obj << +/Font << /F36 327 0 R /F15 638 0 R /F27 640 0 R /F45 636 0 R /F47 359 0 R /F51 451 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +804 0 obj << +/Length 1860 +/Filter /FlateDecode +>> +stream +x^ÍXK“Ü6¾ûWôQ]åføÔç؎'å”Svmõ-öA-±g´QK½zęüúR-)šØNmªÖ7H‚$øø+¦´†'i¦!‰(šÙärQ·¿ óï6a‡ï¤ŒëìRª%ì8Af‚° i\hW +ì8ð°£HMð\ó/`7еÝþ8𕰛ì*`«D€]yØçK3؟ÓãGÊ$§è>c@)۟âò~sú)ÚHìÚ6>Aùû}& +Š{ÿÿŽ}w÷UŽUñʱ*u9^:Ö-´4?)Ômá[\v5궬ÿçÞü?M¢×ÿzónËú ˆbA^àî؁›b³Ûx°g +7ò‚A /‰¼æšOã~ ›–߬O€¯ÐEÏm€^ŒãþA±6|T!þ.ÜO֟ê„Ô銰n]tºê*ßA¦7…[ªÂj ,ÚHmøӁ ýƒV_¬ˆ­‘+l½ŸèK.e:NWŸë_øN˜Œq™¹N&MýŸ•™¬Èà{DÆ>ò +c_0_²_þüC¬éؗ¯Þ’ðC—Ÿý¥œe‹Iþ(¥—~kßHßrA”k-‘¼ÏÞŸýŠ¡Ë +endstream +endobj +803 0 obj << +/Type /Page +/Contents 804 0 R +/Resources 802 0 R +/MediaBox [0 0 612 792] +/Parent 780 0 R +>> endobj +805 0 obj << +/D [803 0 R /XYZ 109.854 704.063 null] +>> endobj +86 0 obj << +/D [803 0 R /XYZ 110.854 361.962 null] +>> endobj +802 0 obj << +/Font << /F36 327 0 R /F46 637 0 R /F15 638 0 R /F27 640 0 R /F45 636 0 R /F47 359 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +810 0 obj << +/Length 1936 +/Filter /FlateDecode +>> +stream +x^¥ko#·ñ»Åm+™ “`[¿¬¾p‘¬Ýþôý]$ΈKUÀ‰¨Éký·§‡íãÝѪ3ÆIÊ2zâëéª?êÂ|á\ê7’ÕpЄi÷k­ö½¢¥}G¬ž֙\miW7C÷FûpX¿Õ»¶ZÒZʈ¥á\í%}•`2›¨ö][#U°Q*f\¥ÁF„,ÛY4iñÕ.ïdõ€ï„úô¸9(œ„+FÏ-¿!kndÈDôg ÿüéáñöæá ÿùãöy{sûðñyéJ"â,VÑÌJñ Ä^㘟û+=èœÓÓVÓ.©Ùh+,JVû¶# oè«Q›ß•)Œu]<³ ­i=q\¬``¥iÙ´ŽùÌé1ޔ~.Â~ kÀd.¨;×6lì¥àÛhtF¥(Ž(É‘°(ÊΏaØ@ø’!U˜¬êµXéҌ5-­úHPå6_4-)¤²!Õ;jÚꬁ^Lo­€;‡¼wrZ¢Ü¹Ó…˜Qºœ£¾­J—¯s¥£y©)Pp¡(ïaÓaÕÌ)°kú}ú™³ôÃó»CÐô׸B‹|ìõKf°wÿùfÉe«½Z—×ýx<¶[ä.½M]ƒ™áæ´,M¬òB×S5˜ Þ­]eòG•¤ïÎ ý·={Ó/Vë„%áTv¿ëD´ØpÔýØSaH©ÓP÷º£DEA÷ȋ®íúɸ*À³hː‡±–Ú@lõlÀ yeþCœ”õ~)bbgà N\ì삔+` +žQ;à)Å íX—pŠÀû€ñwNX–pa ¦,ɒ+²ˆ«Jç{æoÐòëÁ‹,aë/,Z¬ žN¸^•±äâÖákÇࣤëVJdÓbºE=Wgz ­­×v¿Óî¸M;ر+OõÕX+b2¸D‚+”.Ã\ºPµÎëc¥)]®>n¯~»B<@ 8K£0P©`ašE}õ˯<( 7TðÕRÖ@‘²(ÄY§ +>_ý|u‹#ëEp@œÆB*ŠŒ­¤äy;§$–ÄaG@ƒÿŸç+g;8(R:1û(…#Êâ‡3Áw9bÓ¿¶žÙÄ@ûú|zÜ>ý€E ÐÑÛbÉq›EÁ§®ò§•>Žý´–!H% f´êóWM%—3sÍn-ö—W8²É»|×·Õ8L,ÍqêOV³9cñ¨êöŽ£]´¬³¦¥p’Ú=¹cbÚïAO¶&+ž‚¡PÈ8Kœÿï0¯måUþ±+´~÷8 ¹Ê퀒ù© Ýèξô6ƒ©µ£3ŽÎND)ô3 ¡S›††4¨ç¤kš)·£>îù>šdg-(¨%£05yf˜¥v˜øf™¸ØÆäö>͒‰ÂóI–óŸ¥lع£€l«iγ'tŽæ+\иsòÓí5A692÷ºïKÕîòŠà2NïÁÙ-ÜÜ D©ðI:ì5¼ÀKZ - +H3ëÜ0Žž†l¦÷,Ýÿ°Ý­çè^Æbþœ³'rmz¼ä¦¿_ΓÄ2Ï<Ùk.tšV.¦.®8Lñ…[)Šh„ñS² ŒCÔùÛúlìik3À+Š-N¬P_ñÿ#ü{"M]õTñÂ%@ Á„k´.—ü“„ÜÜÞðc—ï&0 g,&ø‹”úi¬œ‚òÚ}¹—T"ù B_þ+endstream +endobj +809 0 obj << +/Type /Page +/Contents 810 0 R +/Resources 808 0 R +/MediaBox [0 0 612 792] +/Parent 813 0 R +/Annots [ 806 0 R ] +>> endobj +806 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [258.654 424.25 269.115 438.572] +/A << /S /GoTo /D (Hfootnote.22) >> +>> endobj +811 0 obj << +/D [809 0 R /XYZ 110.851 704.063 null] +>> endobj +90 0 obj << +/D [809 0 R /XYZ 110.854 583.73 null] +>> endobj +521 0 obj << +/D [809 0 R /XYZ 230.765 371.1 null] +>> endobj +812 0 obj << +/D [809 0 R /XYZ 128.787 167.572 null] +>> endobj +808 0 obj << +/Font << /F46 637 0 R /F51 451 0 R /F36 327 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +816 0 obj << +/Length 1011 +/Filter /FlateDecode +>> +stream +x^¥VKÛ6¾ï¯ð¥€Ä I‰zô–Åvƒ(¶@|kzЃ¶ÙJ¢AI›î¿ï3ÒÊ[§Ћ=äÌp¾ó îwï“l'+•’»ÃDÎ +•î2•2™æ»C»û=2C¼—ŠGÖµÚ¡8YÚª§jQ›iD¡ªGÛ͓¦UÛ:=’ê+W|ÔzYpyš­&$¨‹ÿ8|~ÿÁEʒ4 ¸ønŸ(–Š% ñ^pΣ‡jªð„§úOÝ Á®»=Z Ø¼U ¢Ê€ñ-Kâ^8ÒÈäƒ[§ÎÖ0J ùMƒñ¥¯­µ¹¤úÎÅfæ®=^iåÆEPÝ{­ÅÿšŽèl…ìíߜñaÓ§£/Éã¨'ÔFUÝivk„–!õ0riQé«z +=,±n¯ž‡OqÊ!LX„‚÷ꚴøµ°> endobj +807 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [344.607 650.662 367.521 663.348] +/A << /S /GoTo /D (figure.3.12) >> +>> endobj +817 0 obj << +/D [815 0 R /XYZ 109.854 704.063 null] +>> endobj +94 0 obj << +/D [815 0 R /XYZ 110.854 634.174 null] +>> endobj +814 0 obj << +/Font << /F36 327 0 R /F47 359 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +820 0 obj << +/Length 1421 +/Filter /FlateDecode +>> +stream +x^¥šMoÛF†ïú<Ԁ]HÛýþHЃ4@æPØ7×ÕR”•Èrëþû½äš2×#9„0É×ï<3ܝ¡yq=ûå³v•,#«ë¯pș7º²F3 §®WÕÍéÕfY×g iøéf»Z׏g·×—³ß®g?f¢âðO¼Þ§8³VWw›ÙÍ-¯Vpò²jNUÿ¾\¹©”÷ÌhÇuu5ûsvјPöÀ„s,_Yn˜W"šø|ÿíi·Ž.êÃÙB ~zþ÷ã¶~Ú·'þØ.WñhùÐ\í·ÝmqÃ{±|ibŸ‰\8y)*ããÁ¾ GŸâβ+¶mb ûåþþîÍV[ɦ2 "k êÇÅêíÝ6;ÑŃ$ˆì!“ á·è>÷®FâY ‘x’5žRÀ¡åy·Ýl w-ι´Rh=×W²— W.™¥¤«{Ý +ôiHݏÛZ¨ž2i¢J YêGuXõøÆBµ0LŽ†ÎM¸AÃ;J£ƒY¢ÑѤk¼SÉ ÷™¢š#Šžî%ÃÕ)æ¤'h U¯a?æV櫞¶_×ø†M·I%YIe?òÃ'Ý°é2)4I?íñJ< 4O²ÂÓ*f…Í<€sîçAJ¶‘AªaRQÓú¨„´@#!%k H5LmÝP°‡žAHþµ„ª¹A4°…EÁD#Ûv«Ù8ùm\X~}£9¶ÒÝd’AÖ@’Ñh³ý§yUâc Íۓ“Ýý÷æÉ<†w²^>#Ù"ûÊdKÀà+4 í.éƒ ¬tÛ×DÇÞº7=ºÇ o²RÔ +îã”^Q¿­ä#“ÝR&}j>­ÇIx 4^²‚WÀ¤¡ÜñžŸ5薆xE€ŽÚLëH:¼%^º‚—+X5†-yÜ ›Êæ}Ž•7Fù*/~î(w”àDh_yˆÎ¶ „zùCÒ˕+msáBÀ]Ú°…¬ÍÅù—OVÇïÏ/~Ÿv˯ûxȈÛöóG)ۣ˧ú¿x$çíÿ\È·W ÷A¤¿òþýpòØ +endstream +endobj +819 0 obj << +/Type /Page +/Contents 820 0 R +/Resources 818 0 R +/MediaBox [0 0 612 792] +/Parent 813 0 R +>> endobj +821 0 obj << +/D [819 0 R /XYZ 110.851 704.063 null] +>> endobj +822 0 obj << +/D [819 0 R /XYZ 110.854 646.033 null] +>> endobj +522 0 obj << +/D [819 0 R /XYZ 240.072 620.276 null] +>> endobj +818 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +825 0 obj << +/Length 1624 +/Filter /FlateDecode +>> +stream +x^¥›ÛN#G†ïýs³Dv§Ï‡"ehW!;……M„d0k¼ ûö©a¦›1Ó*»º…„<üT}US]՞ù6 ‡/ÑÁ™7º±Ö0ç\s}7¹¼âÍÞm`¬q¡3¾]AùUW\~}™¦9¶ Ò­É„ƒ¬…cèÑÝúßoá¾óä·ßÿ¸8ûðק/í®Ê›ÍíC»2í}³™?!q#[˜‰›‚1¢H!±.Wˆ¤‰ +g ӔR‰óªçܱ? Ù.[¢M²F+ºvW¶%×hD‰G…Fâ!¡V”ñ«ÇÏYfß ´©„na†6YËg S‰u‡×ê=Ušl[&Š<0áËúĹF#r&k`œL%RŒ8禼2“­–ºm]VÝ#á*ž0]!܊òL×Q5_Ó-ÌÐöœÉPÖ¹$Ú5‘6Y£ía.‘/ë :e£„ÉVe[ÓÞ!S"‘+endstream +endobj +824 0 obj << +/Type /Page +/Contents 825 0 R +/Resources 823 0 R +/MediaBox [0 0 612 792] +/Parent 813 0 R +>> endobj +826 0 obj << +/D [824 0 R /XYZ 109.854 704.063 null] +>> endobj +523 0 obj << +/D [824 0 R /XYZ 199.724 655.389 null] +>> endobj +823 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +830 0 obj << +/Length 1508 +/Filter /FlateDecode +>> +stream +x^¥šMoã6†ïþ:4 at RØ,¿?¶è!Áv›C±¹¥9xco@Žw§Mÿ}G–HK13öˆÈÁB$½žy†ÎмºüòI»JŒ‘Õí7¸äÌ]Y£™„[·‹êîüf¹x|Y]̤áç«õbY?_Üß^O~¿ü˜ˆŠÃŸØ¿¨8³VW«ÉÝ=¯póºjnUÿîž\UÊ{f´‚ëºú2ùsrÕX¡ìÀ +'˜²²Ü0¯Dkŧǿ_6ËÖ +ńùp1S‚Ÿ_~}^×/ÛîÆçõ|Ñ^͟º‹/Ûu|í/nxߙ›Æø§Èø#ÓÜUÆƃ}ë +>9$œeˆíE”L†p’ˆ̉I–8ͼ˜<®™Ö¶OֈY˜‚`˜ðª%»|Ý.7O3ËùùãÓ¶½xÞ<ÜYc”½ÿõŽâðÅZ°)‡¬‘ñK Ϥ³C¿XtLðÖ¡CGtЌ‹1p3²>A ÕÌ)‡hñ¼=!@d›2"k`êû5 8„ˆlD&@ڀ=Ž Èp #ò7*çYບI˜ú²}ìçöNU½ßn°’­Î„¬…°ïù0„à B²™*Á ¬ §k`!T°¼hÓ:ò¼oÞ̱ú´,H6*!²¡¾c¬^?ÌkPt‰وL„„cÜ¢kÝû0"Ѝ”¬•Þ Їõª) dÇs*­ZOuvWÊ8»¡f ÓÂWš)Õ½.9+uCَ@2 |øti3` ´H. ÛqȔ®Œ×/íxýэןšbðl³@Ò+L¥or+n?.½$¸%.Yƒë Ìh‘ƒÛËø~2Ý  \%³×9'¸%nFâQ ‘xhÉL t»XVÐPvË°ßɦ¼7£[’¡JÖÀ†lߛ7½Y}¼9£Û’‰Ž„º{ä9‹ÄµD#r%k`\•„i¬r\{ý¾}N7(W at aÌÇ n‰F„[ ‘xhD"@Uk(E– +º]£lƒ¦ÞËG‹º‡¼éØ`æ +f¹<èÑjZ“F·)?EóÈã‰o‰FäKÖ@ø +-…~¿(ÃË1º)¬^yÈ a-шXÉV§Ù~×qtŸF·)ÏWX´ª;~dô‘÷Œv‡q›Ó'!ï´Ã¸` X_Á¸õ¶Ktzw†e÷d`ÁJÛ<8ð–€^a&ëÈåÍG«Ûö—W´7óoÛö’ƒyÌv‡s¥ì®®_êÿÚ+9í>¹oŸîƒHg +þÀ]{" +endstream +endobj +829 0 obj << +/Type /Page +/Contents 830 0 R +/Resources 828 0 R +/MediaBox [0 0 612 792] +/Parent 813 0 R +/Annots [ 827 0 R ] +>> endobj +827 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [472.697 516.069 483.158 532.508] +/A << /S /GoTo /D (Hfootnote.23) >> +>> endobj +831 0 obj << +/D [829 0 R /XYZ 110.851 704.063 null] +>> endobj +832 0 obj << +/D [829 0 R /XYZ 110.854 646.033 null] +>> endobj +524 0 obj << +/D [829 0 R /XYZ 233.766 620.276 null] +>> endobj +828 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +836 0 obj << +/Length 1308 +/Filter /FlateDecode +>> +stream +x^¥šmOãFÇßçSøÍIP%ÛÝÙç«*õ+СÒ^ÞQ^D$WE +B®å¾}ÇØk¼šd¼B"†˜?3¿ÿxwÆñÃHU¿T¥”ÁšÊ9+¼÷ÕÍíèêZVs|ó¼ªßªþ{>ó¶Ò!k4¯ª¯£?G泥Ÿ?k‡ +"Z Õô[¥´àtåŒOÎ««“Ï˾o§°òD åޞN´’'—ëÇåv¹¾›œÝÍ÷ üv·mNú²žÍ›£Ù]{ðu»NK+/óå÷Ûæç˳ÍÁÅz¾Xá»êôzz>ú4=ô“T ´}£Ž¡KRy'"&•’|р…7î 0N€Ïi¤8l BIC‰àéFü;°­Úƒ­œ*'Aí؋§íbsw:qRž,k õÁãææÊY«Ýõ/}6¼ðQ ˆ©Ï†¯‘ÉKK¬DÐûy‰”˜’MBýD,b—+PÀР òW6—7Ó¨|+jB¦|jÞÊëjç×÷Û e!;ꌅl ÊÂÝÌ÷-ÄL ÙAd,´Fxç”…6 +Õ¤ñ¸m—7¯®°Õqk ;¤Œ?l ʟ—´Äj}3[¡9)Âvwp ×à îhH$˜\ Š¥1¸ì˜–æÍú¶n  …9ʘ±!¨rcÉ@+‚çlMTÉk)@ªèÛWØAe|bkPFí&¶_öô¾Â"ãÆc Ò耖h$ l +¨ÂW™ÊGžÇT>;˜>X±±š¡A•¾TB+Ÿ/}ކ½¢wl~Ø}/ù”—»©ï_äŽÍ"ãa+¶ÇYDþzLí}ü3´-6æ0¬7éh—h$Úl Š¶Å«Õö»¸'k=æG•!¬±k÷Ãn t„K4ፎGFÇ°֜ñšZŸodÙC4ð¦~„Úl ªž§ç_«¬ÒìØ2.Ê(T6ÐwœK4g¶ÅYáTªÇ97•Ð+3;ª>aˆØm›a«{"\¤Ñæk„kQ™é:Šæk~„ÚA +ˆÃ:—Žv‰F¢ÍÖ hœKàe$§l’0;ª agëgd†Ht€ $_®…×K¼ÊMoÍr¯Í˜h3ØAåé:K^‡Ø9Bäð;`q(}<ªŽH™P…ˆó_{›È<|>3âv®>q¢ð¯nfP¢Ýðß]|t¦yÒéÝû³æàãfö­}hJ +wí#R+endstream +endobj +835 0 obj << +/Type /Page +/Contents 836 0 R +/Resources 834 0 R +/MediaBox [0 0 612 792] +/Parent 813 0 R +>> endobj +837 0 obj << +/D [835 0 R /XYZ 109.854 704.063 null] +>> endobj +525 0 obj << +/D [835 0 R /XYZ 193.418 655.389 null] +>> endobj +834 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +842 0 obj << +/Length 1396 +/Filter /FlateDecode +>> +stream +x^¥YmoÛ6þî_¡/ä!âø.ªÃ€µëR¤hÑÍ·®‹IµÉ’#Ë}ù÷=Š”’XZÑÔùáÝsÇã}»"†?‚‘<’R 4M£Ívõé3Ž +xù&2¯¢o½ä6bJ!ÁŒ«èãêïÕËËÕ¯çLʄ ÑåõÇ(ÑË"úŸ—7‡V¯*TÌIŸ¯Feü¡Ù—]ÙÔÉE]蝆ug…Þ6yaGyÝÒøc× ÿ`ßé¢> endobj +838 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [316.754 340.897 327.215 355.22] +/A << /S /GoTo /D (Hfootnote.24) >> +>> endobj +839 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [145.833 294.272 165.26 306.605] +/A << /S /GoTo /D (figure.3.19) >> +>> endobj +843 0 obj << +/D [841 0 R /XYZ 110.851 704.063 null] +>> endobj +526 0 obj << +/D [841 0 R /XYZ 173.293 655.389 null] +>> endobj +844 0 obj << +/D [841 0 R /XYZ 110.854 370.946 null] +>> endobj +845 0 obj << +/D [841 0 R /XYZ 128.787 334.72 null] +>> endobj +840 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +851 0 obj << +/Length 1644 +/Filter /FlateDecode +>> +stream +x^µY]oÛ6}ϯÐÃ:(ƒÍñS¢RìaE—¢E‡}4Ú¢P,ÅÑ`K©$·Ý¿ß½"¥(¶Ì„š‡!Cҗ‡‡‡÷^ҟÏX@ᇌQ¢• ¢H‘8ŽƒÕöìýGdÐù&À®àk7r­‰’ê›àÝÙg/®Î~¼X ‰R<¸º ˜$¡,ˆ$% ½Ê‚÷áe±ÞÕùù’+ +ÂôÅùR0þ|ÝT›]k;^mªëtcê/Ó65µ·Uš™ZZÚÊ»¶c¯ÞœýruöùpŒ¡öW!}t6(%,‰\F¨]õ˜ +ł„$:&8'š&`KXsÃDÓ¦m±:_ÂaQ¶¦ÒÔ«ç‡ëá‚I£“`áR!ö°¼…y/ ²©Êõ!™$0O<Â!¥ +Hç’yØ8N©JÑMzԌl+tîÁŘ½ôÄy‘?ĉM€”M&óüÉ@•· U1#t2ƒ4N3›ã4ýN… ›Ð³l DyÛp¥Âø½¦fdEþp&häLéyÔ´xÛpÐ"cÂâÿ8·ŒŠŽ³âf‚ÌÍøïuiàÉۆƒ(¸.PÆÇ_ ˜v˜s_Ü9"ÅÀŒ7¤Cjà.Dä¼l¼gÆۄƒ¸PEGÌEOŠ7š N4>˜Íãu ÅÛÆqV8äõŒ²¹> endobj +847 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [226.551 213.295 237.012 227.618] +/A << /S /GoTo /D (Hfootnote.25) >> +>> endobj +848 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [145.833 166.67 165.26 179.004] +/A << /S /GoTo /D (figure.3.21) >> +>> endobj +852 0 obj << +/D [850 0 R /XYZ 109.854 704.063 null] +>> endobj +527 0 obj << +/D [850 0 R /XYZ 246.056 655.389 null] +>> endobj +528 0 obj << +/D [850 0 R /XYZ 230.042 378.573 null] +>> endobj +853 0 obj << +/D [850 0 R /XYZ 128.787 207.118 null] +>> endobj +849 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +856 0 obj << +/Length 1235 +/Filter /FlateDecode +>> +stream +x^µ™Ûn7†ïõ{‘r M9<ÓA&HÄp¶ÑE$06–%[Ú´îÛw¨=ÈÒR”¸PaÀf¼ôèçÇÙù‡ÌC3F_˜!2°JfZ+0Æd·w½O_X6¡‡W™”ý³™y— kAIAãyö±÷Gïõ¸÷óHhŠ ð;}á“u˜ûŽQu+ ¯ä^ÌÐYCxµËä¦|v¨“ÉrÛؤï +Y7‹ª±¥Ç8ŒM:EÝê6Í*::éÓí ›tM6¾k“Ýø6l’cDØXRT)5Ÿæ»l&;lb’®)À†º'ëºñmØ$Lj°1ÒØVÞxƒ:yâö‘.'ŒE»h%;nÒ·XÂ&9lRQ²xì”ЃŸC]³kÊr*’­¼c‘L—ØjޔíæO ¶älÒ+ѐI C‡ ”ú©lÀœl 5™TI0Úß±E Àq2É1"hè0€®3§øGM%YN‹dќۯ‹Úïßi”6³tv¬¯å¦lfnW?Dú+"r„ê¿<^½CõbSÄ_½~W•úUþ­r+endstream +endobj +855 0 obj << +/Type /Page +/Contents 856 0 R +/Resources 854 0 R +/MediaBox [0 0 612 792] +/Parent 846 0 R +>> endobj +857 0 obj << +/D [855 0 R /XYZ 110.851 704.063 null] +>> endobj +529 0 obj << +/D [855 0 R /XYZ 216.503 655.389 null] +>> endobj +530 0 obj << +/D [855 0 R /XYZ 200.489 354.663 null] +>> endobj +854 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +860 0 obj << +/Length 1216 +/Filter /FlateDecode +>> +stream +x^­XMoÛ8½ûWèRÀ^Ä\~‹ìb6IS$H±Ù­omŠÅ$l9•í&ûïw(Òò‡hٌ÷b“"õ0óÞ̐£óQï÷+ž&„#Æ%MF !)Á)8¢°4ʓo}†ƒ!Á÷¯–åxQÌÊÁ +Ü¿È&“ùàÇèÆᤅ¨qp2¤ "Â×)lt¯deî_L^,§~<ˍê}õ~ö+®“ñ´÷íNrX¼IìRòRïœ&L)$8ƒñ$ùÚû»wn}crÓ¦˜P 1"œeWÅã²2ƒ!OøIéûÁ0•¸7›ÖÍáu™›g?åÂmº,*3®Ç|ƒ »rQûhGß±ÀÞe;­]¶ï2¸i Ú9÷ÕÀk$Àg(e$/Pt—¦UCQÒp°Æ`L£TË£0C +æmÆ¦j;@pâÛC-18X„u"8EÒǙy]˜ +Ȕg¿fEîF Évf©µ<ýÑ&ŠÑ)þûDEc|d\ 4e[>¢ÇÉì~²ãYËž2$5ƒ¹¨4¢K-ª G¸s%^˜XKºÄBtɲé̸ÎÖMU>Üݎ:”‰5$,ŒÔ䴄>cB¯ +"TW–ŠˆêÚÆà©B’±ŒP…–+mÏ ¨Ð *4#û*´Ý|¶³öµÿ˜áT ŠÓN6%/CLP µÂê + Ax—$þuLއ’–H¤,0Hó®k“·>–40,àìFXS÷Âoõs°\Ûxü¼¨êãêPîS…ARïP€ØXˆ+FC´‚¸•*£ƒh¦$âxŽÑ?×w‘mH€ÔhŒýY°åËtöëg“>ÿ5º»øçÓ­ •wUñlÃÅ'Æ»*{ݟñö“)’´u–…Ñp} +ƊëhŒ®SûHîrm#¦›ì¼‹ìhdÃYKÒÎãê0Ù§`¬ÈŽÆè [¤P5È.ٖ̳u ´n¹~£m +ð Wx{Û{ FÃï)+~OÀhø8£áƒrDU벧sS©½0ú‹bs‰q—•ã/1ǜ‡ÑVˆÆèˆðMÇÿ¯Òm_@]¬A˜·õE ק`¬¸ŽÆèàöÙÀY÷‰6˜˜@JÊc¢ìÈZmq˜}ÙyY:ܾÆ8ܽP-—­ëñ¡fpûb&%䯶·Y5€æïÑ÷ƒÓæ»án+¹óòºAÆ)ÈW–³zÌú÷Æ=ËæóåÔän²xÊür欿rØY1w‹/Ò/OEé¦ôó¹_÷ûMiªl‚C¡ÒþèÉTæaVÈC&%¼Ù ¾–flæó¬ú6iÒ_ÌÜ¿Ñ}žãb1ñkãå$[¿õÉr3‡غ¤Á¿<¯+endstream +endobj +859 0 obj << +/Type /Page +/Contents 860 0 R +/Resources 858 0 R +/MediaBox [0 0 612 792] +/Parent 846 0 R +>> endobj +861 0 obj << +/D [859 0 R /XYZ 109.854 704.063 null] +>> endobj +98 0 obj << +/D [859 0 R /XYZ 110.854 666.202 null] +>> endobj +862 0 obj << +/D [859 0 R /XYZ 110.854 623.518 null] +>> endobj +531 0 obj << +/D [859 0 R /XYZ 181.076 597.761 null] +>> endobj +532 0 obj << +/D [859 0 R /XYZ 230.772 468.245 null] +>> endobj +863 0 obj << +/D [859 0 R /XYZ 110.854 256.151 null] +>> endobj +858 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +867 0 obj << +/Length 1787 +/Filter /FlateDecode +>> +stream +x^͚moÛ6ÇßûSèÅ$CÌñ™bŠK×eH‘¡ÝêÚ¢pl§óà‡ÄvºlŸ~G‹¢e›¢}²6 jْ/þx¼;óØa…,cŒ’\ÉLkEŒ1Ù`Úyÿ‘fC¸ù:s·²?×ON3‘çDIדì]ç—ÎË^çÛk¡Á±Jñ¬wŸ1Èf<Ӓ ö†Ùû³ëñç§Åè¼Ë=„ËËó®`ôìên9Ÿ<­üWãÅh°*®û³aqq3V>¾~š Vãù¬x÷C29ÿØ{Ýù±×y܍0„)»;aó0)4Z†áDŒpE(U)#ԏ¾ŠD±Ì«¹^ašäˆp€gYAd¹ê¯Æƒó®¦ôìË|<,®>PE݈2cˆ¡yÖeĔ ¿YßPĚ<«|ü°ZÀ·ØæûΚûäÅ>nr¹ieT<—„S¹=ª[PsYH!Oýá¾% á,o !29L”‰ÄÜÀ«G^bô¼-f»ss?Ÿã Ÿ®NpJ¨ÙG>Oæw“¤zÂØßL¡V"l$SItžôþ»þG¸yÁ«ònAIéƄ$£ÄëMÎÓá0¥ .ÉBê'JYNÐ]“ØrúÓцÁ5¡Òl‹˜Î¿ôï–ó%ù +$]|½`ñXï_ú~ýô[®?i ?õó…WAm41¹nd#BÛHÊ዆¤>#?Èäú˜ü±FYO ­4BLKp,„‰„oêœHæÝb+\òÍÓ5àU Û®éâFé›ë›X…Њ“Ü4 ùÚF‚”ÒDê”kʸkÊ£\­4NL›¤{|¡ÒUœ#„$\J ð+K»Â¾ é>åâ-È3W•±ãã  +|¼ÿÜÄÇÑ#´]½©›E¤€ +m#JpØfˆ¶3Za„”+Y³lH¡m$HA5ËìÆ©aè€8D.†;¯Zïeê± åD°¸JOaÐ&–+L•ØÖr…dZ®-Èd«2ZLIh‰û´%r†6›±ÞF=*i5á¹9Å ñrâXMFÂÉGºÒOîõkP\JO–¹ VøÄÚ.%›cRõ^â@=ֆô0¥UéÑdÕÈûñ#3µ¢°Í^@…¶‘@eà9cWdÅaìÀA+Ž“c6Yï.X3’»Z]À£9~1ˆ«²·8ö}ÄÕï¾9è/ýÕü¾x}˜/Ç®áØφ£‡ü7ó­ÈùÝ£Ájé(¬«V\KAPb´Í$Âg;.Âsu MçY·òÜå>Ô �@Õ&¸^w³8€—!¶dÞ,ýlh lFªó6—î!™o¢g´éR<‘Ć–ÁæŠDÞ }À†¶‘À¦aå–û„+ØÐ6ê±1K‰Íű—ÇˎãsíšÓV p¤"9L)"™Êv#4Œß9™;=%<Á …rϟJUŽJ6¨ ‘†g]±Î1ëÇލü‰Åòén9ªœ5|€€{3}˜Œ¦£™ë\–Ÿ÷‡_ƃܕÅûûù˜OËCŸ‡Õx:þ{ý¥% 2 +žþÛaŒše][߀”:"¸Ëà[Lˆ¬ cô‘òêçWÚÿò«—7þ(eÑ¿÷G&àD–è0õúiòWqÅ/ü+e|÷)f.YXuÿ+endstream +endobj +866 0 obj << +/Type /Page +/Contents 867 0 R +/Resources 865 0 R +/MediaBox [0 0 612 792] +/Parent 846 0 R +/Annots [ 864 0 R ] +>> endobj +864 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [358.185 435.019 368.646 449.342] +/A << /S /GoTo /D (Hfootnote.26) >> +>> endobj +868 0 obj << +/D [866 0 R /XYZ 110.851 704.063 null] +>> endobj +533 0 obj << +/D [866 0 R /XYZ 233.766 655.389 null] +>> endobj +534 0 obj << +/D [866 0 R /XYZ 204.213 410.259 null] +>> endobj +869 0 obj << +/D [866 0 R /XYZ 128.787 178.829 null] +>> endobj +865 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +874 0 obj << +/Length 1838 +/Filter /FlateDecode +>> +stream +x^ÍYmÓ8þ¾¿"@×¢­ñ{bÐI·-ZÄTº“+C³eð~t‘ݤ:Óy×I‘'TàQ¼ü’,ôøãìÕãs&wMà`B)Dú—W§ã |×Ð6ZKm$>ºÖ¹.­ÍIdÚë-tYÇIÞ(çËÄhTî9.µ–ºÖe–äzé_KêßÆBŒ*gú¦¨ªdžzåº0@ 2Âç™ÿ{Ða”Vc³ªÀª{.|[eqš6»í֟7:_èÊ< +xÑu×k?žÆå˜Dðî1ƒS'æEiL~wO%ØIJ]¡.„­uþÄq¼ï&Ç1c^ï8žWEº©5ÈŨ60@¨Ýs±ríj“/¶Ž\ 劏†x¸/¸8C\‘áÁuu9Vô˜àŠ”uŶæä>vd´5Ë mbú³Ø síÆJ½Òei"ÄôÚ´½i»³M>ø’uƒ—`Á÷.2‰D‡ÓŽ9‘‰èïýÃi‡A$òæLqÀ©Ç}` ðqÑhƒ/ãåÁS)*„ü1A7“òW½á/ò}Öã ÐÃò˜Sû@ÑúcESP~  +8Px¬¼÷ã½Ë<µß¡G™ð¬ ¶p˜4ª”-kvj+yáÚêF/Æd”ÄÞ¢}m{ëµWuIZB-ãŽB¼É¯ëFjM< Á­<·™š ³æËvµiè8{ý¶+^¼;ï•B›*ž§à²l{ËvÙ[?K§÷ËT/âùÈfŠµ•™¹ŽRxÉ]¿ýøUö~ª(u,ü  mnüPញ|1u=i‘_›Û5ªüg6ôeñ·$3.7ªŒNæIÝEÚ2©nÒxay5]Ì֎ŒÒí^œº»˜Œ+endstream +endobj +873 0 obj << +/Type /Page +/Contents 874 0 R +/Resources 872 0 R +/MediaBox [0 0 612 792] +/Parent 846 0 R +>> endobj +875 0 obj << +/D [873 0 R /XYZ 109.854 704.063 null] +>> endobj +876 0 obj << +/D [873 0 R /XYZ 110.854 643.75 null] +>> endobj +102 0 obj << +/D [873 0 R /XYZ 110.854 265.369 null] +>> endobj +877 0 obj << +/D [873 0 R /XYZ 110.854 216.708 null] +>> endobj +878 0 obj << +/D [873 0 R /XYZ 110.854 146.216 null] +>> endobj +872 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +881 0 obj << +/Length 1435 +/Filter /FlateDecode +>> +stream +x^µY[oÛ6~÷¯Ð€‡ˆãý’>%ë2¤Ø¶ùa at WŠ-' +|Ie¥m:ì¿ïP¢_:L5À°)‹â÷‡‡çˆç“яL&„ #M&shb¤O¤àˆr•LfÉ»tµ®ÇS8-Vëû뛶]¯áWš4ŸÍªb³qÞmãªÊWÓ®g^‰N¯‹3 LnŠª˜¯«âdœqŒÓ|ïèòøL{o¥ÜŒßOÞ&8ÉGœË–å4_Lïy]ÌÆ@vLDúånQNËzñ`ŸhŒUÈ(L¬­Æ ÎŽÓí”û^[’hÄ¥N²­~`#8½°++¬ÉP)¡ˆ«=Tbwër½ð^¸høá`/¤&Fü@(£iM[þ È6+‚šÖúëµÍ ­×üš_‹× €‚ ÛvƒhCÃÅQF£)*͍DF§ëh# •Sñÿ)ŒÆ3íQL „YŒêOû&‡Z’ç„Ñ!P;£z½¢Q{ôR ’ÉÍz)‰¤t›l³tz¢™—l+$äh*>¦—m³/÷bEƒö‹%¨ø¶ˆÉìB‰ÙË‚CÙo„ŠÍÄ`àWû6È.Û6 sK GEóO‚SqÔ/#—cúœ?+øZÕÏ=U † ¤H„hœgŸ"Ômʾù± 8¤H¨fHH§ïÖÑÈãL(˜šd Š·Q]ÎO,Uæ e™NíÉBÓº.VEÕäªY].‹¦ŸJKׯܴ¿³¢.ªe¹jqdZßt#5GKMc'±•ÝÑPáFÈ+×ïsYߔ«¶M9?q·+endstream +endobj +880 0 obj << +/Type /Page +/Contents 881 0 R +/Resources 879 0 R +/MediaBox [0 0 612 792] +/Parent 884 0 R +/Annots [ 870 0 R 871 0 R ] +>> endobj +870 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [209.288 636.216 219.749 650.539] +/A << /S /GoTo /D (Hfootnote.27) >> +>> endobj +871 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [391.678 263.413 411.105 275.747] +/A << /S /GoTo /D (figure.3.27) >> +>> endobj +882 0 obj << +/D [880 0 R /XYZ 110.851 704.063 null] +>> endobj +535 0 obj << +/D [880 0 R /XYZ 274.108 611.456 null] +>> endobj +559 0 obj << +/D [880 0 R /XYZ 244.149 432.973 null] +>> endobj +883 0 obj << +/D [880 0 R /XYZ 128.787 291.907 null] +>> endobj +879 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +887 0 obj << +/Length 1830 +/Filter /FlateDecode +>> +stream +x^­šYoÛF€ßý+Ø ¤ÂÚî}8/Iš:Hà mc ’  -ږ!K¶$'=ÐÿÞ!¹\SÖr­¡%­gf?çZÝ챌ÂË£Ä*™i­ˆ1&;½Úûô…fcøò]V~•}¯V^eÂZ¢¤€ëiöqï·½WÇ{? + ˆSŠgÇg³œHÊ2-)q°ôxœ}NÎoÅpÄÂíÁp$ü:_NV“ùlôv6.® x™­êE¯ùìôb2;¯ßþ<Ã/Çïö~9Þ»Ù´[”»o·p6.…&BË`xDW„R•Bý>ۛW,sÄi®«½sN,u 09Vï}r6iJŸ©¢?äðÊ6w©&ÒéÁ%‡­²u#VÅr5è¥!ϊü¯ýòeÓ% áÌö°#” ‚‘àÉ4ÑàfÕVþMà{¼Ê@¯­òröÏp$-°cg hXíf”êd/ZF‚•D[ïCWóoùÉœˆˆ§üìśÇ÷Ÿ-ƒÇT§ÏkWÿýëŸVÕòk½BË4´µ›Ô”u„‰äóÿ 5¼ŒnjÊqb¸÷i‘߀ópJX%1U‚]'¼M6b£íÇ7°AËH°±rŒ÷¨Ë«ë›rûY™xÀØ#FÊú»«/qZ?@ mi„Ãy?êZF„³DÂ'J[b™÷&™“•¾DI`@«`P¨ e$~ +ADibý¢vl;аµ”òƒ+´Î+Ɉ`ÞݹNII¤‘Êðÿ¬Ð:#{„ŒöÞYZÆÃŗ‚ZÅiLîL+mc„äëúñ¬Ð2¬¸$Òò{-4ïòg¼…°íâ® +l<‰4üÐvGøAËãd¿{ø¡e$ø1è顎©Ëò%TQU¥Tº™.æã|•ï?ɏÞ?Ùq½˜ŸŸL Ê²Ý„Жm*-s¶_ÛÖÂˈ¢P sØôïÆ{ɧ“sϧ^}ƒ…îu£HÜJD €PÖ궴:uÖ¸I…¼›ÜÜæcytš/ Z½AE&´¥^ú]ӏy œû«w·Ó¿ë+îO Øòû«˜9`¡æþ£Á@ô +endstream +endobj +886 0 obj << +/Type /Page +/Contents 887 0 R +/Resources 885 0 R +/MediaBox [0 0 612 792] +/Parent 884 0 R +>> endobj +888 0 obj << +/D [886 0 R /XYZ 109.854 704.063 null] +>> endobj +560 0 obj << +/D [886 0 R /XYZ 244.555 655.389 null] +>> endobj +561 0 obj << +/D [886 0 R /XYZ 282.405 411.056 null] +>> endobj +885 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +893 0 obj << +/Length 2072 +/Filter /FlateDecode +>> +stream +x^­™}oã¶ÀÿϧŠ‹å»¨Û0´½.[)zÛۀ^qe&V϶½\ ûî{ø"Ŏeåè X$E=/?>|HQw$Âð#!)Á#)JÓ4*6¿üŠ£%Ü|™[Ñ½í¹‰˜RHpåuôîâß__|sÉ$H@™4º¾‰H†‘ÌT$9Ft½^F¿Ä—åmWëYBŽbøÕ,aÇo«¦lËj›ü¸]Ꝇ¿më:½»/Ûbåʯ«¥žýzýæâ¯×wÇF³‘=5š ½Õœrı¬BÂXL ÁÞÉ}ω2”I*­ã”"…3Œ2âo¼ãø=8‡?rì ÅñL¾ˆ”aðVÚQlvk`ŽÁŒ?àù×:ÿýØÁ¢’aÄPÂPˆ žD" 1fýøï»/W9 ÛWù€ãÀ¡«¥¾É»u;.Ԇr˜ œñ³d (‚eL°ÀI5Fô¹0 +6â†P"lrr? #\Æi"£(¥}`Ü~~`„1#…L§Î:À–1CaX.|dlªOù¢™%D™Ø@Wm¾Xëoÿöóõϗ—ó¯kB\ü“»üóÔü ù×Aò rÁƒ…Òóèä‚eL“ +)âÃh­ó;?§Ì +aX`¬ŽÜi6Á6° Ñô<¾›`l„DJAug¼‡Q +‚Ò~KñGwe©ŠöšBrš«ÏlüDN#ç Ä+C°úc K 'ǹuæHÚ¾}~@òÝNC§„Qþô×¢Öy㬤i\ÕKí»T¾‹Ó +«Íx%Šß>2µ]¬oPÚä͸j' müÃÆΆ4cì¶zFEüiFDlôS!âU>£Ø7¹–…Ö[WêÇynªi¼0=»ÖÝ3öÂ3§¤Ü«ÚÙ¹tm••+Á|ëíŒðþq3¦ÚÍ­éÈ8#â¿WÆÚûd̓G8ŽÁDFÒ=«æñ²r×mÕºÂ`”­Yô˜yôÐðÝO?À[—-æu±*[]´ö±iYè"ï,gx¤q³Ãv<Œ.Û¤ÇLîc*bÃ\kkî-ÌI]·9È~;Ì.Óãµ»<Î.SÛtMëJÖ"S°N˜ÂJç6¸Lù=Æt­Ýld¶3"í>;Ûþܴ˼¾E«¿Œ¥†¤ï}8·.£ø`6Ŷr×L—>}2#u”§¿iY›¤dWª¨Ïqûšþ½² )$7ßt[âgÛü£Y¦¼¯-y26æɲqý +Hz9C‰$dbÜ®º/ŠO¡0‚¤zùÉ í45Ú7X(>ýMŒ Œ’ôÑVmn¼í6 ›  «×#É*˜6ƒ@}W•6w“à 0´ «ÏiP6ºûyaəšÍOpÛM¤¢­j×>„er¼ +÷«‘MîpäD­}Ö>¦ÜÚgŽòô„…G¨Ãµz>nRØBø1$ûõéÚÆ;$ß á%ý„!™ahכ²mí|ƒŠUââªËòÆÄɍ®]BÓp†lº5•k̽,;„Ð^E·39äÁµyћ±.·Ú÷¾/ÛUeó¤1gÛ´uçdÛч+4Q +ьG O¡þ8Aà‘Ñ+?ÔùŸáæ¸IW~O©/½éÖ®D½÷ú´I_‘á0ìÿö) +endstream +endobj +892 0 obj << +/Type /Page +/Contents 893 0 R +/Resources 891 0 R +/MediaBox [0 0 612 792] +/Parent 884 0 R +/Annots [ 889 0 R ] +>> endobj +889 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [127.417 343.162 137.878 354.896] +/A << /S /GoTo /D (Hfootnote.28) >> +>> endobj +894 0 obj << +/D [892 0 R /XYZ 110.851 704.063 null] +>> endobj +562 0 obj << +/D [892 0 R /XYZ 252.852 655.389 null] +>> endobj +106 0 obj << +/D [892 0 R /XYZ 110.854 326.674 null] +>> endobj +895 0 obj << +/D [892 0 R /XYZ 128.787 160.897 null] +>> endobj +891 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +901 0 obj << +/Length 1756 +/Filter /FlateDecode +>> +stream +x^­XKÛ6¾ï¯Ð%€ Ä ß”ÒS‚d‹-’6‹öזw…豕ì}üû9”lÙZ%jöbÑäp8/Î|œ×g/΅Ž#©R<ºØÀ’DÉH+I¸4ÑÅ:úo³¦%‹/ï<µ!©¡ÌsJ8l“Dˆ)¹îɘ.9Ñ©ˆ–,!&‘HùÏuV!­b‡´‚%LD‘êëג«QžRÊ{º¼],¹¢ñmÛlcæn\ŶÉíe‘-m³`I|µ+³jû×ó-~ÛëzWt{‹£ñû±ŽLãËìôŒÚë-SEwJ"¥F™Ú­]}#‹¥¤iü¾*`G"âʖ°yDñT’4å?¤¸ä¬£;Ô§ÅJŽò÷Æy…ß&[0_å-øglØÞ.X|“­òϔòƒ]^M&‘ìXÏlµÍë + "'ÂÇÊÙۋ³Ϝ 4b}\)°””,Z•gŸ¾Ðh ‹ï"·ÝyÊ2IB”0.¢gž½ Ra…S†MCžçW»&ë¤ìåb)À}œž¶«£¦ª›jÛ¼ºÂ‰·÷¶¼)ÂÞ»|{£¿Œ±>r^X×ëhÊ‘ ”R‚$†k*Òd¯ª“ŸõšŽð)Ñ\Oñ+si¸0N M!¼Ÿã÷ò—SU$Ä$eÿGŒU8\‘d‹)Mà«XH$EíÜèTX×»KçE7.ÖSú̕eDˆg#ä Sú0E¨)ôP‹28§šRf¶$§ÚÈTžÌ±È”6¢šóAóZì‚6Ú̗dD›„‘DNÞ¼Gyôrü^m`ƒ™ÁcªÒ0p35»‡\V¡1oë|£Í®Záè3Uô䂏Å՘w!°ŸMùh¶^#¶QT<©?Ä£—ã'xôr¨6TÍà1å#ÉI"B†º£óBgùÎڗϻ|Õ]ŽîÊÏ ³W^Ðɼþx‰ +]rI˜8¹(ý”‡+±ª"€î Öœ¡1úÁ)”6(£@i0N 2Õå:wÍ%Oâ¼tíÇ"ÏÂt³Á‚‹"7®}d¸QÖ^(ײ…^±ë88Ãuùh/ƒ÷}*ûÂ3(²{*¨tÚݹ–µçéÒ O´î@ÎéÍí&±‹èæíçpS€/à´%¦>G=&\V-lÛ]®Sß¤»T*v+endstream +endobj +900 0 obj << +/Type /Page +/Contents 901 0 R +/Resources 899 0 R +/MediaBox [0 0 612 792] +/Parent 884 0 R +/Annots [ 890 0 R 896 0 R 897 0 R ] +>> endobj +890 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [130.11 653.131 140.57 664.985] +/A << /S /GoTo /D (Hfootnote.29) >> +>> endobj +896 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [146.715 609.793 172.618 620.011] +/A << /S /GoTo /D (subsection.3.2.3) >> +>> endobj +897 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [170.626 178.719 193.54 191.406] +/A << /S /GoTo /D (figure.3.33) >> +>> endobj +902 0 obj << +/D [900 0 R /XYZ 109.854 704.063 null] +>> endobj +563 0 obj << +/D [900 0 R /XYZ 199.192 585.053 null] +>> endobj +564 0 obj << +/D [900 0 R /XYZ 200.101 384.043 null] +>> endobj +903 0 obj << +/D [900 0 R /XYZ 110.854 237.66 null] +>> endobj +904 0 obj << +/D [900 0 R /XYZ 128.787 143.661 null] +>> endobj +899 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +908 0 obj << +/Length 1355 +/Filter /FlateDecode +>> +stream +x^­XKÛ6¾ûWè@"–oR¹e›h€ hãC4(T[ö +µ$—’“Ýþú9”W²µÞ.²—M9ß¼Èoöfµøá½Ð c$WŠ'«- )±J&ZIÂ¥IV›äsúwÓ.¹J¿5ˌ+‘ö­ÿò´)ýì×%Siép©X¯ËCË…[2›îŽuÙô.Š®+78®s¥?`Wu}éºå—Õ‡+µÝbØb‚Ðh- Ž°7¹øiµøgá]Nvªe)ä§JÖõâóšl`‡¥ä[¬a-QRÀxŸ|Züº¸¹,5Î-áãJi ªÒûjwt€L~³Ì£éog™KÓOg™KÓ·>s½•BÁ!*\-c)L` /ýe띷íÊþÒP˜¬‰â’äúÜN‘Û“¡¹& +”Mìœ&-×Êì×k™¹»©.Õ +Øf•QPÂ.ü;Ö âɑ^Ø1. u ìT/+«ÌXb˜™&Ç+×]A(sÊ_!¥ õÚg ÜÜ]Ah‘\|'B¡ˆ¡ +ƒ¯ŠÏÓó!ÌZžC\_ƒ¨5”‘}!ˆ†AÎÄ2âòiˆj€h¯ Tn8þBCQEÏþ4“ó+…%Ô^-Ñg ”rµÊGJeà]]Ó+¹€|!„Ü3!>R+@dW Ҝ°ü¥02wb¼xµœ{¢g1¸˜á?}E+rIŒ|vÝÌ_ËÂÂõ(ÆnRW4ÃÃ'è÷^*<‡ÃøT3·3e8¼·B+’_h}ê¹ú:æNÃY¢3d§b!î.÷et +ÖG‚ɶ‰«]ïŽëI +ž—!4 +ò@MSúA•e‘fYš¬óç«(`, [”¢x‚÷ÏyKæ„OÜU¸Ýœ·$ð"¨ñ(Wk×B­IÊ##?âgSþA)vqxêµeSÃ<· p} °ƒ%±"ÿAô4pD86¾»jDrãRüz”¾(¯V¤¦W) S +ú •œ³VÿLû¦Êw ,03®%¡Ã[6êÇr ‹@AÒix’ÁÕÿíh’N·Kà´Å:4Š&4Za{* î–ZW ¶U&-+½‹2Q6ðٻþu˜_ æ]c›9țIò<€äÀ@ô8HãÔyƒ7žÅqâ„ÖÒ¦­›ÕfÛGáBÊ0иsl¶ï:ŠÓ(F°)ꡕ¼èžaj s?¬Ç=èˆÛâ؝ÚÐÓyãCpfÚmg³MëÅÿàr幬 Ö"òTÅgæ2Â@$ƒ<‰DâíÇwðb‹ró3Þ¹bA'•ó™ó8úpÜGCùëø¥ŒŸK1ó†É!ãÿu¶ô— +endstream +endobj +907 0 obj << +/Type /Page +/Contents 908 0 R +/Resources 906 0 R +/MediaBox [0 0 612 792] +/Parent 884 0 R +/Annots [ 898 0 R 905 0 R ] +>> endobj +898 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [360.236 650.662 370.697 664.985] +/A << /S /GoTo /D (Hfootnote.30) >> +>> endobj +905 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [313.68 278.583 336.594 291.269] +/A << /S /GoTo /D (figure.3.34) >> +>> endobj +909 0 obj << +/D [907 0 R /XYZ 110.851 704.063 null] +>> endobj +565 0 obj << +/D [907 0 R /XYZ 290.355 570.587 null] +>> endobj +910 0 obj << +/D [907 0 R /XYZ 110.854 323.078 null] +>> endobj +911 0 obj << +/D [907 0 R /XYZ 128.787 272.406 null] +>> endobj +906 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F15 638 0 R /F47 359 0 R /F71 779 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +915 0 obj << +/Length 1638 +/Filter /FlateDecode +>> +stream +x^ÅXMÛ6½ï¯ÐQnc†ßÓS‚4ÀÈ¡èޒÅB±%[¨l9’½Ûm‘ÿÞ’ÒJZƉs)‚¨áp8o8o†ò—+–PøÇÆ(ɔL´VÄ“¬vWoi²†É÷ N%Ns—ˆ,#J +×ɟW\½¹¹zùNh°@¬R<¹)N5áZ$ZRbAõf|LßU›S[,–\ÑT!_-noÞ¿|§Øx¥æ„)¶Ý’ûü®®º£Wœn¡á½ÚÍ"£éã!Ø~[¬ê¼ÍU³Ç…W¿ß\}`rªHf3ØGN³9LS=NTÕÜ8#F¨%V³sF@])õ8VSÄƙщEn•Gt4ë¢\,5¥iwlO«£ÿû’Š›Ÿðæ9"eQL]`#†HÀñe-ɤõˆNû®Ú싵‡QížÍá®)Ë®8þöm`—;–1BŸeõOâÊ‘TœÅUþ®K}ŠÀÒrT^`ã.lUY ^S­ÑõDÀNZ%KN¨ ˜q†0#’‘¸¹/Ú²nîòvE~ûŎGÀ+(æ,‡/+™Â5È=}`+zŒç{°&¨Ã¼÷£¼vgƒÿ叝—ëüXôª >•ÿX"‡ƒ]8DŒ¨>Ìí]vý¦§ ݂}Ì÷qâ†Cy–yÜÂeZM3o¸7EïƜ!',L<±_¶M½^°´óoÇ^`Sa÷^aøO??‹ [¶Í.^•°,±~ÛICŒyi5±ÙPÅ\¬ƒ'.3…`®îOÂu¨óÌÚôa[´.ô=ÃA6>8gOnÀ“Wuþ¹J›b_´îåpjMìÌ2¦§%u)`f\:Ö$v´×˜ÉƦ«íã(¯q×ìÙFfºQçEÛiqÉç¢6=Îm~ý5’#šSUXïξdôaI} +¯2‹¹ÿ‰*ê ®Þ£cpjÃ!됰“ƒ…^;(`UŒYɈ~ÊÐ,šÄЎœÅâä€k—bJŽò,9 %ÎZŒàvDA9:/÷ÌtÊ ˜pÌ+endstream +endobj +914 0 obj << +/Type /Page +/Contents 915 0 R +/Resources 913 0 R +/MediaBox [0 0 612 792] +/Parent 884 0 R +/Annots [ 912 0 R ] +>> endobj +912 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [139.123 126.003 147.093 135.897] +/A << /S /GoTo /D (Item.35) >> +>> endobj +916 0 obj << +/D [914 0 R /XYZ 109.854 704.063 null] +>> endobj +566 0 obj << +/D [914 0 R /XYZ 268.418 655.389 null] +>> endobj +917 0 obj << +/D [914 0 R /XYZ 110.854 481.314 null] +>> endobj +918 0 obj << +/D [914 0 R /XYZ 110.854 196.233 null] +>> endobj +919 0 obj << +/D [914 0 R /XYZ 110.854 160.872 null] +>> endobj +913 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R /F71 779 0 R /F15 638 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +925 0 obj << +/Length 1294 +/Filter /FlateDecode +>> +stream +x^­WßoÛ6~Ï_áG›þ`ÒuZ /›1 X†@±)[€-y’ÜÌýëw)YR¨¸Iûēt<¿»ûîô~yu}Ç䌤… ³e:#T 6“‚#ÊãÙr=û;¢h¾àG¿ûñ6ó–Ÿ®ïéï’aBgØmȏû‡ÍÁé ­s‰˜f­^]ÌTáh[ìÖV"Q½5N+­hë ‡QíÀ±¯Zp¬lÁ±ë=ƬHê,ßø{Ù`¬ÝÓ ÂZ Qq¨!¯Á‘"z¶  €µS`>þœB"Sfé ð8zÚð¯t ]ΉŠ6ǽÉëʽiíÄ,ob/FžqFpô1wß\6€°J*s‚–`Œ¨†ÐR >çãnñnsx(Ò´2µÛÄE“Ґ„ªÅùS!B§²UáʛV +GLvá‚Ë᠇V”ý෕1´Æ’Zô¬±_ +ҍ·J*”D€DŒ4WCHŠ2ä[¬‘¤Üg€èÀK(x óÐ})Žˆ×£—þ(ôˆ¼+Êf@;@œ×áe “žõô%ëJ"wÉ ð .¢å6«î–’““Kóï1+-¡R­ŠÃxçäØÓRmá>$n©ÍþP”Ié÷îŠU²ðq‡4\zKVXSxέ–Àœä;œ„ÆS&{S»&šMߊ›~dÖÃÝëÌE”ƺ}Õ§MÄÎî¬ÜCQ¶jÍ-åã1è ë(Ùe›|ï-ãhéâŒÆ¶å´ZÊ}M ÿå܌á¡×ŒÇ½Æ‘¯+:ÒbïÊ­­ì`ãÑE°^”Š/¦LwÅ4‹ÍtÃ+endstream +endobj +924 0 obj << +/Type /Page +/Contents 925 0 R +/Resources 923 0 R +/MediaBox [0 0 612 792] +/Parent 936 0 R +/Annots [ 921 0 R ] +>> endobj +921 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [188.605 509.193 196.575 521.556] +/A << /S /GoTo /D (Item.35) >> +>> endobj +926 0 obj << +/D [924 0 R /XYZ 110.851 704.063 null] +>> endobj +927 0 obj << +/D [924 0 R /XYZ 110.854 666.202 null] +>> endobj +928 0 obj << +/D [924 0 R /XYZ 110.854 620.254 null] +>> endobj +929 0 obj << +/D [924 0 R /XYZ 110.854 505.208 null] +>> endobj +930 0 obj << +/D [924 0 R /XYZ 110.854 423.016 null] +>> endobj +931 0 obj << +/D [924 0 R /XYZ 110.854 362.493 null] +>> endobj +920 0 obj << +/D [924 0 R /XYZ 110.854 338.084 null] +>> endobj +932 0 obj << +/D [924 0 R /XYZ 110.854 298.483 null] +>> endobj +933 0 obj << +/D [924 0 R /XYZ 110.854 274.822 null] +>> endobj +934 0 obj << +/D [924 0 R /XYZ 110.854 215.89 null] +>> endobj +935 0 obj << +/D [924 0 R /XYZ 110.854 191.883 null] +>> endobj +923 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F45 636 0 R /F15 638 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +941 0 obj << +/Length 2007 +/Filter /FlateDecode +>> +stream +x^YKsã6¾ûWðÔRU#o‚sؔ'ïzjw+›q’C&5Å)™YJԐ”ÿûí@ʒAÚÌŤ€&Ðýõ»ýîöâòZèˆ1’*Å£Ûuĸ!’‰H+I¸L¢Û<ú-¾½+¿ß~¸¼Vì)-DJQGtŸ}ʍ£;=S&Ĥº§Ûf«¦^,%ÕqÙâ3‰í!«ªG¿¸ÝWŶØuEî²Ö?ñªÞî˪hÜâ—§ñ¡¬ºrç©v¹£+LÅ.‘¡hi I©ˆ–LËÚ1²R¼ƒ§péŸIÜâíå'Jy¿³®›m;¼º—"[Ý9ú}ÖtåêPe~§{Üî—i|]nMá–Ê_äÏÊü}Jë·¶ŽYzƦC#ëÊ™T4®×îمՒ*’jñ +µhB¹9Q Aº‹n/¾^0Ø L‰Q2Ò4!"5Ñj{ñÛï4ÊaX…­èÁRn# +‰WÑNjÿ^¼ X—JMy¤ 'JKwó+1ãŒ)è˜"LûØÿG†>H1VuÙꀢ0RÅ7>íêî{;´ÞYݸ¸³Y}.®L5&™qƔ¸”‚é2ï5E†–bXc0nýB’T íÛ&l,IõѤ0è /…·ôhxyØð„"CPûKm݈©lrTó (Ã+—b.!èŒÊg„¤`Â=¤„+|cSÔyŒBEæM+èé‰N†H 6Qßͺª°¬ww ‰~Ù؎µÍˆ»KJô±Ã û»ËŠöµª§Ìj6špI˜zV„ÏÔHoWØêKöyï+èCAžM{š(ýbˆ´Ž>´“iïÉY#iOb¡=½*ñ½^!³Á („BÙËøŒ3¦„´oû¦¼â4àŽ`÷Š€ i†¤øjçR`6tðÉcàAy6BÏQÐÒr='"O"‘Bcàx·!Ԇ!¥úÎã1'€ÎՈÇ_«ýFš ùèØÒþ«Î|]‘5 fâÍãqÌ/¬+mNjø³Ý+;Í\ùÁîåO ©ê=v)HkUŒûíãöK]•+ at J¤2nëC³*–ÕÓ¯Üúh3ŽÏå £ª÷¨UbN?À¥4.wNiŽ; é­7Qàª5 +»m-Ëg~¨ÂGÙ¯hËÍÎ-b‰†kÙ¹~t‹Çñ1nÕͤYm€NYVIÒ»|)RH8³Ä·S`Á=͹‚Œ5>$h ß©hu’4¤"æX¶úX¦{õÂ‡Ç (xaùÆqེ?æD$?75 +¥ }Ä„,¬EØPq¡·€ 4Nùe §àx6Iã_Œ1ð©v8XxâÙ +,Ä®ˆ˜SªýæuSŽüc—íò¬É[÷óM}Ø{ú3à¬Tž¯¡ú#œÛ|_o·e×8€ÇòM÷7Tž¯×GªÅ¬{JÌÌHÀp¨±îºnÿöòòááäY³n»œÔÍæ2óN0YùO'Fề³ðɎÀu¹*:Ÿ©kHE˜Qð6Œ ` †=ËF°ª¹¶½äg° +H–lpÌÒ£Ó§:ûcXìšÃª;4ý£ÜõPÚǃuÅGO[B´Ïüô³«Ï‚܏>7?~ïö-Fþ z+endstream +endobj +940 0 obj << +/Type /Page +/Contents 941 0 R +/Resources 939 0 R +/MediaBox [0 0 612 792] +/Parent 936 0 R +/Annots [ 922 0 R 937 0 R 938 0 R ] +>> endobj +922 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [399.555 636.216 422.469 648.902] +/A << /S /GoTo /D (figure.3.35) >> +>> endobj +937 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [167.556 309.317 178.017 323.64] +/A << /S /GoTo /D (Hfootnote.31) >> +>> endobj +938 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [294.718 194.498 468.865 206.437] +/Subtype/Link/A<> +>> endobj +942 0 obj << +/D [940 0 R /XYZ 109.854 704.063 null] +>> endobj +567 0 obj << +/D [940 0 R /XYZ 219.246 597.01 null] +>> endobj +110 0 obj << +/D [940 0 R /XYZ 110.854 361.639 null] +>> endobj +943 0 obj << +/D [940 0 R /XYZ 128.787 188.321 null] +>> endobj +939 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +949 0 obj << +/Length 2095 +/Filter /FlateDecode +>> +stream +x^…XYã6~ï_á—d fDJԑ·žôtÐrìLg$ Ôm+±%GG:³¿~¿b‘’ܭɾXÅb±X¬»üæñæËû8ÝÈXDq¢6û”¡Èt¼It,¶«Í¯A$!·;†ap·Ãàç­Tapûî~»S: ޙ“)zËïÇó“鶿=~ûå}”€¡Èµ¶¼ÃÍN)¡eÂ\t"OÁ2ºf \e>„¡jê¡nÆtæϱîLÏ«¾=»Óç¢<֍ÙõSÖt¨|Í¡Û]¬å|eg¶R‡ºXT’ Zˆc'[Ïة4×KÝh‘1UÏø¡åï“á­I+þ³•RàÈjSqñƬÂ©ȅJAyéÚÒô=„Çku‚2²çEy*zwªl+ã°PÈRLÍb>9¿pö0•`߸ö;Š´ˆe6{œúGs¶[ºœ…¿sÖúÿs‚=n³0(žN$ŸJpe”L§R‘§¡¤Cq.²,ß@ÒÈɦò5æ+_%cÚÄ”JǃÕê*+\ÊW\=Ι$KÈ?›ªè*TÇ{ãÄLôRÌ\Š$Ô^L—+/ØÜMR Aln‰2ª5K+•¼ð`–Ùºpb+(Ôűw'ãî-_?X+B‹þ؎§Š Ÿ‹)’mÍ9AèeR$Jz{äªËJæ€ÿutY˜Ñåø¦N |+î]º¦½±g£Gª`reø%×(Í«pÂ&ÅÃuŠsi˜‚„ýá<öCVOpé`e·NcS…mÔ\Ï0´ü•bÍÑ9”_\æ|ùãph¹bã`ÑÙ(ϸ¢ŸQÐR±u]Ði(V]5‰…ΤwUۜ@šìÎL]P6¦•}PŒ.¯¯ÿkEê! [l0çKÛ•|K‹¼HíZ­mø•¹Kªä†9u.îM´âLob½‡  šBöd:×ð—ÍÀ4žãþŎ+¾REYvgÇ~µŒM-݋Œž¡k‹½Ò.c\Óm$EšN©¼nú¡mÙê©S—„Ù^¨T~¦–IȂÎÚ³øæûŸ>Þ¾ûæýÇ÷¿¼]»1OÐJMɒ^¸Æ5ùlñðoµšÃT&’\-XQã 3Ø«a€l +6×[“£FðTy&hjæ§ÚåPüA^kƒ\0–B÷dV•§BÏúOæIªlMv ‘i6ɾt$w ûO®()_D0`Œ]GTüšP‰èe7KÞOcJ?L¥ ú>\õL„³{Úª‡1<¸¡Ÿ©~ç|‘j?¢%SW·dÿ¤ýßdzŸ©z1óø"n¹%Ù«(ÛÚ̓pâSI>؏M9ÓûÁSúõÀË逗L¬¼¤tz·Õjù^“òÂΎ+þüø5_?Â^ßGö53Éê¨ð}Íã"¥u?ÝL^´,6œ›ívY¢Ý˜ +„¯0%U†Î€N N¡|óöñæÏÊáFNÎ`CˆÉMy¾ùõ·pSaÒ¢QÊ6ϖô š¦©/> endobj +944 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [138.825 526.876 161.739 541.199] +/A << /S /GoTo /D (figure.3.36) >> +>> endobj +945 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [159.747 526.876 170.207 541.199] +/A << /S /GoTo /D (Hfootnote.32) >> +>> endobj +946 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [124.694 512.431 135.155 526.753] +/A << /S /GoTo /D (Hfootnote.33) >> +>> endobj +950 0 obj << +/D [948 0 R /XYZ 110.851 704.063 null] +>> endobj +114 0 obj << +/D [948 0 R /XYZ 110.854 666.202 null] +>> endobj +118 0 obj << +/D [948 0 R /XYZ 110.854 570.79 null] +>> endobj +122 0 obj << +/D [948 0 R /XYZ 110.854 494.597 null] +>> endobj +951 0 obj << +/D [948 0 R /XYZ 128.787 155.748 null] +>> endobj +952 0 obj << +/D [948 0 R /XYZ 128.787 131.838 null] +>> endobj +947 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +955 0 obj << +/Length 1646 +/Filter /FlateDecode +>> +stream +x^µšMoÛ8†ïþº°5—ߤzsš:hÑ,º±±-ÐíA±•Àhl§²ÓdÿýŽ,*‘ !²)rˆ!Û|‡ÏpÈw$ÿ°„ÂK£Ä*™h)I¦L²X¾~£ÉÞüTo%÷‡O®a-QRÀë›d6ø{p2ü9F€/*žÌ¯f ±&ќÆE2_&_‡ÓÕõ]YŒÆ\Ñ¡ B¿£Ãӑ ÃÏ#Æépr1­ß¾(FL ¯W»}QÖWþº[_6¯ÏóÛÛÕæzômþ!1Dë,sM´´µNǗó5èJÃôã8,ãr8¹¼„€¸þ\åûÕvS8x7üx‚"a‚% +¦œIþŠÈì–‘,óBQŒ0je,Ñ0è!Ú³bS”ùM觻òv»+0“//CÌÊH³yk‡—DJ‡(”&‚gÇ!ÒQm ·2VT±#Ñj͏EÓ2¨tŸG8æ\À|e2vÆS<õQT,u:!„¢–„AáBdŠq¢ŶhZ.Å·>ŠP6’êÐ !eFŒÈ깇bœ(B±-š–‹>UÅEAI<¢PP¨²ŽPx Fi" ۚiyهaÌJœ½÷0dš(&C'„@„ãÌ6njô@ŒE(¶EÓr·úMO})'TÛÐ !©†:åuˆÊC1N¡Ø…]1€â´<؇ÃíjóD¬£š?á %X"ͽ¢?C™U×\€g)ÚÍðHêù¶?ÃÙ>_|ïÇpæch`ll7†Æ@•ÖñÂ8MaKj9€à»‡}±Y˚Ò{@x ×rW_²cÖU] JeဠöÏPÊê"‘Z@©ºóÑmpÆé"8Ûºii»prÄ+_~øпœëúSÇ#*’AŽi3R=ƒ—™Q”€ÜQb.Šý]¹©‘O–˲Øí·î¡M“HáùB†oÀ4¤ß̜Wa¾Ýà5T›.F +ð™ÆõvÿŒcÃb±ßâë‘Vì» +­aÂÁƒåú¥èD%™:ŽŽ™1÷בÂȒl §ë5íZIàŒ,,¤‹Ò>.JËt¯Jpü4ažý¢O~l†wË`êP큜A»l¸q®^…ÇÙG +# j WP;wÈaûFW†¦7Û|_ÝÇx:ãk‡‚m—Á‡’ +¾ÝºSJˆ±ôÜ+´V8"®Xüb£ÝØ@nÀkg ”+ÏͪWn:|®Á>>½Õ+ã$oî!çîfNAi"mp_,”v0Êã„#U‘…ÒV…"#—Õô{¯–³h ¥ >×h ¥q½®òØØHUZ[ª+ZÏㆨ,ø GJLÀµæɳ¦cí1^¯"üXb0iÝÄç# d÷=¤éáLþÿR4Ë¥ö¨HUd¹´UÓ}Ù¥|<‡°bؾðÄ+ +¶ÏuÚã—"ET-ÑôfŠq;¾\¹ÿ¼X®r×Ùl7ûrëžæw¿p¶Ï÷wž]ŠÙ* ÐIu“dÕωšÇÄÚcŸâD»I‰¦ë‡Å.€åƒ5ð>Wå»-={ÓàÿŸ #Ø`&¬y.¬=Î)RáÖVM¯÷ÔÜâê MñÓÁç9MñkkÏ£’HUZ[\ÄýKÝæ×wL‚{ùŒ°_ßU}F•$p¹V7–ééÎ[F2 uT%ŠÁ·˜1F\|“óS(ÂCr&'ï]ZæWnë¨Â#º~}¸éwxõáîæ¿úÿÃý§Œ?ÿ3oØc}ÿÆÆÝÀ +endstream +endobj +954 0 obj << +/Type /Page +/Contents 955 0 R +/Resources 953 0 R +/MediaBox [0 0 612 792] +/Parent 936 0 R +>> endobj +956 0 obj << +/D [954 0 R /XYZ 109.854 704.063 null] +>> endobj +568 0 obj << +/D [954 0 R /XYZ 250.025 634.569 null] +>> endobj +953 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +961 0 obj << +/Length 1707 +/Filter /FlateDecode +>> +stream +x^µX[oÛ: ~ϯðÛl`Ñtµå½më +t؀­8{ØÌMœÔ˜cw¶sºî×J”l'qÓ :¨$Š¦H~Iå׌þXÀ%ZÉ ŽI’$Xlf_¿Ó` ›ï³\[ÎM ´&J +˜—ÁçÙ?³×糧" $UŠ竀é˜èD±¤$Öóeð5<-ÖÛ&æ\ÑP‘¼Œæ‚Ñðc]T]Þ ýmµ¨—EµÆÕç«|Q|£”/²®¨+$¾¾éòèûù»`žPBe̅ ŠK<äCÖþŒæLhàüg•‘̳·ç³_‡¶RN´Ž÷m©î•”.ŽË‘±TʉJœô7›8W¦`· xKvì\`—D‚u·«ŠíûoÄ ³r›·è­Ì{¼íê&_:bkt{qªØX`š˜U­¤m™_0®‘q÷d%÷lu3%Šq€]{žö~¢º›+§ë7ªh¶XÔÍ +]í·¨ÈþÖÀÉ0¸„I0·~S~…D$UO„B¢ ãéQ°#ÇáâÚQ®‹¥ã7W#b*\çM;øfÊåœ*Ç¢‡o™uŸr9ø‰òäøõ<íí²¡"õ|B$DÅҁ{0Ä0Œ2}"0bAb-†ük`È'cZÖÃÀGÀ’¤T< ”ÃÅ|ú¯1™Œ Æ´¬‡¡€!(‘ê  ? !!ç±;Á(Ö€+¢cµ¯0£G4fàHöTåÃ—>Ÿß®ñÇ786y ½BÄUøŸ‰Žü˜ ü˜ ”NG[ƒØ+}phëI¡“$\@tWÿ 9il­qì!zsö•xÁ¿íz“Wí«Û—S Œ'L÷)ìÜX%¨³Ñ—H1z^.ÍB†E‹ÄUÝl²._º†nÎ,«ìˆBe˜E 4šchP‚ï¥Èё˜ëݑ֩ö¨¾Ul»f4ªJQíáÓ;ä2ϖðQ*$V +gk’(=2}_ò&»ÁÉ¢Íd¯ê²¬M„\÷_,.³&[ÀSÇû{3jzX’p<óÏ4$„Å}‡~V- xÙè”æèÌ›„*\‰‚â¦ü·Ç»{ªû +W´(óªÉ[HOaåÎXæ`Ȧ¨Ð:é-‡¶ø“#É=Pú-:Fˆš1órÛzŒ²KdÊ]À+ † Ў_ƙ\r—|Ğg`Ãz62\ú°6$†ùºÂÑ¥¶ÙÆmõm…´c~áùyøã}”òðÙ€‹z³üp$>ޒ™˜ÒHì$TŸtl³Np{+endstream +endobj +960 0 obj << +/Type /Page +/Contents 961 0 R +/Resources 959 0 R +/MediaBox [0 0 612 792] +/Parent 936 0 R +/Annots [ 957 0 R ] +>> endobj +957 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [437.224 294.452 460.138 307.138] +/A << /S /GoTo /D (figure.3.37) >> +>> endobj +962 0 obj << +/D [960 0 R /XYZ 110.851 704.063 null] +>> endobj +569 0 obj << +/D [960 0 R /XYZ 249.033 655.389 null] +>> endobj +959 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +965 0 obj << +/Length 320 +/Filter /FlateDecode +>> +stream +x^]‘1oƒ0…÷ü +F +.>lwK”VJ¤JØÚ$˜`Õ@d Uþ}1G¥¶‹ýüî;ùn—¯žSE8gZJ yE8l˜à)QR0ÉKòFm§*£/RÑ¡C«·ÍÕÙêŽnS´ö:ºb°ÝOKµðµAcl¿l[.fqr¦_Oý‹ðc;ØÆ âìÉþ}äGóŒI©§[0!f»ú.â’Þl:@ÐÚ^ê9%HêL4·+endstream +endobj +964 0 obj << +/Type /Page +/Contents 965 0 R +/Resources 963 0 R +/MediaBox [0 0 612 792] +/Parent 936 0 R +/Annots [ 958 0 R ] +>> endobj +958 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 624.239 126.795 634.457] +/A << /S /GoTo /D (section.6.2) >> +>> endobj +966 0 obj << +/D [964 0 R /XYZ 109.854 704.063 null] +>> endobj +963 0 obj << +/Font << /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +970 0 obj << +/Length 1092 +/Filter /FlateDecode +>> +stream +x^­VmOãFþž_áoM$²Ý™}¿op€Ê Ú«ˆªJ!“â*±9Ûééî×wöÅ&ƒNj?y½žgfžg|²˜ü|.M†’k [6ŗ]ÙPnÃÛpæ¡Þljúë<”fšrŽŽ’I™`–ÕcÌÐ?Þ4ß슖yóÉÙbòeââ åÆ0#\¶ÜNnny¶¢Tsú”} –ÛLXK "h½É®'¿ON|/BEԄUgB!s<õÒbf Ûý&Ջ +ùa6ð Ýñeæ=,ÌZ*a™èësݖ±2Z#Nÿ˜@€6Ì!3ÔR9sF½&œ¡§ƒ2‡È^”ÛYfPe7ÓZýæìâîãåñõõíë(eD«¨™ïÁ³T¼7c™Fq1)Ü­ejAY#·­°èéñâø8Ñ%]þ?¢óí`‡@ýÝxy}òv"u¡"²ü§.´L’N¡´L;LÓÔË¢mí…£:íÕ胧›°ž÷a3ҎQ´h±¢ÕŽÉJR0ϲ°MZ5" Ú7¶êM·Åö¾HÑåÕ*VS c¨Mªf"Ôv×&á]ç3ôü&=KìŠÁî“~,JGYÖº¿ùìêîO«ïb½ +’¦B F0eƒ‰!Rñ0@ˆêÖe[¤J؜“F)€„ÉÙöT“ªÿºK  èë‡øüÜÌÀNëÇ&ßîϋö=•ïeg= +CÏõyZW»í¨lK⼬Žp0]ÖU——Uëß0fÜoW»ÞCü~š¬)‹déÊo¦8}j2¿»&a67–¥í€Ã—PFÂgDÀ6¼‡ÕΏaÿB—Ž*"£tûˆ)ª¶ü>ړV„:&ãԇ¯rÄ+ûc9Ôrè³ÇÒ÷dìÖ6†Üõ@ºŸfJMӗ`XÅùëç+ áÐTT¡˜•éßRó‘°æ4êM7jҌh¸÷q|r§Mþä‘¿c:uý›ÄÕ§Ýæ[\áQzrÀ—V`>€ìKò/ë³n +endstream +endobj +969 0 obj << +/Type /Page +/Contents 970 0 R +/Resources 968 0 R +/MediaBox [0 0 612 792] +/Parent 973 0 R +/Annots [ 967 0 R ] +>> endobj +967 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [274.97 231.678 281.446 244.985] +/A << /S /GoTo /D (Hfootnote.34) >> +>> endobj +971 0 obj << +/D [969 0 R /XYZ 110.851 704.063 null] +>> endobj +126 0 obj << +/D [969 0 R /XYZ 110.854 666.202 null] +>> endobj +130 0 obj << +/D [969 0 R /XYZ 110.854 479.85 null] +>> endobj +134 0 obj << +/D [969 0 R /XYZ 110.854 450.384 null] +>> endobj +457 0 obj << +/D [969 0 R /XYZ 277.444 367.351 null] +>> endobj +138 0 obj << +/D [969 0 R /XYZ 110.854 215.19 null] +>> endobj +972 0 obj << +/D [969 0 R /XYZ 128.787 137.661 null] +>> endobj +968 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +977 0 obj << +/Length 1490 +/Filter /FlateDecode +>> +stream +x^•WYoÛF~ׯà#X›½I¦O1'šô°ZHƒ’V IÇI}gv–´¨Phêïpöúæ›ku¹^<¹R6‚eÆÈh½„L™*²F3©“h½‹ÞÇ×ûåJd2ú¾Ú¸e7aòSÛܵyE—ï\ÛÑGÆ»Öå=móò:4îó}^†ÉfùaýúɕÇØdʙÑ2â„ê×··ïÞþñ†VN­0’ž ÿâ†ó¯û¥4ñÑ?Њ Ü­”á̊h%4ÓÚÒ¦þ€°U’Å•#cQ>ä¨L9Qš/xX^Þ»9ÄB&­úĚ%Zÿ7b¶\Ù,×Ãõù¶÷¬¡î;,Šsõ®‚çS^0Ԝ$âÂù€ÒÞã×cìЎð¬Q|àÅñ}$É×^ AÅ*çß7Áq†9ȧMz`{0 %Ê7L¢UE˜#þ}?…®ÅBfp-üÐÒЃü½VŒ%څ•–Z”¡d¼€®íµÁg—×$> endobj +974 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [328.827 455.972 345.763 468.658] +/A << /S /GoTo /D (table.4.2) >> +>> endobj +978 0 obj << +/D [976 0 R /XYZ 109.854 704.063 null] +>> endobj +142 0 obj << +/D [976 0 R /XYZ 110.854 577.514 null] +>> endobj +146 0 obj << +/D [976 0 R /XYZ 110.854 543.136 null] +>> endobj +458 0 obj << +/D [976 0 R /XYZ 206.586 431.212 null] +>> endobj +975 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R /F71 779 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +984 0 obj << +/Length 1096 +/Filter /FlateDecode +>> +stream +x^­VßsÛ6 ~÷_¡Gù6aü-±oI“®Éué{kïڞO±äDWYò$ùºü÷EJ¶Û]—$Iø+”³q \G}¤Œ† #1ŒTÒA¤„§Ô“ +s䝽/>Fj¡ÄâϛW7OApN€¡s)ˆHAÌU ¡Žcà\a¶õ+”Šþû¼êRö úœ A¸œoWœ˜Le¥f¡/‰<®¦˜Ò® +–eâ¤5J¹’"·˜^  ¡ëtŠõ7¯‘›8pL©˜ÑK¹©BVñì· åÒyv~e…‹*^9NД•?ãܲÒõ6´ûÙ} ec-¾¢¢ëÿ<±Ö +endstream +endobj +983 0 obj << +/Type /Page +/Contents 984 0 R +/Resources 982 0 R +/MediaBox [0 0 612 792] +/Parent 973 0 R +/Annots [ 979 0 R 980 0 R 981 0 R ] +>> endobj +979 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [410.006 495.265 435.909 507.951] +/A << /S /GoTo /D (subsection.4.2.4) >> +>> endobj +980 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [227.781 214.764 253.684 224.982] +/A << /S /GoTo /D (subsection.4.2.4) >> +>> endobj +981 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [322.706 184.898 339.642 197.584] +/A << /S /GoTo /D (table.4.5) >> +>> endobj +985 0 obj << +/D [983 0 R /XYZ 110.851 704.063 null] +>> endobj +150 0 obj << +/D [983 0 R /XYZ 110.854 666.202 null] +>> endobj +459 0 obj << +/D [983 0 R /XYZ 278.43 617.508 null] +>> endobj +154 0 obj << +/D [983 0 R /XYZ 110.854 466.799 null] +>> endobj +460 0 obj << +/D [983 0 R /XYZ 292.388 412.247 null] +>> endobj +982 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +988 0 obj << +/Length 1733 +/Filter /FlateDecode +>> +stream +x^­XßsÚ8~Ï_áG3-ª~ÛîIH›NšÞ%Ü´3m'cÀ_MmÓ6÷×ßJ+Lz Z­díî§ÝOßϘGáÇ<Æ( •ô´V$o²8ûü•zS|ç™!利¹ðD%șwöçÙùèìՕа‰”âÞhæ1qOKJ"˜:šzŸýQ/¤~<Β^Ÿ+êK¢^÷ú‚Q0¦uZäq†#÷Ëd’¶dbÆ*ì͊…úÑ-s—=ús×½(¦NzRÖû:zçõ™$R)¯/ onãLT ¾µŽ=-¡Ë„æÂÔu™Ž{œú«:©ÌgÃÑÙ÷gP©bÐÏ QØb%A$W]¬ë`Å4 ÷T( /­w$W»,‡`Q‰8ßg¦CÔRï1 "¤ê¾;z¸ýp~=ºn‡ŠÈÓØæ#²lËöÕÃàææÃÅ #}¼» ­ô)ÔZ>Ü îÞ Ý†€<¸nwV¶˜Mã:Þd¶ ôqŽ· éˆ„lÙwÞìEíÆ[Ô:Æÿhz4¶5ÅÇù݂¦¬)@íÆ[кƏDm^Ô{0š@fçw šáP+ë-j]뛨 ? /®oïGw‡!W¿!7Y*-xŒÊõàÂz ^×ú&x¿ƒKuáÚCkBårïÙý{¼d@ÅpœÄzƒ×–õCðjÓ«N~í©L„$¤ì8w[°B…¦+/íØ1”íPênòÕj>Oª:™¾6+¿º +:ÛE½>ìc‚šƒ£¯)õIš§8ى6Q4'3JŽ37;Ìõ66ÕîÒ½½A^3z«fFI•t¢uMb÷clž?zLùnbìf‹qš'S÷uú6ûeÚÕÒ½q +lù›s² ¤~ã¿hU¶Æ*ۀ%[ã’u€ÉºÈd›CS€³ÌVÕÖ.¢MœN!ÓÃC ]pUHÝÅjO²+¶6Ïcó© IBXµ%sG›Ý~¼¾½Ü…ãÌþ%à¾!¸¾e;cçÑùS¥‹eü€½I\Y½4JÇE\iÀJÌû™°…`þ8ÁÖB „aœÉ#ªZz2eRº‰–&QþB)ÏÜwq>EeêŸÛÈa_§»ðáQD‚·Ñ&˜;£D©pÐûƒ|ײ}xÈ@ +oâ{ Õ¬Y|Íϑáü¼J«ºÂž­ Óbæ˜[Ì#U«q“%॑?Œ ´Ý±vñ>n—ó ãr§6Ә0…mš‹ë! +_¨¢Åba·‰™ Ù(Á¸?Ìëò f1_ŸB¦ŠŒfü„í£Ë'<÷@‘¯c»éÌ%8´W—êS!ÎCãÆ–­ Ò¿LªI™.kŠé·N áP «¡0)Ê2©–E>­Paph à jh ¸í×2K'6»`¤Y(n™f‰ë͓D Ãþ./ãÚR‡êXå úÚ¶16¸d¼_Áaú҈¡$:‹N›Ï'“¤rJä ìN¡&®QÛhævOÝÜt'ït³„5„Ç|sà؜’þõ UŽô˜»›t¦Ç®¿zȈP”E‚Ken’±Ná25_öÕ8+&ßÌ-‡² n¡»HÅðÿ¸{ UÉ2.|ìÙ]7Bû/e‚ua,0Ýصןq™&“ÄžJ^ç^å¬Z+endstream +endobj +987 0 obj << +/Type /Page +/Contents 988 0 R +/Resources 986 0 R +/MediaBox [0 0 612 792] +/Parent 973 0 R +>> endobj +989 0 obj << +/D [987 0 R /XYZ 109.854 704.063 null] +>> endobj +461 0 obj << +/D [987 0 R /XYZ 200.519 655.389 null] +>> endobj +158 0 obj << +/D [987 0 R /XYZ 110.854 320.394 null] +>> endobj +986 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F71 779 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +994 0 obj << +/Length 450 +/Filter /FlateDecode +>> +stream +x^mRMoœ0½ï¯àÈJÁñØØàܲɮҨ•*…œšjEXPw 2$iÿ} cHˆöäç™73o>6ÙêrÇe+¶Õ~7ÜËþî`Ï &•„&é|^¨‹I’ÄésGB'a2žãQ’É!<— 8w1@¯Ü:î¨ñzó Á­ÍK¿WJ”"ñcÝ¿NgÇ.üK}eAr£ŒÕ6[ý¾ììù +endstream +endobj +993 0 obj << +/Type /Page +/Contents 994 0 R +/Resources 992 0 R +/MediaBox [0 0 612 792] +/Parent 973 0 R +>> endobj +995 0 obj << +/D [993 0 R /XYZ 110.851 704.063 null] +>> endobj +992 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +998 0 obj << +/Length 1689 +/Filter /FlateDecode +>> +stream +x^­XMoÛ8½çW¹Dj–¤HJì-m EwÛm‚^Úb¡H²-@–RI®7ûëw†C5v#Û ÖðÃÍGͼù ~œˆ€ÃOBp–h£YÇA¶<ùú9<|à£`íV.ƒ(I˜VÈUpsò×ÉÛۓ×W‘˜ÕZ·³@ؘE2ŒâÌÂÒÛ<øÞN¦wU1™JÍCÅ̛É4<|×,—MMÚëzÖ´Ë´/ÅeÝ·$~㚿»¾„AL¾ß¾¦š³Ø$ÁTfTB(WeQå°¯Šeø¡¨çýâñÏw}áþ=…‰Ã‹¢ËÚòÞaÁ~'—·'?6ì!—I`¸ù»="›lDX³× "fœë@[˔tT¼'ВÃûè„3‹}Ð< K¬Ü,…ãÄÛÈj4QŒGâH –Ãë&£¯;U\‡ÍŒÆ~Q+Ŕ2„€þ¼Í%ðà‘*"ŽàDÑözŠËË|"àr¤öDE°&~†b䶇½pÐÁ › _&Àì0­V`©ÈðÃ mQ‡§y}¥Åævˆ0ÔÝY±ø{֦˂–n£à„6ÃRtãª+réBÉË®/ë©w ²(±Û.™¯Ênè%¦uNª« R‰p½(jzØei];Š  5Œ®È0ÌwñAoÚ¦h»ÑŒð‹R¹“ý¾ñà‡ !c&¥$|±‡G± ºIŒ…uñ˜1Ås"(±<<_͗Eݧ£qù˜Íoú]µÓ¶Qœ0%í¡×„½uò ãÂÇvA{  z0ñ&ôŸ«ªšöE»,ë´Ç˜ÐRçلë#JÕ8:œO48…”?'R;u£Y¯pûÈØ! „§§4B0»ñìß3â°qU.­ªz0kªªÁ]×xÔÜù'ÝŸ¿¡Ì«‚"¬É²UÛ¦uVøPÄ\ŽxöéìiÎ>L,Ìý ãž>#EYӘÖø¢chM›íD됁¸ o±ND„÷mÑ€M3-â0[¤mš…‘³˜ª<>r`°tWbð^Py™õàŸŽfTš@ȚºjÓÄ.!†ƒ&ð¦Pæž`ø´2Ć%ÃJGðrÃË4Ã&E‰Ç÷ e‹tÔáMí^ߒe%¤×õÚ¨†”i×5YI +ú@ÊMôOD5pØ®œÑ¸Ý/¡æfèÒÊû~ÕhÞø«°Ñ/ËÂD>vmøD‘‰S÷ÑΐpWÁþÔÿŒ@¹nsŠë†P ,‚oG[ ý”9Qt(ï (äCâÛyÉêvHÁbõû+æ/Üç\å ÓÛk.Útæ‹g°¹!ù›”^z¿ªüWP—:qäBþ¾JÄoį¯Jÿ.Ð4¯ +endstream +endobj +997 0 obj << +/Type /Page +/Contents 998 0 R +/Resources 996 0 R +/MediaBox [0 0 612 792] +/Parent 973 0 R +/Annots [ 990 0 R 991 0 R ] +>> endobj +990 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [340.966 408.07 357.902 420.757] +/A << /S /GoTo /D (table.4.7) >> +>> endobj +991 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [289.012 204.083 305.948 218.515] +/A << /S /GoTo /D (table.4.7) >> +>> endobj +999 0 obj << +/D [997 0 R /XYZ 109.854 704.063 null] +>> endobj +462 0 obj << +/D [997 0 R /XYZ 248.554 655.389 null] +>> endobj +996 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1003 0 obj << +/Length 1158 +/Filter /FlateDecode +>> +stream +x^­WKoÛ8¾ûWè(+–ïGoiœ,Rd·Ý=4E [t"@–\Iî"ýõŠ²#ŲºÁ:>>j替ÍH€á#!iÁ)RJ«ÍìËW¤0ù1pSÁ¿íÊMÀ´F‚3èçÁÝì¯Ù‡ÅìÝ5“p2BÐ`±ˆáˆ1HŽ‘¥‹4ø."Ãd™Û(¦‡©÷QÌ/o®¼èb÷¸±E“4YYxɝ]½ .Ë¢éèëâc+…D3¸ +–þü˧¤‚…XóðÓÖVI‘ÖÝð֏͓?ä ¼|n,´$Š¥”*œÛzUeÛΞ]-fߎô"ŒBó×zaF¿(ÆÄ5™T ‘Hƒb„†ë›N1?FP¹DXBj¤ ›Å…5†N` +Š0ÕCÌ:ûaa)5HÁî³àRL"|ˆ»Ëí’P} Í°BÎ? 4# a%†Ð`–k׊°y²^PÙM’©­NÌ{jÆ-÷pŽ8ïx7Æז¢ÄHDýƒÕŸO›d(ý~0¶ÐHaâ1Áê²Hò¬y~°ÅjÂîç¸ÂÁîý+ ‹Ÿô`ñ>èU±*Ó¬xt¶a½µ«ìcÚ±o¶•]Ûª²©~¨“|gý0«}› L/:Å®âÊæ`·ç{DDhóD¨³ÇŸ‘.vç¤Ý9ÐDèÉȂÎ  ªÿ`w°¤>6ûo«r×dÅD8ËÅlè]ÌÅ`ëlcÓ6 Ÿ¤ÆYnp FïW=Š9fá¶Ì ±TnÀæì„=嵂žº^kÒýO²jvIžÃbfT{ +ÜÒÇ'ø| +)°•B«º…ë²zµ€#ŠÃÑPór#Ç«îF{ž8Ÿ&ÇÃfZ»Z" Êû%ñ8,äŠzL§ÜéHsì=·ØSt:èžNÐ?Ë"Ní:‚j&ÙåM…÷ñ§¶¶n{ÎØ#æuj‹;6º°Ã˜l¹u=¿jG,ÜØÍÒÍÁæwׂôïõ*4eEÖdIþ—«dŸ’Žl§8Øv¶; `;7îV nš¤ieëúª¬G;v´qZ4ý£cªU—Oµ K_¡y©SÌrwÈ+endstream +endobj +1002 0 obj << +/Type /Page +/Contents 1003 0 R +/Resources 1001 0 R +/MediaBox [0 0 612 792] +/Parent 1005 0 R +>> endobj +1004 0 obj << +/D [1002 0 R /XYZ 110.851 704.063 null] +>> endobj +463 0 obj << +/D [1002 0 R /XYZ 245.56 655.389 null] +>> endobj +1001 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1008 0 obj << +/Length 1453 +/Filter /FlateDecode +>> +stream +x^­XÛnÛ8}÷Wè­2³¼JdßҍƒMÑE»‰ßÚ¢P$:`K©. Ò¯ïC9¶£8)ˆÈѐCÍ9gHúDŽEþXÄ%ZÉ(IIÓ4Ê7“/ßhTÀË‘{ÝyÏM$´&J +h¯£«Éÿ“÷‹ÉÛs‘À Ä(Å£Å2âT“²(‘”p]їx1Õ4ή×v:ãŠÆ’èwә`4>o²M0žÙ6oÊÛ®n°?¯ºæ›_©¢çgsx°é·Å‡h¦ ‘ŒG3žDjŒq^Úu³Ê”ÇmuÓ­_ßw֏ž¥,I·¡ÊºróMæ‹Él0B¹ŽjHšðÃl£÷ÒÁLr,Œ¥„R)KV —–÷(4§ð=‰‰”¦$ M#®‰6üŒCrÒýÈr$¨–„ +öJA …ÏÕ£Ÿ;‰Šë%>»•u$>Ÿ²ølŽmUUwèQVùº/ÊêfP¶Ø’3O͘$R&ÄA<+ä‚úË6µkÁ,U¦nÕ·ØòÓ¹wƒwßÚ-]–r_V£»éËÖU¬Ä¸„½™*ȅëj åìPì&¾[Ù +=Z]ù|;»K x{®Ø.â»ú¾ôÕ×ûî'I¡Ì§0Ä»¶6J%”\鸴?×EUve¶F=}¬ól¼²‚† ¼=ÊmFaœ=¯(©ÑZâJá11]½Rì ¬½Ø—vië•Å +Ç?WÁ°ì+Ì£ïåua‡0¸½­«b”W©‰ÔP ¥’ŽmK|¾¹|ƒ¯ÐEś²m·3“"HUÊø´¿ÙX‹Ko¼ê˜êku#ª…›+ÍáÔ$^¨ÆWŠÔ¸ûªüåÆü‘Ãå!díљQˆÎŽ\ÎtòV at g£ÒA„B¥^„ÎâEè ƒËV„®ƒ;®{ÓÀ§Ù쉋äA\èð="ÙÙ¯¡ã÷:¡PsКù„¾j˛ʓÐÀþÙo®·La‚]J>Þð¸õ™ucÔæ-,ÐxSâÌ°Í^ß;o:L +¤ù˜lá˜ND*žÕílpÜ[˜~€ñì–ƒ ƒåjg¯;ø®íñűf÷(Ý2h 6A¸ÕܹÙý` •î©i@û“¿¸]”%Œ9Z-boÅ#ïwÖÿ„Ü¥†»Ó£KÞ¾ä¤ B¤Ï«kOþRµ¿Jè ö½ÐŸA·n»‚ý.K÷ çNg8íl»@;#J =zÎVÕg³+ÀÎ)¨z)þ4òã{9§Î\r-ߝé€c,úÑ$øKÜq™Ô‘6D»N’n‹”!&á Ö(˜äŒÀOÿ;K$Òãôý6ΚlÙa“Âå$ØþÊyh}è×á~ž”ñC/–¾cۛåo*VÁ +endstream +endobj +1007 0 obj << +/Type /Page +/Contents 1008 0 R +/Resources 1006 0 R +/MediaBox [0 0 612 792] +/Parent 1005 0 R +/Annots [ 1000 0 R ] +>> endobj +1000 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [371.299 261.867 388.235 276.298] +/A << /S /GoTo /D (table.4.9) >> +>> endobj +1009 0 obj << +/D [1007 0 R /XYZ 109.854 704.063 null] +>> endobj +464 0 obj << +/D [1007 0 R /XYZ 257.198 655.389 null] +>> endobj +1006 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1016 0 obj << +/Length 1948 +/Filter /FlateDecode +>> +stream +x^­X[oܶ~÷¯úR-¥IJ¤¤< ãÂAڃƒlŸš"àJ\¯P]¶ºÔÙþúÎp¨]­-»)N`À$‡£™!çöqÿ¸‡?ÁYªâ@kŒ$ òúê×ßxPÀæû+‡½%BgkS6…ížÙ§ð\»øãÁZÄ,Ž}ä-Ŭ S‘i&!.¸?<ïn8+³,|X2G"-……ZU—%žaú¬ë-v('bG›Þ]i{"–ý\Pæí)“Œ“Ù¸?6CYÜn›â94o‘ƒW'µ¸0ý9àÚى×}k;[0òLœ`XHU<*+&@t*cA2¼Ûy¹Íb()7ú±4㇒ŽÏõ•"ÄÕÂHE:úîA[#4|g/´r… Fª`4SÕæ½B“ØjhËRɦl›PRäë#Jt>¿BëɂÂVæ8@qÁ UkŠõP֖¡Ü·0ÀŽ§LÇeŽ®ŸK*å*‘07+ª­ÝI›»vü$w `ÉVìا{#ͺí=É]{èJ3ø­Ù¿ð˜ðL€^x̨}±PO"Â{ ¾Cb–r œ€@! uόeZj÷8e¼pÖÓÂ'öÃ,¦ôÏâôòEé6šJ:ËÉ@‚:…v‰^g×aAc¬˜8]3œòêÌ"4}Jõý0^__÷å`{v߶÷•eð€q„ë/‘4ÛòÚ'v•NC)G_mî;ÒBB +xÑIlË`”œ~ªÓé‚Õ S€Ý¤˜`ȽùéFÇäÚ7?ÜÑä¦3;ïè€iš‚”¦Ùû±ò+endstream +endobj +1015 0 obj << +/Type /Page +/Contents 1016 0 R +/Resources 1014 0 R +/MediaBox [0 0 612 792] +/Parent 1005 0 R +/Annots [ 1010 0 R 1011 0 R 1012 0 R 1019 0 R ] +>> endobj +1010 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [351.41 324.06 368.347 336.746] +/A << /S /GoTo /D (section*.29) >> +>> endobj +1011 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [243.8 295.168 250.275 309.491] +/A << /S /GoTo /D (Hfootnote.35) >> +>> endobj +1012 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [283.208 143.871 500.394 156.389] +/Subtype/Link/A<> +>> endobj +1019 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [109.858 130.486 165.649 142.436] +/Subtype/Link/A<> +>> endobj +1017 0 obj << +/D [1015 0 R /XYZ 110.851 704.063 null] +>> endobj +465 0 obj << +/D [1015 0 R /XYZ 243.898 655.389 null] +>> endobj +162 0 obj << +/D [1015 0 R /XYZ 110.854 373.793 null] +>> endobj +1018 0 obj << +/D [1015 0 R /XYZ 128.787 158.979 null] +>> endobj +1014 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1024 0 obj << +/Length 1003 +/Filter /FlateDecode +>> +stream +x^íWKâ8¾ó+r$ÒÆk—ß}ëÖLKÛÒf†ÛìÒ$4‘€°!,âßO9vÒpY­4§Ø±«üU}v=žf“?Ÿ…Ž˜&À¤ˆf‹ˆ1J •pi–E?¦‚ˆ8a”Òé·|UÎÓº(7ñÏً„ N˜F §„Ó“a—‚ H:ÅZLÛ|çõp…'+e«€H&½žçâm_å^.ètÃݲŒAN;?­—aKºZù…<ó?*vúº +;þ¦òU¶#îðÉçÙäŸ ÃCiÄ:û¥áD(Íד?i”áâK䖢C³sqcˆÇ«èûäëäÉ9ó½Àhj") Q\ YÃℳÎ?'ŒÏ…C8+ D¡y·qáIÔ+8Ƨ`\u-^ê©«Á†‡>œZdz›„=¨”?Ñ$Õèã`ÚÅ ˜²Âú–o+¤gS_tY–o²>øºôßy¹Þîë¼'ÓùÚOËEoý£FÒûšiŽYM˜«y[fØÎK¬åE{çh-#l=Ñøøô—|ªÒEȄ”X¬Ûé+endstream +endobj +1023 0 obj << +/Type /Page +/Contents 1024 0 R +/Resources 1022 0 R +/MediaBox [0 0 612 792] +/Parent 1005 0 R +/Annots [ 1013 0 R 1021 0 R ] +>> endobj +1013 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [144.061 597.84 169.964 610.526] +/A << /S /GoTo /D (subsection.4.4.1) >> +>> endobj +1021 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [451.183 153.322 474.098 166.008] +/A << /S /GoTo /D (table.4.10) >> +>> endobj +1025 0 obj << +/D [1023 0 R /XYZ 109.854 704.063 null] +>> endobj +166 0 obj << +/D [1023 0 R /XYZ 110.854 666.202 null] +>> endobj +170 0 obj << +/D [1023 0 R /XYZ 110.854 641.667 null] +>> endobj +570 0 obj << +/D [1023 0 R /XYZ 288.885 573.079 null] +>> endobj +1022 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1028 0 obj << +/Length 960 +/Filter /FlateDecode +>> +stream +x^•VKÛ6¾ï¯ð­P3|ˆzô–Eh¢AêS“  %zÍV+-Di·Û_ß¡f¬5-н˜£™Ñè›oôõîêÕ»¬ØÁ*­åfw+½_m ÍôÎJKH% ¨‚ªâ½р¥;s‘ÉMÛïM»î>š}KnfDê¢(Ä`Û¾6Ä<áñ§TëÄcwdLA4k„ìo÷}{Idáš]§¶Y#üôýžf<Ù­‘¨‚(VI<¯vTV (¶.ü¡ñ‰¿àø[‡JßF¨%"øø²á—R ™%w­©-ê¾rÍ=ÌÖl,pè<)1ð‹cõÓÐ× +A‘?ºîosC»´nBƒ<·æ>@&ó7™x`ùÿ?=CÐå*5• $*¾Pº˜šê¢bà0Ä3¦¦¢º?E‰û¹+°·Ø´ŸÇ‚ÖcÎ/  5PÕýíÝ´h&¢Ì)C“D—†`RR¾÷‡û +9º`ªÔ'ϐÈ:Û¢*XYÆlÿ±Ê¶dz•ëŒî  Ü:M;͏ +Y;·/còñ÷¤v°ß»†¦|Öà& ð®»møv\Ïä G£öç Gí|â½û—¤–A´Õ(=ÝYn˖ó'ÛEŒ(·°û¢Ü6ŠJÆåڅWÜǯ{“gA̒×׿¢Î õэÐó0Åm“G êÓÁ»Òfþ›ˆ|)÷Ûögß?ÛÖ¬ÑVä0ú‹ï9üð‰+endstream +endobj +1027 0 obj << +/Type /Page +/Contents 1028 0 R +/Resources 1026 0 R +/MediaBox [0 0 612 792] +/Parent 1005 0 R +>> endobj +1029 0 obj << +/D [1027 0 R /XYZ 110.851 704.063 null] +>> endobj +1026 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1032 0 obj << +/Length 1813 +/Filter /FlateDecode +>> +stream +x^­›[oÛ8Fßó+ôhc7,‡¤(²o¹#[gko±Û ‚l’ÜdÛmQôßwlI^Êæ0ä8胍DÕͱ¤ùhåËTÿA …«Mem-š¦©n>ï½ÿ(«[üåEµüUõcµåçJ;'j£ñý¢šíý±w8ß{qª-îAøºVÕüS¥´Þ7•5RxÜt~[½ÍÇNŽ®ÿY܍÷U-GF€|9Þ× Goî7×ßîÚ_­¶üùïÝãó‹jßX¡­ÂW®ßÙëëϸŸFJ;z;€ÑõâûrÇ+cZ~„¹6ÃbbBfo&vÀ½›²7ͬ^öۗËOgÓyR”¶OÓÒÊ SË +voUN˜âA U!4GN¸ +ágŒ³h’¶³l¬v¥µvVÒ¨¶‚ØE¦·ÃƒvBhŽœ°Â'»žIGÓË¿ªd#¬/¾ª@ ©ºꄪgöªBhzHxìZR [8$œM¦‡WÇsZñ8!šäùtɽƒm¨û{§¥õ0¡ñ3i 7}@Íh:N4ÝI¤&Ÿ´cb‰®küðëÈrÔvÙ©ü¡%¢áa :q—gR‰{H^•^œša¡VH¿üó™Õ¶0í´[Á`Ç^(,¤Û(qÒð‚Чðgnsaëü釺+NÜVBøýÃíý×»›oím僬åÆs^ø£ÈÚSÿÇL€ûTnë2êÊþ€Ë{l±«–³ínw ´ŸSÜÒ£õ嵟ð6‡ÿ ´Æˆ.¶¼Z~ŵúK®ƒÃóöÍñ×ëOßÚ·Ë«¼°íûJuï.¾/~¶ïÔïÝ«µ¹4/ÿÿBø!›0 +endstream +endobj +1031 0 obj << +/Type /Page +/Contents 1032 0 R +/Resources 1030 0 R +/MediaBox [0 0 612 792] +/Parent 1005 0 R +>> endobj +1033 0 obj << +/D [1031 0 R /XYZ 109.854 704.063 null] +>> endobj +466 0 obj << +/D [1031 0 R /XYZ 292.202 655.389 null] +>> endobj +1030 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F65 612 0 R /F46 637 0 R /F15 638 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1042 0 obj << +/Length 2532 +/Filter /FlateDecode +>> +stream +x^¥YK“Û6¾Ï¯Ðm9UŒA0©=ØÛqj²žçª8å¢DhÄ %*|ęýõۍ)R¢Æ³»±6@?>t·^ß_½|§ÌB–Ʊ\ÜoBZ¦…Z˜X3©“Å}¾ø5ºßºë¥ŒmÔܺÈJ$QãvÙ¾-Ö ½ÛT5»ªi‰£ÚÐL»uMP»²ZgmQíëǃ»Q‘Ձ­ÈŠ¦¥€«"í¶A¿Ýÿ¸XŠ„Åq +OÍ´6´Ï®q92ò~3—&âþu¥²†F¯^`(Ç?aiÂEz+íB3¥,ÉT×K­l¤–Òà.,K¬>jË3ÇbÌ,a£Ò,81ýüåk¾ýåýÇû»7?¿½“/d’$î¿ëN[m³†ˆ¼Ø\Ë8Ú¸´FS#ãàpSW;¢ÚùÝ-…IYb¦úoRÉÙrP×ýQë +vâþè +Üџø“•~WJê¨@̬žJƍ:êæð‘fæµ)É¹VØõ2V,M‹²°$w‘Ö0˜<ñ—2«¯5^€S¤&Z¹uÖyGµ&8ŽM¢W?ÝMdV¯·EëÖmW.oÿjžy^»¦)öÄ°«ò ö »$­PÍzÏ/WìiÇ|ºÕ¦­»um£CU€?›‡™¢ OܐNv±*!¶Mø•€¡¬²œ¨, {¦y +R´% ÞÄuîiЅ³áwôÀ‰2°žî>>Ù=˜Hs+›0%äO1x«š‹'\éad†ÜV`FÄS[xŨÄLâníçp¢ö«s{b8 !OqúzÐ0¾ýºuµ;ahw«ªüÛu#T"×`4|]4s>3>‡[&+ٜ< eeár£‹98¾ „ŠŸá<ÀXÍÌ`dÜýœ@ +¹‚„•D›i\ +ãñ²¿šÏxdŒ>uç,…âv²Ç9—ãÂóüáæþ˜ñÍæ@kµx*L€%±vNìÇwïž+Ÿûè{J:|pÄØYáÊ2qî÷·ŸÞß̇4 }Z +Ô ÏÕ �z}‰PÁå§äÐ[Óâ´·†3MQÑL?–#m‡WŞÔ'ƍªýø•Þ49¤ o›©(èPô¥ß¹„s¿Ä6c"Š¼)¨/¶UáÛ?ÊF;l¸e>-V¶/ځ'£Ç.û«Øu;z 'ñ´# +(nÄ‚CzŒ ¡}=ÒpŸC1’•Cüý|1=®Õ-Þñ)°-5(qfa W—IÆ+ËtÆ@iˆã¥ÚêÂõÚBdÄã¯MÊlíK:c* À Ž½ÇD“W.Ð]™=µÎäøîˆ CoÔƽó$IÔ+?º‚J•ï8˾]ä?5ÞÚAv ŠþÙ3¹ LТ/.-6µ' #¯é> endobj +1034 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [238.686 638.685 245.162 650.539] +/A << /S /GoTo /D (Hfootnote.36) >> +>> endobj +1035 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [246.158 638.685 252.634 650.539] +/A << /S /GoTo /D (Hfootnote.37) >> +>> endobj +1036 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [222.29 318.408 228.765 332.731] +/A << /S /GoTo /D (Hfootnote.38) >> +>> endobj +1037 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [301.141 146.189 500.394 158.707] +/Subtype/Link/A<> +>> endobj +1047 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [109.858 132.804 153.694 144.754] +/Subtype/Link/A<> +>> endobj +1043 0 obj << +/D [1041 0 R /XYZ 110.851 704.063 null] +>> endobj +1044 0 obj << +/D [1041 0 R /XYZ 128.787 268.894 null] +>> endobj +1045 0 obj << +/D [1041 0 R /XYZ 128.787 233.028 null] +>> endobj +1046 0 obj << +/D [1041 0 R /XYZ 128.787 161.297 null] +>> endobj +1040 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F8 795 0 R /F7 796 0 R /F11 797 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1051 0 obj << +/Length 2415 +/Filter /FlateDecode +>> +stream +x^•]Û8î}~E^p€Fc}X¶÷­í´E-ÚkƒÃÛE¡Äž‰o;g;æß/)JŽ“()ö%–(Š¢øMåÕòîþ­Ô3ÎYž$b¶|„a̲DÍt¢˜PélYÌþˆÞ¿”b¾I™¦ ÁˏZÝ¿ù¨Õò›jþçòwK*eysKIJ¦Ò|¦˜”ÑÑ#ÚäDÅT&g‹ C´Ù‚‹˜©–8 (íXiàü4ŽÚ®(;ê<ZmÍ_sG%͆MÕÓ¨h×ûmÙ „Ý—õãbÝ6ƒ©š²x(IdæœGe¿îªÝPµþ GOÏ^~øJ”º²nŽÕ”%I~ÊéÚ ‘žÄõØÖu;IôÜ3BÂOÄ ðåû3ý]«ïËÏ?¸CÒãB³ „Ӟ®ìÛúǜ'pùBÅÚJGÅ)ñ€ª)JDøIp¼ŸÅ£õ4*ÙVkíJSБ]û++И§,-èDi¸» ‡h´k«fè´õ«x¬N£•éK™¢€k8<ËÞO“øq°ªÛõ_4\·ìصMQ5O#}d3>ãÏRá<ڶžFmÓÔñÖS”ßâX4Vzv¡$xW>–]٬˂úÃvÕÖA] +Œ52Õ⧷ooh1ñ[ÐÉt2åLdîFI<øi|Êâ‘üºÝîöÞKx³ÖÀ<û!²è±k·g(Vèu8©¿jܯs¶Þ…íÁˆ3‘Â܋t‘ -=V]5äÖ͟ʦìÌ`„›öë Ž¸uǵ:·C1 a«øŸYÛ€³²Y£«ªÔ‰Ý'½Õ!àݧ¹ן§*zqŠB†×;<ºø…wkÎtž_˜Øò»‡ ÂbÅÒüö €¨ä!¢‚D"Ë?óX’šH^çqôÁ¥»çª/Qiî\ñ¦B°+‹ù‚C˜@uØïƦ ç6Xq È[<Ձ4 žúÇc†± -}Íoa}ž ?ð@ÓUfU—à 2si×Ûnë Q!¨ÆÔá«úŽ<”Âñ†ò2œ¿û´´ ›ŒU֝Â×Â&Ãiáf×ZúBøüz6„—öŠ°ë¾\B,[­úM|L[vò39+$!æUÂd<šÚ¨O¤Kú„ܶ/`¾ôžXTÄ&%T‚­Êá¹,›Ñg·4ª<¯`ˆh“±@Ï ¦7à$O!äº2¡}êhñVfJrkŠà¾Ç6‰¬0›špæ¯láÏU]ÓÈÙ-M©Óp„ Ö3Žü¤üÄ ¾ÆÀ5ˆB­ }(.P¨u!(9%£gÈÃ�! �éÝìŠ9Ϙʃr¼f¾gr´çÒ5Ô¥È`í(2X÷"¸™²"ó6 ìäüÌS8¡1£ô‰8aoçÂrIjàlÀ#Rš¸þy‚G¢Ã (:·¥ÛPV¥‹÷UïY°1’èÒ-´:UŒ bS>¥J©jP¾ÐTXhöûÚ-rHCqÆâô2¼““^ë°4‹³Ôï±ÒÁ >Ö¯xèžÊ” s‡ª¬ ¢â +#ãú,iöf‹rìH¬I<ÞËçà½â`àüuÃOîur쑣1Ä|R×óÁÛ¯¯¯U!i>)O²$£-} }°v¥‘µ;ø«D똉Š°g°N«dŒ0xpï>pAð>MBôM‚ÁŠë +:¬3wfÀçMe³& ­sz\âzRÛpzþ˜¬=î›5ֆ¶,Ÿ¶|Þê@ˆØzÙo7çYôdßµløϜ Mˆ…âò$c…2u±åÁ‚<8±–;ÿ·€ÍqkÕÑ"Þ!b¨L©ªÂÅuæ'A c7üî{ë¿D¯t§On2RUbÔÙ¥`!z4S  aë@ðíÞÖÿ<›ô¨+¾wTÐDvh£9x ö8DÍX#à®k×Ç[·+endstream +endobj +1050 0 obj << +/Type /Page +/Contents 1051 0 R +/Resources 1049 0 R +/MediaBox [0 0 612 792] +/Parent 1048 0 R +/Annots [ 1038 0 R 1039 0 R 1054 0 R ] +>> endobj +1038 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [243.337 653.131 249.812 664.985] +/A << /S /GoTo /D (Hfootnote.39) >> +>> endobj +1039 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [307.118 138.219 500.394 150.737] +/Subtype/Link/A<> +>> endobj +1054 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [109.858 124.834 304.13 136.784] +/Subtype/Link/A<> +>> endobj +1052 0 obj << +/D [1050 0 R /XYZ 109.854 704.063 null] +>> endobj +1053 0 obj << +/D [1050 0 R /XYZ 128.787 153.327 null] +>> endobj +1049 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1058 0 obj << +/Length 1341 +/Filter /FlateDecode +>> +stream +x^­˜]s›8†ïý+¸„ÙZÕõ.IãL:n’MÜÎÎt;lpì)6.†fýï÷¶Blâ+„$ô¾:ztœzLX„ éºÔM¡ˆ‘ïrK¸QîY£Ðúag³Èé3)ì?uí ΋[×Î×Q¨æK]“Íæk]“Fq2 ²yR¶TõåX®½J“§4XèÚ Óh½Ö-i”åé²z¼©†.MLóå¤ïü}±°Õ'q.J› öú`j?Ï擙ӧ’ÚYðË!؎Öê–ØËDW©C|û)_DËl]>dºO!Utªl©ÚdZ¨[ ø\çq¦+ucíÑI’Bû*Y†óå“rûqà’z¤wÌß?þã‹GÁï/‡g£ëï—ú™Õ¡IFáÙ♗£"}‚=Ä<Öùv©, ¢–K°6+´Yƒ3"_V[_×­ÆE”±}cZH-¾Î}8+˜ÀÊ<ÔUË`Qڌ“äW¾Ò¢”"áÓ愦Iªzò2ØPPjq¼Ñ7aô/ÆTñc˜Á>’DTFF£Ç«›o×ƒo7¦‰I8öªîëÍbœÄk­SÐRˆa?›/"¹Ô~ÈW«$-ݺW‚žv£;‹Ôˆ˜‹uÄàš¬T]зc³r¹Úß±õÐû»w¾rP &¤Å…@>÷õ´GŽ.ÇqÍÇ'ítX&à: +ºx¿™bŒ":¯O at 0„ߝ+mÏCïhæQîË2È< ¶ô d‘NÙ¦ìEOòX“³'Ή::;ÄÛ ŠGZÇ8€6;ÊG)¢+ъǺèAځ™*[ý·d¾„÷cÞ[_IŠ<êï+endstream +endobj +1057 0 obj << +/Type /Page +/Contents 1058 0 R +/Resources 1056 0 R +/MediaBox [0 0 612 792] +/Parent 1048 0 R +/Annots [ 1055 0 R ] +>> endobj +1055 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [453.566 506.054 476.48 518.741] +/A << /S /GoTo /D (table.4.11) >> +>> endobj +1059 0 obj << +/D [1057 0 R /XYZ 110.851 704.063 null] +>> endobj +174 0 obj << +/D [1057 0 R /XYZ 110.854 561.945 null] +>> endobj +467 0 obj << +/D [1057 0 R /XYZ 259.774 481.294 null] +>> endobj +1056 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1063 0 obj << +/Length 1396 +/Filter /FlateDecode +>> +stream +x^…WK“Û6 ¾ï¯ð-ÒÌZ)Qô”t“™Í¤Ó|k{ %ÚV"Q®ë:¿¾+ÿL1zï<ŒåýIw†évÿͬ…ŽÓ³Ê±gñIû2ô^œBVðŽ,O½Ë©íqGž,‘qëNpè̈́#ǀX"[tYv~3:Þ^´ö؍tt`›¶k_x-±Ã‰ag}4÷üë«&p PgJå·«;? IUìõ·çFÉYL²U äÙtÒS[s]­±µv1jAºÂZƒÊß@*WeEˍ¾:ï·÷Ü×uÎKHDiЕEFnÉîÐdȤЇ\©MÔÊ>TcÆގ@‚Os _t¢Ÿ¶òd*±›¼ð¤©ì¡í=T-BÁŽm":; b^ðG['\wá*ùŒ°ÑZš;áÜ»à²Ì ‡#Œ耺¾ú‰òA,æ­äk?˜†vô£Àª›´ß-rîbG6]Sõ=ø•*ÀJO Ձþ.NDÝ& ãªZ`¾šsmæ¨# Q4¼êÑ`aGqÁYKu -šXªÈw>>Hƒ6™m"ß¼Þ*[ÔcéŒÃWC4T£œº9æÈ#±t=0Ó|C-áÀŒåžJHx¶¦Ù»‡ +Üë©ýu>?’Dä"嚗}Œ¦ùŒÄh¿Ûx±„Æ;…ß‚¯Ð5þî ¶Qhq²„g)£çæ퟽~¤dñêY «Ë(éI°7ÃÅKÌÝ\eÑê1ŠFÝÀ@Kôt}³é9ëz †å§Wz¥J灏ôí›%Ãõ<çI¥«· 0zß·õ8˜i©t^!*ìͬ²àn& +è“IdY ó>œà«Dò‡Sªæ•<È™à·ÊVÀ‡‹ˆ"ød$à‡_Ÿ’˜’õáã3O>ðXƒ<¢¡„™ú2ÒBO>ò(äk”HߋÝxø´{øìÊ +endstream +endobj +1062 0 obj << +/Type /Page +/Contents 1063 0 R +/Resources 1061 0 R +/MediaBox [0 0 612 792] +/Parent 1048 0 R +/Annots [ 1060 0 R ] +>> endobj +1060 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [483.457 128.201 500.394 140.888] +/A << /S /GoTo /D (section.3.5) >> +>> endobj +1064 0 obj << +/D [1062 0 R /XYZ 109.854 704.063 null] +>> endobj +178 0 obj << +/D [1062 0 R /XYZ 110.854 666.202 null] +>> endobj +182 0 obj << +/D [1062 0 R /XYZ 110.854 449.962 null] +>> endobj +1061 0 obj << +/Font << /F47 359 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1069 0 obj << +/Length 1733 +/Filter /FlateDecode +>> +stream +x^­ËrÔFðî¯Ð m+4OIÜp€+B¥r°·§ÕÓÓïÇùæìÉK¡=ƂD)îmn+H¥|Ô7ŒAߺ¿ÝÒM +:+pöbsö÷–ÌÐc‡&(¡µÅÊËvgŸ>‡^ßÀ„ˆ¹·„;OÄq $–äÒ»<ûíìü´¡B‹’Ä“< +Bæ ¿YÅ Ší( Xé)¦ Úh¢Â«‰ +ö†Uý<%Ö<à)פ/Ò°ÓRÇþ+}3…f +UA½$ î‰Da¬ÕI|Џƒ! Ïõ›7%ª †+"–AI’åÃæ˯¿¼xõååïÏÞ½8Aph(0"†$û‘ ¡çBö»"ÁÍÅ\„ð›–‘4J…®MÀ‹WóÒr^~¼øógÕ*H’“Xø‚Fp“'?#¨ž +¯/žÿ@LˆXŒ¶ÿGL®Å(¦>ˆ¹œ/BD0¡œDÔ¿% VÓ T+bò:[,Ú= +´‰‚$‚YݦނZ,\h±±BGg`T [C$Ç2öÖ«6ê4wUúùC•îŠŒ,ø¶¨¾b¥=°™—h +ÝS³kƒ’?¨ìú蚈ÜÙFDÒ%›ÂvAør;ï̀)*˜D ý9zá6 9l Âϧ¬KPdõÕ £’†rzYï ]Bë[&hý›Ï_c‰ogJvXn`(‚IlÝîMV`[Ép"8Ôeeïö&– óOiöé&,­ ðےT at 5š+endstream +endobj +1068 0 obj << +/Type /Page +/Contents 1069 0 R +/Resources 1067 0 R +/MediaBox [0 0 612 792] +/Parent 1048 0 R +/Annots [ 1065 0 R 1066 0 R ] +>> endobj +1065 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [418.859 293.087 444.761 305.774] +/A << /S /GoTo /D (subsection.4.2.4) >> +>> endobj +1066 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [175.705 281.11 182.181 292.964] +/A << /S /GoTo /D (Hfootnote.40) >> +>> endobj +1070 0 obj << +/D [1068 0 R /XYZ 110.851 704.063 null] +>> endobj +186 0 obj << +/D [1068 0 R /XYZ 110.854 507.376 null] +>> endobj +468 0 obj << +/D [1068 0 R /XYZ 275.776 441.462 null] +>> endobj +190 0 obj << +/D [1068 0 R /XYZ 110.854 264.023 null] +>> endobj +1071 0 obj << +/D [1068 0 R /XYZ 110.854 204.908 null] +>> endobj +1072 0 obj << +/D [1068 0 R /XYZ 128.787 155.616 null] +>> endobj +1067 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1075 0 obj << +/Length 1900 +/Filter /FlateDecode +>> +stream +x^¥ْÛFî}¾Bo¡ª,†}‘”÷if=ãrÊÎlb½l9®©–Ø’˜ðPxÄQ¾~q4)qÌÌf³/"@h4®ÖÝææ۝,„×ÆÈÅf`¦F/b£C ¤M¶ø¼-ê­-–+i¢àq¿o]Çðf¹–ÝŽ—?E&zû¸Ô@+™¤Ï,GLëN¶¡J€«1¦“g1 k®:Tä4¥î&ÿŒ˜Ññ¸(íÙcO'g†©4’fªD³)ŒåïgÐ +Ž2‰ 6tÙjdçʖùŽYŠ¼úe)"ØÄkˆ¦ÝPú€$‰ `˜£E]Šð¤¼ª1y‘Ô¸1˜ç|»uûºA×A£9paådׂÚ@ƒ±ƒDJ@Ú +]f¤o,€&—ḧðG`l^ڃC¿kåS±®jûfÔæw^¥ÁŒ¹W=²¶ñ ;W± òž#øãÏs›.é0'´Më#‰ãßãMTõåÖùàøÃ55ul¿¬v Gmæe×LáöGV›L#ZÀ55;¯þ<Ý}PÉXm×ô»®oÈñqz)}¨.6ÔΘ“Eã.4kq=kHPbŒû 5Ooþýýí‡wÿœKLªtä YòæHžˆ±¬5^ԗ–)–?¾€¾â£Éäég•¬ß¡½Ø,p+ô¶;M.Ʉ‹«d‚hÂÃCÉ!o§\z¨#÷A+| W}Ãß²o ¢mÖù#GëŠ=ã_p;sw†]x:DÖ`Và¿é–¨ Ò®ÙN>¢lVþ¾Œ JW֔~ˆÄÒNS" +Æq\+J‘ŽöN…$ðڃbªD½$ØÁæµ¹>ó´  …ëH/d"õÒ~hù½s 8>Ž¢à¾ØÇúé…×Ooß?Þݾz|xøx¿yÚÜÞ½¿bÒ§ÏÿøúÈ:†·©2ÃÚ· ‘è¿é6*R›pËÿ/T„LC-ôÃ$ÔF\e§Rò…þ‹0QÉbhŸ³¾œé¥Âè0ŽÆfJÓ(*‚Î3¯”ÆJ“!”Ç<Ë +ÓÃÁgÌZI¥ Ä´ +„‡º›³FÁ^ŒiñVWô +‰/©Î¥_¬ƒmóBÍ^‡%>ØýãÇw$ò£¹à ÷"ç¥Þaïؒ¨{ˆa*FiMC>bvš%¼ÕósdÈçœþoEQ‰0þ±yè«÷iÌrÊPÎcè ËøþÿãՋSÅ<‰Ð—LŽ¯¦=ÄÒ}ÅôÃÏ~Tœû¦.=¹âïÜ ñà ‹ä“ƒ/ã¿òÔÂZgÛ¶†‰£stAÂŒH¡é+endstream +endobj +1074 0 obj << +/Type /Page +/Contents 1075 0 R +/Resources 1073 0 R +/MediaBox [0 0 612 792] +/Parent 1048 0 R +>> endobj +1076 0 obj << +/D [1074 0 R /XYZ 109.854 704.063 null] +>> endobj +1077 0 obj << +/D [1074 0 R /XYZ 110.854 644.097 null] +>> endobj +571 0 obj << +/D [1074 0 R /XYZ 286.034 314.777 null] +>> endobj +1020 0 obj << +/D [1074 0 R /XYZ 110.854 148.499 null] +>> endobj +1073 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1081 0 obj << +/Length 1890 +/Filter /FlateDecode +>> +stream +x^}X[³œ6 ~ϯ8oagr(ÌBßÒ\¦í4I§Ý<µŒ¼gÝ°øLÒÓ__ɒÁ»eú„l˲,}º˜ïϾy[Twyž6RŠ»Ã È,­eyWÉ2åþîÐÝý–|5îl†Ý½Øï“é¬FÝmêÖM8¨©ïiz°ãEõýŽš¾£žlÿe—Ë„¶×ɑ9ܙYº§A]LKƒÞ Ÿwy–葸Ý.O,“aÃ3îD–Üïþ8üx—ÝÝçeZ–)ífú Au>ÑÀžà›5$'NóÐ:c7éþ”îî˺I~Ñ'=ê¡Õ¼÷4Ú QÁ"H“$©ñrû¶³SǞOø=ËD ÝÒUáušHu7d­&ñ¨³À»ú¡a?ÜÐ\¹¡a74·n+aTEHÊØ°ñ*")À†+Œ²½O|u$!ɋñH©õÖ02áëø\5m&•É¶F9Šœ:™ž.GÛ°$\ÉÓ€æp6­pp7œ{G4Ev,®¹gô"Á™[“þZš¡c¨À]Ú˜¾y+ó8ӗE*«=lõ[~ýþý§ï_¿yK¬×E¡ªÓ¼jëSîìH¶¢{zÔÿwX%Ó¢¨—ÇOo?¾µyV–6M8ÕÐ]3Øáþ=Ú­3ö2­›2ìœÜ§/ªŸõÖrŸµ œè¥ªJ^RDû<-ʛl°D˜^P Á Ä‰²8@ÈúIbŠ’:LR Aj)ªÀ£hjÉéËßqTˆ_âõ¸Î#Ÿ8)g&ŒTàß@€Ïéæ¦¹=¥èÃámX#IŽ_º ÿM™i’sͯöâ ֕޶ +ÅúbY'jä5­Qƒc‚0Rq,Î5–ó%+PУ€QAjü<î+,¶E(¶Àv@qO•Ë5€ÊX]¿kQ7ÒuÃýkT°ê}0—Åoi‰³‹–+-É<¬QPԔ2ãUZtp£¶ 3ÄáDò÷Lfœöyø6 Wt`̉)$eh7MÄf߬¨=®¯©ºZÛo!—Ò àn˜9¤ï°t½ƒo¶ú¯ÐûŽá™ŽB».C+^‹épV`‡j J:8Î + s°¢_ b+Euóh@¾á›ö„} +Â(LçóCÅUN®~ڑ“±…r¿ö5~íìŸh4S +”qGKåډi0iPâu|ö¾(¯à0Î+~óZbo² QÅãêæaŒ‹Úéñb¯TžÓ~arf ˜|NSkÄúQtb³…ÄÅvÆ÷›àËK²²¼¹TA—zŽðŸˆá¢/–jF‘˜ çm€rÛÚ±3ÃC:æBd|qX^/Û®..ÞóD+K¶4 y„RÖYÔ"zÉ[ßÍBIÄwäLãèD“˾¼Ùòõ©‚H›¸TGÓ‡€–Æ÷ˆyxsS+„ºX מÜ'¼¹ÍFÀB¯;æ'÷‰õ‘æ +¹é–û&[À̤áM‹ Ýz§EA^Fš(¹S£n¦I>½!'ÑâƒÓ}QW´ïåw?¼àMô&¢9šš ˆeø¿S“ºð‰«Ú­ê`C²>ò}Ÿæ{ë¸ f;s“B&“‘ÉdýÕòÿ  šh™x #ÀH¦K7Çu +x}Üçy“6¤Ö¾^š˜«D…½0äi^Ð’ä© Æ A(Yˆ×£:q_…/¢´b ¸õãÜs &^ð7ËÅ-W¾ÿ6/QgoÏþ¡«x9 +endstream +endobj +1080 0 obj << +/Type /Page +/Contents 1081 0 R +/Resources 1079 0 R +/MediaBox [0 0 612 792] +/Parent 1084 0 R +/Annots [ 1078 0 R ] +>> endobj +1078 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [408.005 206.179 424.942 218.865] +/A << /S /GoTo /D (figure.5.2) >> +>> endobj +1082 0 obj << +/D [1080 0 R /XYZ 110.851 704.063 null] +>> endobj +1083 0 obj << +/D [1080 0 R /XYZ 110.854 395.132 null] +>> endobj +1079 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1087 0 obj << +/Length 1596 +/Filter /FlateDecode +>> +stream +x^­W_“Ó6¿Oᙶ3NK„$K²ÍS¡@‡›£\!v˜'QSǶÃqß¾»ZÙ±ƒa íä!«Ý•ö¯~Z¿¿‡Ÿ„à,Ñ*0F³8ŽƒÕþâõ[¬Ax (¸ušû J¦Ut¼ºøýâÑââþÓÈÀ ,ÕZ‹M TÂL’Fq–‚êb¼ŸæÛcmgs©y¨™|0›G‚‡×uµ²ë^p•—g[¿XÌfËÂ/ßp͛}V´ÌÊ5{»Î{OWk[4 )fo—÷Ÿj¤,5Ò [ Á’8…ÅR“[ìújÁÁÃyx86»÷pú׋Ÿ4ùC܁sÁ%¾#]¿oÑJ K” +æ”:öÝþàd:bqš€ŒÅ]"~$K!Í6fl  J28×)I-–YäÿŠmÆìùTL˜*áSÕŗjf”üšøÊloÅÏÅõ//Ÿ\ãTƒÄ +CÿË»Ö6DnêjO”«Öçs0,à÷y¹¶ÅTðèü<:;ïsË/D¬¦#V§ˆåÿ±ø–ˆåT]¿)âÈGÌCŋ'‹‹÷Ÿ+¯hSÀ2¼±5 z  W?ÔÕ¶ÎöÄ}#e´ªªƒ­³ÖÂBQÆÀM­@„bJùÔ¶¦_…µmªâúŽx¥tØÜí—Uxck[®°Â(mwuuÜîHèœ@îa+OØçNñœmQ-³¢/=úç+Zm0C›Æ¶‘îWØÀ‡1—ꖐº`М)ÿÜÙ6¤ˆ»\Ö îNE¸ªmÖºš ˆÌ{o÷U}GÌ|O.lõ|’±T\tìA©PgP*ïd"ÎrÁ`¤þ$»ª\M¦âvvI-¯½Ð–m[¿=/ώñytô0sî4*€Ó¯¼Õƒ]ågy÷>~ÀÍYq´ £§îõ-ÖàÔ·ni±k>Š Ý¡g¬{³euì +·³çϦÆôI‚—MÆ~¤¯ä“l…moi³Ëj»&ºZ¾³«–h¬°k-  IW²„SK6—úÚ¹Ë:^ë +Éí£NY×ɟTÔw©Ë-´ /_¢B¨h[WX$ +Û:+¸C É\€Ñr`—ýÅq;}݀Å¿#nUwÄt`;QÁÛÚ¦ì“OD NTŸAÝeð ň|1Üjêÿ¼(Ž ÄÕæU‰WBÀÍnš#è¯'hâ2\ÁÔôÓÍ+ξ²T+bLò­7Á÷™Ôðu"Õøújßg¿u°-҄œizºŸnAãó‚±j€ûUFmˆlœÓä“'CrÏèñ…ÖLK}Jì’vM„ª&ªÿ^³;“½¯M›­þfXՈnÍÉA詹ÏAdX”ÆgM×HŽü—2ó†Ø-#9_æ-V2’PÉr^:åí ž,h\È_?%MœUº‹)½ÇÈfÏ |#˾iáM›€ï%ގ˜zh¢I¢вÏØãÅÍåókÓ§’èɾ]Oà +c‡÷,þöÃ(Š/>¬ •€XÛ&ߖ0J®i×($XÛrށœ‚AXŸá«ƒ…—Ï}ü*¸ÁvÂpÚlï“a&PIÝ÷ø˛¿scÔÍåϯo^]½XLÅ+d +8Ý7Þ=²à‡Nã|àŒ f䟛‹6Þm_+ê]) +endstream +endobj +1086 0 obj << +/Type /Page +/Contents 1087 0 R +/Resources 1085 0 R +/MediaBox [0 0 612 792] +/Parent 1084 0 R +>> endobj +1088 0 obj << +/D [1086 0 R /XYZ 109.854 704.063 null] +>> endobj +572 0 obj << +/D [1086 0 R /XYZ 204.865 655.389 null] +>> endobj +1089 0 obj << +/D [1086 0 R /XYZ 110.854 380.544 null] +>> endobj +1090 0 obj << +/D [1086 0 R /XYZ 110.854 324.91 null] +>> endobj +1091 0 obj << +/D [1086 0 R /XYZ 110.854 271.745 null] +>> endobj +1092 0 obj << +/D [1086 0 R /XYZ 110.854 235.428 null] +>> endobj +1093 0 obj << +/D [1086 0 R /XYZ 110.854 180.607 null] +>> endobj +1085 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1098 0 obj << +/Length 2336 +/Filter /FlateDecode +>> +stream +x^XےÛ8}ï¯ðÛʵ1›W]æ-™N¦’êL²ioÍVM¦ºd[n+‘%G—îô|ý+$&Z7uŸÃ¶4Ó§{Þ¯šŠÚ^ïUÜsa¢ïnd—÷Ôz*«Š¦´Å¶h‹z]ø)®‘msh˼/ì ùéÕèÀSf҂‰ÔxÔù¾SvR)K9Ú Ž5ܝ ºw¾?T#edh*¦yFËb4jÆ£—Û¾hñâItº]Y?`'õê¤ÎØÞ éÑ2/ ŸšãDÐúa.¢6߇ܒ/ÃþÐ9a3¥¸ “2ó*±·K>©¹ai4]Àª©À0àgnC“>s.۝§`ÐÃÚ»M#†›u±ڂƫ²þš?¸1 0˜â©EáˆsЋ¶üvÁyIO€ÜÝ¢Ê×EGWŠI“°”§§8zĈ˫¯(l Û/鍮 D~ +D @ä§Ö@덛sDÎ ³c«11Kb5á‹:ðCkÙuú²v±yr©ƒÜÝ°êŠoÜ ÎËRWÝ,œÖÊ2Ê™‡M–Žó9ÊC>·“œÒ¸%<”Ri·ãNá‹ۀ:ë¾²ÄB](jF2‹ÿí;¬iÁŘG¼J¿kG9ÖyU¹º¬|¹U£H†)ãÀÃAOn| À…åޖ°s¡ žE +S&gÙ¹ÃK(íëϏÅØd(t—¸PÍøB™SÜïùαEÆÈ.ñŸXÃ:B¦Ž‰KQvÁ)‰d±ùœö@-Š|CÛÛz ‡b”oÑôÎIT°ã„%ÉÑÐ6ÃÃΦƒ’óÔU SI°Æ#©Ñ“¬™‚ hu¦ÀÇ2a*sìÿ‰‘,˂kooî_½ýõæþ׿Mœ*¦x cP f=–mSï)XãÔåI Ân Yçµkìòچcìc6“˜ŠI°¨ +ԌO-º*vù\⩍«`½"z‹®>kóŸL⪄òŽ¾uS/ꡪ, >GV|YP2¨œÑ†PYÜ^cö]Ÿm¦HÒºÍ=%U5À$É­ { 9;ûݹ§ýe&)¼í>Ê<9Î ºag¤Ûø¢Ž9[•ºÎÖ5H'µ3¥jQ"qtã6÷>LbK$À|u½O÷ÿIãûXß¿û÷û÷w·–S€n‘tƒ‰â¥Ü_à¡D 7g‰¬.û2¯Ê?=ŒkÀíSÙaéց‚&c +šœQЄOy;®1nÕ萟'+Le+}É 0o ¥G€QáïƒÝÕºV™ó ´§rÓþ:¾ëà’v; “Dö煁€wzt4åaÄÍkš±zžô˜E©Po–Þ÷P£'ÂÓIê >Så†3 Ê»þr!pδTDzL±Ÿ+©©–ä/cQ_o·`²ŠFï€å[oá”@³ˆ`ñ¤n7$ñvæۗJ’Èi~ïob}ýú}¬—þy`•MX–pa««a@… ”#ÄrÊ"°e +š¦¹ª<Çdgùð Ú¯(9¼ªŠj»pÄ°`Oþ¸¯ÎþŽ‡€Aˆ@ +Ð%¦úp*&x4¸.Éü/ÛŸ2 ò¯[ž~‚+x¿ñYœ_mšõ@ŒÓ  t=´-ñ…†]¢‰¶~—åYœýXæÁÇÓD’ÒBòÚõýá§ëëCÑàUxƽbëf7Uù˜_;‚š%ðxа^¢¥OmÙá»w^zóóŽå‘ó-u¾§1ë¿÷“NÆ×Y†áÍGn™ò ûÀ¡ð(SR09J1T°_¾zK›6ßöÔäÀôYLmHA®õn°oZhÉî˅<Ÿ%’Ÿ„öØø 9r +endstream +endobj +1097 0 obj << +/Type /Page +/Contents 1098 0 R +/Resources 1096 0 R +/MediaBox [0 0 612 792] +/Parent 1084 0 R +/Annots [ 1094 0 R 1095 0 R 1104 0 R ] +>> endobj +1094 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [195.528 205.808 202.004 217.662] +/A << /S /GoTo /D (Hfootnote.41) >> +>> endobj +1095 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [307.118 138.717 500.394 151.235] +/Subtype/Link/A<> +>> endobj +1104 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [109.858 125.332 304.13 137.282] +/Subtype/Link/A<> +>> endobj +1099 0 obj << +/D [1097 0 R /XYZ 110.851 704.063 null] +>> endobj +1100 0 obj << +/D [1097 0 R /XYZ 110.854 617.785 null] +>> endobj +1101 0 obj << +/D [1097 0 R /XYZ 110.854 521.148 null] +>> endobj +1102 0 obj << +/D [1097 0 R /XYZ 110.854 455.871 null] +>> endobj +1103 0 obj << +/D [1097 0 R /XYZ 128.787 153.825 null] +>> endobj +1096 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1110 0 obj << +/Length 1173 +/Filter /FlateDecode +>> +stream +x^}VKsÛ8 ¾ûWè²3òL̊©ÇޚMÓI'™v'¾µ=Ðk«‡+JMÝ_¿+V\2)rµn‹¡2l¹’‘ +×ÎËL„Ÿ—¹׸á¡iúîHüz°=1ƒÝ¯ª²ùVëÉÛݕ´ÏÜ]´m›¾½Ðà¡íõöñtSÌ9Ûë²ZmuU–Š¼%eӛ®ÑžM!ânbØ_…8b ÃÛÞÜCþ&©…ËcØÅt÷£î–< +_ü•Oma*Kf—ˆ++endstream +endobj +1109 0 obj << +/Type /Page +/Contents 1110 0 R +/Resources 1108 0 R +/MediaBox [0 0 612 792] +/Parent 1084 0 R +/Annots [ 1105 0 R 1106 0 R 1107 0 R ] +>> endobj +1105 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [443.549 495.096 450.025 509.418] +/A << /S /GoTo /D (Hfootnote.42) >> +>> endobj +1106 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [318.789 480.65 335.725 493.336] +/A << /S /GoTo /D (figure.5.3) >> +>> endobj +1107 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [200.645 468.607 207.12 480.527] +/A << /S /GoTo /D (Hfootnote.43) >> +>> endobj +1111 0 obj << +/D [1109 0 R /XYZ 109.854 704.063 null] +>> endobj +1112 0 obj << +/D [1109 0 R /XYZ 110.854 582.928 null] +>> endobj +1113 0 obj << +/D [1109 0 R /XYZ 128.787 462.43 null] +>> endobj +1114 0 obj << +/D [1109 0 R /XYZ 128.787 426.564 null] +>> endobj +1108 0 obj << +/Font << /F36 327 0 R /F47 359 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1117 0 obj << +/Length 1410 +/Filter /FlateDecode +>> +stream +x^¥W[¯Û6 ~ϯ0ºp†U[¶û´ÞÑ¢í:,Å´}pb%që[m§çd¿~¤(û8§Ééeȃ(J&ù‘Ÿ(åóLx~‚³8 <­CE‘·.gï>p/ƒÅ.y—vgé©8fa @.¼¿fÎ.g÷ž* X†Ò[n<É5Ó +Œœ%°u™yïü§ùvߚùB†Ü™º?_(ÁA[¥)_¦í\ÄþÖíyTgNz’Ûóæå<‘þrþaùâÞÓPx K´Ôès‘@à±·KxD.ٛ—KŽ„äÜoöÝî3È1Èñ{ò_[Â(æ ÍA÷‹ýg,߉èÀ "Ká-™üX6ŸY4 üÍ.„,üMÔB{ âco’¼-BÅ¢$>vךÆ.òŸRkRWõwíþ)õ`{q*Y˜1俬¿¤«ÎMîViiÄï+\Q'=nß"ba~Éâ(!?Ë]¤ +üË9´íô0סšÈßÔ--õ;CÂ{ÎeÛõ4©AS$Fn:÷­I×;Ò­}Üt at Qù+ÓåD?´üI  +äbç“v +Š™ÖrضïȚ·P:‚=d4`AàÈSWzæ‰=@8ÚìAje¢ý›Þ´”‚6³ DäpÃÎk 00€¸¦» ¥]Zm±’Ç`˜”ħ¼ÚÒ´ß!¹Pª742g˜_ŒüšD|¹3].›Á4’‘€ÞV1$fà蘁KE]mÝʯë>_»Û×EÒj.Bÿ@ê´È·U –im]WX¦`Ô.˜¼;lÖÖMc2·Åm­[øÔ¹«iü„96pé¸ \4G¸ºü_§Îê¹ ýˊY—§~ŸØÔJûQ\õZAFšÑ¨]¦d¡ˆÉ±ßí:EM#vA]Q,†WL;| is’!¡+áb 1­2w¸§!»³]š,ߗp=¾†Ê¯_Cc‘säé¹ ,Ñ¿H ì«5– JØH…DÃсGqäM[S¦yÕÑ XgΠí)(õƒ‡EÄh‡çk¼.Àoüĝr<+VrªîP®j̐B‚eTnZ²ìÇ-}ŽÑ¡XäeÞ[>¢šF%i\å=5*h{»Üž-ÐÚã_ï ÷+¬]‰D¯àÔ£/úf×Öûín˜˜ó쮋äd_O˜ÔáЯ@s²­Ãë_Ã6w”nڒ‚)ymêÍóG'M…,Ö× „¯ÿoÛWU+ § ;‡2aBŽ(ía+@#”‚?™‚IÚøàÕcÅŸ“ð¸M7=‰ðÿ7ašä÷ð "éžp·¨¼p#òæ.݆1{²œý  êa +endstream +endobj +1116 0 obj << +/Type /Page +/Contents 1117 0 R +/Resources 1115 0 R +/MediaBox [0 0 612 792] +/Parent 1084 0 R +>> endobj +1118 0 obj << +/D [1116 0 R /XYZ 110.851 704.063 null] +>> endobj +573 0 obj << +/D [1116 0 R /XYZ 262.811 655.389 null] +>> endobj +1115 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1121 0 obj << +/Length 828 +/Filter /FlateDecode +>> +stream +x^UßoÛ ~ï_‘G"Õ0`»o©Úh©¶©ê¬IÓ:UNB&ǎŒÓ5ûëwüˆç¤^µsÀññÝwÇù:¿˜Ìx2¢Ç\²Q¾QJp*øH +Žlå«Ñw$0ÃtQBºoÆ4EõsSlÇÍ«VÁA;·£ììG~7™ÅÐp&„&£ˆ1,¨ôùF5jÅL"müXWaáeÌ*J½òÓ]nsÎö¶]ãn…­ëæÄ-€-ë +v¶ºzöó¶ã&\2ýt#¹%j™+IÊâìxòÒheü%¾ ¡b80€ØO$ ï+=KMár³ YIËàãêÈfS4*Øõâ§Z¶}gã7ÂK‡c~€¿TƸÐ{XA†Ú~aڝG"HÝ %ÚÞSuE~ÐíX"N +¦¶Pºš° Ã5Ae†Ó4îé=µ‹Bâ$MŽŽÿʁJÏÐþ¿.,Ï¢@tLÁ<¡o…pÁñÌçFû‚@Sw•'ôcè]‘|9˜Vmý™¯vHm/¢(&¼‹û#¾À¡½±½Ý.ußMÊâ`¼YÕÞs½o ÛGç¢i½¥+?uî Ä)@)¼  I¿×îÚóVwÒHÈY}À‚“Ðõpe”7W‡ªØêeX/ž vdhšb–ÁcŠc‚ =›4îäËp&™ô-¤¤q ”b~Zîoæ0­æθiŠuëM‚³ Ko?2¬»}ø±ðb„²s/š\Q÷£¼¸Í/þ+endstream +endobj +1120 0 obj << +/Type /Page +/Contents 1121 0 R +/Resources 1119 0 R +/MediaBox [0 0 612 792] +/Parent 1084 0 R +>> endobj +1122 0 obj << +/D [1120 0 R /XYZ 109.854 704.063 null] +>> endobj +194 0 obj << +/D [1120 0 R /XYZ 110.854 666.202 null] +>> endobj +198 0 obj << +/D [1120 0 R /XYZ 110.854 531.609 null] +>> endobj +1119 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R /F65 612 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1126 0 obj << +/Length 922 +/Filter /FlateDecode +>> +stream +x^}UێÛ6}߯ð£¬^%ª( +l²»Å-RÀ~k +C¶)K¨L½Ûýû 9”l§Jž4œËáárôq}÷áYæ .I®s¶XW Æ(ÑJ.T.‰’j±Þ/þN>Õåə>]rE“,ýgýyAKYÍfüÑlû²oÌàƒžE@¤PŠ{LÈU’ð"ÃÜĩν«GÐÞ¤\%¯Mø¼¡¯«ð Yh¼XgZ¡3\=||A£ðkÙ›=Ap*–Îà(È@R’ƒ30ÈK—ŒRš|ÂR¤ÿ~)•DÈl$/(ôR:ÿÞvÛ²E„Çҕh­ÞÛ®ý‘œÅ¢¬ëp0A“áºD±ë’L€Y at e¨ØT§Mý6-¡bÊ»ŸƒR$¿+ŠÌ+Ï0ò™i+endstream +endobj +1125 0 obj << +/Type /Page +/Contents 1126 0 R +/Resources 1124 0 R +/MediaBox [0 0 612 792] +/Parent 1128 0 R +>> endobj +1127 0 obj << +/D [1125 0 R /XYZ 110.851 704.063 null] +>> endobj +202 0 obj << +/D [1125 0 R /XYZ 110.854 666.202 null] +>> endobj +206 0 obj << +/D [1125 0 R /XYZ 110.854 451.487 null] +>> endobj +210 0 obj << +/D [1125 0 R /XYZ 110.854 413.82 null] +>> endobj +214 0 obj << +/D [1125 0 R /XYZ 110.854 344.817 null] +>> endobj +1124 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1131 0 obj << +/Length 1625 +/Filter /FlateDecode +>> +stream +x^µXKsÛ8 ¾çWhz’§5+Rԃ½¥IÓI§»³›¤»;Óv:´Lۜʒ+ɛæß/@P~…›^ڋE PÕ^QéÉøaé ÿ U¼/7ÚöæÍÃPåây +U@$|Ù +šðBaÆ]̐î$e’‹èöBAݗ¦6Ï6€åúGþ;™ ‰·fx{R¬àɂjþ¤b/T|ûÓg<¾þã§(~ìñ¯Q ߘ%àí »áפ!ØxïËÙ­+u¶ºÔƒ"cð8?ml +»j»ÊÌ=¬mGæL‚§·ã…þo;WçA݁Út ™+(,ó¹Å‹èC$"ěc4ÜhxØ`Ít ðéuÜ}}Äé§$KBNóR2%v½½h¡ô}Ÿ,€bÆzŒ×‰ZŲTžj}òÞ#Tbˆ8Â~sÀŠ΂ï)¶’¦OÁÕXœtÛf°k/€»§×ĉ÷^ãʳÿ.ÚÕeÊê=zîaó«ÚmðÉǏÀ'áñ¹/BîJ?͜zmÊ3gf¥~Œ¦ÜÇËb» ùþ”‡+€¤Ïk¥¥+ëB²2‘Hà ¬Ûø¾VLå"GÁ”©žZh¶ù®ÁÁT€þø |v®§Cb?tÛjغ‘æþ`s=®¢mbÓ~Éé5‡eôþmÐÙ}÷áU-ºv}¤4¯Ï§®Ýڇ߯ÿ¡Ñ­ë±iü×ûvwûi?؇^DzdBÁ#¦“‰ÿï Ì!mœqT+8^)õÿx®Ô|cÚé…ï)°Ô²œÆŸ„ð£wÛÚ÷+â…ÿ&\œJñâ—czüwŒ§o +endstream +endobj +1130 0 obj << +/Type /Page +/Contents 1131 0 R +/Resources 1129 0 R +/MediaBox [0 0 612 792] +/Parent 1128 0 R +/Annots [ 1123 0 R ] +>> endobj +1123 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [353.517 623.843 359.993 638.166] +/A << /S /GoTo /D (Hfootnote.44) >> +>> endobj +1132 0 obj << +/D [1130 0 R /XYZ 109.854 704.063 null] +>> endobj +218 0 obj << +/D [1130 0 R /XYZ 110.854 666.202 null] +>> endobj +1133 0 obj << +/D [1130 0 R /XYZ 128.787 213.183 null] +>> endobj +1129 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1136 0 obj << +/Length 1853 +/Filter /FlateDecode +>> +stream +x^­X[¯Ü4~ï¯8odU6ϝKßZÚ#Z Ê©x ¨ò&ÞÝÐl²äÂáü{f<ãͅÄËf<žŒÇsý²¯ž}s¯Ò;¡ÂX%òîáx'DfZÝ%Z…¶Ê»_‚$”¡ØíEEÁ›? {ª¶Ùí¥Ž‚ïLSÖ¶£Å}g.öq'¢ í>ï~}xGÚE˜kí´Gw{)C-Òûޚ¾mzzù¸“ޣŇæ±jʪ9‘–8ù-gÛYzÍxb +hq1¿y½ÝâDÏo§ÑËgÖÒ¦øü‚/²0A¤¡Š5Ø¡BedÇÇH¤[æ™Å`´²;¡ïÂþk6› *íÇ(’-iyx¢gmšÓhN¶÷晁í¯×¶nV_ˆú騋óRù·ÏŸÃ†ØºÍžLüï·ù(e ^,l ”Útæ¶1…ûÙ5Ý9Z,ÎÉ£P'ʟT·Íé·ËuË"„"˽ ép†Xó ƒí.UcÐåÞpY…Jç|ëü–K»}É jà¥#&‘)˜UB삾èªZŽJ<¤†®Âð8²Å§>ãËÖ^‰{h‡3Q}u©jÓí´ÂÝ^%Ú'°;–•z@æ™x%g at uܓí~M‡ÂUŠËàJšÂrJ[,§G‹¿`ÎY>ñÿLæ·Ðb)¨`(LÏÔ#ß HÃR‹Ô'–»®SБ½ ˜Çù¤Ñ•àRÌ÷ؔþ¬ª¶“%è¡hé›ÕÑ2ÖÁµk¯æ´Ó¬«Ã8 ; ù‹õ« HÅ'é¸Úbp‰ \ˆ°GµÚú‹©«á‰];Ucéj8¨Ë@AlØÉ·9Èb/%òsCÎéi ®…ó:\hg¥cºT! m–Á$Ä ga,=Ç:³º•3PKÛÑÖÕô¬ÀëÅȌ§s¸eíÃÙùFÄAqn+,¤=o8L•¶vg²·KÞo½¿¸ô0Øwˆ DÙu‘Ù«Ò CMq’© ºíê'ZQ8d‚ +Š˜;<]-Q푞 ‡¹TSP+åې,…ˆ–ý òg+2–öDñ¬o‚ó0é"@¬S{RtëD@›C;ò1S¹œƒËu’}øáç·?¼Þ,*…©º%+zùÞ»žG‹Íت$Ôò[Õ2ê„ÚwBÞ:!ð|'ÔÙÌ ¸1¿-îNÐÌË£gÄÈG/ç¢ÃB*X5Wàøæ« Û´îccl*è,Þ¸~€` á2…–…©ëž_ojÔ"©yߋ4õ½ºtèOˆ l±+ÄBcï2 q +ÿ|"Î2¨°75¸‡¼k@(x³¼'96·’’3e¥tÃÄÙJµhLÇÒ«ñÊոŮÆÍ7­w+endstream +endobj +1135 0 obj << +/Type /Page +/Contents 1136 0 R +/Resources 1134 0 R +/MediaBox [0 0 612 792] +/Parent 1128 0 R +>> endobj +1137 0 obj << +/D [1135 0 R /XYZ 110.851 704.063 null] +>> endobj +222 0 obj << +/D [1135 0 R /XYZ 110.854 666.202 null] +>> endobj +1138 0 obj << +/D [1135 0 R /XYZ 110.854 621.234 null] +>> endobj +1134 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F46 637 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1141 0 obj << +/Length 2334 +/Filter /FlateDecode +>> +stream +x^•XK“Û6¾ûWÌ%UTÅ¢ €ÏÜ&θâT’rmƵ‡8å‚(Hb–"µ|xÖÿ~ûŠÔp’ÊE  Ñ¯»ùýã«7ïâìN©°H}÷x€aæI|—&q¨aéq÷{ðxr›­N¢àcóT5{è6*ÚÒõýæÇŸÞ¼3éü èn«u˜¨tv„*¢ l³·Ýžg÷ß¿çÛ¨$ø_é.CÕ6L:c]5Ç7£ÜŠÄKÇ7ÒdG»ŽU#ó§j8ñhð×u¶êá ž´þ· JŒ"ª8Œcq!ÂkxdžÈ¢³,hÔ@–ÓøOàÊ¡íÎ=ÓήÁ­nÏ+v×â‰_ðDž›­) ¨¡æÒÖ5ú‹+«OQ¤]/^XêdEâv÷§+6‡õv¡ÝÉ3"©¬m߇t’ÊÂ$)ä¸äÆÌÝ9ËäÐYê$xÚ(Pa÷&ƒäT°h7ôr¹,2ïör²½#†ûŽ}%^øÊ6 +•ŽÁa@˜¨`a>E*[ó+æALïICÖ Þ4™óš(Luî™{g»É‚sZ;ۀÏçÊó“ðèI,æ†Áª6Lй‹³ƒÛ×_™ ¬»QAÝ/v›à⺾ml] Â×µãP5p Úd›ÆaK³O£/NLÔ\èX‡i¡½ÐŸ?Þþíáþ_oüüáÇûßVU¨U˜‰ß®gì‘ï°(qž{ח]µ#WòÎÕ-?:MTI‘à6Ýõ3@ðF~*PʱÛè(ØòËTŠªÍ–Oë ^Ö^¸aâ‹÷MW]V¥Ã8™ŒEîohT0¡\‡”ýs@;y¶DÜ70ºFàÔò:ۙ(CË$ËÓFÌ¿&x–„Yžþä(I˜+{¼?‘ÔlåPr':ÄÕªíž*²=¦,ô‚5ԃ§ÅêA¬Ÿ«4ŠŽEž´¢<ó|ÚÒY VºOše{†,^úœuM_: Ói˜a®REëìªZcDµÆ\U‹D9ÉטºÄ!ê!™¶šµÃ[}šE& áZÞ€¯‰¯¬mÆ HXê'‘C4øáq¡XQAi´×U³„‡s´SS{-…6ùlGG-«µ›( M:=SÛ۟îýøáåÜNÉ ’øâA>Å•‘âÿ,Å•>KqÆÄׇü”âp +ë²Na罇¯zʽà(ƒpê;­4ƒFJcQPí9ý…š1ø·üw¬ƒû­†I×$„ld…ù‘gWG՟yÊU, &‹ ªWòÓdFƒ%/ê{ŁçË $€­Ž£=ºíÀ²AD߇¢x‡•ñ80ë öÝpj÷L$;­nK;p+[) tc5U?{`¯Ö?ܘ! "LãY_µ"+Ý+endstream +endobj +1140 0 obj << +/Type /Page +/Contents 1141 0 R +/Resources 1139 0 R +/MediaBox [0 0 612 792] +/Parent 1128 0 R +>> endobj +1142 0 obj << +/D [1140 0 R /XYZ 109.854 704.063 null] +>> endobj +1143 0 obj << +/D [1140 0 R /XYZ 110.854 646.033 null] +>> endobj +1139 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F46 637 0 R /F65 612 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1146 0 obj << +/Length 1468 +/Filter /FlateDecode +>> +stream +x^•WÝsÚFÏ_Á£˜Ewú@¤Óbã˜ÄÆÓÌ4搣F–ÔÄÓéÿÞÝÛF2铖ÝýÝîíçñnùê͵õ„pGa({Ë ž‡A/ +WÃÞ2íýܙþÀ‡Žªñ9Z%[â$ªÞ“¹júÂ1ú¢?¤pT‘’ Ûð—Ñ…Ö)X—Ī´©UU3’Ým•ÑÄn0”ž³Üf¦ÿÇòCÏë DàAD.ïª2Ññ¡p2û•NQÖÄ@û:%zSVD¤`³j’º¬Xý‹zI®UÑìH#)S LNúácJb×[MD됂ŽHTA¿ÚèüùǞF¡£ò‰àÀ™>ÜrP �Ð o­È•®ì„çyΕª9¨÷v¬6U_Ď6/Ǽ¬@8FJ7܀ ­L›²K˜,Œé®ÍÓ ¿ãüÊl/ú°üŠZWŒŽJZ1=ìúQµ†€Æö"ɘkl€ÿÂRҕÊéXS<ÑY½dÉȳµy~´ž‘µ“»sÓV&9›åM¥¹ZI IbRQF¸/pAz²hsªÌq*Í[Š_(ãç{îP€ҍý¶Ÿw°¤amD?]4ODým=–‚=êNÊÕÃâr5›¯“ñý|FÚ¿ÒÇ»8uO ¸ž/&Ó÷³Õäóåän9ÏV—ã‡÷7Ë^ü êÈE2¢"‡¢¾o›W’bû̀“é‘ÄU¥65‘ž;¹Ñ_¤dêC“óm$;+=!µÄð­ЍW“å«5oëÑ +endstream +endobj +1145 0 obj << +/Type /Page +/Contents 1146 0 R +/Resources 1144 0 R +/MediaBox [0 0 612 792] +/Parent 1128 0 R +>> endobj +1147 0 obj << +/D [1145 0 R /XYZ 110.851 704.063 null] +>> endobj +226 0 obj << +/D [1145 0 R /XYZ 110.854 489.716 null] +>> endobj +1148 0 obj << +/D [1145 0 R /XYZ 110.854 443.642 null] +>> endobj +1149 0 obj << +/D [1145 0 R /XYZ 110.854 201.738 null] +>> endobj +1144 0 obj << +/Font << /F36 327 0 R /F47 359 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1152 0 obj << +/Length 1749 +/Filter /FlateDecode +>> +stream +x^Í]Û6콿"ÎÚ¨’üÝa×ë]{Åv-n)0`ÇVÎ^}v`ËMƒaÿ}¤(;±ÏíŠ=íI4EŠ¿å—ë'ϯ}±‚ž/ëÝBx‚ù·ü€ñx±Î¿;ú¸W™Ú-WçÎçºÈúÈ}¾ücýv!8gžt+ ,’x~0;!¡»8Co>T‡¢Ê6W_Rµ×E]m.K•TÝ~s]ÁyÂp­b—I±ó¼€QXÏ|§’9ëL‘&A<;9âmuÓ¥šH)@7cæÊè{n ¾¤¨è¤©äãÄù N~8ƒþËpK0µˆÇºvE¥o 8 tj0SZ&mKBù˜ã[&…søä³5>ȟ½oŠÏ‰V1+tžVöV™¹Øßfïùµœ‡ÛJ¸L@®DÌÂВ^TD:‰L°t‚"ó·ž;]Hp‹ìYêíŸ +ý"cá2ÿråÒ)ZZZʤºï’{µ²Øª'{ؗêAU:AQ«v¯ÒÏI­›}É<>)0Eô† +íäŠÈ©w´ ð©0D> endobj +1153 0 obj << +/D [1151 0 R /XYZ 109.854 704.063 null] +>> endobj +1150 0 obj << +/Font << /F51 451 0 R /F36 327 0 R /F46 637 0 R /F71 779 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1156 0 obj << +/Length 1795 +/Filter /FlateDecode +>> +stream +x^µXK“Û6 ¾çWø(71#>ôJOÉf3M2}LꞚΎ,Ñk5²èègÿ}‚’--“N½˜H‚ ðáåWÛ'ÏßÈxÅ9Ë¢H¬¶û)S\®âH1¡’Õ¶\ýlz½™ NmµQðòÞE04çª)uK[ºÞ-Èàc…뿶‰øì3!ÓUH܁é8sÇiï\ž8ea4m͛ÒÇP„,‰Å’ŸðòS,ºð 9ÉZ5ô˜¼¡o½æQðµÐ§¾2 2Zmd˜0žD« WL©˜8˜ÝߺèשDÐÌP—4ßieÐèª? nØê|\~ ±1-í;·Uß놨½™ï:é¶3M^WýínÍÐWîhÙ8öÆބ²†s!OyÛãސf#\±æZçuÞÜù½Þt']TÃP´¹š¾:j¶Þ¨Xo{¢VŽÕÐé’fVNdJy°dTOµ>ê°1ªs!"Ê%8'‚ÏPdÓ,–¦ëÉÐØõ¦u‹UÓëôE U³7íÑÞü )Y°7í¸pm +wläԂ¨Ç_•$@ø:º>+û6?ºM;ݟ5Z?èEUsOŸ§CÞéŽÙKx¨Ìæ7½E0„*È˲²Z³_8’ªaygª_ðǑæ–< rwèáT(3~8ãÒG7ÇÏZW^.¸yút:°!O˜‰9Å8^Yp®êšf :M¾°ìZT"Œ Êè¥ôԚBw#Ü%3ÿD€¦ „)€¦ÇfX¡¸;ôx‡pŽ†+è­8æ4Ts?˜¡£m98.­X˜Â+ðç~äïjŠ%tK Ah ƒíl‡’à8å+j¢Ñâ +*¦æQ$îlɇ³1µ”´ˆ‹7œxë"ÜéŠ3°‚r߆–Ù¹/dy¹ ™TcaœšÁ2nÈ{ÚV9Êqè#hn[#›šÿßÚftJ)”uÕNkú¸½¯ÁOÐEَJ,ª_t9o°äiÄÒÇ2ú¢Ñ=1‡(0¹4¶åT[YˆH•0•ÎÒjÈcÖcÁ¥†¦†V‹ +XAÉGݶ¶m6MM¾pI +¼lo4;’¬6¨BGŽUchœš:å¸RDC%î FúÝDPèÚæO8©¨Å€s45öHü-¼@ôKãG¦¸ +í>;@<Òÿõ éjWõo$ˆÆÜg ]z-çпˆ©» +Rrek@Ìq­~áKkSP„Ô©Âl|Ǜ»Û_^ßýúæî÷í˛÷ÞH +ú᥸&êºÍU² °:´Ô ¸HÝ8 +u ÑeÅ §®| ðr- +ÛrÂVp"ŽÑ+8+endstream +endobj +1155 0 obj << +/Type /Page +/Contents 1156 0 R +/Resources 1154 0 R +/MediaBox [0 0 612 792] +/Parent 1160 0 R +>> endobj +1157 0 obj << +/D [1155 0 R /XYZ 110.851 704.063 null] +>> endobj +1158 0 obj << +/D [1155 0 R /XYZ 110.854 469.645 null] +>> endobj +230 0 obj << +/D [1155 0 R /XYZ 110.854 380.075 null] +>> endobj +1159 0 obj << +/D [1155 0 R /XYZ 110.854 329.937 null] +>> endobj +1154 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R /F71 779 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1163 0 obj << +/Length 1766 +/Filter /FlateDecode +>> +stream +x^­XKsÛ6¾çWèH5€ H¶'DZ'鴓ŽãžšŽ¡ ‹Dª|Äö¿ï. D…rݙ…« +ÀqgȟijªiÕ´m¿soyWH²Œ‹±2æKÝws_þ,àäΓ €ûuQé÷+×à+¦† C¡w³ï˜×\ÁD9™Ë2˜†Ô}phq=™ìyÉ s&Gæ,‰ÕÔ³ÖTý~Ò%X´>IR®ÚoW®î©¨µ«„2ôêÔC®bƒ… H#Ì©ÀúÛ_¬­ˆ‚RXÆWXØx¢ß.< +Åû¾7÷vÑBë:Ž‚6 sYLáÛï´ˆwBK„¡ŸÉGqccAðèAŸ0»š.¸~w}ë)ÌO§DÇe² ŽcI뻢þl=_„K“yK+æ“ÖúZ|}d}ø|o Œ@CGuˆŒÌ'þïa}ƒg|DIå&Oðaš(Xqc‹ŠÑœø‰ñµµ‹0/Âƾ© Û¶´"íIZu}ƒ +],ÐHF‹#(=3rlÀÅ[Šn-WÒn¡aÌClNÅ…Cä`¾š²~3.Ò‰/ ƒB–?u”ú&£V±T ¼‡³-é€@jjœT´p¶qºKlóO§G?xwç¾ËB—–} ÷ øЙѭџЍ™ÕñÕ<\ÍhFò7A¶º2Û²{¢½úÁ²ò<þîmó4׉=N†ö3ö—ø/ýóçr0Ôº¯|w¤â,:ª.ø‰€Ä_×Y¯ˆvÕ k01«£ÿG¸m|+…b¼º¾{õüs0- +endstream +endobj +1162 0 obj << +/Type /Page +/Contents 1163 0 R +/Resources 1161 0 R +/MediaBox [0 0 612 792] +/Parent 1160 0 R +>> endobj +1164 0 obj << +/D [1162 0 R /XYZ 109.854 704.063 null] +>> endobj +1165 0 obj << +/D [1162 0 R /XYZ 110.854 419.351 null] +>> endobj +1161 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F71 779 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1168 0 obj << +/Length 2172 +/Filter /FlateDecode +>> +stream +x^•XKsã6¾Ï¯ð-TÕ@ð•›c˵Nfí”G®2)LQŠäò1ÿûíF7)‰¡çÄfãÕϯøqýáû?¼PJ$A /Ö; ¥ˆsFh]¬·¿y=d]Ö´‹¥Q‰·Íڴɟ²-ýîª-½nŸ§o{[YꪴEÞ½£©ú./yâSVT x/‹0ð>/Ô^]ô|Ž-ù»Ýæ]Ž»,~_ÿôýM N–Ke„1!‰ÚvU½©-KL &J)Œ6°Ð-8çbk‡Áù^¿î3A'±Smæì@ +Œ;áÑsúZèp˜´ëË•¡}ómVvù)uÖ"'!#âX e‡¹`gÔ Œä+éåÏnlÙîœgpMZ•]S¤꩔®ÒH›¦U³ÍËgØË×^Wáׇ=[bKJ<*ð½¾lë,%·ÌƒsFz_*ðPªlacu¾ŸÓ} ŽpTZm3´|–­ë¦ª›ÜvÎÀSo¾äÝæÆÚk²®oJ#E¯¬šƒ-ŠWµ»Îd +\ToÆcZ¡¢dðÆæ±|ÉËíæ:+ \VßÒ¬vŸ ›Ðˆ$VÇ°YF2ðnwdl?L„ +υ/«$Õ» ¾-(Sl‰&mˆ¶åœ¬ +è Š¦²>dRjs…¶œ“ÓO„ŽâaÕWt¦-úŒOj黫 +N½öÚ%:;'@BèHøI4ˆðpµ¹»ß<¬.?ßßÍ'œyħ¯÷9±â¾~‚F!ºŸLFv åLìËöà‰½ÓŸæ4=„݁^ò‚c>žÄFÆč±¡4ún^K#g…Œ¢ð#¾Zk5Þ<^nnî®V›Ç»_oï®g¤á+,è4³ïÒ7ZH5 at RpÜþêÓêòîñ—Í/ÿ¹ü¼šÝ_"R9/}ûÜr´f“R^^Ã:8j1³1RÐÀ8Ü9ìà ƒÙ‘v¹M£Ä+7ˆ adr¥«»ëÍýÍæóúòêçù4‘"ŠG'Üâi +°¯Ù"Šhå;]‘e‡L™óR,E"ãiŠÞTMšmégöp +)G,N‚H\@]2¤èêT21&`"gâ9TÆ2ëû± šfm˘AÞ +¡g4™M÷YKL†æÀ{KÃÕn2Òv6ýƒ"”Gf?j45Çå1!\>:Šý ”ƒ@ø2L#I®¢°­ ÇXÁ-}›ì,í\éTã|t;ÍfceG̼{üôi¶$+ÿX¸AWÚ´®ò’û ® ôܘ6ZÇ,¼¦šËI€"bMsQ~:‡c(ۀoÞÀ8ôNwÜÈvé~X货ݩù¡_,ß¹ dÔÞÓ+qSót9W?) ¢à-ðòc+œ×04.±;Ëà9FGˍF&žóÓnVÓô®¯á^´Šdx^ÚoÑör at v (f1ÌN”>éÒÒ4.ù¯Ã;UŽpYzÚ{¾ÑÁ¤ ¢±^½§ËÀ~ôÅGÌ8+z‘?5¶y]¼ÕæÎ(® ¾©èÌéïÌD—d\芧뱹µe“CƒÇ8+µ·:p€³dgú¸ˆ6‰ôê¦à2|£0ÖÊ´èémbnšp·/È †p×É[¦Ô¾òØ­ÿ wj)B­§Æ$, Œ£ ƒ!]‹‚®Î®/›‘Å" +þr;þg,Š]÷-‡c°EÃc,}¨”詏¥ù€PËSjÛdíÀg-T·õp’Cƒ‘#=Ùý {ñKވôigFŒ&Ç¢YÈÓù“ CÖÌYäÐ$ +]Éđì½->ζ_ˆ¹IĆ÷“pˆHb¿Ñ”% +n‡cŽ¼#§´Pz„NÜß=²À¡çÌü̆0®ó‡I®>¿ä-¯!‘ÃQäèo|©( +ñ¤(¼§|Ã25nÕ̗‘˜“›Õ{îthsR]iH“ÈLÞÁÐwøt`é³ëAGì$ñiü™7Šy8‘è^°ýª–õÞ¢¹x,Å`9¾O8TÀ}^²†'¼ò¹kŒq_ õZ `rكp£vDË舕ø“rò‰YÛ (02¦²ˆË@›Ì]1$:W|ÍÇiNáW+endstream +endobj +1167 0 obj << +/Type /Page +/Contents 1168 0 R +/Resources 1166 0 R +/MediaBox [0 0 612 792] +/Parent 1160 0 R +>> endobj +1169 0 obj << +/D [1167 0 R /XYZ 110.851 704.063 null] +>> endobj +1170 0 obj << +/D [1167 0 R /XYZ 110.854 284.983 null] +>> endobj +1166 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F71 779 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1173 0 obj << +/Length 1598 +/Filter /FlateDecode +>> +stream +x^ÍWMÏÛ6 ¾÷W=9C£Z¶ü՝ڵZ °e§u([I´:v Û}Û_R¤Ûõ»;í1¤HQù~µòüm&7RŠ"I¢Íþd(òDmÒD‰He›}µù3øôGó`›êÓo¦.fû×þýó·É\-8»(Y‘“Ö—ÖVÛ]†+ú©D¬ÒÍV«Wø&a×»¡ìçjo¾–æÚÛ¶!Í<Iˆg‰°ˆHó'/ɄÌâ̈́mFÅOíáoSöp€ü™ÜÓ©ûàw,R?±P1ûÃî‚PW×^õi›Ú;âyí‘VÍÿÍV&ÁWÛõ¶9M9£÷Ä'T¡}썛îÃSwõ²6º®ü§­(t;™‰$)8v ùjÁ|œ†% ƒ«v½Õuý¸Có°•aÐMEŒ®×ågð#Móà%©”°„}ËëÙv$s-zeˆí™¸6q½©h‹îG%Þf–`˜È5ô>œ¿y­›Êß7.rðU +4âÍ!˸cë.†‘g۝Š“఍Â`èITيTš–9Žß˜î¢kâ/¢Ý6ˆ,I‚wýš‡¥:WŽ’ãhÙ_ü‹Â’£4è"þ9bà¶`P¬–ÊôõÒÇ lž¡2T"Ï8çºs;Ô>¾ßˆÞ5‹ð—Eþ%aµ—km.¦áÎìú³k·QÀ±˜i–ûmÅŠç1×¢ +"ž»; ƒ +ÜÐôöbžá¿„+’ϐ ¢gÜ͆í}§+UÈQ‘  AÏ{°=>L4>°:í‘XwÌÚʀÂ\PÁIQD+NÖðÉ끭aT9¢«¬môLA³9øU'ÓG€lÌÜPbÑëÁ"Pâ^<Éo¢“€MÀƒD.`뵩M¿ÌÇÿ2 ¬šO +ÉÿsR ¿=på#,åÁÉzTò¦!Ör +¡²›!51¤ ß»ÒÙkߺŽz”Ü·wÆå¼õ|Ï'Ư†Þ 4҆ƒéŒi–è¼µYlé‘*xŠS<% £~×6º¶=o¹ ³ý·¾éut%¨ÛÃ3¡»¬j›²*3³Óñy-s!—Ö†2|;”w³EåwKÌ¡1âd¢l»e/RiøTöò{»Ñ±…Qÿ%FäÑÑær€í×övÕüæ÷êd°l+à ¸ƒç"ÂA3KEš¤^Ä·ª-D‘F© ,ñC%’‚›ú˯SE6_¾zGÄkŽÈP…H‰þEL½p"D*zÆk(£å.™½ +Ýxòfÿä; d¬Ö +endstream +endobj +1172 0 obj << +/Type /Page +/Contents 1173 0 R +/Resources 1171 0 R +/MediaBox [0 0 612 792] +/Parent 1160 0 R +>> endobj +1174 0 obj << +/D [1172 0 R /XYZ 109.854 704.063 null] +>> endobj +1175 0 obj << +/D [1172 0 R /XYZ 110.854 644.557 null] +>> endobj +234 0 obj << +/D [1172 0 R /XYZ 110.854 441.036 null] +>> endobj +1176 0 obj << +/D [1172 0 R /XYZ 110.854 393.487 null] +>> endobj +238 0 obj << +/D [1172 0 R /XYZ 110.854 276.641 null] +>> endobj +1171 0 obj << +/Font << /F71 779 0 R /F51 451 0 R /F36 327 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1180 0 obj << +/Length 1380 +/Filter /FlateDecode +>> +stream +x^­WÝoÛ6Ï_á—ò³"Eêc{J“¶HÑuEâÖ"-:¦H†>âä¿ß‘w’)GÞº-O"ïŽÇãÝï>ôvyöæ}Ägœ³D)1[n`é³XÉY¨$2š-³ÙÞÝoå>/³»ºýp3ÿ¶üø潟 +ÊBø,Jb<ÔåeÊù"ôý— +f\²@†³|%|퉯¾ò›¶îÖíøÔeU¶ú©Ås‘€«\ÅüDà¹-'b< +fyÇÎQXÓ/2ýWñŸñ%Aè¾dÁㄉÐX0eËmÞÌáu¾·éÊu›W%îjÝvuI¬v«qÊÅ*oqý8ÊK‹ŽXÕæHö>7s®YF6“É]Z§+"aq‚ûNÕɱ§’€ ÕK3ºÕWL…ÑøZ›ßAx+MøÎÁ+?— ¡8+2QП¤ð¹8–âÑOܚqönyöä{] +endstream +endobj +1179 0 obj << +/Type /Page +/Contents 1180 0 R +/Resources 1178 0 R +/MediaBox [0 0 612 792] +/Parent 1160 0 R +/Annots [ 1177 0 R ] +>> endobj +1177 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [281.891 587.537 304.805 600.223] +/A << /S /GoTo /D (figure.3.36) >> +>> endobj +1181 0 obj << +/D [1179 0 R /XYZ 110.851 704.063 null] +>> endobj +1182 0 obj << +/D [1179 0 R /XYZ 110.854 644.557 null] +>> endobj +1183 0 obj << +/D [1179 0 R /XYZ 110.854 535.586 null] +>> endobj +1184 0 obj << +/D [1179 0 R /XYZ 110.854 325.495 null] +>> endobj +1185 0 obj << +/D [1179 0 R /XYZ 110.854 187.632 null] +>> endobj +1178 0 obj << +/Font << /F71 779 0 R /F51 451 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1188 0 obj << +/Length 1545 +/Filter /FlateDecode +>> +stream +x^ÅWßoÜ6 ~ï_q/|ÃεäßÝSš4CŠ®š6`­»3â³o¶Ü,ÿýH‘>ÛgëЇ=™¢(J"?~¢ß®_½¾ö£…n†r±Þ.„LÜ@ø‹( \ċu¾øÝYïõråû‰³Ñ{µ”žó¹¨Ò-}wjTe´Îi\WåI{]‘dö½õ¶«2SÔÕÔG¦Ê²_¿í7PlÔUE•/ÿX¿_¬Dì†a +ßÀ ‚ˆÎ˜Õ°ûR„Î_f¹’¾t9ÇF·º2Eµ#¥ÂpöªÊKݐnÛ¨ƒþ吶Eåã¾Èödlðö¨;ꦭ+Uæ‰fšº×<ûX”%«µéš +úú:ãèzÓ3ßÿòéòþæãíúâÇû˟>®ßý¶¦egI |7ˆ$,·Ë\Ø.zSїÂ*E 0 ÍzžÄ%„Oâ+7Žã²€_M$üf5@ႃãâÀ¶¡‚óåô¶aó}Ÿ6Ta‡Bàò´™â©q§Šáلý­£ñ\óhê#×cŠŸ$qe +`Ž¤rµ¥á)E©›F2"¨Bº„ïì…Ëð¾øñ +ë ½^¼½!áªQ[F£ç¦©‘|oIﻒ_MÉ?¬ÒòÜJÄoD€Çxõnýêo&v¡Ó +endstream +endobj +1187 0 obj << +/Type /Page +/Contents 1188 0 R +/Resources 1186 0 R +/MediaBox [0 0 612 792] +/Parent 1160 0 R +>> endobj +1189 0 obj << +/D [1187 0 R /XYZ 109.854 704.063 null] +>> endobj +1190 0 obj << +/D [1187 0 R /XYZ 110.854 569.289 null] +>> endobj +1191 0 obj << +/D [1187 0 R /XYZ 110.854 402.005 null] +>> endobj +1192 0 obj << +/D [1187 0 R /XYZ 110.854 234.72 null] +>> endobj +1186 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F71 779 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1195 0 obj << +/Length 1706 +/Filter /FlateDecode +>> +stream +x^XÝsÛ6 ï_á·É[̒Ôw÷Ô¦í­½Û­×¥{Yw9Z¡c­úð$9©ÿû(É>mÍöƒ$€+v6Z ™+’wû©y,›»ÛÖ€œÛëöή7 ÿ,c‰BV*–" c¸·4Ýúޝ¤B¥áj¶}{{˜Ì¹íȤûFE¡À·!¢(¡;¨§lRú+pé´ìéw vìŽ GÂ7gÇap½VÁ?qn;¢[à`²2ÍýÑÜS–Æc³a_¥"ŽósW e ÂuU¹íLw¢Åã¾,öDö¶{X«8°=­ÿmð7+ÛíÖJAæXÚÚÚáÑچøœõNЩlMôÑeA±Ý…LòÏÚô[”Ÿ¥ÔðKX4mL)·µUÙÜÓª·µi†²è¬ó(x7Ð>úޝŸ ÔÁÐÒ>™ Dá ŒÔ®3÷µm†%ïl_tåÖº7©`{¢_r’š½47»–¹ª¶ør…tîNÇh`¦É@Q­• ñ9ñ^gw¶³MáÕ=”†v¶ +­‹‹×¸d2ñB‰šj4hã÷¨”9Þr DÃýËWï¦@Y¾Ú˜Ú +‚Öå B`V«¬úàÚ3˜ß/ANºŠ«9֜ÞËÒ=b͝N2éIxówmUµk ¹ß¿ µ©ºT›Š0ÏH-—Ö%ã\Hè3’h¨€¹!² 9Ö[™íŽö8Ý2§oŽèuU†B¥Á±wÅ+-±ÜÁ«Šö ýÔe¿©Í+¦Ô3”ÛÒiHâ@`y×Á[ãê`ÄN$îÃñ`S\º +ë.–ž¡-ŽˆñÅ~Fò|$!g˪"jËÙ¤ÄRî`t‚=¤Éœ¤q£ýv½ƒ|(Ìà +pŽµÙ D Û÷”,¹/µyr 8™ +ŸSs@ÎK©ó,Ò¢þT'KNV’®±—_b.È(È6ÛÓ`‰†ô„ìqU¬£WÖv'çòP²Ëñ`8˜BH»ñhßÑ Xù›]ä[ Ž‹R¼Â±A† }…žM&%ûò~O¼ýà+z"KN ZWXڝƒ¤‘bçeÓ‹ý^þüš ù™C¡/qDå"Ž|¹+ã¦ÁWQ"¤â9OÆç"OtBÌmz´zì'ø_”åد;³c¤Èsü'³_k¦Þ+.8šøFӗ\*}¡"4ãٛ›gñáÜÚ +endstream +endobj +1194 0 obj << +/Type /Page +/Contents 1195 0 R +/Resources 1193 0 R +/MediaBox [0 0 612 792] +/Parent 1198 0 R +>> endobj +1196 0 obj << +/D [1194 0 R /XYZ 110.851 704.063 null] +>> endobj +242 0 obj << +/D [1194 0 R /XYZ 110.854 666.202 null] +>> endobj +1197 0 obj << +/D [1194 0 R /XYZ 110.854 448.565 null] +>> endobj +1193 0 obj << +/Font << /F47 359 0 R /F51 451 0 R /F36 327 0 R /F71 779 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1201 0 obj << +/Length 1629 +/Filter /FlateDecode +>> +stream +x^­Wëo7 ÿÞ¿"è§ Ð¨’N÷j±nh†4 °bËömç;ãõòߏ%ŸÏ¹>Vì“(Š¢(’?Rú0}õöB%GB°,ŠäÑt$gi¤ŽâH1 KÓùÑA},ÒÀ´ŒQPŸÈˆ_Žtљã?§¿¾½ã}-qʒXqÚ>]ÚS£ŽÝ~Ñ~;]€î ZÓ¤õ6¦nªRyûì4T]›—n5/çùL·¦¡éªB•[˜¨,Xt5h©Ñ¸£“0c*‹N„bJÅdTWna?‡aЬª®pôJo6¦|ƒ“8Ð 1·¦(ˆòœMÕ49˜üTb˜º®j"gÖæUٰ㓐«àÞ8!º‹ª(ÈÜk"——KºScf¨ˆ‘“‡¡:‘“q×^Ho%v·ï´‰U،E Œ’E"Þ›/¸-4±É°ìÖ¦l‰ÓVnôò裏šŠ‚Ü+¢á)o·yãvÞÜÑX-ÜXºëZ×Umv"#ŽÛeNïà/!,M«Ë¶yG—ÄÁ办7fnÀŒ˜c¢µD<>جy$'¾XÑF{ʘ´çMïÏ'w§o?Nîωû âý؝~@ãéÕùäúávD¥üY•'×gWçww“OC•êgU^Üܝž?>\ÿvy}6И¾§ˆ$‡Q‚¥Ê¥ö ύd°!‹…ô…çr¯@@åjWºõ”!b˜ªÀèS&»º �À-I&öœÞ\O/¯v‰0f‘ +™Šwadcšc&£¸Wüý܀ª¡Xij¸ê²¬Z*OÆ]ÇÐnÜU•ÆÆвrOéfÌ<e,LÂ}‡  ÐêðÚCP@±çb¼ Sp™ÿ =ä,ésc¡RD"Ø@Æ¡ê{¦“\TõšGpÁàÄ! +£Ënҙ€Ò\A'e²Š]F @ãL MNIBØ[z[`‚¸³†8õy3Z©¼1[mcŠ…CÜÓ³¨. +Û6pRš¦5‰›ºš™yW›æ£ßÀ$+|;³:i$!æÎ'!ϼO+÷›—®/J.䡔HÞ …f¼:Ÿ¾úµ%¸¸ +endstream +endobj +1200 0 obj << +/Type /Page +/Contents 1201 0 R +/Resources 1199 0 R +/MediaBox [0 0 612 792] +/Parent 1198 0 R +>> endobj +1202 0 obj << +/D [1200 0 R /XYZ 109.854 704.063 null] +>> endobj +1203 0 obj << +/D [1200 0 R /XYZ 110.854 582.928 null] +>> endobj +1199 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R /F71 779 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1206 0 obj << +/Length 2350 +/Filter /FlateDecode +>> +stream +x^¥XmÛ6þž_±_ +Èh¬ˆ”¨—~Ûæån‹½$Ø:@æ°-zWY2H©[ÿû›R–¼J®Í}±‡CŠŸ™yȟ7/^½K²+!ÂB)yµÙƒ…¹J®R•„º6ÕÕïÁf•%)[»×ÆÔíÃj-U¼îÚÞ¬Dt +úŽÿKþ»-Ûjüq% £Zý{óË«wq:]2ºZK*‘òb7ûÕ:Nâ Ô,µ±][6ub…醾n]o¥{mдþ³²GIuÏûØ MåzÝ.¸µÃ õÔÕñɍ³ F E&‰³ðXÒlEð9RQÝ¢œÇÇÒjVKЋ— g±3¢å‰ÇYí4Ñÿ^ <Ôöay Ï»köŽºùˆ“r÷SÝ?²Öu_nÍú?VRe3°+Š`ߙ%óu +ñÁˆ‚ÝŒB34h‹( ):|aÆ(r+}ô±4åÄ:H°h{âÎ]Ù4ϗÅ3 üÙόUlì¡lË} �Ök[®dä@™Fp áNŠ¨àlªëŸoXU§q'Žc1Îþ¤ÑBé4vgÊ~÷ÈÊgȸŒ•X¥a~ý¦ª—bCæaZŒ£^.Í´Žs˜Kæ^øÁدOsÂ4”ùÔ°?¿Ó°‹yv‹óÄ JåGa‚´“E+L˜2¼%a¿ ŒLûÇÎjÖÍPff™:Ÿ Æ%øCÁ1ˆµ‹ÞH„y–̳æ A\88Α‰”"ŽxŽ+˜’aýh1Ȝ¸y«1'XœÃWË¥¢•B Žqÿ‰&¸¿ã9—ªU6€Å³är• €û%µ±>agÄ]$8ÝùàY°$¡:§í!üaû½ëí€beÙh‘LJÁw®ºÆøs.Ï%! ÇçeP\”œÌ—œp1׈, ÓøâäþŠÓ Ä‹q{OuãXn«ÏWH0–—‡L—«øﯞÀ'~õ‘¦äþ§Làtõžÿ)NQèÚæ4ïâʑ^x{<f˜ o¯K'UÓ›¥$ïxiÙ “B\‚óŸ×ïßܾ½»÷áÓû7‹V*ŒŠÔW ÌPq-ϬAĜšæQpm¹]zkìÐôcI”œ#VJÙ<›»ž£.åt"Òä9ݎy†¢í³c¢™RÎàä Ÿ*¸uЇΜ|’Í|®Lƒ/xåÑúÈ-H»/,b¶À‘`éÁϸD øÈbŸÈ\|±ªã(#yš°Yó„K¥Bn¢²”81êGŅãÇ(íÖ£ÎêqRï++‹c¿‹µ”ˆ}òœ£ jñʌ}|™Xð´ˆ",ežþU÷ÿ¸[rt‘†BŒ¹†êK9„‚à3$x…KLK °‚,x‡6R:Hø¹#>Þ!,C:{þn ŠÈ]=P¢Ä3uvK;̋0ÏÒê· +H&ršéö×á« .2¯½¨9 ÖI[í­\Dµ+À’c³Ð?‹5¬iqäX*tžK å?ûTó-äñ h!Ҕ´ +“béï”(œŽN">;íšU ,*p¯ä  8ß%eòìMK&îvJ}³jÞ-WÛ¥t=XwÂX1ÏU†E4ôÿq3Ua‘åçy¾q!ý[ó|÷…ôbžå é|¾zÒ°ùÓî9Våˆß°ˆ¿ÿš¶GìtŽÓ¾î ‘X*n(Zᆲ¾-ۇ¡|pgòÒeIÄdÁ4ÿ¶{YŠÎÏ'® ¨¯Çý\™¹³Û` à†ÀT¬gè¤x5† 4ºÑ$´Õý“&²CE_Dî+ï+?Ɇù.EX¤2å…Ð1ܾ$\Í`þõ&M`ô҇ÂSî袰€YYþ,¥“~> endobj +1207 0 obj << +/D [1205 0 R /XYZ 110.851 704.063 null] +>> endobj +1208 0 obj << +/D [1205 0 R /XYZ 110.854 643.75 null] +>> endobj +1209 0 obj << +/D [1205 0 R /XYZ 110.854 199.267 null] +>> endobj +1204 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1212 0 obj << +/Length 1899 +/Filter /FlateDecode +>> +stream +x^­XÛnÜ6}ÏWì£ñ2"%‘RPpbu€&@á Map%®­D+-t‰ã¿ï ‡’V²|ú²Ë;‡3gÎÌèÃ՛w\qΒ(««4}GáJF!¡Z]e«<½ÞˆÈ÷vUmò›’:….o:}c¨§k×ØëÃÁdÔn+÷ë&KÝæky?×<òÌÒ9yÙoÑ­»´Ö{ÃÖÿ^}ZqÅ¢(YmxÈÂP’h—;X&c+¢L¼º+Û|oh¬6M·7 uʪÞë‚Úïÿe…H»6¯ÊW§ËŒÄp^ª»›ÛöxWj¸ƒ†îÖÞînHk£[x;ŠºY’u{ aCYÁ5uœÄ( ¼¼¥Ñæ¶êŠŒÚ©. +<ôÝEÄ'¦’‚…2^ùtúõ×ò./³ë3S˜Öœ‚ڝ3#ː%1ïw²õ&}ïê6oèÆþ¿­;CÏ „‚wÌÞcF[‚>‚$ôòþGöØïÊÌÔM zmhÂ*gfÊÄ¡jûݤ-­Û¡µÜ!ßüÈoºô–zڝdUOJÂ᭙]ê†d÷gF0í1f oؙڔoß¾¥ÆaÌӀüqž"~ü#ô)NJ„A06 €+¼íÎú‡rþ¡ÐÀ-¾Î®)ihŽ5BÝâ|áD$™àш†Óë‹/}<¿þúùïËÏgK0@Ì3¥B÷–ˆv~óý@ßÐÓG|C砛æQ×>€«Ry{ïÔWg•ä¹ï.€IŽ.“Ð 8ÝxþKï…y¿ÞHz¨£ª^sð8Ë6¡ˆ= ç5<ÔÑÐPn§Œ-½NÀ£z…\ŽËÁ×B%F:Ãá‰ÂKµ›Ü:/菜èk _‘‡ûÈF EjÇ¡ÍCp-=AELHÕï+þ* þj…¾§«­°ØÐES‘è45Jh sMÐo'‡ÜËã0_¹ùŗl8˜/§>p}ízmžäž f‘¸'-+ŒYâ‹­Þ|«·%R,àƒ²_ø F$a9UÅ^£>…ïÝê5üáNp¯é¶öÉÆ>ZH˜ §À4K,ú ‚ñ(×wýS?£b ¨Ð¨+-B´ûRxõ™ +ø¨ù—Cˆ’CˆB8C„¶õâÛ¶FÀü‹Ñµ I4ÔÑ45 ;œ ®ˆüpɹ‚(pËó9*ˆ¨Ù!®ÇI›ºâËcªÔÐm–p'¡®¹ûåÐ@ÀŠtYW[¿DaºÈ9sWb>/˜L‚™:'Z*â'N8–8èPʗS:…*êÄý¹1Ô´šûÜæ˜Ø„xbÖ¶*zR PVè°Î–ZØh+9FÝÔ[•­IØAùݵ}£¦ø[:a#½Cú—;j)±$M+õ¥Lz«ûXÿ€Ðçªz"Çø‚|—7æd¢ö>ìbòQT鏣Ñ!>k¡õ$U9ª'ŸÏ=Ðâ5HᾟP»ÿ|‚í¥Ï'AâSèÁ5mu8©¡w¨«•ɹ`ÌþÉ°r,Ȏcɒ=ÝóK—¡eøÁã(ŸpŠïiè5±â¥ˆ@‚R6+ºÑ€f˜¡²öòD΀be€=‡á +PYJãùŒÈ ´†Ê»ÀÖga²÷Y„Z_–.e+ªòæûþ°Æj݉Äù(8+endstream +endobj +1211 0 obj << +/Type /Page +/Contents 1212 0 R +/Resources 1210 0 R +/MediaBox [0 0 612 792] +/Parent 1198 0 R +>> endobj +1213 0 obj << +/D [1211 0 R /XYZ 109.854 704.063 null] +>> endobj +1214 0 obj << +/D [1211 0 R /XYZ 110.854 547.499 null] +>> endobj +1210 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1217 0 obj << +/Length 1810 +/Filter /FlateDecode +>> +stream +x^­X[8~ϯèGPrÛÜóÖIúìv¤Ý•’3š‡É(rƒi¼á@ Lz³¿~ª\††#2ӑ扢\Øuùêbޞ^¼>F镬Hyuªä,Oâ«4‰™Œ³«Suõ[`êð “,°‘JƒF=<èn|…oy0u¦«LwOb¦m‰zúR늾QvÞECwqúúb¥T¶ljÞæ®í˯þ¬ÇFƒØþ~úpů"fqœ’šý€"<èzK +j"Iq¨Žž:Ið¿‡Ö”Æ ú`›¡e<†i0w„ÈX’Ûs>ikÉX)½Î@´þSx‰‚˜xwß­‰t6“.õƒ5}GÂe«F/e{z¾{ù}Œ7ё‘`‰`¸S¤#™mVdù,Ái;ã·ô¨‡o¨ +œ];§ÁÒ4êYç +Wàœ„ñ8ßú`˜ºƒ5gíÝZöçeÍ]ëÝýhl³Ä`9÷Þû¸·#®ßÞ2oh†¾–°F at dcβ€)‹Âƒàœ¿¬¡ÆƒS3„"úéÞw=Žú jx(¼ë+½ç$Ø_¦,íD— '¢< +Æ©,õ8ÖS‹ïrn\Fðyý¯÷iL¤Æȓ[‡ïôQ=u%EÎÓh‰‚Œ@¹oôr Eòßp ՚Š¸•>ì!ü.”<˜P‘ ÝAðÎʟâðL r92އ~ |týñèyÚorOüíåFÞÀbá!u´Ðô3RíÊævOÕVu÷“ºG€D©>ó„kvûŀ­×€€Whj>fÕyÎu¥UŒ1øPÐGT}¢ôÒrØÝøSîu§eÜ(‡PF6:dGE­ñP)cGÝÖ `Á?)™×%)ÊØ»Q]uxŒµ¡€JFLEèûN²C?Ap)’.‰P at l—0Jo -8”ìE݇s…40d`Æ爋@M¶q8&Vä-p(!0+Ôã#Z6Æj÷-q* ƒAÆÒ«W†^Þog.A{ ¬týŽWd–±,YLýK<ü¤qò@ åéÚ.<ïæ^Õö„ŸÄ‘µD”³ˆç½Àîi•§ŒgO±ÝC>±— 8/ž·o‘Axò øc9ƒ(ÛxžR€ ™+Žò(AÞáíÑN@¿ƒsÉ8óæƒ\kœw¦–u at pƐqЗ'Bª©¦ŸÆÖóz@ŒS˜§?ò¶(X.‹ç£@pÉòbÉ唄£åæ¨m6)zÌÁ¯^8b%OÞÕh˜ëÂ:תú/̳?mM3£9›Vy0ìWk¢Ms¸€æp–/ÕÎæ)úp^¢¿ºA+BÉ [u1OÈå7ùW¹õ×>^ø?` Æé®>¥ù¾–®ÿ,¬{æŸ#æ'C´‰Ëó[HXš.½u\MÁ#%^‰œò@o”N¾ñ¸AØî|?B˜—b.¶f>µŸ—™²n.O-iS²EƒÄ<Š¡XHÚŒ_Ì,X‘ÊÔyMðœ‰[¶`^Ò_ùq×ë··D¼TíÏç¬(XJôg)=õa¢û ä+ÿ„Nt)%²7"F5^ܜ^ü-p¹ +endstream +endobj +1216 0 obj << +/Type /Page +/Contents 1217 0 R +/Resources 1215 0 R +/MediaBox [0 0 612 792] +/Parent 1198 0 R +>> endobj +1218 0 obj << +/D [1216 0 R /XYZ 110.851 704.063 null] +>> endobj +246 0 obj << +/D [1216 0 R /XYZ 110.854 589.492 null] +>> endobj +1215 0 obj << +/Font << /F36 327 0 R /F46 637 0 R /F47 359 0 R /F71 779 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1221 0 obj << +/Length 685 +/Filter /FlateDecode +>> +stream +x^mTMo£0½÷Wp4RqmÇ&aoýHV­´›UÃa¥¶ª˜ÄZ‚# ­úïwð8Ý&›Ó¼ùðxæ=ÌM~qµ˜òˆsš)%¢¼ÈèLÉ(U’ +9ò*z"´¬Ík§›W[×N÷qUŒ<ο߯òùãeœ¤à.‹Õ<_ò‡«Å$ýÚSHI'*‹vsE,y‹¹"ÚA¯Œ‘~«ì; EތBêmô‹f¶F —'ã]Q"¸¢,“QÂ%•2Å;ü`q"ؔ=Z8 `þ˜“ +#{\wv‡È3‚rè:ÝúڔÜ.â©$ט)aúq½îb¥…p–’|kV£…^]ѺÚv;]ùiÙñ˜½E¾Ô±‚ŠÉ']žü@ürgœÎ¤8δ¸Z¦a ©ÈŸÖŽ›¿·¯ŒÛ7E©w¸DFNNüÛ¢G»úˆ§ÊsŸIÊfüd'߅óCŠ^à† ä"¶îu‹PÎøo§/G”‘µ. ðBúоvk<#È»iŒîŠ¾ÜžT–¶ÒçØ7ãþŠá@`‹¶µ}у™>~ 1© =Øì‹:ڕÅ^‡g1ÿýëq¾ZÝ/>…—A)}9û.Ą*5=hW4 +uú(`÷.„,Ú¢ªèÖ¾±îÝõGOÊKÃA‘‰ÿ¾·DLCk‘fdhßM[aдµ±&^¶!¿3›miTÀö„AöÐΏ3–«Äíuiž%æn÷ì~ÔÁšÂga»sŠlt«;S¢xR}žD§ßý頛sz·nüÇ+endstream +endobj +1220 0 obj << +/Type /Page +/Contents 1221 0 R +/Resources 1219 0 R +/MediaBox [0 0 612 792] +/Parent 1198 0 R +>> endobj +1222 0 obj << +/D [1220 0 R /XYZ 109.854 704.063 null] +>> endobj +1219 0 obj << +/Font << /F71 779 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1225 0 obj << +/Length 724 +/Filter /FlateDecode +>> +stream +x^­V[OÛ0~ï¯ð´Mj¥ÆØÎ¥ OƒA¥!íaZ÷¨r²åRl‡‚¦ý÷ÄNDG2*úãú\¾óåó‰ï&øQD)Á¡ï¡ ðñb±@q1¹¼&(Í Ôl¡]ëY 7 ±ï¹`çèûäÛät59ZºdÀ‘ï3´J ]ìF +<‚#p]%èrºÌnj)fóÉ4Àôx渔LÏx±Í…2ÿ§•4Ər—•IVޘeVšç‰R¢ØäBήWGKpCѦª³`+'®ŠmÝâTVEÏì;€D_X”ùØa}åÀQº’/È`î+endstream +endobj +1224 0 obj << +/Type /Page +/Contents 1225 0 R +/Resources 1223 0 R +/MediaBox [0 0 612 792] +/Parent 1227 0 R +>> endobj +1226 0 obj << +/D [1224 0 R /XYZ 110.851 704.063 null] +>> endobj +574 0 obj << +/D [1224 0 R /XYZ 239.576 655.389 null] +>> endobj +1223 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1231 0 obj << +/Length 463 +/Filter /FlateDecode +>> +stream +x^¥SÉnÛ0½ë+x”jÂáÎÜb; @Šè–†lэ+"v¼yó†üÞØ.ßýÖ¾C)S˜Â’›"ùž ¦Ob n€rN¶mòøLIåA_ÀCäÇÌl 7Ưƒ{»!É×d1mîO Ñ*0‰@hmh«È MãPÓî+ Xˆ> endobj +1228 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [427.885 466.851 444.822 479.538] +/A << /S /GoTo /D (table.7.1) >> +>> endobj +1232 0 obj << +/D [1230 0 R /XYZ 109.854 704.063 null] +>> endobj +250 0 obj << +/D [1230 0 R /XYZ 110.854 666.202 null] +>> endobj +469 0 obj << +/D [1230 0 R /XYZ 248.058 427.645 null] +>> endobj +1229 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1235 0 obj << +/Length 223 +/Filter /FlateDecode +>> +stream +x^]Ž?OÃ0G÷| +‰„¯¾Ëÿ°µ4•¨S6ÊPQWTE.¢ßž¦Ž˜ü†ß½çU_-6ì18ïPõG…hÀ +q ¢úƒz©Þ÷_9Ž&1µo^û­2Js+endstream +endobj +1234 0 obj << +/Type /Page +/Contents 1235 0 R +/Resources 1233 0 R +/MediaBox [0 0 612 792] +/Parent 1227 0 R +>> endobj +1236 0 obj << +/D [1234 0 R /XYZ 110.851 704.063 null] +>> endobj +254 0 obj << +/D [1234 0 R /XYZ 110.854 666.202 null] +>> endobj +1233 0 obj << +/Font << /F47 359 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1240 0 obj << +/Length 423 +/Filter /FlateDecode +>> +stream +x^mRMoœ0½ó+|©8ÛcLoÙ¦‘)‡ªÜÒ(x»H°ÞÛ(ÿ>cl¢ªÊÉÏã7_ïùÐd7÷ºbRóÊVÀš#Ü¢fXiŽYÓ³§üË©½¬n.J‰"¯‹çæ Vêš[P‰áυùßDîÎëàÏK ÝÜ+Ã*^Wb+“j´1 %ûÚd2 7Áà½=hÉmmY7eOςõôH=¹¢ÐËF r Hxd?²ïÙ!,Cí µSvۅö²B2PÈššnDšÄHˆŠ×Y©¸ÄjNÃR” +eÞí»‡Ë¼.®òÕÇHï»ëD›ÇÛâ'Ñѵëuv)o¹¸nhÇxÙS×SâÞ>ÞËÞ¾ñlö×~8©àÚJ i•¢HÔäÕâº(ÿfÖ4ü>­þr)ä Ààæa‰ +“„³={&ù|Û.¥øšÝɝŸ.£[ÝøZÌù»¼q(¹aÉ+KÒ\Êd„À¬(AXZxb&]B3Ò%‚»¹=¦Å¯kn"þ)eBWhCòS:ÈÿYP}½Ã7艽B +endstream +endobj +1239 0 obj << +/Type /Page +/Contents 1240 0 R +/Resources 1238 0 R +/MediaBox [0 0 612 792] +/Parent 1227 0 R +/Annots [ 1237 0 R ] +>> endobj +1237 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 469.44 116.334 481.174] +/A << /S /GoTo /D (Hfootnote.45) >> +>> endobj +1241 0 obj << +/D [1239 0 R /XYZ 109.854 704.063 null] +>> endobj +258 0 obj << +/D [1239 0 R /XYZ 110.854 666.202 null] +>> endobj +1242 0 obj << +/D [1239 0 R /XYZ 128.787 143.695 null] +>> endobj +1238 0 obj << +/Font << /F47 359 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1246 0 obj << +/Length 340 +/Filter /FlateDecode +>> +stream +x^mQÁnƒ0 ½÷+8u˜8MôÖ®«ÔJ»qÛvHªH PHGû÷ M¶UÕN~y~¶_ìu>‹·< 0†‚ù1@¤Z(fSy¼‘ 0ŒRJžçóð#ßÇۅ´RȄ`S "&!eN¾ QN‡’˜S5q+½1«õÎ1c刱nǜ‡ê¡j·Š$wœo ~H¢ÚÒ1u;՚Z__—P}¯»^O‰æJA`²?ùEœKg8wÓ()ÎZW­qR«£‡ÝÑEsRžñ(©UÈ(ù +™Y7êÐøŽÊ,ÝÂ>,ìÞÀɘ~Çã8BѕÕНuQé«}|ÆÅå…gDêø¿åc*`AE š‚LüÊ_q™drÒÚ+¦€œÛ{!xåêuãV|÷«Íßß)dH‡ßóh¶û¼!öä#Eö¨Âd‰|²1{ÉgßÈL—A +endstream +endobj +1245 0 obj << +/Type /Page +/Contents 1246 0 R +/Resources 1244 0 R +/MediaBox [0 0 612 792] +/Parent 1227 0 R +/Annots [ 1243 0 R ] +>> endobj +1243 0 obj << +/Type /Annot +/Border[0 0 1]/H/I/C[0 1 1] +/Rect [109.858 595.698 370.58 607.177] +/Subtype/Link/A<> +>> endobj +1247 0 obj << +/D [1245 0 R /XYZ 110.851 704.063 null] +>> endobj +262 0 obj << +/D [1245 0 R /XYZ 110.854 666.202 null] +>> endobj +1244 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1252 0 obj << +/Length 2205 +/Filter /FlateDecode +>> +stream +x^XK“Û6¾Ï¯˜#U!|€¯ÜìÄNœ*k“qínÅ9pHh„2Z’òdö×ï×èG”éÚÚ=©ÙÝ+œ$} 0ð=ܔ²YîJ+Ï÷r]oþå²Iâ«}g¡ðãE¤5Ì?ŒCǪóÑ0ñóÝG&®‚NyÎJãŸóܧW²¸Y‚(Iµ”ÙKø³C» ­„%­„žù—-Á–X[F™ò/YÆ 8.p”*.Kèz<|»W§¹J +í5åŽØz¹ãr¼KbööÎÃ7¬ntÛ=† •ÉúÒSÍglE'Qu(uðƒ:Ñ/ݑ¼ÇM=½lôYµ£©ÂJdªÿ_Æʶ”ñ¬Ã…Ä«÷?eZTgf1¼` ë‰:R|Ã=’P)òo´ÒÛñѹr‚:µ#®+Xíø;–¸9Àit'dʒæ`ùãÜäCò(ÌhVʈ-MËuéøûѸ ÑÞÞ±Ímwf>으†ñ +cÇÁ¥«¸Ñ‘ÊJ ðFÈ®¥ý*9焸·6ÍyÜ%y`¶Âª(TX&~#W ÒËó/ t=ÊxÛf> ®æ•K•%Oï%°t®txX/¾Î…8RYœ.Wúx÷ãý»w[6g¡Òђ4”Ñ[ۅȬÂ+ýþñõo>Þ¿»{³µa®Už-GOçãDZꜟ5w‡téi²p¸Ò’J WõÕl6³šN$¾·a©ðŸ7aDÝ|r/£QêH%Å#˜L[ÓR²u)U:IidQÕ]f¡(ߊlÅÒÙ‚xA‘Hy¿‚j¸Š˜ÞçôñÌç¾ÁœSã}ã¶*¸ˆ@`eýtÎm³±×F3‹ †.íaè7uz…—Ã9½’×¯F¯6Ðk¶@Ü32xÚÌòSèupK8‘ñ=WVÞ®ø¦ 11²nÇïBpV8ƒp$‘¾iž}¢·äå›Ð ¿—Q%%eôß@Ç FK˟Ÿ†mÌނ_ã.ÁºÆKsUæaä` Uù-Y"aoV_¥ÉjjÓcq˜*—ÿ¯Ïâ(¼.ŠàøT/âl—ú иŸð\}į +üYW“û¿(¢×y‹+r® ‘oõDŒUc©ËoW«wïþÁ vž•¾ŒL¬; åüÔÀ^7oîoþuCùÞFË?¢Qª2,oëîæ?ÃÛBœªT'§ÚáõP]´·¿ßüíæ5ý¿ +(3¸‘Ü$cLaŒßD%YvíÈR•Yœ‘b¢Êe)QY$Áø‹æÏ07›ei ÜË äýTô`^îFŽV¾¥q­6ýám˜ÇŽA'q…ù†{ +ÌHkWAýÿ¾üöZ o?•ŸÚ+endstream +endobj +1251 0 obj << +/Type /Page +/Contents 1252 0 R +/Resources 1250 0 R +/MediaBox [0 0 612 792] +/Parent 1227 0 R +/Annots [ 1248 0 R ] +>> endobj +1248 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [328.288 174.797 334.764 189.12] +/A << /S /GoTo /D (Hfootnote.46) >> +>> endobj +1253 0 obj << +/D [1251 0 R /XYZ 109.854 704.063 null] +>> endobj +266 0 obj << +/D [1251 0 R /XYZ 110.854 666.202 null] +>> endobj +270 0 obj << +/D [1251 0 R /XYZ 110.854 362.299 null] +>> endobj +1254 0 obj << +/D [1251 0 R /XYZ 128.787 131.706 null] +>> endobj +1250 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R /F65 612 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1259 0 obj << +/Length 1933 +/Filter /FlateDecode +>> +stream +x^­X[sÚ8~ϯð#ìÖZÝeõ\7m.ݔÙ¶Ã8Ä!ž‚Mmh›¿G’ 6$°«Ž‡Gœ3‚´4>„FˆHÁå*>Ÿzç}"zyÑ©À½ÄüøÏæÓ¤t+e’¸ÉgŒédYT¿4"oû_†ïŽÎ†GߎH€áÀYE‚’ID#ŒgGŸ¾àà6ßf+øa%g‹"$8ƒù4øxô×Ñq-…F k\È +mº!d÷Îd·<‹çó4›¸ù£³x`{ŠFZRi))¡AH9ÒX´YqÖde‘Y<]®Šqï*;öCR4¶:ÌP8+_ݞ¼ï‡"õé`8ðÁƒx¦h®È—‹4«R‰_s®PD›zà #óq¿öcÄ)[«oe ýLÆe…ÜIK„LXó¶¢ATƒ4ƒü]2/úŒ³óŒižµÜyŸ¶“Ö°¯xïyÞÈz L؜ˆ©³êªˆDï)-y‘Žm®ƒßE—yV¾1FÇ{7»åv–„¥Üù·ôŠHç(}ҋg¥[XäNÒ9LNÜ08¾|ãf¥ApóV<#½‡x»YµÈµq\Mî+qgkó)¸.QµUe´wÿìV+aÍÜÞovC!¢XÐX¾ñz&H­¢#œÍŠ,]ˆc’A ±a ç(çÉ85J¹jÖÜc¼p[ߍ¿ÄEßOëͺŽ'“Âʤ"‹º¬Lf÷IQ‹V^g.ÐØ#ìp%|lêÇ’ÑJª|‚DᾛÇ˹©*Ÿ}_‡bG«¨þ7/s!‹$Õ65÷ϋº¬¯0®O´=á2¢ ÷ðÿ—p)†ŽàP ­Š9­JžV•üµ¯xïä6lÀx²¾_qB5Gúöê>Â靂M at Lrßúšfà‡J Ý;û±··Lû¤œ¹L“lÑ9ÙCÓHA§`žbgÑÍ ’Hl¯õ àB< 6ÝVÜ]Þ Ï.Îî¬p‚" ?$¶’h¸˜°FÒXæ]¤Cº ŒEì]c¶È¦¦MãQèiòh¬8^N+Þ œr®íR·¶”tcòP8íâ²z´É[™NlÜ7Հ)ì\e(m—¾‡ñm! ç ¢ãA/©ãg—ƒï×mÅi¾¼¯»^H~ã´\E¾×ñ|,?ËMXM–§98s‡æ*ݝ ®\š`€‡8ŽÙ&Ç*h,ï°aªlÊÝS?˘1#îȏ¶°|þÁÙÒä†D†ÍOuÛã4·›ñüî°aÃÞ ŸŸ^¢VòE#~5½Aó³Û„öà m£÷äöúÃÕÙ?(Ña8z¥C'º™ö%=üce‘^²`hùÌÙ©Š÷äü0°~қ`¢Ÿ.|ì¶ïmph˜&š ±ÿ£†÷ˆˆÈ—müà 8¬÷Z`[ð‚ \Ý^\ž¸ ãgTi$éÞVâg4‚6‡TVrœçÓ¤.§ù¤jW·–d+Öäg­ èµ¥Åɟƒ»Á ÉÐ~ΤBRî}±~ÎA´N·Ã¾Z½e×Õ‘ºü¼…­Ã øÙjB?Åŧ/Ž­ß«J!É&‹§.–º!Ø֝çâ}ˆçÜ4;+r"ÌŒ6› aÄ´Íæñª|Uj§ánh%4§Ð¢’êòmKÅ@ã‰Á6dÐ`Änã)‰œ×oÐÞÎ語Ð1zòI᫆òG +„ÚϺ÷ óØöÍô3¢ÝπÀI%gœÇ +>$¦oÎRÓL—nÓ¾š‰kSA¨\ÎçÐJÙ§Xß|æ̳vÕW‚«ÆÅÚYK´R„4^" ×ú`V¡›àÈ£tË ¶éóHÝ]º·{ÆàøÒMN‹ø±2|ŒÌ‹·›MÜìÝrúìfôM5bB7¥ˆzKVIü?n‡d +endstream +endobj +1258 0 obj << +/Type /Page +/Contents 1259 0 R +/Resources 1257 0 R +/MediaBox [0 0 612 792] +/Parent 1262 0 R +/Annots [ 1249 0 R 1255 0 R 1256 0 R ] +>> endobj +1249 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [243.931 650.662 260.868 663.348] +/A << /S /GoTo /D (figure.9.1) >> +>> endobj +1255 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [313.064 360.298 319.54 374.621] +/A << /S /GoTo /D (Hfootnote.47) >> +>> endobj +1256 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [379.298 360.298 396.234 374.621] +/A << /S /GoTo /D (figure.9.2) >> +>> endobj +1260 0 obj << +/D [1258 0 R /XYZ 110.851 704.063 null] +>> endobj +575 0 obj << +/D [1258 0 R /XYZ 266.308 625.901 null] +>> endobj +274 0 obj << +/D [1258 0 R /XYZ 110.854 431.65 null] +>> endobj +576 0 obj << +/D [1258 0 R /XYZ 260.414 306.646 null] +>> endobj +1261 0 obj << +/D [1258 0 R /XYZ 128.787 145.698 null] +>> endobj +1257 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1266 0 obj << +/Length 2253 +/Filter /FlateDecode +>> +stream +x^K›Û6î>¿ÂGùûb…¤D=ö6™<¶Ýl³›¸§¦Y¦m5²¤êÑéüûP–4šMNAÄ ßìï^¿¢”~ªµÚìO©?”Á&Ò¡¯Âx³?n~óö³Ý)xm•ö²r0ÍOuK@ÿԘíïûŸ_¿×rJ.Õ~,‚ :?}øéáþ#mœß«_¥‘Û˜µ«ÔdìG‰r›üýç_ßùkÄÂȗ*tûŠkSš«©zs$f3æ^ò´:®^&b?’ñ¶÷÷¿¬_· ‚ĵÙÉÐÃhõZÁ× +OX"(ŒÖéüÌ۬϶@.õêÃ&ï;œ$ÞcÑ_­*9õe;Fþyÿùþaÿîó«QâGbTóÍj° ¤…ÄMJø:‰6!ȔÐÆpVâk”y² ÍfÙlMӚŽeG ²Žù¯xÞ¶ÙKz¢1¿díV ogµ³S¨—d®ž,ïM‹ZL鎽õM+b/¯0ª#ˆHH@‹®/ªóPt¼ë`úGcV¥‘‰ôõÍ_þ¿kÅ~Œ^x´žŒäGOF&X"@óªelÁØ&ÛÝdKÒ`.[›] Ê +ïX.Lmì‚÷@pÏà|R{ç-d¨Þ]+¬s\ì@ˆ§Ë]ßyO0Õ?+‹—±+Ïy}mŠ’’bzWLª 5³¾ùAxKÊÖ¼|"㱂dÈFÖ\ïŸárHšï9´–¬-Dz©xm  §¦ËAwÒkúšÄìrÅ!åÂ!C<‚ý’õÏÈÕ±ÈÍÜÞi]Ÿµx+è2î[t¦óp¥Œÿc½«³]1Àák9w4Ts✠ó$ñT„š»$ â˜Æ¦­ssZƒ¥ +r¶[_Kyˆõ5{ LswìÀˆEöó×¢íS•ãîã•ŒÐ굀 azmJ¦Áñ[E1U½Â¼¯)}NŽÝ¿ù‰+z×g9¿e@‡³Žú‹4ĝ",uÝ*+íތ)_³oh at Cø¡!,ÓJÙÇWKØbŒ\ÆüŽ•x|5cÞÞ»•Î@vçc ­†$¨]iSy¥SòÆQ Â1Y±Éø½·`yÌ]–° +o-ŠZM+o—Ä—aˆ?²>3wÿï·QH7Ùf·mvâgðÓԏþªC?î¦^ñ(¤Zî’ñ?dèþ?†Þ€¹ +endstream +endobj +1265 0 obj << +/Type /Page +/Contents 1266 0 R +/Resources 1264 0 R +/MediaBox [0 0 612 792] +/Parent 1262 0 R +/Annots [ 1263 0 R ] +>> endobj +1263 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [315.806 621.77 322.282 636.093] +/A << /S /GoTo /D (Hfootnote.48) >> +>> endobj +1267 0 obj << +/D [1265 0 R /XYZ 109.854 704.063 null] +>> endobj +278 0 obj << +/D [1265 0 R /XYZ 110.854 417.487 null] +>> endobj +1268 0 obj << +/D [1265 0 R /XYZ 128.787 138.732 null] +>> endobj +1264 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F46 637 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1272 0 obj << +/Length 2090 +/Filter /FlateDecode +>> +stream +x^ÅX[sܶ~÷¯ØñK䌗áU—¾9©sê4uzœÍ¤3M'#kµ¶NµÒV—ºþ÷R+)rzy9/++WB°Ä¹Úì`ÈYlô*4šI­6ÛÕÏAѵgkÅÃà÷3i‚´ìsš–l‚îÞʼºëîi\ïè똰®iÒÇ)/»O›4ëò¦=‚ä œv$]´“å~o”IpHÛ6ß#Iþ²y³â«µÐL됔ÿĹlZØU* :œ‰8¸ë÷yÕ1\¦‚Í=…L¯=Ž‰&†ƒvûHßÁ n‡÷yEœ}Ýä4C*Ú¡®¬Z/^1v´’Š%±m­–¯¾»¸¹xµ¹¼!Ù饬½ðÄ°±-p”Ѥ´1Á¡ÉÛ#±"¢Õæóe&(‹¶;§¡õ¶¥y_ÌV¸Rk'ò‡¼ÚZ¹pgKé#*ËA¦RǽFuԝ9;lG)@© +=ˆ™ÁÕüGnÿqL?0bã¬WLK·®aÁMÐåÇL@~®EÌ"á+endstream +endobj +1271 0 obj << +/Type /Page +/Contents 1272 0 R +/Resources 1270 0 R +/MediaBox [0 0 612 792] +/Parent 1262 0 R +/Annots [ 1269 0 R ] +>> endobj +1269 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [343.367 319.119 349.842 332.581] +/A << /S /GoTo /D (Hfootnote.49) >> +>> endobj +1273 0 obj << +/D [1271 0 R /XYZ 110.851 704.063 null] +>> endobj +282 0 obj << +/D [1271 0 R /XYZ 110.854 431.932 null] +>> endobj +1274 0 obj << +/D [1271 0 R /XYZ 128.787 147.198 null] +>> endobj +1270 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1279 0 obj << +/Length 1920 +/Filter /FlateDecode +>> +stream +x^¥Xmsã4þ~¿"Ü CÊ\„Þm3Ç\/=ÂôR®¤p Ç0jâ´»ø…£ÿž•VVœÔmsðIki¥}{vµòëå‹oÎ%$Ñ\–›‹(Ñb¤•$\F£åzôÛør¶¼º\œü¾üa4Q ‰"=š0F¥q]Г‰Œ)ÿr9_ÎN&ȏTQ·ƒQF4K`‰¤À _»E’(õ¦_…éèvÁPØW¼X#eò&­ +Ó¤øY¥M[_ ¨®šÆ"’±¿>[¼q‹t4á‚$ gºz}yqµœ/¼±Óóåìr1]ÎþÀóþ˜}˜¾ûñ¼çŠÚÆEB•h<´.õ¦qƒ×e˜?þ?üÎ{În®¡Lî>_,gog—hÁ¢óA?êó³žyH’Ù{‚ k>DÞÑAá㠜›oïòl•5øõ²cqû_î‰TEvšf ÆÅÿv(êP>thŸA< ¯o΄ö¡ã6 '²/†ˆpFXìö}Zª¹”ãæ6Å]¹½]Rƒ"ŸÑñ\ÔÃIYR3ˆVºM‹&]£A‚)Â]f÷,2–;fcc:޴ŪÉÊ'1³âÆóCf0Jy'¾¢1 ÜBhÂû莋ä¨7-‡ìb”(ìú”5·¨Çß'\AåhSԙâl¶Áq³™7Œ¾²cl¶ã¢ÈÅó\ü ¡H¨%jßsègí¶À`lI³„°ƒoÊÊ/ä9%àÀÏ üåÇÁqy‹§+‚ƒ]øÙ)ÐÖ©}}£œÛ½áLãٳ͎i ̪iÕXQ·©OfeKô]nVN"|9‰06¨0PuúW›«ôۀ•Ýe*:TU®÷ñâPÿaH£¸ö§Óóó£«x(šG¾½X^ìؘň+ !¨Ýùª§Ôƒ”—°¹”×ÌÛ2uîJÄ8+p4ÝFˆtcƒ¸IWç¬;Ó°fÅ:=ajü~:Œô×À2^û•ÇÜ\§^®5¯nLÕ`Ã̦*·H±Ý•µN)[$‘RwùÖÿڇ~UÉŠ.öÙ`9H"¢¹ê’öËÊü3ä>^‹YÇe6C©R' |G¼vÌÞ�! �ѾzÓ� �9 •V«D8~¶X^þ:¨EÒ¯\weV46š£³5pèt[n©¨Ü""Ibu¼P†*(ÜçIpÙÙÕât9¿X ¦mE vÕ·e›¯Qa#P¸©R³«øT±}ÇÙ: \¢Þ™Êu^B&㺽¾«Ê›Êlk€½ˆòÁÊ*›;Òí² /º8Ùå3 Ѳj*¸ðÜÆn¨Öî.NÆs’zÊT',ß´öNªCVö4»35–2!ËBØ;Ç}›§Â -‰v7àãñŽ‰Ö¼§;¾®^Âèꥐ™V¥'UÑ+ + ©=+zvˆ ³ÙœˆÜÿÕfÖ±þá÷>ìÒÉø‡º©Zxmؗ…ý´½*æ¶ý²i\#é„Áx$íږºÉšû˜0«UY­1®ö”Òó¥ø¬ý½×u¨¬¹o÷±­]åí:dghHMžÝ[g¾ƒÀ¸Ê=°kìS‡šh|ȉDŽ§¯çH¬ÓÐt©ŸG÷Ü t ­…äÔ6Ÿ-ð®ºO…&ñîê>C4 uÚµ&ݵd„ê3Ê"¿ï¼ƒc]nC£^§µíÉý÷{D¤ûO¤”ECJ‹ÐÙ:§°„§XÚÂÀŽüN‰bÂÔ¹¡ÈNŽO {*^¥–*JO¬nMqãɼð²è&nŠ²²A|B%–0(Fúȸ€ YÛõ"Püb}ð2»Í\»aA¹-‹›ÚC²ûÁ€ïq˜Gz›šäú [“xBâ8ÆÓàu´Ù=Õ¡ÌÇx‘Aô8rNß½ÑÏth¶Ä› +oHÚ@4Ò9÷ÔmîŒSƹXô-sÿ€^̖/þrã©Ð +endstream +endobj +1278 0 obj << +/Type /Page +/Contents 1279 0 R +/Resources 1277 0 R +/MediaBox [0 0 612 792] +/Parent 1262 0 R +/Annots [ 1275 0 R 1276 0 R ] +>> endobj +1275 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [356.754 281.888 382.657 294.574] +/A << /S /GoTo /D (subsection.9.2.1) >> +>> endobj +1276 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [109.858 181.12 135.761 193.806] +/A << /S /GoTo /D (subsection.9.2.2) >> +>> endobj +1280 0 obj << +/D [1278 0 R /XYZ 109.854 704.063 null] +>> endobj +286 0 obj << +/D [1278 0 R /XYZ 110.854 265.902 null] +>> endobj +1277 0 obj << +/Font << /F51 451 0 R /F36 327 0 R /F47 359 0 R /F46 637 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1283 0 obj << +/Length 2162 +/Filter /FlateDecode +>> +stream +x^­XIsÛF¾ûWè¦ÌN¯X”ÊAVäD)ÛªÒÐÉ!žH‚$Ê À`‰¬ùõó^¿ÆÆiÚrÕ\ÈF/oýÞÒýfõêÇ·:¼‚%ÆÈ«ÕîJȘÉ8¹ +fRGW«íÕ_Á'.¢Å¿W¿ÿøVÍ7 «+N›îw‹¥HxÐ>-*úHë:}núqFƒìï._Hüƒ?i‘•›lûz±”\íÁí)Òz!â`ŸÕB4> endobj +1284 0 obj << +/D [1282 0 R /XYZ 110.851 704.063 null] +>> endobj +290 0 obj << +/D [1282 0 R /XYZ 110.854 404.513 null] +>> endobj +1281 0 obj << +/Font << /F46 637 0 R /F36 327 0 R /F51 451 0 R /F47 359 0 R /F45 636 0 R /F15 638 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1287 0 obj << +/Length 1604 +/Filter /FlateDecode +>> +stream +x^՘YoÛF€ßý+ø(Ñvï#o¶ã+aÂÖÏƌnG5,Ѳ{8Aڇ#R"ÐJ&^«“iV՛‚)H+6lv©¼^UV¿±#=*_>:´ÕRŠæèï/oúÏ.àÂP £¢~˜ØUɄ> endobj +1288 0 obj << +/D [1286 0 R /XYZ 109.854 704.063 null] +>> endobj +470 0 obj << +/D [1286 0 R /XYZ 298.688 655.389 null] +>> endobj +1285 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1291 0 obj << +/Length 999 +/Filter /FlateDecode +>> +stream +x^VMÛ6½ï¯ÐQFW~Kìm·É²@‹øÖô Ú”-@–’œ"ùõŠet“‹8”È÷f†o†zÞ=¼{‘4¡´”,ÙU‰.@š()€‰<Ù’¿ÒíçS5n2¡Iú…H²}ÜdŠôó©®F|A7ï>¾{áê‡RZé„8ˆ§¦ÙdL‹ôŸz¬%Ó®rûÖü’Éù¼m…& 4›—”½qȃuÇ¢ h|™üŽs ¼P󲷦ܛbx¼+~߉æîökë6³‹’Œ Z«$£„Pîë¡Þ—£Áüð\¥¥dÚ›{ûb +ð1æÎ0¹öçßwüQÀ[üYq¶#õT™ yZ¶ÑœRtœ¯)?ÝIAƊ$ªiì5Óچk‡¾>žFgNN+û å±³‘p]¸S™²ñ$ç E¨S ­fB¡»¾c¡±ïLã8s•ý†éñr6m”Ž ÅR2ñž„&a؄û*  +º>®åd•L÷u¿¿4eß|‹Qcݐb]Ø1vA€-ìsãʔT>£HtiW¼>Jº|à8Î+{3\šÑÙN£JM_§(ˁӛÆ5”g/±rpcÐ䯝úþoÅZ¹qûój{ýêêcVÛ V½™5ÿè?ûdZoíº`àç{2d()É ñÚm¨L¿Ú‡‰9Ç4$ô$‹brÈ5]ëjrçÞãò> endobj +1292 0 obj << +/D [1290 0 R /XYZ 110.851 704.063 null] +>> endobj +1289 0 obj << +/Font << /F51 451 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1296 0 obj << +/Length 1503 +/Filter /FlateDecode +>> +stream +x^½YMsÚH½ó+t„ªe2=ŸšTíÁñWœosت$V +$[H‰óï·%Äš  ޚÚ ‘úuOw¿7ÍÓ+£1•`o7Z˜˜5ÖUžmÛn±tdÃùöqóìÀ«Cb·ôƒ7ä˜Rmœ²tWäå¢å›+ ÿ¾C ߄‹4Kÿœ~œ\þý™JúÇÍíÅï€WÐÜv`YW"·Úûú9£è?6¾—þgé×cŒ×ú¯z°ûñ_…D…¦5Œ‘G ‡Ïí>¥_Ëõ®ýrq•!ã ­DîiÕÆyåìa½wàBÊÇHzÂÅM­†j»ï<Æù}¶IN¤Æ‹J0õãdÈ.à©ç †ô"Y—f•røVíwœ/‰f™•Ž{ÌãE²K²´?ÖÉÔáEzўä‡Àz2´3»ªêiçqº°h·Ñ:MŠri?Všfé8­óºÉ夺©ñÛ²Sy_Tª-â'?æÙ²ßMn˜'à ²Sk·Þ‹ñ~ì®dKÛªŽÃ½|~t€ÕHMž²Š‡ÈL :«YŠl”D›~h7nFâ +‰{êp\!#©°Íù6/V™e¥EGRýpÓ¥íŠýJøÐS›ãI‰Ù2d{ñ%&Žr·#˜ó÷g³³óùåìU¡@¦·K1ëwÕqlÝx¨=C /›“SùrŽL$<éΑ‰´v÷¦#îW±Ðúts;¿¼>î<.ìè{OÃ͓íá@m÷lõiùEŠLb‡nå€'ãIaq†È¡3».ˆÙê0¡ëU-?ú“{rí`N‘%¥'­Åñ¨®CÙ"¯+*YD›Íé:£vñÙF×jüTºzÊäڑ©Ì ‹RO…dQn^áG?è‰#øL#ozâbÎދyïv¯ |»“Wà’"x’YL!)ŠðT'ú£ž9ä5…ˆòEL"5RÛÉo£¢Ì1’ Ö¬Ö"yR> endobj +1297 0 obj << +/D [1295 0 R /XYZ 109.854 704.063 null] +>> endobj +471 0 obj << +/D [1295 0 R /XYZ 298.025 655.389 null] +>> endobj +1294 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1302 0 obj << +/Length 1469 +/Filter /FlateDecode +>> +stream +x^ÅXÛnÛ8}÷WèQj.%i²HÑÝÄ»hÑ…b+‰P[ÎJr·Ù¯ß¡HÚ²#+ ؇„´Dñœ9œá y<ývÆdD2BÐhzª',’‚#ÊU4G_â‹ô:-ÆFp\­|{›ºÎ٘ˆxUTE’Ãlb¥Ü‹E’߬“?¬¬’|žs÷ëzå§+³›<©Ö…c\gž~ŘæY•­ü´«ë-ð·éÛhBÂ@ËçÒ=«ÁŽ³¼*²¼Ìf¥û½ÈÊ*µs+ïܳ*¹Z¤®kE㉄—S˜žÄe†îN3Kü··É˜âø§µÝO‘¸æ®¨™ÿrß'þ»»Z>µewyoÕ¡&OóY꺵ÌuǑµÝ¬tm¾ª\'µ4~Ý&ë²ÊÆTxZȍN§£¿GðpD`1҂Gd8‰fËїo8šÃK ¯¢ê‘ˈigÐ_D—£?FÇ=…r‰”Q‘Ðì=e:Ö Å†ªAìµwƒ=û­¤õ2 +ŒSф*ȟåC²„ 4S<~Ÿ&y–ß´Ø" âšGB0D”Ú·…½1†*‚( í0†(¸$‘ài)£1ÇñÉmR4A +“]§:Ϊï—Ù¿i{ÊÖr öõÎaü +®—W¯\Û^eU|Àµ ,ÑñÍz™æáUu×f’åäãŸß§c&âlÙe¸·äYE2Š;øßSq³uQ+u(Ĩ„Š d¡´|‹[âŠB\QPZ¥úÆè@ððÅW,°ýGZЕFÆÚ=ºæHëV—éÂï²ë|V{0ÐؗlB°@Âì9°Õ¬uРòӾi;hÏäs$ÜKÖÀî¯Ø‡ÃŠQ•ÕÃØ}&i¯5 +QÂ’¿zD´aðh;ð/TMl¾þÜ›–=g¢'렚¦HIótGÝkÖ¡f[OûÜ›v›4Úôd4³i‚²gh6º×¬ Þ_³®èä¦Î›ýXÍà<¨•jhöxt‚ïUkÂ÷Sí´8ëЌAml:3ö8ÍŒ<ÃÏA÷Š5ÁO‹"œI^$ØI‡bŠnÑ7×Åàäl6…ñSÝ+Ö?Y-ï©=A'ŽS.}‘ˆ~¾ó [~VK=í*[ÇzÜ:Tqp/bۚîTrwsñ¸^rûía¹ˆ³/a¯1‚n§îè–kp§Ö.v¹.ÑKAuIú^€Áà¸/Ã)믧6ºW¬ ÞT¬LÓÂ)“Hú’«Ù]é TNÖ~Æ1Û\ç° 78¶J| +Jìӗð%Ìîv—d1[/’*µ'hªü}4•ÛÔ7›Lý¦¾îkµgø¢¾³§?2{¸·=7ÆóúÊáÝ>!×^¤p–ÍýÑö>Jõ®S%mþ§TÊÁŽ‹Ó£wmÖ2X$M¨pS¹¹u/ë3µíyÞÐKÊ64#+ #ctý¯ «ë½]/|š ¯|‹ ÝEÔkƒ—þê+endstream +endobj +1301 0 obj << +/Type /Page +/Contents 1302 0 R +/Resources 1300 0 R +/MediaBox [0 0 612 792] +/Parent 1293 0 R +/Annots [ 1298 0 R 1299 0 R ] +>> endobj +1298 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [252.876 636.216 269.813 648.902] +/A << /S /GoTo /D (table.9.2) >> +>> endobj +1299 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [245.691 407.48 262.627 417.841] +/A << /S /GoTo /D (table.9.3) >> +>> endobj +1303 0 obj << +/D [1301 0 R /XYZ 110.851 704.063 null] +>> endobj +472 0 obj << +/D [1301 0 R /XYZ 298.025 599.553 null] +>> endobj +473 0 obj << +/D [1301 0 R /XYZ 294.707 382.793 null] +>> endobj +1300 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1306 0 obj << +/Length 1433 +/Filter /FlateDecode +>> +stream +x^íXKoÜ6¾çWìQ² ߏÞò°­:>8¨{P¼ÜDè®äHÚ¦î¯ïð!êQ®½Emz±†ä,5ü¾™#¿º~öâB!ÈAW×ەшc²’‚#ÊÕêz³ú©xe»wälÍ .n±À7ð‡œý|ýîÅ“ÓßJ —+~õºÜÝveo»³5¥ªè?[gH·]gwar{¨ïúª©ÃJ³]¸ÞbLÛ®³¿Tõ&XÁüۍmÙïpƒÂóÊö‡¶î\´«5…3Q½ZŽ8Äé£,ÃAæ hDÎquþòûÜiAR“ÁË¿Xà:]¹VŒ¬²Ë½Íx6ºÉ½K!¢Øàr›¬‰æˆHæOɱ™»™»|~¶–GÔI%r 2ªÃٜ۞‘“è†#‰n䐘y'Y"qêItæåtœèyãTsÞb®9D8d²Òÿ2)°Ç8,êÄâ|Jý)¤ Ͳ§MäöêÏMN¨ƒ‘ÞÄ㻉ÎÞ5ž/3+;ËCjVi„á7ó6'‹;¡Ð°é¿‹;´ŠRʹêì¯OÁ]#Åtw(Ç¡ dÅ]³¿ßÙ½­û²}k‘ +·:í!cÀóæyX­Í†M%FL&hI¨ìuxœ_]<·"7™Á²Z3!!¿A±Œœ¿½*Ý»Ò/vå§Gú̉N:OÈb¢‹Êµ•Álî§å*JiE@z—C]m›væ¾Ê®Z·B³ËõaÿÑ7'°z¸s}eQNd1} +¬,ºÞî×{oë ¤\˜ÝUûªw±hR¼Ýf‹‰&TÎå’ ÿˆ‚…³X@ªtñCRg÷Fx±u^,TrªºxÝÄܗpél *˜ +Õ¶Ö‹+¾†Î@¿ù–8‚]ÕáÙÙ/[ßÙ8ۅgëI²‡ àdX<†S¾æ428e®;SÃG.>ÙÚ¶eß´)¢x< Z-Š²µIâíÌÇ) Òú̹H…ù¹ô +š_;Ü@ Dنù_Ϩ(ÊÝÁúøIÑCÂû#€ÛôàêA…ém˜þZõŸƒ•84xlñ}”^Ä É‘$}òˆ3í)»…ö@²À«¾F!²՜d¬z.§+†2HËEÒC> endobj +1307 0 obj << +/D [1305 0 R /XYZ 109.854 704.063 null] +>> endobj +1304 0 obj << +/Font << /F51 451 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1310 0 obj << +/Length 2104 +/Filter /FlateDecode +>> +stream +x^­š]w›H†ïý+t)í±zû:wÛÉ('ñfme÷b&HÂ2'|x+aÂ^Gǔ ORD}¯ž nx„*¤äL(y˜Ô^]m²¼ì0ìùHyúZŽ˜ôû Ãåq.ßÆJ|Ǽmø?bá?ùÕ8…P¤˜Æ6ðF’z]AWSW>™y}γ}$ڛ×ܖ„Á ҃ƒÚZ=ÈvE:hS:Î}‹>©µå•Fw}yÝOo +ó–žkþú)Ü~¯¡ý‰1m +#¨xD›(ŽÊ—0šÑnÖÔÅÛ¡®9|Ž +ÃR” +ùnþÝÓËû~ŠS˜·óB“€a<áÎdc”šE”nÍaæÚmÇ'5 z;@V„{—”áÈ,X! TùYd'0oÁºæ‡È>f¹­ø¦‚Oú>>O=@™DP(ãB²DõD|‡èªçÆ-O×xuEl³ x~x\P1 ómv(ŸåïIEJül\ –"•P¾ÔY6(NaÜRtÛ¬t—Ì]Xlóè¹l2ò1ϒúèý‚ˆ9lRyÖ'idHÉ&ÌÏÀýP};<öT# Ñò&a*ݬ½\v9@} +,uׅNêQ +K@”Q–ž@ÑlSnó<ËßÆÈC”ÿ¢?ϋ¡ÁȕÅìnT×ÿ¸ëE8‰ùaËüq9­+&®ò.õÛ°…O´Û¨à,[ŸA‰‹VŠҝÂK×uà_›2ˆL‰o³$ ÒÝ2ŽÒFRå âÏ÷‡$LÏX_çõozpJÐÕ æFEcqê¨|ÕNՁzŸÄ‹ÓuÀ&ëöçZõÇÏtkYþ]·XõºåáVÝSdêêmú£*¹Õ¸˜,Tr»é?-ÔÁ,Â‹ÕuḤ Žç?¢ñÍ û°ÑoÐõ@ Ôv®¡|;úì,ÂKØõÁïæé08“àq>÷p× ÙÓZpD1?ýéÄ$Æ-1×xu;÷‚ú£x·‘¦Øz4ÌÓ$âÃKQ†=RrÊcµ²*@+cú* Nစê:°ªoóè§=Ùw}ó¬y(ùÆq“¡ÊGWŽv 3/iPBYý²4 ½¤Ñž-å#ŽæՓÙÊaó@Ÿ«Ú±Ûë`…BXèÁËYÑJ™ÖZ¦C©ž³ätÄñ‹ 4€¶¹ýËm–7uÉ3êL3È[ +méöyŽMþš·¬ëú-‘ËÅRb<ÿœí·"Ñ‹}҄R=’×ɾuCHä5¿¸³ÍW{`F›‡¹ª.)ùúá>œ"óª/‘Íp€¿õWnå}«^ˆÑm%L|«À6Ú…€+—lâ Õe¥£N…H`÷fx…ec×9£RÀR)‡ê =°™Qí¹±(ðŠý¶`Øféf(­åïšÄª¯`@R“ˆù‹{’×µ ¿}Ìâ8Ó7ýÖ¤à»íS[˜õâ]í&››\T“büÌߨ?'óF\m8¬Âª,çõ©< ÌÒہ‚5} $xÓ×â[ ú•7ý8XoóØG„sX€†Y~?ßH^¯ÛW¿­êƒ›> endobj +1311 0 obj << +/D [1309 0 R /XYZ 110.851 704.063 null] +>> endobj +474 0 obj << +/D [1309 0 R /XYZ 295.371 655.389 null] +>> endobj +1308 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F15 638 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1314 0 obj << +/Length 1525 +/Filter /FlateDecode +>> +stream +x^µXKÛ6¾çWøV¨¹âK¢rK°Ùbƒ6-Ðö@Ûô®P=\Qê6ýõrHYräfÑ —õçõ͌öõöÅÍÏV”’BJ¶ÚWT¤„Òb•IA˜ÈWÛÃê—ädºº´¶l›o׿mßÞÜÁÁäŽ,ˆbb•"ó²\ˆe$g‘£6º)›‡õ† –ôÆöHÛ‰§®ì ’_x™æŒˆ,‹‚ÿZ|:%i–?÷m³¦äÀ³qÒV&%Ió|µ¡‚‘¡˜ýЛkt·\G:SÔo8îWã=é½ArTÁ-PGã T¡´½iâ•ö¸ÃƯiÊ*CÐ^I§ön%9U 8蛨ïí¶¬áª(ÜU™n_uþšfišühìPõ°MݗQÂèݟMž*d²×UeŽÎ‚û`Ó+è§`ç½ Ç=< N“ÎôC×Øw–4C¼ ¹GD‘ͽ½3>:¹÷*±fß6;Ý̓nhzo¥ç(½óÜ>¾âözÝõó;ãÙ©k:]ãnÙ,9–‚ÐBEO Û–\&8IùȆóœù—¼…œç„ñh¡D¦ÁzoßÖ§¶1MK¯hÎáziqçl&,–5¥9'"c†Ñvq§×¢œ "åTe‘òD7‡³îž°Ÿ +ë QY¯ibp±¬Ç†q®`óhžÕaÏS‡@ÎEòaØYóÇà]菒H“?× ð±×=@ÏâlÉDWƒ 띶.QÙ6ø«÷û¡ªé-Ì¢ðüLëz§Î8ù–í`qçsEžL…bß|0ÓüœWŠ‡x)áp1BøÀÒ'œŸá Ü“¼rgg8DrɼÁe>bJ*$#¦äSò! ¦(—„A ‘ú˜•Ç—|à™)|f:yøÀŽ7œRGóråÝ̼+ÊB³¡ôkPŲ€*–ÅbDD•ßô!pÔhN8[PâùX␬3,eô"…Ç׈—8ˆ‘ég°Ž8s « Ýïg®–c[ûŸ0uW öñŒ©MyDª PÖ£süEãq‘Æ¢W$w®·]ßéOîoÞãÉ+.æ‰B fÉmè±w`m7…/U¸ï›öÚ˜y`¾+«À[»[ œ"p¾‹È|“Ueó»]º$Ã¥÷Oé¾YK™»?^èŠRvÿ»e[óhëí\¡Ã…§`Ö(¸?~uÊÎì¡…È@qŽäø²ð®úÌm¶üÛQ¢ðXÞ}‚ÚÙËËE¸ü½ŽFc-^÷ӏO&IŠ\ͯBv\ޅx•NQœp¯w¦Ö‹šSú™„±N;3|±AMöºyˆcJG%ŒÜ +¦V•eQh1¢© E]ÞW½T*\2Ã÷3r¾úá6(òÕë{$n;} ª@ò$ j1¨·CBÃÂXJÙ%Í_RáÔxñfûâr–‹w +endstream +endobj +1313 0 obj << +/Type /Page +/Contents 1314 0 R +/Resources 1312 0 R +/MediaBox [0 0 612 792] +/Parent 1293 0 R +>> endobj +1315 0 obj << +/D [1313 0 R /XYZ 109.854 704.063 null] +>> endobj +1316 0 obj << +/D [1313 0 R /XYZ 110.854 334.348 null] +>> endobj +1317 0 obj << +/D [1313 0 R /XYZ 110.854 317.39 null] +>> endobj +1318 0 obj << +/D [1313 0 R /XYZ 110.854 297.963 null] +>> endobj +1319 0 obj << +/D [1313 0 R /XYZ 110.854 278.536 null] +>> endobj +1320 0 obj << +/D [1313 0 R /XYZ 110.854 259.108 null] +>> endobj +1321 0 obj << +/D [1313 0 R /XYZ 110.854 239.681 null] +>> endobj +1322 0 obj << +/D [1313 0 R /XYZ 110.854 220.254 null] +>> endobj +1323 0 obj << +/D [1313 0 R /XYZ 110.854 198.358 null] +>> endobj +1324 0 obj << +/D [1313 0 R /XYZ 110.854 178.931 null] +>> endobj +1325 0 obj << +/D [1313 0 R /XYZ 110.854 161.829 null] +>> endobj +1326 0 obj << +/D [1313 0 R /XYZ 110.854 142.546 null] +>> endobj +1312 0 obj << +/Font << /F36 327 0 R /F47 359 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1329 0 obj << +/Length 2015 +/Filter /FlateDecode +>> +stream +x^µXK“ãD ¾ï¯È1©"½ýn›ÛÂ5-àÀrð$žŒk;e;»,¿©ÕnÇ{2U —´úµ¤–>IþêöÕëo•] ÁRcäêö~%´aܙ•5šIíV·û՟k!Ùf«S¾~×ä÷yÓäûÍV¾¾yý3we½û@d[ü³ëœ&ï¹á[AtqOcUwDdÉ×7Ò¬³¢ÌîÊN‹Í_·ß¯øj+R¦e®WáúŸÎÇ»¼¡×÷W·c “¬Ãû÷ÿI€­ƒØÕVj¦yâþ®ü«‚Q¦ë¼ÌyÕÑbÑÒ¢çíOMyë(v39Ø+ÎûsY³Éúp¦g‘©]à +-‘íùt*‹|†ãΗwuÕeEåoXDëã´=ïvyàËábFÓª®þɛšÖ &`›<‡D)°«÷! Î'ÏÛàKᣰ9õ·:aI*Æî÷Ýáã+kŸŠî¨»2«>„Ù}ç/ºdx²Z˜ˆtsZs¦`åºÖF2ÛóBòs@­ñÁ@Áª>h= +LJºÜ‡zúÁ|dNàòãÁ%ˆ4g|ˆ¾®9W=¶™p¿éyQæÕÁ›’2͜9”fB'ϱz–³j¿-‹Ê¯è ‡{ýΩn JP[‘Àó€Çó¤„Ù0–,Ñ1âÀsòIÁÌe+‘ÏXŠÃ¹ÇF¤½&+T‡bÒöxœ‹NÑØk.--ÓqA¾ˆƒŽ é®1T‚É4ÆÈõÁ.à xÞ]N¯[·y7›ž@•!ʞ‚[mãáž!+ãe!CÀzÌʨߛù¤Ì™–¨Îe9_@ñ`;i=²&ۅ“¬YCK’Nxt´iø¤r±C ©ygIê±ñ9/©.^R)½¾Ý(³n²¢,(û\´,‹÷ %ƒ!žxgç"øc¹GÙ”M¦ýÀ¡ª_qXã¼Ë¤Ìñ믮¡ÌWîòՕ* eM¨4p•ˆÇ‹‡Ÿ²õҀz°Ûsõ†×-M¡–ž >°·+ҡܸÁM¯ó¶XŒ4ëØõ¼Š¦Ðjj +úälÒ«OŠá¿*À½„^=Éèµ&èòÈt̗X5-8Æ8ö²‡âœqw½p÷‡Ba.¨Ü\&2Èw7û!ƒ,e k!¥>nþFêšú|"òæ-÷}¶‹‡bé€(×1™ÎË®œö®ï^JÜpùÿ$ð`ßß^JàsÛ¤þ¥ý¡¾ø4+ð̓~gòi±k¨šð.îi ªë?™¿s½¯ó–(Â#H6X^ÖM7« ǏQ™CޕÁÔ\-ÙÛ%,åzˆñ­UbN¥dÎ^7à©P‘cÚI‘B÷‡°²LÁè7…ä‘$ žƒN$<‚ÂY E|óã[«ÉÿÞ|uCÄÛ‘œAR±D¿$êûsù™(àUr!§§„ûRhãÕ7·¯þ9Áºé +endstream +endobj +1328 0 obj << +/Type /Page +/Contents 1329 0 R +/Resources 1327 0 R +/MediaBox [0 0 612 792] +/Parent 1333 0 R +>> endobj +1330 0 obj << +/D [1328 0 R /XYZ 110.851 704.063 null] +>> endobj +1331 0 obj << +/D [1328 0 R /XYZ 110.854 666.202 null] +>> endobj +1332 0 obj << +/D [1328 0 R /XYZ 110.854 649.616 null] +>> endobj +1327 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1336 0 obj << +/Length 1549 +/Filter /FlateDecode +>> +stream +x^­WKsÛF ¾çWèVj&Þì›dnNœ´Î¤I§QOM´¸’9¡H É8¿¾Àb—2e:™œ‚X,žÀ›'Ï^+»‚åÆÈÕf·š3!ò•5šI®6åêߤn›½ëÖJˆd¸-šH9$8|ÞW×÷Hi“j VÕÓóX”¥+éėj¸%îM]4Ÿ‚D±N·,ëfëÿ6oV|u!4Óڒy×;ä>{mÄÌɀÁIä­Wã¥æþ‚»Z¨(æmÍxÒ´h|&¼çÄrM;îo‰;´Ä»më’(²× {Q ÅÔ?ú™(¸½º0’åRÍ}º±ÙNîoöOTˆDíš=Æév7=—â¡,J~7"Ê°ÌÚ(ƖT]H¡X*,`*ÏIôvxw+ Ãó”tÒi0ÞC¡+¿ ”‹0·LI9/·¸ÏœÒ𺪧µÎÛòC;žä@ëɺ÷7q‹á9pIá2)nÚq fAl ÚÑW„Örysfí¤-\,J(11£ï§4®-fŽ6Ǻ€UŠî=ъVàù’æqMDÓOi9ÿ ə:µÌ‡oç/; D at D°.úŒ,ê1EÈ80b^q0&Z¾íÚºnQ×þy˜NP¯:Kç©Œò|å|½Tۀ×WþþvåLËðW(ƒôuCûâ C„UöÉñ²<µ ©ƒä»{x7˜ÈŸúÙ¡€&zÿ¥qÝ´äÉ–m·Éÿ¾,ŸF_¯æ•g‘¢ýVŠ¦Â}ŽP¿ƒl»;z<ˆä®àÖWù½ك°õÕWO~s7Àenê»óóy8ÿvBÿ"þ#蜀ϗƒayšÍ +þà,¤,Œ4ü'"ހލ⁆©ŸÑúO¢¸Øú÷.*=ÓÒ,bÍýÕ¹LŸ¸,]?{OÄ Àú§)PšS¬.ÑUÈÝ´xkÉCƒUuqS»)šæÏ`µV¸bG·ä âr–[˜¼> endobj +1337 0 obj << +/D [1335 0 R /XYZ 109.854 704.063 null] +>> endobj +1338 0 obj << +/D [1335 0 R /XYZ 110.854 353.277 null] +>> endobj +1339 0 obj << +/D [1335 0 R /XYZ 110.854 336.319 null] +>> endobj +1340 0 obj << +/D [1335 0 R /XYZ 110.854 316.892 null] +>> endobj +1341 0 obj << +/D [1335 0 R /XYZ 110.854 297.465 null] +>> endobj +1342 0 obj << +/D [1335 0 R /XYZ 110.854 278.037 null] +>> endobj +1343 0 obj << +/D [1335 0 R /XYZ 110.854 258.61 null] +>> endobj +1344 0 obj << +/D [1335 0 R /XYZ 110.854 239.183 null] +>> endobj +1345 0 obj << +/D [1335 0 R /XYZ 110.854 217.287 null] +>> endobj +1346 0 obj << +/D [1335 0 R /XYZ 110.854 197.86 null] +>> endobj +1347 0 obj << +/D [1335 0 R /XYZ 110.854 180.758 null] +>> endobj +1348 0 obj << +/D [1335 0 R /XYZ 110.854 161.475 null] +>> endobj +1349 0 obj << +/D [1335 0 R /XYZ 110.854 139.579 null] +>> endobj +1334 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1352 0 obj << +/Length 1233 +/Filter /FlateDecode +>> +stream +x^WKÛ6¾ï¯ðQb†Q”zK6 +½ø +¯ oYXy•™ÖŒíq³ñ¸mG­kÛï`?¸í®Ø j¨íÁqgñ´ßöOGþÕ÷æÌ5i3Þ­­b+Á³*ÅÉ¢yÊÛ$‡ózÎKÉ/NȏîÌÝ(J„Õ +gmbù¹)>kJ’²(F5’š¡ ˜¬óføpë–Sìж³—€V9•s»×Noû8òrž´‹“Ä©õMl<؉óðtÂcî|ÄU™­—Bf&Q€I<ݴڎƴKƚíœ©Sl¹ Œ©ËÐ"«zêmWŒœ2ö&‹ z‹ÅUâXÏ(œ« +)\‰s +W8ւ_>*ögÙÄâðçc„+2[°KààÔ á‹[±^ΟðÉ È€+GÀ•g€‹OXÂ7/àe®Ð¼$´šê÷& s6qO]°ËsC̕üsɹ'³ƒWtˆ_¶í`Î3Ž9˜å3>—ÀrªúÿÈ]ðFõ/ÂÇ')KŒŸ¨½"UÁ‹X1s‰å9(3‡ÿTäè⇏_QøäôSúë@IU‘åœ'éÛо¢æa\)ã×ZLýÂòàÆÝçõÝßu R, +endstream +endobj +1351 0 obj << +/Type /Page +/Contents 1352 0 R +/Resources 1350 0 R +/MediaBox [0 0 612 792] +/Parent 1333 0 R +>> endobj +1353 0 obj << +/D [1351 0 R /XYZ 110.851 704.063 null] +>> endobj +1354 0 obj << +/D [1351 0 R /XYZ 110.854 666.202 null] +>> endobj +1350 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1358 0 obj << +/Length 1173 +/Filter /FlateDecode +>> +stream +x^•VKsÛ8 ¾çWø(ÍÄ ß’zKÓv'ÝÇìÁ=m÷ Ût¬YYòèÑ$ÿ~‚´e¯2Û\l!ððW7w_t¶šey&«ÝBÎr£&ÓÌh³Xm%÷©4Éñèšmõ’.¥á ù{õuÁK]°\(2û­jÆ°ÿÐ6©æɏTðÄ5CÕ6=ž¸û¢,|‚ÆHü80šÉ’ƒÕ¾êá¼UÉf_×áB&[×oºjíÂ^ß\Üʪêa_¤.;Gª¶©_IÕ¹Úá%~àOÙ áHKÿ¿¤"ùãÛ]Œ¿ñÚîÐÇ[ +Í´A–Í–î8ì “{ÿã/Ü5®ft_ at WdL +€”î«9Ë@I¸2‘.ç<ùüâ6#ÂDnÚý+¹\WÉv©È“ö©+oa)-Ëe„‚Spàþ÷OV“xìڍëû¶ëqN¸Q®ë !"øïRa’üÁ¸Â¦Õͅی+¢ñwa`Æ%€¸îÊ®òI–Y²i›]Ûªæ זRzÍàj•[Rß|$õsUפª+J8ށöªæÊG_(ƒù±.œ¹„×e•@7b +º,³pÀÞÕÕz.32g¶ÑêvÎOÆDfN~ƾ{˗L)-úù¨¤¸ð¶†»Ïx3S¹Ž– ãËù” ¥x²këºE(Ÿ}2På„0¨ +nA†cy„o)ŠŒá.PûY+FY³#² Bïq‹ë"qìi6kD> endobj +1355 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [257.353 172.665 283.255 185.351] +/A << /S /GoTo /D (subsection.3.2.3) >> +>> endobj +1359 0 obj << +/D [1357 0 R /XYZ 109.854 704.063 null] +>> endobj +294 0 obj << +/D [1357 0 R /XYZ 110.854 666.202 null] +>> endobj +298 0 obj << +/D [1357 0 R /XYZ 110.854 437.041 null] +>> endobj +302 0 obj << +/D [1357 0 R /XYZ 110.854 294.777 null] +>> endobj +306 0 obj << +/D [1357 0 R /XYZ 110.854 228.555 null] +>> endobj +1356 0 obj << +/Font << /F47 359 0 R /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1365 0 obj << +/Length 1702 +/Filter /FlateDecode +>> +stream +x^­XQsÛ6 ~ï¯ðKï今)‘’ö–¶i/]³îRïa·î‘èXWYòD©‰÷ë”#;j“ööb‚ ‚À€ò«Õ³—ocµàœåRŠÅj½àB²x¡dÂD’.Vå⯀³e˜äQð‡5ÝRDAX›¥Á×%—©a§ÞíêªÐ}Õ69Y0XC„öŒªé n¹-ŽÑ-y+<ïì·ÕˆPSÞý/jŠo«ù‘Ke³Zbp#…tSÎú:gRÊ{Mù¬&Î$Ä ’D΃†’ñeÉ£Àt ˆçÂa¤[#S†X€#;{ºPL¨©[6:a,AUö �€7AAúb:ó>è=Þ¢ú9ç€Ç…€~ä1áËY|¨šáŽÈiuÇyÙ:wHLꞈMÛ¸«ُ:*eIð¯ëNÈúÉÈ?‰É\$ -´¹3ðº5ã´ò'×4Q„…S¤%iŒÅªÅë޺Ӂá\ £+²0_Õ~ñzOãÑa^´¥0ÄiüŠÚN–ˆBE›v¨ËãŠv»«êÓÞ½~=g÷mÕo–“^Íc‡-vð)|yd ‡Û¦ ÁÉ¡óïLhsð°<‚ýC©Ì½à(ö8º‚O‰Ê•ì±1ýîfma¬m}»{ë\¤¡°:Aû=œù{Ÿ5XÑ7¹ +v]{Óé-N$¥0Bó• põnýúö”&³Ë7*9h> +Ój»«ëJ$I>‡…µÑá\xàJƽ±Ò+¥كoÂÑyØÏ] ž ¯¬ßiGÔ£òãtë¾Höþä빃gý‹Ö Ï`÷j™Ew&wÎDBÑçc¹h!Ñè-ñÙ}´8 ¹8øµ˶p/M®(š^ˌ™SÞ·ºô|aŽ¦RâSé²²…©kݘvðÀ+³Õݗ§ä‹/Çq$ +Ω ő¢Ïà¸bˆÄQ1D†ƒHjᎷñÄ]–úmMIbŸ>gh+cJSÒ«?ÁߋP)™ÊEr+endstream +endobj +1364 0 obj << +/Type /Page +/Contents 1365 0 R +/Resources 1363 0 R +/MediaBox [0 0 612 792] +/Parent 1333 0 R +/Annots [ 1360 0 R 1361 0 R 1362 0 R ] +>> endobj +1360 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [353.8 384.46 379.703 396.698] +/A << /S /GoTo /D (subsection.3.2.2) >> +>> endobj +1361 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [232.24 282.742 251.831 295.428] +/A << /S /GoTo /D (table.A.1) >> +>> endobj +1362 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [168.913 253.85 188.504 266.536] +/A << /S /GoTo /D (table.A.1) >> +>> endobj +1366 0 obj << +/D [1364 0 R /XYZ 110.851 704.063 null] +>> endobj +1367 0 obj << +/D [1364 0 R /XYZ 110.854 666.202 null] +>> endobj +1368 0 obj << +/D [1364 0 R /XYZ 110.854 618.646 null] +>> endobj +1369 0 obj << +/D [1364 0 R /XYZ 110.854 578.931 null] +>> endobj +1370 0 obj << +/D [1364 0 R /XYZ 110.854 554.523 null] +>> endobj +1371 0 obj << +/D [1364 0 R /XYZ 110.854 518.137 null] +>> endobj +1372 0 obj << +/D [1364 0 R /XYZ 110.854 464.771 null] +>> endobj +310 0 obj << +/D [1364 0 R /XYZ 110.854 425.457 null] +>> endobj +314 0 obj << +/D [1364 0 R /XYZ 110.854 338.632 null] +>> endobj +318 0 obj << +/D [1364 0 R /XYZ 110.854 222.916 null] +>> endobj +1363 0 obj << +/Font << /F36 327 0 R /F51 451 0 R /F47 359 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1375 0 obj << +/Length 955 +/Filter /FlateDecode +>> +stream +x^­W]oÚH}çWÌ#––›™;ß}K·‰ÔT©² +Ujûà‚I¬bLlÓ¦ûë÷“’Qh,„`fî¹_çߌãôLN+¦µ§4›£/ß8›ÓŸg¬ý‹ýÚî,˜t´’´^²ËÑ?£·ÓÑÑ©4tx­‘M ¹뙖¸l:g_ÆÓÄñqú}™%Ô|| âM2‘‚?e7›¼ÊæÝïU9Ë꺬º¯§YÚlª¬N¾MÏF'ÓÑÍ=`'AJ2"$ 5Kï m±p¤°LyžnÛBÆ÷m£ T»[ƒQ³MÛ(e"Á’ê]Ó—E‘­šçÝnM+ÊÂëÜFéAkÇ”Ó $î¸]wXe}j}RÖUyU¥E$)ÊqÐÞ¿Ý]R,t¶C·Xo" 1šN«òÐìǬ-Ë´ú} BqtªÅãÆWdb{dY®®’‰á|ZÒ¤E¤œåÁì‡uè ®ÖM^äÿ¥M^®"`Ó'ÿXí·T> X¢n|ÖÙò+çrS_G+zDqõ**Oŧ^ùe…GÛ-®}m|࣭7T·žq9¨ƒðÝÍTJ’i#ێÔV¤)©( /ôówFu˜ß! ¾ïïªtŠž=šný1¬Î6Ëðԁaö#øx—°o„êÿ2™s +endstream +endobj +1374 0 obj << +/Type /Page +/Contents 1375 0 R +/Resources 1373 0 R +/MediaBox [0 0 612 792] +/Parent 1333 0 R +>> endobj +1376 0 obj << +/D [1374 0 R /XYZ 109.854 704.063 null] +>> endobj +475 0 obj << +/D [1374 0 R /XYZ 263.672 544.457 null] +>> endobj +1373 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1436 0 obj << +/Length 1100 +/Filter /FlateDecode +>> +stream +x^µW]“›6}ß_á—ÎؓZ‘„ÄGÞ$Þn¶;¶w2™¶ÃÈFxé°°ÅÐ8ÿ¾2‡ÎÄoŽÎѕŽî½¼ßܼ]0g@r\‡ 6ဌ\ÎÜó¥Þƒ?†Ë$ÇÑ_›Û· NyœÓƜ"‚-C»0òEðwqÈý](ü4 2×-û|"ár±«ʉ¿ŽÆ”ã¡çA"ã +<& 1ÆÏ´ž„ ×FØqú ¬æ·Ûü—±lD]¯ŸNîÊä>:ä2ƒ÷ #Ûâ=¥ ¸-%“à%KwWÛ3y؉ Ñ;.ò0kÐŒA~nówŸÈß±üý¹¥2_:nì î5·¨+† +Ý␋,ï:E‡íH®kÈ'?ÌÄ3x 6Cœ÷¼z[#ÿ%Gˆ—ºÈö¬/ƒy ¶Æë?NüéÝ|rÿøà?|œ¬çàÞP5fM׆÷ƀ[2‹ßWÓ¹ÿxÿyy?UԄÖEp9,¢±5'4ÖóÉjúñB$ FG ç¯q$_£$ð§i’Ëãÿp«Ëú›µ™ÉXær~Üɗ{¶ñËû%t´ªg¦¤UÁ(胭‚¡ö'«ÕäKo_Âü€/½bßüԕש¯¸òÛO«ùD ö£Ž rCý¨"Wԗ—_6Pvó7M0W_ë´# ?ÅÃÉj1gr;RÏÅ~%{ýªvEN/§û]¾Ò©,2uŸ¼öºë6…¨~ae´ÊÁk}¾Hy« +GuÕ¨ÕãÈ£>ÊμÙôP< ƒ­ÝèPîež¥ÜSÉÓµêÉó|™aZdÝÉÍhîãt+LöJÃSb(ÿß¾g¬ÊT6”ŸDvæs™ßNÌ2K¤‘jd:8Ñ‘;‘ˆ;ÜˋSÍFKu­ÊåŒ#Ë5„Ú¯ê!Ϧ¶)¿."Lýþ©N—jääÓÌfšpò~©³L„fC0REÆÖã?)5£Û"6õ‰VgŽU©i ˆóŽ”Iÿf¾¹ù ZË +endstream +endobj +1435 0 obj << +/Type /Page +/Contents 1436 0 R +/Resources 1434 0 R +/MediaBox [0 0 612 792] +/Parent 1438 0 R +/Annots [ 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 1431 0 R ] +>> endobj +1377 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [273.644 544.37 287.591 556.309] +/A << /S /GoTo /D (page.99) >> +>> endobj +1378 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [201.913 530.038 215.86 541.863] +/A << /S /GoTo /D (page.99) >> +>> endobj +1379 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [252.124 515.592 266.072 527.417] +/A << /S /GoTo /D (page.99) >> +>> endobj +1380 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [266.471 501.033 280.418 512.972] +/A << /S /GoTo /D (page.99) >> +>> endobj +1381 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [201.913 486.587 215.86 498.526] +/A << /S /GoTo /D (page.99) >> +>> endobj +1382 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [194.74 472.141 214.665 484.08] +/A << /S /GoTo /D (page.100) >> +>> endobj +1383 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [194.74 457.809 208.687 469.634] +/A << /S /GoTo /D (page.99) >> +>> endobj +1384 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [223.432 443.363 243.357 455.188] +/A << /S /GoTo /D (page.100) >> +>> endobj +1385 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [216.259 428.804 230.207 440.743] +/A << /S /GoTo /D (page.99) >> +>> endobj +1386 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [180.393 414.471 194.341 426.297] +/A << /S /GoTo /D (page.99) >> +>> endobj +1387 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [144.528 400.025 158.476 411.851] +/A << /S /GoTo /D (page.49) >> +>> endobj +1388 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [237.778 385.58 251.726 397.405] +/A << /S /GoTo /D (page.86) >> +>> endobj +1389 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [230.605 371.134 244.553 382.959] +/A << /S /GoTo /D (page.85) >> +>> endobj +1390 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [230.605 356.688 244.553 368.513] +/A << /S /GoTo /D (page.86) >> +>> endobj +1391 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [223.432 342.242 237.38 354.068] +/A << /S /GoTo /D (page.84) >> +>> endobj +1392 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [280.817 327.683 294.765 339.622] +/A << /S /GoTo /D (page.84) >> +>> endobj +1393 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [237.778 313.237 251.726 325.176] +/A << /S /GoTo /D (page.84) >> +>> endobj +1394 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [259.298 298.905 273.245 310.73] +/A << /S /GoTo /D (page.84) >> +>> endobj +1395 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [277.23 298.905 291.178 310.73] +/A << /S /GoTo /D (page.85) >> +>> endobj +1396 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [216.259 284.459 230.207 296.284] +/A << /S /GoTo /D (page.84) >> +>> endobj +1397 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [209.086 270.013 223.034 281.838] +/A << /S /GoTo /D (page.84) >> +>> endobj +1398 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [209.086 255.567 223.034 267.393] +/A << /S /GoTo /D (page.84) >> +>> endobj +1399 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [149.709 228.283 163.656 238.501] +/A << /S /GoTo /D (page.84) >> +>> endobj +1400 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [273.644 212.116 287.591 224.055] +/A << /S /GoTo /D (page.84) >> +>> endobj +1401 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [273.07 197.67 287.018 209.609] +/A << /S /GoTo /D (page.84) >> +>> endobj +1402 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [290.429 197.67 304.377 209.609] +/A << /S /GoTo /D (page.85) >> +>> endobj +1403 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [216.259 183.338 230.207 195.163] +/A << /S /GoTo /D (page.84) >> +>> endobj +1404 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [209.086 168.892 223.034 180.718] +/A << /S /GoTo /D (page.84) >> +>> endobj +1405 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [209.086 154.446 223.034 166.272] +/A << /S /GoTo /D (page.84) >> +>> endobj +1406 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [187.567 140 201.514 151.826] +/A << /S /GoTo /D (page.10) >> +>> endobj +1407 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [190.543 116.166 204.491 128.853] +/A << /S /GoTo /D (page.29) >> +>> endobj +1408 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [352.938 544.484 366.886 556.309] +/A << /S /GoTo /D (page.12) >> +>> endobj +1409 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [335.675 529.177 349.623 541.863] +/A << /S /GoTo /D (page.10) >> +>> endobj +1410 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [336.548 505.629 356.473 517.455] +/A << /S /GoTo /D (page.105) >> +>> endobj +1411 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [459.529 491.184 473.477 503.009] +/A << /S /GoTo /D (page.84) >> +>> endobj +1412 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [375.186 476.738 389.134 488.563] +/A << /S /GoTo /D (page.32) >> +>> endobj +1413 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [398.308 451.469 412.256 464.155] +/A << /S /GoTo /D (page.10) >> +>> endobj +1414 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [371.78 437.883 385.727 449.709] +/A << /S /GoTo /D (page.10) >> +>> endobj +1415 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [365.3 423.438 379.248 435.263] +/A << /S /GoTo /D (page.82) >> +>> endobj +1416 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [408.339 408.992 422.286 420.817] +/A << /S /GoTo /D (page.82) >> +>> endobj +1417 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [365.3 394.546 379.248 406.371] +/A << /S /GoTo /D (page.82) >> +>> endobj +1418 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [408.339 380.1 422.286 391.926] +/A << /S /GoTo /D (page.82) >> +>> endobj +1419 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [379.646 365.654 393.594 377.48] +/A << /S /GoTo /D (page.78) >> +>> endobj +1420 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [429.858 351.208 443.806 363.034] +/A << /S /GoTo /D (page.82) >> +>> endobj +1421 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [348.961 322.317 362.909 334.142] +/A << /S /GoTo /D (page.84) >> +>> endobj +1422 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [366.894 322.317 380.842 334.142] +/A << /S /GoTo /D (page.99) >> +>> endobj +1423 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [359.585 297.048 373.533 309.734] +/A << /S /GoTo /D (page.10) >> +>> endobj +1424 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [366.041 282.602 379.989 295.288] +/A << /S /GoTo /D (page.23) >> +>> endobj +1425 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [343.781 269.017 357.728 280.842] +/A << /S /GoTo /D (page.27) >> +>> endobj +1426 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [386.819 244.495 400.767 256.434] +/A << /S /GoTo /D (page.83) >> +>> endobj +1427 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [355.592 229.302 369.54 241.988] +/A << /S /GoTo /D (page.10) >> +>> endobj +1428 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [401.117 204.893 415.064 217.579] +/A << /S /GoTo /D (page.76) >> +>> endobj +1429 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [358.127 181.345 372.074 193.171] +/A << /S /GoTo /D (page.10) >> +>> endobj +1430 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [405.756 156.937 419.703 168.762] +/A << /S /GoTo /D (page.32) >> +>> endobj +1431 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [401.189 131.668 415.137 144.354] +/A << /S /GoTo /D (page.33) >> +>> endobj +1437 0 obj << +/D [1435 0 R /XYZ 110.851 704.063 null] +>> endobj +1434 0 obj << +/Font << /F47 359 0 R /F51 451 0 R /F36 327 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1469 0 obj << +/Length 684 +/Filter /FlateDecode +>> +stream +x^­U]o›0}ï¯à¤âÚƼ·~J­Z¨4i"'¸Œ@æví¯Ÿ‰í ˜Ûåa‰.Ü{Ïýà";9»‰b!À(Å^ö¨LRJ¼˜€Iâe¹÷şr Ô/D"ù›f[¶eSwOØ/ë\l„ú«[í^5¹Ð®µ²ªÓàk6ñ"¦`‘"‰5lD:×ٍzßcºB«¦.¾¯7:~ȘB€ö < BL¡ŸÒý©¡q†XaA¦Cf"/wk§¹v–ặ£hŸ :ÌC $€c àAxœîÜçyw{yàc â"v'›•ÈwÒÜdZÖ?xa² …>_V Äl€`hl†U¡íe'ÉÆqòF!¹Ñµ¬[!7R¨ÿ€ÀCU°MìßóçŽçÏ‚~#sˆ «3l^ªó>->§ñ"&‹Éýìn1Ÿ~Ì\í0Å£þHRk0gÚ¬Á fÓùÕõüÒyœJH’ñiZ°Ð8 Rä:赩­ÌˆZG.©Uõ‹rÛÉ»Üò+Q/_Zñ¯zÓ^Å¢=šÂo3˜¯yU½;áx +¤ý׏ÞÝqý9PÅ\—5oŤPýKŠ$ ’ñ¶‹µÆ9¸SöM5BN›7ŠÌÛFªé¶½‰\Öêü«„ãÙ½¯Ÿ•6vï,%—/½ð؁ð•…Hû~ԇO|ÁeqtPìÔ×Õ +¹R#sô7Ä`m?)#èmË¥;QJ´˜vpîB¥DP…&êüÈ|˜NG2ÀbëíS€ˆjŒ+endstream +endobj +1468 0 obj << +/Type /Page +/Contents 1469 0 R +/Resources 1467 0 R +/MediaBox [0 0 612 792] +/Parent 1438 0 R +/Annots [ 1432 0 R 1433 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R 1466 0 R ] +>> endobj +1432 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [149.709 638.685 163.656 648.902] +/A << /S /GoTo /D (page.34) >> +>> endobj +1433 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [166.047 622.518 179.995 634.457] +/A << /S /GoTo /D (page.85) >> +>> endobj +1439 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [214.788 598.223 228.735 610.048] +/A << /S /GoTo /D (page.33) >> +>> endobj +1440 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [149.709 570.939 163.656 581.157] +/A << /S /GoTo /D (page.34) >> +>> endobj +1441 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [134.438 544.923 148.385 556.748] +/A << /S /GoTo /D (page.33) >> +>> endobj +1442 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [152.37 544.923 166.318 556.748] +/A << /S /GoTo /D (page.34) >> +>> endobj +1443 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [235.721 529.616 249.669 542.302] +/A << /S /GoTo /D (page.69) >> +>> endobj +1444 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [228.046 515.17 241.993 527.856] +/A << /S /GoTo /D (page.77) >> +>> endobj +1445 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [245.978 515.17 259.926 527.856] +/A << /S /GoTo /D (page.79) >> +>> endobj +1446 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [208.643 500.724 222.59 513.411] +/A << /S /GoTo /D (page.82) >> +>> endobj +1447 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [163.525 476.316 177.472 489.002] +/A << /S /GoTo /D (page.10) >> +>> endobj +1448 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [244.951 452.768 258.899 464.594] +/A << /S /GoTo /D (page.78) >> +>> endobj +1449 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [262.884 452.768 276.832 464.594] +/A << /S /GoTo /D (page.79) >> +>> endobj +1450 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [230.605 438.322 244.553 450.148] +/A << /S /GoTo /D (page.79) >> +>> endobj +1451 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [156.662 423.877 170.61 435.702] +/A << /S /GoTo /D (page.15) >> +>> endobj +1452 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [174.595 423.877 194.52 435.702] +/A << /S /GoTo /D (page.123) >> +>> endobj +1453 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [198.218 408.57 212.166 421.256] +/A << /S /GoTo /D (page.50) >> +>> endobj +1454 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [158.874 384.909 172.822 396.848] +/A << /S /GoTo /D (page.23) >> +>> endobj +1455 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [170.291 369.716 184.238 382.402] +/A << /S /GoTo /D (page.10) >> +>> endobj +1456 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [158.874 356.131 172.822 367.956] +/A << /S /GoTo /D (page.12) >> +>> endobj +1457 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [202.175 341.685 216.123 353.51] +/A << /S /GoTo /D (page.32) >> +>> endobj +1458 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [149.709 314.401 163.656 324.619] +/A << /S /GoTo /D (page.33) >> +>> endobj +1459 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [194.74 288.385 208.687 300.21] +/A << /S /GoTo /D (page.86) >> +>> endobj +1460 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [220.407 273.078 234.354 285.764] +/A << /S /GoTo /D (page.71) >> +>> endobj +1461 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [154.235 258.632 168.183 271.318] +/A << /S /GoTo /D (page.10) >> +>> endobj +1462 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [237.885 234.224 251.832 246.91] +/A << /S /GoTo /D (page.84) >> +>> endobj +1463 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [158.874 210.562 172.822 222.501] +/A << /S /GoTo /D (page.52) >> +>> endobj +1464 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [166.047 196.23 179.995 208.056] +/A << /S /GoTo /D (page.51) >> +>> endobj +1465 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [173.22 181.784 187.168 193.61] +/A << /S /GoTo /D (page.52) >> +>> endobj +1466 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 1]/H/I/C[1 0 0] +/Rect [140.284 157.376 154.232 169.201] +/A << /S /GoTo /D (page.10) >> +>> endobj +1470 0 obj << +/D [1468 0 R /XYZ 109.854 704.063 null] +>> endobj +1467 0 obj << +/Font << /F36 327 0 R /F51 451 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +833 0 obj +[322 0 R /Fit] +endobj +1471 0 obj +[500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5] +endobj +1472 0 obj +[569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5] +endobj +1473 0 obj +[500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8] +endobj +1475 0 obj +[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] +endobj +1476 0 obj +[531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2] +endobj +1477 0 obj +[762.5] +endobj +1478 0 obj +[380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6] +endobj +1479 0 obj +[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500] +endobj +1480 0 obj +[272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3 473.4 699.9 556.4 477.4] +endobj +1481 0 obj +[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] +endobj +1482 0 obj +[826.4 295.1 826.4 531.3 826.4 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 531.3 531.3 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 1062.5 826.4 826.4 1062.5 1062.5 531.3 531.3 1062.5 1062.5 1062.5 826.4 1062.5 1062.5 649.3 649.3 1062.5 1062.5 1062.5 826.4 288.2 1062.5 708.3 708.3 944.5 944.5 0 0 590.3 590.3 708.3 531.3 767.4 767.4 826.4 826.4 649.3 849.5 694.7 562.6 821.7 560.8 758.3 631 904.2 585.5 720.1 807.4 730.7 1264.5 869.1 841.6 743.3 867.7 906.9 643.4 586.3 662.8 656.2 1054.6 756.4 705.8 763.6 708.3 708.3 708.3 708.3 708.3 649.3 649.3 472.2 472.2 472.2 472.2 531.3 531.3 413.2 413.2 295.1 531.3 531.3 649.3 531.3 295.1 885.4 795.8 885.4 443.6 708.3 708.3 826.4 826.4 472.2 472.2] +endobj +1483 0 obj +[250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444] +endobj +1484 0 obj +[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] +endobj +1485 0 obj +[556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500 1000] +endobj +1486 0 obj +[556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000] +endobj +1487 0 obj << +/Length1 1449 +/Length2 6344 +/Length3 0 +/Length 7320 +/Filter /FlateDecode +>> +stream +x^wT”íÖ6‚´( "ͨ€43”twJ‹ä0ÄÌ03Ò H§t—´H7H)) J* *J‡À7úúžsÞóÿk}ߚµfžÝûº÷µïõ ç­ûFŠ0®†Bâ@‚@)€²®®&+NNcÎþ·ž‚ÓŽÁ"PH©ÿðPÆÀÁ8¼NŒÃ;ꢐ+Ø è +´PH8–‚S…öÄ ìpø:?¸¡<+v¡ 8Îó)¸ep8´”»»» Ø+ˆÂØËñðÜ8€! ǸÁa€_z`øh‚œ+Gbñ!08€¯0ÒÔè£áÈ¿œuþràü9+v#œÁ¼ÃïÖÁ+ð«Ä/øãû‰ÛjpÿÙÀ?Kè¡ð„†¸ÿÍK ŠÿýŸ·àwÈÿü¿²ü¯üÿïŽÔ9;ÿ¶sÿåðÿØÁ.gÏ?xB?Âá—C…_仚ÁÿÚh]8 ñÈå¿­š80~I‘öx¢ €D¢éX5„vƒ:üE¦¿§¯áŒ@Âˆ_> +ü/~÷ NøË‹ŸÙ_&0¿ˆ¸ßãý%Ãñ«öÏ>T‘Pì×N +‹‰À ؓO ¼$ðá—÷øÍy€ …Ç �îª'týñO£Z÷šs"yƪ™Ç¿^i-‘ ”|þ9skOĞ™i7Sö*»E» ûäes㻋iÁÂIï“A҆³Ûì_ W²2^/‚w6PÕ°úq¬´/¹JÒ‚´7gj•‚}lÛ¢‹!y^¹›nC-¸€Ž‰ßkÜó<²§¸žêÀhÔœÇEüؗ}.0ºi7i +•µ¼„^>ÉqIfÁFÉ!ž˜¾´ ¥£˜¬È»§Orù­£ ñéß½›ÉÀ”ƒÁ¢6J$˛׉igO{‡O@Û|#Ó4c—®}1«¯@£2UN3_„µ{È Ø}Ш=±`·2V=xå˜nØá'ÄwJ¹²B¿ HO¥žs–Xñz0®ÙËÉÈÒ¸ez8+ëì¤x%¹àúôJqîÇ~Ô7C÷ô±%)ŠP¶ xó6…ÐyxË:+Ë+zÏÓ¯MW}ƒrCqkÓò[nßóßqÅ-ڝøvÒ®$òT…H\62{äy“V&['오oݺØBÍÙyå©IVKð¢·Üx´PnYåseÔÂ*p˜³Ì÷zæ&ì³·½¨\m©µ»JÑw¸Áìj7Ñ&3±^T託'C_AˆH³Ô(õ4+²ÂOOÙúöö¯Ü.׆n¬ÙPPìÉý|óÓ5"[ÀËr½éÍà‰gÿÔôuŽ4“ap‘–˜ðC)†¬Fæ~sõoÐÑÔT“±ŠHœÛ£{û( ó! ÷œ+ÕÛ +¶‚"ÀK¢»²Û¬o1i/ÝêR&„op©YpGRäý >Ž=.’fˆÆD|Mmm±Ù«&¥µÓ'3›O¸\’Sòè8wí$_ÁU)¶åÍhÉqýÄGò€jsӇ¥/¢²-†€†éåTǝjükn=èéԉmo8zÖg’Ru± Ð u>1Ö`éGŽž{ftÃMz{/~bƒ/ÏfF ‚E؇}¬Ø•Vi+kÌ^Ísz\IL‰ê& …úA!IBé¾ÍK›ïÔ¼9ŠÚýM> +i9°÷p]Ìe%÷¤¨q÷­~¢¡!TËËy2IrJ¨üi^í‰òxßàXñ-Å#¿Æ¨-•ÈÒ³žyS¾%Ûtý‰V#Û1 {?³88ׂÞkvÈ.µÚŸ6僝&£,¡.-½ÈgëçÔ ®¥ úÜÄ–oE1²eoiuQhð°` bëY Äò3 at t|…ä†Åœh¿0ʸçéŸß£ûv‡Y*鞉 ½Î}ù¸ú¾›zÊkFºˆí ªi¹¤«4½ïÃV¯¬þáýàxǬ+KeSb=’cgÌg'ûV£ZÄÂÀPDÓ9ÓÆ´N‚´Íc +˜A²–&GCKr—y?÷GzC×õë‡ùZ ñ~v“ÔD’üÉ/Äk?Ý´äù¹(_n=g1â'–=•$£ÜTïYðtæ~²¬s©ùîe.;ѶI,í·/ë䝌/\FyéOcé$cgT› Íôí¦“'_E]«ÒØ@¯1\k°Ý&³ô*8{M-4:ƤêhJì +ß W'™êœŠyšiûxùî.§|÷™nÀ‘8*Á6‚Me+¼¦D¦;'µüZ×,jÚëÏ'DlÏÜrÏÑHL É]S³ÒŒÁÏ×Ípëi©Uå5Â^Y?₠+ B)dŒÄq zçî9ۗôµ‚œÍ-úVž¬‡i»ã6pjÕ«F8ªB¨Ø—·ÊK +‘OP=bÔ}:*o;S#Ÿõè±¾7$èD~Í´ëõXVáN~2„Ì­™žÌœAÌF—¾y…¥êšjüt"ˆ™'«"bÛUµx. at TvÖøeÿêz`I€W[òêSLñµÍÅQŽB¥RJB¡ˆØÏRMJôû€Éù\þêÌ٣àGâ@+¬m+ï®}è|Ø2ÖIKÆÏa'wW± *îŒFû ~¯øNIò`6AñLÂEÑkjÿsæeX»žôí•4?’‘ø’vôBëAʍ&Feõ¢«þ zïsªbº|¤Ú¤ßÄ©;ÇûlmWÚ¥„( o<¬}êqnRÄÉ{"Îlùq·Aim)a:Nf`sõ~šÈ±Ü¿³wý ̇(™GTh•Žg7þ´™ö ~Ç®›·d9ûæQX¾Æi(o’n³¥ Q¨,­^{#àÝËW҈ÊdžU2·o¾;óy-蝭 +u>Æä‡qÓO?V&Kåûö–¥‰eêaÓ9šÀõƒ\|­ŽCµ4^M#څ€gáæ|qnÁp‘áÌäôpºu¦œ&å/¹ñÙfX९“ŸÎˆÂç¯e¯©Õe»­_8|ÜäqªÌhFK@Æ⎰Ö7<Ô/ãBÈ®m1膤?ŒüæX¹¬Fg<ÛúžŠŸ¼Èd8Su‚µK¬Ë/øhéâu¡ªùÖ“…­-\ö¥º +َäW®pÝíâ +9{p}K3?£w<õ2¦Ír¦áõ“7ŸN á([·ø¥ ì&ZþË»ñŠÊL» åá$ÕÏ'›ÍˆÐ!ã»N$yÃýŠ¹ìÔÜSVº+Œh®‘SÓÌÆZ”Lè'U;Ͻ{ï)˲Wbí%¦ÀèÅqþdúu8èd~Ú¦øÐ¡ƒ¥ n ³%Öz›pîÙÚ<¤®ê0ε.#0}±‚Ù6)kYA2òV*ÊRA'lœbeˆ£ürÍ«£ò.ï«CéÕ¦ÕàÔKcȧ¹±•ÊƎŸm‰ír/¾h{¸Št.¾±Á³–glľ÷1ûÀÌ’]SS¨lIܶ^ÄÔJåp³jȕÁקïÍՎKW~ìûð,È×Å,sCàG½î’â°Ö ñÍŽš:ëÂ6)ÐÙ$`[…S²—ÕÂ:‚®éÇ«¾~‘âü-rÞÁRÝré+Á·’üVTÈÇîHH_yül§îb{™5Çz³JÖ^ù{^\]ÀœüñúÖ/Réh«„VŒþÏ FBe¸î'e×òó{êö1Í©Ço˜¥®+ÉJrì“þèÛbàÈàmÛ?éwÀ\Û¿HÎ/“^¼ê?jÖ#Xó;T?ª¦. “Ì+€V +£=U¦¥®W↚*_$–SO¢?Ûè]r÷´Z˜´ÌœÅ +»º|;—ÏüX¨Ýpr í½¿oÜ,ú„:¤3çõÓb½¼íqêE’v§­ÅnØ¢Ç+MUÙ¾Àâ°B«x+ À8¾Ó—ªå›æ“Ó¯ÂsŒw¨ +C/§oöXW¥PLÄCy6›8-ÅâßHê™_¼ è òi}p<×´­‡{Ãk~dÓÅÛ­-¦KǛ3ô#JM ’V=ÄOi#sŸÈÈÚeå,.n V+9ÞNc¼r4÷µ†é‘¢~wEö]5'÷ì)zXeFã¶0qª+÷–ŠŒt­cU÷@ãÉ”æê±0–Ž5¯aáT±Î>D=᭞Q_´WxügË ­`ÈÜò½ åke¥Ü¥Èõ*:Ù9Lìˆmò]¦³k9·°Õ\Gšœ9K{=XËúE¾x J>üAiºs•îí}?£ vYí¹ yÕã5mæŒ ®Z¾Ýð|Œ%‡09‡Å‡(!I´H;ÁÖ's“ge®Äõ¼„¶¹ÀóCEÊò‰Þ¾T,/{…å˜JµðÀÙ©¢€4àÛ’6Œ‹BfLJ {¾ ©¤šjðe{¹®½ñQÛÔ8ðÎ ¦¥¨ì$´ªT»û@Vö½*”–2!§«¬KVs#¼X«Ïöû›Ä<†Ûóñ±DÝäb#‚Ó%wÈZT47s¦€ý„Ðz¿WÍôZ…W–Cš¶ +¥\/Ó÷ö;xjÏ՝«I˘_ä¼þé×å³ó¢q|œæúž±¦ã¬ˆ½r[±²Ùڗ_wºâ\ÆéìµLûa?'¨ÜWÖÕ¶l˜ÛY“W½óÃ9z˜t{sÉéÎ\Î^¼‚Q%ÏŞ†åef:_þÄQ7yÿÁäm«‚Œ³‚oI/¿Ç—}šßPßGó*˜ 1ݘc]S÷`É3’ ]‚^TH—Õ§ª±ãNŽ¬­8S/1!qŽêú°„Ó+ËdõE©‘`]ÿ°×É7éî ÔÀ}NS÷ •ŸØÒ(¯àtB%Fª)a>ïÆ6ÛõÙx\߯R«%áȓõsóe=j +[zˆ#§©>Ù¬õÈ^$PŸñ¥TŽêK®†(ú1<³¤\ò´¾Æ/ëaõê… ñ˧ ÏÄõÉB•¦—%äƒåƒ>¯ª¿Œ&ˆc±ˆÙóTIœê u1+²¹‰_$û¸óÐhÚ.^+ïB€Á>à^l›€ V–1ú¶H¿¢ך§BÛWúOcO„HH‚ ;“QBOq#L””I»û|Cô¼÷¶5ÞÙÈì1€Ü°úþ́Ɨjgœ&ÄR`°'É1Ձ0'3ô½UWOÃQ™>¶%JÙ=L·°Ë?ÕßÑùV™7󂦍ïU¾àAþp1\à.ÓIO^6³|~é3,+T}­ƒ ¤fì«jõ£UäÙB±' —n“gt¾¹rA"9äx¹©(š\Ñý†v>Åa€¥<.“<_U|…ÕÙ *C"z~¤;`Ãde–æw7Õ­’õTÞÀ“Âq1ø}vÁRâãW”©>UPêËA{uƗir¾yùõÓÐf^0ëœ0…Ü/,Wç{Ø9˜£U½ѱ)ÛDÆË5`|ßãÐØ;©£‹½ÎI¯%Øo4°×ô´59h6½ÊeÉãvŒ¾€¬òÒËú࢘ù¡£ @Ú sãvUÝ[¬Œi‹;AYh4ñð;/ûS5ÆÀ’®™ÚcšÇ^(±ÀþÂÙµ°2"jÕÇ §\]tO>’ô=Öi”ÖÍ L,OÙ*_!xrÏnœ^@_,)¤D£q5ó£U8c3}Û–ÑúñŸi~Ä=hbÌ-´—ÐV§³ù¬½0‰Úó*2 ü>4ˆê#1kåÛ¹œ¢]ÛÚñsÒø²ûççX×Pã²v‡'â˜é͝.)3�! �ˆîÖ´ 8À²}iA½L.*<”P›4ƒJáTdÂò›‘ž”ij|ú»ö—7ŠÈLäçyVÆ !œ#§Ó¨¨FÿÔu¹qªåî>?žTrýxŠÏû¸‹½º=¸äã”V gäb˜×zÑ®NÙ´˜ÀÖ·ÿ*›¨»ºã€1ÞàìÞY½$`˜Ë-WÈ;|B>Zò¥_X,Ì¡u}»ÅGSPìÑ+[ƒûù‡“OxldìÜ3àx3wÌv峊³Î»=tPá•[áp8udÀUÔÃÚy±6þÓU°"ràˆµcî}aèÍîá­>çDS‘}ã¬Ò+œ:/&ˆ‘×X J*v¨ étáîs_Pwâ4ò†2¸<ƒë-¢þÃhM¨©ž·÷紀EÔr¶@*_N3­ JeÖ]á|—ðë×'Qa’Ö÷gE5!œy™VC·TÎ9ä4ÜÊco¦2Œ5AyôÓ‰ß0 ›Üxx$ü ËV®úŠú¸! î­ì÷V^Ô ‹ÁUr£ »µ¶ºšk¤mÞË@]{Ÿ + + Ú7‰‰×%âߨåì¸)Å´­‰ž¢¬ªJ1p!u9œˆJåb‚WEä4fÍÖälɯ ë4œï}òÙÉzyp÷¬$ȞrJa*E65GµÇÛ|Ó4áxEAêmÜ=¢¯Fƒƒ~¶Áùüw;Ý# v~’]‰zdà¼á¦êæ(uD釽åü¨ƒ°úúA.XF×Ú s?õLžÏÛÐ#/O'܈¬àšäł®^¥¶•®¥úRЎ+òªÏ*˜°¸ßgLj츍ò{ˆ«n§e)ޑmX³hç˜Ñ§¶hG÷~3óÓíÎÉˍ¦Ÿ¼e.Âj9ZVé*6èԛχ†"È%™¨^µ®‘NOˆg§ ;/™—J½Kþ”W8²÷ãÌ~É`·®ýgÅn”HSqÕÝʻۃ™ÔŸ³UýƏÀSñÿ+endstream +endobj +1488 0 obj << +/Type /FontDescriptor +/FontName /MALCHJ+CMMI10 +/Flags 4 +/FontBBox [-32 -250 1048 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 72 +/XHeight 431 +/CharSet (/f/slash/x) +/FontFile 1487 0 R +>> endobj +1489 0 obj << +/Length1 1637 +/Length2 9787 +/Length3 0 +/Length 10852 +/Filter /FlateDecode +>> +stream +x^µPÚ.Œ´Xq)ÁZœàVÜÝ¥h$¸»(îîn…âP´ÐBq·âî-Æ5+ãʘqØõÖÞ¯ƒ ]Ü}{ec[§ac|Ã|uƒàEpÇ(,Ù§c´g8Zÿ:•¯WóR,ŒË¼z˯9«`xœxˆ(ûlA!R_ˆ6”K +U±¥èÕÞݔEêÔfPÐ+^‚WÂg ·’ôi¨Þq|äoÍv¾0çêÜ'Š;å}¢žo±›ã¯‘Ö^ j¦º!ÕmôÜ¢2²ðªt¹Xf÷ hsãŒÃ©î7–´§ly&P¡P+¢ÎêøšÈejäJ‚Â/ÕฒÂÒÚE™óªFh×8H.RbëZÁß=ƕKì6Ó\žMz“oøpéÅSµ)uÃÞ?—/'ª‚Xa+jãY÷Ùô xX âO%SÄcœ]Ýôj"õ¢Š.AXõ^“ÆͿχšj±DЍúNñyqzSúˆ& + +XÀìUÄffeIìDÏhfÝ +Ê)œ4kÜʋ”АQ>6Dïò•·ìÅ¢á¡Y¥¥˜óÖ+3âj0ÎÛ09{Ê¢Ûåø4F™#¶rôœ:pR¥4·•n[ûäUàbR÷\ÂwNT·ç%IûäpÉ “GOൖæø~¾À¥dªïò0Ž¢²Ym’uß-Z©ŧŽÄN{±7¨«ðhÑk#O©§ÌʎsœíåK’W?Î[å3D>›Â¿ûReUÄL’åÏ·±Ù½Ûʧõί³MALtpí¡œÀ3šD?3±€Ée¾;ßì[¶°ÈäG¹á˜ãÇ Òù”`b«4ŒȗAWÍ䞊ï·<&Rã1E!ZD‹ÓýFW"no1ð @¦–TਬÓ!JZà ޒÛA¢- ì Î Á-©ax y(™K­1xV†¬©Wz·¾³Nš}×qŸØöjjÖ(ì2U.Z.D<«,ÐsHs"¸r†<»h6“ªx½ÖÉ¤`ë?Œê*³N| 9‰ÒR’F~"u$ƒD:DRÉ´(“u† +\=:?G[rEpœ7¥ä-«ö*­MQöã>çªØ ³óR¡aû]{g(½N}^ì—UÖíÐ. +ÆiþezÑ"Ûl§ÿ|¡õiëÛÜJ&D¤zaG§¨^zó¥ÅÅ:/~ @­¥#ØB³qx”Ž¡ROfœ0}5¢F"¾wßêÅ ª÷m¹Iºíނ?ÓÝý:4ì”,®7æXÇPK™€öbš…'Œ’0gñÈšÍE¹ƒ[VU8¬cŸ#«@öÛTs}dâ1i:î&ë«9õÌÖ¯`¤k4²-nÿ®@USÔiVٝ¢±¢3Rïð(R7G(yˆòR†¸m7²yA;*'³Ò\{åtÍgEH×+Ϟۉ*'•_4–hôXt˜‚6eË÷>¯óZü:í79ØjtÁe—ݨ×<‹·L·°Ëyl8Èi!§[ +²V†0[c³óœM¾›’‚Û9_Ψîšw¿iC×tDÄâÄ"x—EkÐGT3=Ô_{Ñ €ì8då°†,ªÝk’¹!e`þQ#·žåy‹úV”C˜²Â_Ò54Õî#å×Ú»ØKÓ·|ÆB±r¯—–-â~.%ë54µ}ƒí’I÷Sõ ­'!=#$^˜ã‘ç+ñ«¿ vJ´%¦ñ_‡‰xL¹/ˆä³Ïö¦ù©×®íÑCi®¥ÖÜÕ=(ÕgºyWãI/KÜ£˜¸^nv£öëpÎ X•ªÆ¹éeÆ°’}»_ûTÓeۉ*á¤Þï½¢·zeJXœŽCº¬Õ–rz7-ú²7µIÚæۅm:¾"÷JC']ÏHQ<Á›‹Õ}+™¤GEź—‹…·ÞQßêý*¥ï¤ˆ‡§ß¾B=ïÕfö‚ŒNݕ<‡äp*–\ÝÝøY6çì³ +õË_8×ÚË0ºFÑòëK…»ß<u۟Óa™ ݧ¡«©PØ-ª$®.G-F†¼v9ÖTÿ"îéù®XÕþʌ’h°uÆ­VÇé›—¼ŸÇˆî·G°÷ÑYӥȬ¯X(˜Rè°&ex 9‡ 4ÁypÔ {¨ÎxEè*b¼N +EÀy´Ü[uÿ¥kÑqZë«wÁó<é·ý„Þa‘üjN¤oæ d¤.އêîjõ½E8kd¿‹%Šø¼D>¬\[R¹_3s‘¤Š¬¾¼ÕÉLÁ…gSb’7Y!mßç]µ˜’¶ ÕØ0·qN–|>Zöñ„5sª.mÖ/¬5ÂÔÎõJàq««N欢nª…BKmOkµm—EÕàêa¥g´Îi{æõ”¤à‰³4HH­sÙ¶ãÜ/–+šÀ *óös$ì¨U¸Ÿ3%‡mˆ Çe|húß¿£„ŠâØà¼'¦7´z¶äPˆÓs@òhç/E$:Œ ÂkÞ7±mÓšˆ÷HDŽ›™S½ŠŸ:'þï‰é àJ£ÐU‡tƶó‚/k ž)ijj~µ¸ñËÞ³nƒÒzes¥Iõ˜7#“ XrÑø#¼ŽæÐe²â‘„ûÔ³÷úœŽÑéF;R:XûÙE‘+¼÷ËY-ÀûîFp:·T’ÙDÍ/ªfþ€öï:Ä¢Ö!Iµö3¾ )[ôk>äîÔ›…³$'^ýNÝù…eÌ:;6tžëE}’^oű´¡å…âxÁ7öDm¨ՖFÎë0‰¿Î±sí§ö}Ãâ7GñeÞ+Û¬zæòQ,é„sÀŒAlQ&¿+×ô`¢ÝûhK§S‰e¡S~7ͳÚPì[AˆkvÞØ¿òä5)SDœ¹šû vC‚"nθ$£Ç­Vö,ÜÕGƒDý¹qš0±Â]ñçO½k!-±ÈFé~Q?ߎ*ñÝù͘D²¹·xLW•êœÜÊô4}‘}O¬óˆ™ÿ¦‰yQ‡‘dºÕ%8#U3I~ìX ï! “ôMܼ (íí%o ú¤5z Ð +Pí{yÐsƒ#gX#‚çÀK{EÐ@U—øøÝüúŠ$¿mi2€u#.Nd7³^÷0Ù±³0¹* á­*_«þÅÎýë“y9¥ ‚ð¢5ÛmD:Â΄mjwÉcóÉ&÷]òÎäB9;K—BºÞåWŠáf«Óž)ž]ÂýÍßÕÊ·Æhè ýõ÷™m œ¶²œ=¼ÙܦyF“hûó‰(°Qh:©ُÉ#ÜÍ+± <8cH!Ä»9D?t§–mÇ/8Ղcj9“M¨¾èßÏê>fç$t“}Ղ‹õD2©²wc¡g엥ҾZô7k¤jô4ãÊQ+š×£ó*Múejƒ]²´À«œÕôeé ¶êû™äþ <Á],ø ½ò¦” +3çYH’h#DbÏÚGØN+ƒ ?—6¯ êôÒëãiEÇ[¶/°ÈŽ¶³&cã|!Bm¯y´-uʸû'ŸT«·ïC1]Úo~"€Q¼NÏo¢HŽv3e”àºGQ•ª´ùÃcrä̍\âÀšßõý†¾RóÅjš§9A.Ô6ž›*€"É©ÄZkàÉc2œ®—⇠9¶½5ˆç"«è±©¤G8Ȑ©of$~ú’ýʍ û&+Ô喲ZðöP[­U¨î5æǤÜjÅx‚oï¶ýQ‡êõºÐ\ÈÊ“ªçšÊK.m7Þ¥ysU¼Te΋ó>nÞÄ.ñeÌmMa~“TR}à,'šEw2ó"òü•^½tÆXÃ×¾…^)l§ä£v>éÝp'1upRO½ƒú¸-*DŽô7±)6ÏðÆQXE°|N!çvm} ž$>µ}£ ¡¯ÝÕ±u \5Üuöõ¤ÂP¬„G‘¹J°~É¥‰“Й°R›—z÷Z É:’F8º»bÞc§t:[»ÈeC¹ó7›’çÍÓ4ðBš>‹léZïï’èõÚaî“y%åPäqnó^eÍ6 +àÎ-*Øøgj~j2O;O•lÐnì· ?LTºhØ·=:4å¼DƒñNo‚L®9rÂ(Ñ?»ÃaΔ ÃÔ>Uî¼@}Ó¨0»ùU‰vv¸jW¼·º5t -Ò´šq¶yö”fjJW90ëÂ<ž´9Tê8 at TRFvUòV‡¡Ó±~ ,·l³eøØöÃzç,ë Ìô×5H²êþ0úÇÆÎêX°{¶ÛöÉ\L¼ÿÓܗº™®¾|õxîG ­—}bRÌW2´Ï5‡C·ëv\´û=í§‹óÆ +Æe[®kތüX9²K¥X«†Ípjœ°»H׈FÁ¥8Wûáô±Xà‡aûìê>×kþ¼sÑIN»#™M;®Xƒ.]r‰’ÖVŸ³W×&ƒZۍüŸT¤n…BTˆÊåý½öñ™(Sk¸}º âÚ/_Xnšâ„ô¼7_.dŽRé©hØ[ß Î/ã¼8¿Î÷i_o;0šC‘B‰6˜ÝýàŒå?päsNê@¥hq¶cXpÝ6QÊ@Kß̤U™v‘ÍwCÎC©w¡Q®•â¦^ý–ŠÐ uÿœý›à£ ¼„KëÞÂL“\Äl—?¦­8_K4ó¶ÕUô`ÚCÌ$ +Hߙ?)étXBw¢õ8êg뫂üc¡Öר’Vþ2¤ԕÔRJ¡1œj>À#£OJC^å¼!òLÍåœuÛ;˜’{DÑÕèi)_㞇‹?<ˆÆRàk­¯öÚ욢€—3iÇr¬o§½ôœY÷Còñ0‘øÔ°^Fªxty*¯Æ&°ÃхY/֑òÔÓøÑ:u.°Š°Y¿"ÛAê“6,\Úäõùü¤ñr}?/Ç_JÎ4.³mé=)7ƒí@4'3£85î½Ï¾–·f$óøÅ«8Væ++ìUÜ'‚D‚ºÚªJZÀ›m!aûLŠ¾yÜýrƒð[é\”Ïézu¾͓bm4ÿè#JÄp4©2,a\PJáÒu. ™¤žõ`c,*†Ë8x½Ú«ƒYo­oïà¤+js[Æ'Y­(x_7òð­k;ò¯OÈ´ö*ÒÁyšh½`AfKêUÏ©t敩)×ö°IߙCÒ¡ |ÀAYœ™½.Z;¢Býy…@坈U[¥`¬[tecÀ.‡K/* +í|œï>àU´+„Ç^£(«-a‘`Ý՞ßK‡œK'Ç +h1†0Rô‡%ÄsÉåäçš¾LÃq Eo(^ªÀ?ÒP̟CW?ӌ 7^æ”3`W¾›Wsü(ø û‹ ïPכʦµÉ¸À›AõR0ZZ‘<Gh™s +ŸS§{~avî¼ÐjÛµ+ÚtoÒÿzÁáAì$±‹×|2ÞæV9m’Þ¬v§B=~a¢Ëù ðÕ¨ø3ù¦,^8ôç¤o*m¬’x+ ¢¶NËt— ÿ%ðÓ Á«¼ŠS +Ð.Îl ßëÀ¾—"a¶@•¯‘ xl»ñóE¦w¼ž¡è]¤AWáÊs“Ym›¨ãfWr`Ë2f­Ú+ œd͞Il."¹–_E“Ö‹R§²!¸EÛÚòW@wM6ã5GlXÓ¹SXK +ßÁÅ懙ÄM„_úUù­4Á&d¼A£îµÈ£Ù?Gë_Ìo&bðŽ‘=4†ï 3†C<È/Þàs[ܳ܉½÷lJ šÌ°®(ÌkSíàѤ/Õ +àêƒ ï‡á¡ †·kѦ÷uæä Nñ‡;IõÇà_a×l^(¾w5x/pIÖæWþ6Ùë~‘K†e(†Á-À+%ÌÛýÅ'Ð×±Ÿ×‘­È ¹nÄéªá¨sôZEÛQü#>äŒwÄãûbš W–¸3Ð{8“Ô#ܗÍgâ›ØRTKTHëÆp(Ïöæ9LÃæ{ŸUÞ³J?8#Æbï³4#öŒÛ¿Zâu'`»&"r0|‘"‚¯ªf¥I9qùÆÑg"¶Zþv)Oö+y?ÿP3Ô®Îüß2/— +ŠÕŸœ©*_x6•šMßòzu±äÅÄ»“€êòo{ÏÆuEÓá'EŎZO6¤:¦6I(°¬„Õ‰Ç .~lÛ³æ+`=®¹Y½ã=Qÿì3ŽãóÅ[ÞÚ`J àê‹Å;¼Enü¸Ô–°—o]&sй^”ùlä» û³Oœœº½ø݂ §Ú~_Xk›‹è(7*¾ ­zÓÿ¼`ÀëüÙ§Š2Ôé¡´ÓíC19¸‡»àËZ_熛.Ù8t Âv0xo‹­MÒ[œÛ(Ñ·÷Æüa” ®Ÿ–È?òÓ:Ô&| Ø¤íҌÉʒ‹}@ܪѺ>íSMb ”Æ:—âN¥ÕéÊ úÞèÞ²Vgbmû­oºéºWGÂ¥‹ìï ÉòŠúL„+…vT<4xfÒ aºuÒxððG[&§úÖû"¼„ÎÏN ï’€^xæq… gäõE7–âø̌°ýiüÔ< ¢ž:Š]m¶åÑæ\ôJY͏î‹M"»”îzëÑœðž,ˆ´”¹ò®T²+'hëuÑZUƅB/´iíoûã,!%†ò?Ê)ƛy£&™ ÒïϽW^0f§Òš k&ä-uš¸LþQI2ßT2Š˜T[æ,äU(¨¾Ý¶Ùšl4ÿ• ”IÓ‚?ŽˆnkYFçý¬ulªgüŒ\_DÅPø†VHÌRņhًÐIA×ÔrÐô¨›™Y¡…c}ŒiÊݳÙ³(™t2É>Ôç‹ÏmÜö¶ÖÆE_œ§½v±‹8Z»õº°M„¶˜H¢OP2L€.P"tøúþZ>=د@ö}FYÉ IÌjäÓõé+ƒºÁ‘ùÛâ !í&¡{_}olÀ‡Ž»ªj°çŠ+ÏfÀÑÀí•ÁÝröÞÑ´Åq˜qO§æåücN±û‰sí#Oú×í0~fCVȳ®ôú2‚Ø*òž0àž“³Y¶×@MYÝ¡Ú踼ËQs‹Ñ¤ú Å +"îÔUÊOîFÅ ö;<”J-(0bÈT*¯ãÕkɔ‘iŒQùáÅVm)‚öFŠH›±_¿ˆ[ø?yn¾Å}áBÅâa(/ë<+Lüí®rñ²ï¨_îyÈÂÚÖK¹NÜdŽ¹EKv€—˜üÏK„ÇãвíÞNÃhÖ FŸnú86®wÖ¾H0úŠ}Ý-ZÂƒ³Îuª–\=œ\¦áR)MŠ„îà^mª_§Ú]¸´Í78iœ£u=Pm%¢ÕÔ6Ш°ƒ#•¯ïŒéå[¿²³kK÷ç/ÂÂeK7·3M†;ˑeù[ÃÃ7ÒWá”"Ô¯H°§ä‚ëð,PˆqÆð^žj»Ùûí±aÙ} +Œ¹ÑYƒ*ù$ÑÆFRø+endstream +endobj +1490 0 obj << +/Type /FontDescriptor +/FontName /VEBHQC+CMMI12 +/Flags 4 +/FontBBox [-31 -250 1026 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 65 +/XHeight 431 +/CharSet (/a/comma/e/f/g/greater/n/p/period/r/t/u/w/x/y) +/FontFile 1489 0 R +>> endobj +1491 0 obj << +/Length1 1408 +/Length2 6075 +/Length3 0 +/Length 7038 +/Filter /FlateDecode +>> +stream +x^t4\kÛ¶HDKÔD/›Ñë F´è½÷ ÚƒQf0£‡èD5ˆÞB‚„ !Zô½DH ¢·ˆo’œóžï¼ÿ¿Öÿ¯YkϾûs=÷umN6}#A{´BÂ +B„ÀR€’ŽŽ†+Á"$œœÆH¬+â/7 §)ƒD£¤þW‚’'†Åù”aX\žhz¹Q+!áTB»ûy"°¸1¿8˜ôè•$CÆ7·«x7³%BÊÄ 8’¸mp&®±ëgËâÃT~5‘\ÑKÃe•RÁ;¯=Þ+Þ(nqY ®_ÎDdêËtósÔ~˃©ÏôR\*ÓÜS +€²ñî"é¨Ó4¥r¾‹úpP|d>-!ÃD¥­®n|!ã¼W¼Ÿ;úòÑdçÅõl= +öêo>¦>/Àš~>¶$²™­Qi^d¬ßrØ ï&ק$^õ`=Ú¼dá`~Ž~xžÔæ¤hPԐß)è’ß%Qèóªó%1­ð'õau‡n+ówü… W؜ã®0ÜöNÌ@P^ñ8˜ïöS½ëÑñž¼»#ßÕ9‚dýp¥ /%g•)‘×yìQ)沬kY cyºÈ‹ +Ç/£™îÆ«­òD:Âw›ì¶´ ºwrÏß03žZOc©ƒ•Ë˜û8>ìJ/vÆ œG<Û¨W47€Šf^ l3¸Õ‚1šî‰1Ã:_ޱTGߖ˜~IË7ß­¸w¥]§DAÌîZ²/2Ø£©$"ÌíúÝrSs.'ýçñ/)´¼:M8ñgo–ßo‚ÊÛ +Â2ù¶ &L6'f‡Q ö4Îã«FVBÚµ@MÚTÁëgcá²:†´×.M“@xí=r`2Ó¡¬†éicŠeæ÷ßÛ¼HÏox5q ‘.4}Òwçæ)Ÿ•Ù¹³ërGDìxZÑa‘xÎòÜaˆMØ%³¦—!k2s4d3'¯¿¦¹¬Röa-ðó +Ü<<"<;5¨Üæ'<ð°Â’°¼HݱWáÛ4ªQUÌÊ÷\Ë7´“ÌOڝŸFÔd—ÚVýœSãÄA›µÊ‘•h¬Þ%HÅ-óÖÑFÕÌ_Êmùhð謔x÷1½TCÉmËr•ÃåƒñJ»Br¯ï+}èçëüö +Î9G±8T…ðø0˜êt‡‹ÿ ¢Vd}Ɵ-ÜüÚõ±†«= S£VÁóÁ£}꫞`CÇ),×0õ6½Ò绫yzytHcÄø\:(Uš‹Òò4™‡Xçªÿœ‹Oô¥“ÆÍ¢Qˆµ‰ó²Ý"L\$”™¿ZJ®qïzu¯(×Ųàw•7f»Âw›Ï‹¼Û³ýäµvZâ@Mç÷ ÷çø1ªI҃àr-ƒ¼jKºÖ¹B ŠF¶A¥ 51ΣàŸ.(˜T).ÎԞRèþÙ`0‰ y(ª‘4¡ø%˜*¾ ú|öô#Èâ#”‹;òp¶:2¢ÝñéÝ/_‚ÈBk›–Ô/ón‡MmnN0úñvk2íF}#½L÷xmƒ»\ÕÍfNú–_îÖå ¶ 0X'M¹ÒUÕӎ–Q²Ópx«Œ›¾aZè6ϓØìÀÿÈÄÏ)y2~nB Þ¥ïþôñBNüv©³)ü Äú¼úÚ4å„}%“9Ý=“°J™ûæ”y4*zÅ2 +‚W^$q÷ÍǵSèYҔŸ´(j(]Y½_sÏ'Nb±Ö${¼-¯ØPþ¹¼b^`ù•’8ñ°P‘þ"ãp½ò®ŸŒ¡ô ;×­Všêö(,siL ŠBöÎfHãgçåËÛóèÙ§¿)=´ Í¡u̟÷R +ë¹óÐÌI½+橶Ðæ§1Ü3ˆ Ó{W)KÃp®!¦®Ÿ{ÊlÆþxwºõ®l,~òa²áB›—é´/h7GÖÏ-öõT6×ÂÕß×Wó¶cS ’rXö‰üò#]Nê[.&\|ÕÇn‰ÚÄ~y0ùÒ\`šd4Ì9Ÿ>[y;Ãùª/Ô쎹rNá![ôA£ OÈ bÊé­xüƒ¢—N ùõӊõgò„7é£òWEô6ú oò°­ÓiÝ૙«fI8ÏlLží·þB8C¶³É.Íæcì'¹Š‡U«=#i¹ u­–Ð4'Oº÷p–•äu%TK26<‘y{’jng×-‡Ð|üIÏ ê Ú{$+(Ç[ÏÞ[vµAÒ4µç*Ó8_i¼óõ êÇãÙ4úô8tŽöJ;§y¾…ÎÀy; u½$·.©qðZS÷—6< bøûћ‚¸¹kÍlúl-îñp€j;vƒÛl£87¹é‹~§ŠÎåi‰±ÅìÁÔ@4ϼ<QV‹rRâÌèÙb/òF6’4Ã,\~Eј~W…‰þ Q¾è%|y_yü{¾mËsÂùáïGÇûÓ§yõ¦d":è)ÍöM'Mã®HEDºZ9wˆ¹ºP’û†x$å[®ŸS¸òO‡é16ŸÊ©¦š·áÃî m©»…=Þ(xaéš;E|Kþ„ïL¡RÂrØáGMþ%5o2qjK‚ð¨²v‰¯ìo:°¸AîÃÖÀçN‰ + J½“üø9ۅIЅo=PÂ|ôú[ݖtª!ëX—œf)êOj×ÏdŒŒ@ê>Þâ=$=„/^א(¢Ò¸íæx5ÒÄBâu¾Ù”—íXƒ¥”ûfFßÜnÞà¾0 Ùü 'šâ3¶q¹/ò »Q3‹¨á¼wßY=¼˜Ý/ñ, ½SvýHh`ïÄdðñibN”L¼%Y©–ØZWŸÆîK¦–MŠ‚‚*Íbh/v$ØÚEã;‹ÛŽžÅJ*yqvé¿í­ç1Xc÷g;uX<\*yE‰¹¯Ü¦ÑB?ö+±Ë5 +¿jÿ½Îwäï>x?†8œXL +ªŽØè/h•<èÓÖäC9L:®ª½Òd›ÏÕ¹Üv¿z­˜¬Œv¡ìÀ‹ûõ;·Š³K+ŽøæuLBë^}E: ÞÌq¥ßJ¹tÏæúÃÕjýððå×çä”ÏvLƒŠÓs¢«=Š·ÒÅh1ý¤Ÿ®ŒÈ{·ôÄr¸³M<£5 +•@ŸŽ¥q։ÈÁ>9 N-âI9¥>Ê: Q7ˆi q)ñ +þ0Á¼D˜†Ooc¾@±@î01ÌÙºë›læÌ'“Š0QòïŠãZÿ¬$tƍºSÆ°k*kI{†ðs¯G·ÆÐoZùþõ6thàÅQa´ß­ŸÍ+aÇÛܑ¿ê\{Yp ©—ÞÒÚoVö~!Ë@l‡+lj2G™¶{\i Ì_`3 £O¼‹ÞºRäóÃf `¯”_X¥¶%Ï×ˏÚó4Ry>t¯Jà%8}HòiiºòŸª/Ø#£”.†ä‘s«w'2ˆå/oI„¤2úb½“r+„b¨Lj9®“Zûv¸­ãÕÚF&Ĝ²‚ÖB,>¬ 휜ý4|‘ÿlx¶þJ÷õÁÑäUÀcΖp£^ø&x±I­°pUhv|UúÃí£­Ô‰CŒß×Özî= + +ßÚ~‹© gFµ—¹zݑ·bJ¡+èÕÃ'ŸZŸwȌ¹È—rb4,mm4î=WLSÿŠÿ™šÉÎöéâWTð詘ª¥d‡óƒÁ«xk÷ìáîN¯PŒUj­‘X¶p-#íûD¯V%ÂõÚ=1þØ«q7Œ,‚=¾»ÛŽVÑ}‰qU®ZH{4ô™ã+yFØSnÌ“ºw³/±ÊêÛæYkÞ´×î¡WÆÇ÷r¾—órœfÔv1Ó®[x¨*¾Ö&Sːð©lÁ f$_†{ÄfÃs÷%íuûäE³-%ï`s³ª§Œµ(ïç”Ú\¦˦›)™0»,y@)h•Àes² +a°»èÏY ³r`¸ÑÇ+—ØÍÞod7žEÏ +ZŸ´ó\NŒK“'Cq€bÆÈi·ÕÛ?ί§‚‰>×59´Oy +L-Ûã±,Æïα?ÿºíñæ˜?óCŽU\Nõ&(®÷Dù!e¦v\õ.±ÿC¥÷À³œØ³¥‡ q~åJ*?w4?ΌøVŽUgibŽ²ÙÊv×~ðŒ0§MdÊ.Í:b¬ŽÞI0ÛJgS]xFcŠw»q>ÑÉåEÄã”DcBÍãC3*¾4‰Aë÷þ_áˆGñT/F#Tx+ Ó®µ²eˆ_éò©ß)ˆXÚae̞M§|ÃÍ-Ύékq[cÖ°½ †s:Žøž†9|§Máq„lRü$X5ࢽ ¢ü™å­W¿wÙÛ\>_þbÂ.ùþÙd´ÚÝ£mŽÑ,Kmhaúw§³g“xÑ$%øÂäâ”z‡‡~©É£Œ?Jfދ?³Ò›"è±Mu~¶þ¾BÁ•uçf·}©nÖç÷oyâÊ\?uA*ªûf•é¬­‹šý‰vùÛµÅj ‘…TL¨ìiôrúÑ}=‘¿‚÷%XYSRÕ¹d$öü}GýD@û©øóïwéhßêm9…—¨<ù„ŒË[·¤¤ç£Rô}€¯45òôd'h t»»a8ùúAÊÛn3˲Þ)¿ƒwõÐõo6çî\†ÐŽFšSÖ@Ö»å‰Ïý4³ÖU¯iú˜Â„×s~~\ț! K՝ +y* Xvk‹\-ü¹Þ¤r¹ +°òÎ¥å݀eí ^DoÙ®9}œü±*3MŠo§lµ.FÞ@.+-쥾 +r°Ñžeuìé“ `~&9¯¤&¼Z©–ît/bOÇÉÀ %oÌWg8㑲÷ŒÕz\SþôáiÕXiå¢fß+ã¥BÐûޘÓƈéä(uÿ£4:˜ÖqyÃÇ4( +/ê•ÁÆҝñÔü2ŒÀíKðÛÛøIûw–@4ԉëØng.׍3yzlvHקƅúÔû !5|§Û[oð¹em=;„ÍX˜³(^šòl^Æ +.G¨…w–àEì´M"¸ë:–Nó‹r3=ÄR¤4Pׅ³Ÿ£ú[o:ɸÒn=8¾Y•Cÿ"ëð‰JŠ/Ÿy6áÑv9ÇÌJG×|iÛbüxaiþfîÞÖýŠÈmH*ô¢—.ÇRöféø¡S h2ª:o™k«ð̅°ÇHιQ})}FŠßèšrƒ”¿z‰q”öFG¬ÃÍdKÓD)Ë~ÇgàÞíª'K@ªÆØ l ÉÛ:´ò[ò]̅,ÿD K§ò̹ÄÜ)ôS`šëbÜf¨‘€üv¡¥Pû¡YþÇùÞ ©õaiªè¬ú!ҏ bÿ i{¹ÛkëžfŠäمÝú^ypg»O·»—gC8â3¯©Àc²D’º+¿ö®6@èƱ9&ÎOEÅ0›Õᤐ…`È'7ƒg³Ç;b­]å1F¾ÚÛF(µc5¢ Ò{uγˆœÂ»ŸQ?,OÎ0£7Ήå­BWNGƀûŠR·ᆭ.¡y0KiþœûvFa²c¼ÝúÙ«@É ìejÊ݊gV<3ë‡÷’ÔËÄ*ŽãžÇ]`'É͘†o^¾™°ž4=øYרÝVtȔ]Ú¹Ri•”M%ö„3e_mû5+¥ŸÝuWDþTc,<—ÂTÐ1üóü+­GLæ#<ÏñªÎÍâ³áÜ+åPš[Ê°Ètµ—³á“Ýìd#Ž¯÷rÉ@áߞŒ¯D¼;²ìQyM›-1q‰IÓmÿ‰ØAçOÞ5y~åm¹1}ˆCÿ»©·’w“’3êõ'PÍêx¡…S/ˆæ¥¨Ü¤ÉX'ôOø·ÈÓ¾Ü{ù©K¾UµöÊxs54m„ŸX’—ôä+endstream +endobj +1492 0 obj << +/Type /FontDescriptor +/FontName /PTAHGI+CMMI8 +/Flags 4 +/FontBBox [-24 -250 1110 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 78 +/XHeight 431 +/CharSet (/w) +/FontFile 1491 0 R +>> endobj +1493 0 obj << +/Length1 1475 +/Length2 7407 +/Length3 0 +/Length 8401 +/Filter /FlateDecode +>> +stream +x^tTÔ[û.!HˆH7 ÝÝÝÝÝ1 Œ30 Ò!! +ˆÒ- ‚ ¤€’ҍ´’ÒÍõœóýÏwïZ÷®Yë7û}ÞØûÙïónfz=Cny¸=XCróóðI < Ðßn¶ßþÿà t@}þ +¸“²òn,´áwÃûïPSðŸQÖ;@<\þÛ«Žލ‡<Ì úÏ5BÜU Þ`=äüGCwá®<ëÁÝ!¿+gûÿ|P^»¯Óº4F0 õ"´½ ѹµÿøz?ŸÂYPÙ.=‚-'M¹ýYÎB<«¾d5¸v,´„w©œ”G©Ø‡N+aYxêgSºjçÚdE_´UˆÏãsñ<ž]“rã¦Âyúô«Û1Ü›µÁ½ +¡á]â'›Ë'¥¥ +6$ßá&çûå^Q +}Ï¿‰†å­ƒb(ùiJ´5ε³ÌùÊúã=ýDɓ&¬Î:hˆ,·¾TA +éSô¤ £¯æš|ÚÄÜUþq¤ÄëÛÂ7kxIç" ÂöZVÝù ¾ÇfŽ‚Ë® +&™D-ÿC¬©d¬â^‘Ӑ¶™+^Q¹LØðÀ‹¥˜{kô]e¦ªïY‘øré^քU¶þëfõ+g‹š ¿U]BÀÃ7üèZž q HíÛ6–^íí.]ru¦ãåäùå.söÌ|Óo08.ìR·îwå$.&ò:wf@[˜õ”r$hMäÙ ´x×¥JHw…‰J3åóO3 ’~_ÚpÙ§Ì0`*˜ X1(oPÂÄü ¦à í]Fdl«¶¦ûhöò7šþpm\[¢‰Ñצ‹7Ô/[ð|Vµ7oE‚J³«lZNÈL:,9]þ­Þ •ŸtI}hSV@øÚړêÝ×ó–è.e·¾C±*˜Ø„Ð’óR† ™ +ð½)…xSê€ ö÷æ {g!\9{Á …{„¤õ¤-M*q=è%-z<›-Z÷F‚¼Ïî½%·µ43‰" ë9<ÒÏ®Ä3Ò»=ö Í>ÇæJp½™¡ E:'^Ô'zþ|kÇ õ£Ä:ëŸN¼°•s$¤T[ÔzŽøRØ¾Ë þdQÊOËQ²ÚGX¯ÍÙcï!é7_ҏ\®/Hºib"9•Ó<5ú°B—G7s ÂÕ,&V:AºÝî”%m%½$Ç ²t¡©rf”cùæe«Iðs(Ô©¢=cÆþkyÜ<}ýfÉxòø«o×ç@!}~²wýO¥âËn&õ…ý€w›';¹îÏÓ`}_¶cÝ/ÏÛȗ˜ ÖÊô¥°~N°_‚À.È- õÔQjÑVgRׂܰ$ÊO9Q}ƒAE|P#5°ãUtk¤4±×¶ôòuŸË˓öŒH \ø +ÍeÙ¨=3_›¬aD1^ eiËå ÖÜP¤òB°!Ó_=°í3);qÄzº|åÕ +ƳQq|x,³½–ç‘üòå%\å‡x,…ò §콒8A+¡õ<ï[;Ÿ’Xý*쨾$+ýWT*%s#ҟq›6:€ÛÀ,Ñ9Rš¤‹O?»ïÃӈíåü^úLàbÑ+*ÒÅø‘°xL->lïÑ®ó‘Áp—ì]ÝÜõÞ80qXTŽ¥±hI¹~¼GX%zàßð4­Fl󂧯+ù§ã`¯O‘g(Ý7ÛjߊϑYG²žcÍX˜h?›'#;ÍPyôbãù.8ɳ‘äN^Óô÷q°ÎD×T°Íå| ­Ÿþ ÏBK)?‡Â&¾—%bÓ%gxÒóoÖE«$…<˜_¼Ø-V^ZF…8žéy ©…g“øÿ¸ozU#9«J;AüȜˆAPáHxúðjý웚Ãh©%æò`ÊHXçL¼ÄUF at T£Iáú°Ö}7úƒÛQ±7‰>×C¤ŒeŲØ@¢ª{w}°“¸µ1Kԅ‹O;¤–"Ú³ïûãŽÓ¢­. ôã–÷{ÛìIó ‰jaíÂÊ{‹ë»³Ä{Ñ÷‰ž7�! �ã×R]ò>Î_êžÎ¡X°KÚÝRb1¥ê-YÐ7k`ÂT[,ÜÀïGª� �—7cöŽóL›Sÿ”›‚‘”"’ÙmÃæ‚;°ðZu¯Vò:ÜZx°ä˜×²¶ ¤6¶á³NÄ µO3I?ÅKÆÙѾÞ)ÒTˆ\Øw}hŸ£«|Y#“´ ý¨ïú2‚²47p”½-âCÆymÁoœä}C +Ö6 Ç«È{Uå~{—¾UfãSý,9ØH2«ï†ö¼¸'é‰kÃ~æ#ÉL©nT°©U`$TK‘?Ѭ <@ùÇíåd—Ûׂ`Ù՘a_~ECÎ6ê<=þΧ´à>4C\ÁRdí™Ïa¯ l?Gk™°hÁ}úk¼.®:š¢¨¦×àhöÎÙ©`´Zrù’EÃh¥GœqÀÇΣ"LbcÀý—dóWÛ?PÎéÇPÕ±ÆÌ׊F³(4™7AʕõÛ´—iÒ +ÓýêÖTA†˜ü§+³­%Ùfb„3RîQÁ°SÈʤšÜ܋`Ç¡Ðë'õ<[iÇמ¬A=.<„¬†+JMýÓPŸ+:rÑDÒÜæÇŠïË»]¾×Ú|¨Tõ¶UM»V;ÍÿöÉ;†{³׿¼³$ô¬Š¿e{©$àŠÉ¹îXâ$îÌDsQԍj-·§}n7eóµAUóDR¸3ß«g«éÞª:ÂmO¾HÐQ>dќ+KÔÛ@µþδmL/}•–‰Œ‡:^x5™Çq¶\—YH îmt åw§ó<¨…NƒÛ¨zPí<ÎäÐ(ýï•mӑLÌEmÖ¤~²™¡ÚåÍô¹´îç¾íŋ¶¬Œ~d÷µµ_93¯Ã‹²cHKõ Çwr  ## xüùÝFŸÜe^ôZ at w 7þúžéŒû)k°H÷çoø`ýVBe-Š}c^}&Œ‘©ßÛ¡såÖaéÍ»DßÓ´“ØÕ1wØ%çîÎìs/‘môüÒôÉÆêêGÉĵþçoE:öŽáœ³Í­ a™pì¸éBcìfߑC§NÀÕç/8-HH•Ùfÿ”˜¢{‘‰ÖXT./ÊðÝO)Â@ŠW %JÛìÌ2×#5^Þç•ùœ£{»›Nƒ0Yî ð¶~׀Ù,þ¼—Õ^kÍ8G†·>²ÜÈV‘|Ä¥ÃRÄJ)Ž¶ªÒÑoW?P8¦k“5’Ø‘›RÙ#ÛйŽohÖ>ÏW%UÆÞä¼d:Ü"äØ ¢Tç?�! �3õލÝÆc„›6æpͅe¡S¯L2¬ˆzTyŠkŽg€®õí;Ùlþj…óa +¹sscþMØ.žLå©mšw{\(ºq¦ «YBmOd˜ª¾ñÄ#u\+º”°¹™+‰>ÛK´>™ñ·âê|¤£µV ~S$X{‚Æ3¾Ÿ~öy¬ª¤;¢÷Oç‡ë-}fW~%†re\~áÅ^±ïDý…ÄmLbÉá1cACåI”ó}·܂ôfw8wƒ\Ž&ºªhü +C¹¿þp$ÚzÉÅÀâÀ×Ý?<$ ¯Kk¼Æ(º@"ȱdÜ¥¹°C^p/~bßW Kšâå„å{‡º©Ä+t«¹÷¤´åÔ¤ íò «s|Ì/ÈÖÇü#ŸÒä77Ñ$m#7ýž\štþ¨Ø5áC¯L^¼HÇys•¦Vc9· eÜn&A}/dfVÄy¼T…½£Ó4§`(,qÚþ5®$“¡s¢+ý½Ó¦Ñ÷æùUûbÓn,ÌY¶j&@¬fÙÙ&;ItlâJ¸ ±=¢¼ÓÜ·@ª ‚… ñZRÞA]‘ÊŽ7*8+á?*Յ“L498¨²ÖŸ¿ioñåO”«MvkIl7ŠQZ™Ù;Zñĉy>øS û¶TÈ’Ä—’üY·´ˆèºXø"¢-ay1MøR^~‚%„öZ£ÉÒeÅÀ}çò+Á€ÉÅl4¥’õîšf’2<>véejòU+?…+½dRtSϲ¡=ÖÑXçmOI̺‚vc 7E’€}žv‹.Ãê“+V¿`脵)Œ:ö£¶Î'â2UM!‡'?(6ÎPJJ}Á¨Ì}¬cD» r+{՗ø‘ÃÞr‘Fýâ}å¾NXœÖ´í܃8˃aãƒ«·é¢ 17Ï|Ã'Ôðò)30Ñ·ð·°訚Tô‡èx¯Û É­œ¼ÞJ@¬-Þg¢C„Åf¹Tþä<6챪fa9Ï;/YF_ˆ})Œ&»¥únŠÁŸž¬…šwÔ:8›90p.æÖøƒëÔTšb:Îí[9.|JoLô5 ê2•Ü5ÎJûE«–¢`Êi§7÷Ùý_ŸÒ'ã +/˜»ÏâÉ\ª@ 9Lc¯ªŸœ¯ªçx ÇÞ°ñL̅/_Q^ºö½ÇE͓^‡i¯öE$yšæ¯Y?ñJ;Aw¥y»R²|b÷HÀv„ë"÷¬?‘T.uúÜj7‘±v¼Û†y> Wەºu•ø1þícáüR ÷PÿQk 1´Ílþâ +úå3óðöð<û–¡Ì/U[®(Iºf5-dô•TåR©¥P‰Ç,Ÿ‰,įñµ…-Øl2ÏÑ+ŠÎÒ¬ñbÑy‹¯ã‚IÅ+6§Þ‡«FßKZ3±ŽÂŽöœ7ˆÝþVbdÆÖ£pôU¼¿²ñbNZ ªNè@7¶\ù¡˜§v¶É)³‰É'eÁ̏4IB![ïÌ°u–â7 +Ÿ§–!$9Ù¥¦qU^oC&ä &Ô 8nú‹o +Pñƽÿþl¹»öôHÉþÀûxdÙT¸ç#¹Ž6Ðò±@Æ'ÁÈ"4ëKP U…­5k•…-huj¼«’Eøå+ _8›ž)Âòdá>yÄ¥²U¯,Á)Óç²$²^@X¼¤k%TâÐô(6…‚H"ô?ä‚Ξ0æ©+6zQÑ©U¡x'n}ƕ+\7ï n¢ü䅊ÿïú\, +endstream +endobj +1494 0 obj << +/Type /FontDescriptor +/FontName /PZGEHT+CMR10 +/Flags 4 +/FontBBox [-40 -250 1009 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/CharSet (/eight/equal/four/seven/two/zero) +/FontFile 1493 0 R +>> endobj +1495 0 obj << +/Length1 1586 +/Length2 7677 +/Length3 0 +/Length 8731 +/Filter /FlateDecode +>> +stream +x^vT”]Û.„tç+Ò©À?úÖÿ}ç¬uÎz֚çÙ×}ß×Þ×{ +“®>¯¼­‹5DÙîÁ+À”(h@ (ˆËÊj+[#~Ÿ P–×€‘ÿ’çnãuõpçs‡Â~IäÿEƒÌ²ÜVÁÅÙ÷pÇýu>E¨Ä™vþ?+ëwñ†ûýµ°ƒÂmí~‰°õtå7„CŸ{BÔÿrAB¸ÿbö€“@ž þ_ô>®ßF_0RA€Ÿ«‹+À)+Döž++A at lpf]l‡9ևu\ÕÊÓzón”žbÝ6Îääõ[pëô¼!ÀNã¬É Yu»Oî!ú¼©Äq.·Èxë÷­µ;²-E¯ý‡ÿÏgI ‰ívÜùO㯾É7ôÓãÐñÈíøß>÷7 +vBoEý ÎZøÜSœ@·˜ôÊ»OÑÐ_±41»­·S#ª÷³b’7Î0Ö<¸tšµÈ:o†Š˃—þÉ‚púübŠ¤`üžQ=‰7`?N赟ٚ`üõŒïò[A÷.êGÔfTôèç$£l~OvÓÕ)çüÊ^¯ºfÌPtŽ­;§ +Àv9|·µAWn{'–l¬ã’ÔTüèdj/cWÛT“K™’±„óŽ>«¯"ÔNÄZ­Ýyt’¡÷:0±žÄv÷MAƒï.6y½ W$ȁ<­Þ+IZÐÀFU²m?ø3ŽrÅ|Ðfyd™¬©E‚ÀJ‰¾µ3hÃ>·Þ;xoـiø3bHmúXÝw2Êko“ Fvtf“ã2ðagÌÝ֙Ú5µ©)Dz·¶-­@›ö%EC½ç…D+-&MKZnva«P“.Þà3‹úíoxœ95»íýÞ¸WQý_7É* +îåkª +Ås‰_á¨b'Ä_7£E®yR¨|Z—T\!‰\WŠ¿ãˆ(>5®ê9{zhQ ”â«°×Bˆ¯ K%5Ë×IÔ<œ*Š¡µ”hì%»“,ÕhãÂôÿ®Œvï× XŒ ª˜UâY¥Îÿñ¼R¦Óh™ø–^¯×ÇnÒ»w¸Ý¥Æ~Líc6¬{îт±YŒF!s_7ÿÙõ ƒ@°¾Q-j@ 䛮• +ð©-СoÎ/0PÊkFÐû`´ ý&‚<Ü^dàzHúÐ! +îu(­„JˆCPì‹ñƒÓiN)!ý ª‡á¶*ÑÔ{Qf)5žs½<ÿÀJ¾)åÍ.Pè|j©­èUò.6Ÿ(—O¥¯Qށ0;üþ*™Âw*ç_žþË­3FΈ%©áæØï^·ºSA,Rj,:϶ݗ_µ÷ )_Ú{ÖönPX¯9.q{`E\ݧ$ýxXà¬[ɉ`¿ÙL`õ³rµ›u Œ¦¼ÿI„Ÿµ?¦×ª7o×Æ~{JpÌP'k”]6I‰˜Ì1|·¡u…¾ÑÀïÎ"ÜËûÜ#«—ÉF‘#ŒÖgÖ7͙q÷Š›&ÚY¯TBt}^M «,¾Í®˜‹6ÁÌh,9iɾæþ:n»lñd/lò¡ì`²})ØçÝ¡ü›ú Ë­æ ++¬„s Šl¾=hwhì{uLD ¾dwÉÎçñCÓ+»Î»m â~®‹@Ð +,sœäŽõŸÆo3*À,-±Fßñ>—k›X…ܯàÈյ߽Á.löñ֊qK±!“XÕ%çØʗroÇ®yœV!6¨ÊŸRÒ,œZT¥jy_5„5»mØD>Ç£Lç?Æõ946 ôm ˜qÛ5š€*T[ÿÓS&¶*LÒDºíþGþ3—άh2ãNµëöÜ<ÃkMå´à1͞­XeiõÄéϼU„ìéƒîwàÙ¾Æjù qÁ£i¼ÅO1\?=÷ìÝÈT˜}ÉJÓojpÎ:‹¤qœD)p™ ×ª€hÞ%p£¥HêÜ5ñZ]ʅ~™*˜Šß&G!n‰o¬TÇ%{‚ÿrtèQ¥)x¦V•G>)ÐH¡¦—J}*µò+㇗¿Ô(ö´Ê–œGÜs“ˆX™õáW5Ê*ÖZ“3¯´‘±+χä+‹+áåx-:œ&ô̱–Ï`+ å<’j—­’8R|{ºÀ·®?OÅ%J¢ktšÙ’²ê:DôŠéoÆdÙOøÞ[ N +n`ŒÈÁ »ÐÖùJµÈ‚+7€9ñ}õAÕâ"oMå9úÙ÷’£Ô³ñ8ñijHS§¤Gà²J®ññëàçÄÅ1æ5×_Ù9ÿx&¼@ÿ>@ô¨†»ÉvVÆÒfÅè¥è+å.ª/w»+´¨:ºÁ‡Ý„h ‘­Dµ–¸gUOÙ*|5›%ºÆŸìuìk^ Iúëð}Q’ð¶ÖGksï‚훸>›=ÔÈԔ-h„öjö'™hÑÚҘ5¶[&cëÉR’1+çM›˜8ø­Ÿ‰Án#yp³=F?—͘Üψv¥kéÙýà +‚µ¾Ò&þŒ,cÜà‡Û)ó">Iâ ´üøm³XFm›5¥g ¥­½'Á!yD\–Ê4Œ,²øº´;ñ-A¼X?_¤Ó8÷¾pñláðÎêg̨¨sN¿×ú“í* \>¼†jÇiÈiËeÆ~#˼´«éÛZ¾\©}՝u+›ÀŒ`¥+&EÄLŒ ¿{y þGóAXP]äP±ˆÓ‹É»ÎjÃQN܁>Ë*’çë…qhEg¡°7haý<ÛֈÉ:rÝT½­E l툸,š3ºÃr`\:?un3Â-çymð´ã«davÈÞï¿ø~¡ù£4w!ߞdz¦Iö 7=ºœ‹§ŸJóݸ¦ˆ×…Ã]çâÑúÑóƾ+›yM{ +(ˆ y¾X˜UŒ ¶Òõ¾m›‰Y´²þQh}ª·íÑúWþSÿI-ÐM3¯U,íZ ~ùcÑ­ÿþ‚^û'A—¦+-™ Ä[åw3”àú$iæ ò"¬BŸ ¥©uÂàœô¬žPZÇñŸT‡º)¥n5ïÎ, üû&<Y¾kÆZ1ú_¤kSÐOá´¨Ë4¡“N9×9w}q Óq<»q}3WŒò%³ÊyóNüÖæ盻õ^j˗;ÃhÍxèEz$+$§y¨ŠuÓ_O8]¹§;ȼ˶ +O*+®ÕñP`TþîEc\`Û@÷X‚€òւXà×Î[d+:µhw TÞ=Þ:ž\ڃWN(›˜¼¬{£’én‰·ª=ÏÅk‡_ <9™ œÉ9+å ÖÏÆ⢔c#ìŒI2èʳ6^-b*Ö^yíº@îýL¶Kè€%,ÃÛ§p•ãð]±wÜ$kO鉷§÷õˆ0¤K¶P’vÉ6FóŒ›hÑ)Äý’œ ç›7ëyÜÑnæ=­Ž1[­ !vÈnô7E×fÚQ"7ƒŒÏ§tÙÚ¾Q ÷Ô¥Ã|8k˜c‡òGÙÎFµªê#ùM˜ÆN#Acû…^ïGŽ\2te "_K†z«Ë@¼/þ¹vêéÒ°ЕÝK)*òè6/#ïõÖ»º®$¥¾¦ñWÉ$,C㜷Á2Ë)4ú%ìèqT§„|º8®Í´zŠÁ%c4¤PtãrA‘rsŒ^Ñe®±ii]ÍL©ùxó»EMAùX㬞ææÝA…YªéDËØ t!™-ÞgCKëy›Çìӗ­:+ðÃ}É6Æ©ùÅûL5j'oäÖåŸ`›·}?¡Ée*ätü +Šß <ØHé0îuF=­†’«ãNÒV4Â@'ÜÖ»fP”Þn'Þh ¡V=iëK9*Ä»Ì+ƒïØ.J̑¡„ÊÑèjªtV‡óškÔö± ¶ÙvÖ*¼<Œ('…ðe¾¿&Å­‰]Tj_ܔ0È|ïãVÿ:ßÙee³-æTí’}Ÿw.X¾(86Î0 êškëW¾ÉºÓr t@­×\¦e.©å֌ N<¡^Lö)"Ô†¥Å>ßtP¸ïeoʽ '46Ý,ŸÝ ¢ÖQ`Û“jœÙÍQe:V5»Sðœä~”$½–|:bƒò"ÂÜ$Nƒz¿F!®£çÖ¹ÿ 'ƒŽçvaÒâŠRÒ,›ŸÖ[UFV"SužH›^tGkr’OVen¾Zm†°¥Ðy—Œ÷­ïj×`‚èL• ߚ>1Utjtø Q ÞøÖFhÇۉ^‘ñÄöµ Íìx¶Bä �T.$%À_Mˆ½›i¶èöÐ?À{Â?jדò²qÎÂNqWrû=Y ].@ïD¬’Ç)¿éçúçÂë9î¾ÃœPrTºlT²Ù4F!]Ò³BÎtäŸjA¹‡<#Û¸ šÛTÏb‡Ëáyšñ@RñàfMŒ”¶J®ˆ0ë¹Xƒ`Y\u=ƒ«- KêÏ<µ@q+€;‚¸|røÛw—áÖ³¥Ô(fw sœ|<1÷+©]cüÇÜO£v¦vÕ,á*Cü{0Š'¤å>eˆ¼TÏiyD€Úh©ÉCÒ3¸/¢Bß·»iÑÓ:íK½gæ*ÚOµŒæRzi\nš`yl}‡ð^Ìb²èÄ)à ã:ÁÆÅàØß«ûêœÑóÖQÝg Õüi67kÐےT̃Þã�! �äFj&1Ȕ49à _^Kx•Sóg(ÄÛÜrInWµP¿OÔÌO00õky®°Sòa cWÇc0²Sq4£z¹£PÞ-éåøï{uÊRæ +Ëdٍ« x=¨¢ð"*&T㚊ëûù¬(j:¨ŽÂI.ù|÷‡†4[Œ¹’3³Š€s1ñDhª³uäQlhcúg&ÑüScd̐ý…ÆÁBf>–x9ªõ Æz‡1×ßUÏûcôš‡ìÄL;TŒ"–IۚèIv¤Þ¹^{µ´xÍ] +fŒ§¶Œ¢í÷§ïž£šûuIù|öx9>#6ýPžÿqô—Ã}]êJ¿þyЧµ®ç»à&W ӂOÖ÷ÑâÓÔq’ã…ÿ¹mÇ¥ +endstream +endobj +1496 0 obj << +/Type /FontDescriptor +/FontName /YDTWCL+CMR12 +/Flags 4 +/FontBBox [-34 -251 988 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 65 +/XHeight 431 +/CharSet (/eight/equal/four/one/parenleft/parenright/plus/seven/six/three/two/zero) +/FontFile 1495 0 R +>> endobj +1497 0 obj << +/Length1 1447 +/Length2 6624 +/Length3 0 +/Length 7597 +/Filter /FlateDecode +>> +stream +x^¶Tl7NI ¤•TF)½éîn©1ŒØÆ9 at B‘Rà¡DTZD‘n‘’N%•æ›>ñ¾ÏûÿŸó}gçl÷õ»òw_×uŸñr™ ++;£œà($V"–ªê›HÁ`10XÀËk†ÀzÂÿD¼pŒ…”ý/½*Åâ15(o¦Bu|=1 DR"% EÁ`™¿ QY Ôá Ôꠐp+ˆA¸ºañYþ>ù`ü@ˆŒŒ”Ðow ²ƒ€A‘@}(Ö î…σzMQ0ø¯|rnX,Zò÷÷zùˆ 0® +üB@Ö h÷cüàÎÀ_tP/øob"+CÀàÿÑáw æJ|ðú­‚ãWéß)Ց0”󯝕B1h +ß  ß  =8¡Ï¼äÐI„l>{³™}|<4Sn&êÓÆÂÃbÃ|ƒø€þãð-œÊzšÓg\ñ‹Ù‚Q[ß±/mvš¡ã‹Rrˆ$é׊=Ĝ«® ?7[)ëúBšÑSiÏWυÊîU ‰$V×ÎÀ9=÷h·qã7JékÞpµž=—R=z›qmQ2&L‡›“U^þàv +Ç.&nʏCaŠCsŸ%­‚3 +t•ÃøªµþÛÐ.×M6´ÆÄÄúI€âGµ`´‡[É‘»¡ÿzóïM"Š][BÉ«Ša/z£a7¹’‘Š‡…c–ÑÉüÙÉicq m¬7ˆ )yt¦­Æ¦:n=²yY›Ò ÚO0¥¿J™&ߘZMzL¶œ²bÙåŠjIÚN:cýPñÆ©!í÷9j©4¦AœÜïmç×ÈK:fð«ûpø4̈Êb{¥øúDbá‘Tçè¾3¶»ìؖYÝ®^fΏ"ßþVm¹Ké®bà×>ÝViÔk?AÚPø êÀ³ó•öåÕ^_5gƨ ±ÇÆä‡é*,6¦.¾âTëÙÅó… sÃÇr9ñ ¶O‹yV ©RL#ڙõ +¼lgë!#÷+¤¦”Šùb_íå˦±5Ñ-z›—R^ê%ÙA*ga¯ëIÌ1d‘ø³â9—ú iMÚ£¼Õ®åwµïZT¢Ý›©×šb;MŸ8&ÚÚÓ°^>=|a—Íí²ºm¤êž2¥I¦ ÈXó°8–Ö|J}²CM“óyƒ]kÕõ³ËM§ |)]àÎe8v¥ïc–]²Ø× Ê ó!ÔižR<ÅÞ]jÍ»€‚ ™7OkBè"è>ÙiîQ(ׇVàƒsƒ]ö0<—o–ê=í2ÀÎê0°›T(y«ÍJ˜u³óz õHa¹Œ†Cü¹f—"æ…m°df1uF?Ü¿£9éKçĄJ"lm:;WìA» 3}žóm¹,çË¢¸Ù™?¤|“lÚ=ç-fi¯BPrûÙ ß9³õ ‚7$xÜòÉz‚é‚"/ý1ÁÔ;ªs¢Ít›.ŽÊšÔèDòíÒØùÉ溩Üî'üɸjŸWòë^¶á©­¾tžöšn=¤J§ó|ìé‰>WHO$¯%O²¿&q:Ñ~›^àyÍmâÒÂ.ÉÅå• d«rn=.+»2ƒC¨1ËT?ŒÞ7 ð2gið˜[åc$ðgȬ÷ëӖ·æL¯.تIJTa+Ö9ԍÂ1€WtuHUkzØÖ^ +¸«–Q&’¶Ö¦{¬>Ò¼MØGcþÈ¥ëdÍâ[ÅXrÙ¬»”ÔÚÛ¶wÀ%ŒãÞÙbZ-b?¹8”]cw2LŸ¾ûŸn[ëeÙ¨²єúFcʻˢŸæ®9rÕÞEz,U*e«ãÜËGèܨǵãoSñ\iQš’õ‰y§ó–¢=*a ¶«¶._W|u`7ӛ©usVvŸº¥<ò °ó"J‘ ÚZàÂl¥Õ¶Æß±•Þ‘ð Ý^¹+Ë!¨©&»ÿFCË€04Âzoã¡Í/–te¬’é`ðæá`Ž×´ |e©Å;-RË\£¡y±Á§D¹h¯ 0Wã‹sg©µšÏ-,=w-¬²wRE +±Í¯4>´„`Æjë­Cs Þ2»LU7ñ^ë‰< +â8x ©?o:*ÿبoGmГ`y_Î Ýmý­³tHÅí+>«d³[¤WÀ•ÖJÅÇ =Å'%ë´µ8íæÇD + ¯¬E¼A ©¾ÙŒäP•oS9VÜ.hjç2‰¦«´»:ô +…ÖœþôQ"QÓÍ$ï ­b>ŠGÎì‡`³Û.ˆ™‰F§.kõ!¡·’õœmúCöE£,÷2éD6ċGŠl7Úóö ¼ºQu½Om2xÇF±jë¾Ôýǖ]—TWÕ䌖 }îvÇ1ó”A:- G©¹3¤ßþP¸ñQ5GÑÈár;„ÊëßӍMMԋ½ +=¨½Ap0Kñ…}îanœ3£)©c»ð³ø îà¤ÇTwî ,Þ5¯LåÇ¥:”P5È#7öÝ&‘Ñ.‹ñ Á>1†™œôe~+îu…Çù2/|‚Ä¿[Åp½ávZ¤ñ'ÖÃeâ4 ^,¸“ßÎ|Ÿk;š„­?d?eûl6… ÝÙ*‹ÞoícK .uèºÉ°Ë<—Xwá1È÷RãÒ €\’È>c·&;æq%ý*fª2QÎٟþ£ßgVº‰Bp`i&êjZ*âIÝäW5©úÞëjgÇ{Ü+¯¦ÛPê§úFà0ºYú1NÝ6üÝdÅ©àÄ ©´”Æ?Ƀ"MÞÅ\dF¨¡TþȒÎÍEò‹:]³èÌl±äØß©f4ÙõÝ}j¿Yo÷VJ”;êeëÃÝr@€ãJ­©úõF‰Ê‚TÃ쉡󲊨—ÞTU´–¶4®}_áÈñŽ%*db2š#ø€•;¸æF¸TÝÑÝ¿`"ä÷J*ŽF݉ ¢kµÁF‚Qžõ@¡3ó8,c·k<‹ñ¨€ûZ£›)½‰rÕ¦‚è»YÒHrÃ1EO.ïY>šaµo†Q|=ˆÅB8¦»³¹K¨^8´FŸ€ ÊÈ"hTWÊ'UäåË\7t ©! h3ççÃ�! �d>G¾� �ŸYdDv›ôBÈÜÉ +¿{"Óõª~:ž¸^+`~9Ú_êÛ«óÚÝ_m"³Û£ko)¥wIÈWý©ÕCk]ÓuiS½›ÔüAÙ×á%NªæûQ×NWG`í'§ïWj|Ó(jN-œQfõeêz{\ÕÉD&Sxƒ¼ÅãÑUa˜õ~´–µÀ?q“ÍXã´Ýjãrk!¬ßïO7Å0Ï\C]¥ ðµ™Öo!ñS}ã2‹B ]¶ÃÝ¿L[(©‘ïj÷?Š÷éê0YN»iªœq‘ëã÷+r.æHœmm× ŸLßܽ»µÛâ8 ˜ók;Š¿‰KÛdcåÊØ@Œþœ„Ínô3ky¸.<ù>-ê[P»ŠrÂðÜò±px|¼^Šs›¶¹¾ÃÃäuËÆÍ œìYU ÷[eMIÅŽ®ný%ܞ“ñV!ñÙ¾`ŒCÉæ`:õ¤r3a»Vaû¶Ù=š@ÚwUŽ?"R+ÐÀ)4õÍG2µX!h lº(l⏴±òü)wÿ%ÀÙMºÓÉ~‰Uʏ؅|¯þ©MϾ5_ób–1¶SÔÕ§"áCÉ.&”6ðZ6±:ʆjêÄ^g‰:—P&`Ob¬\€ª_£êI†ôÏî(ª*ï:U_£°º ”\|6"c¬·–wÅj¤á¨öØ.š,$ûÚ¢ÍϤ7üå ÒèˆÂ»©ý¿Öõ ð•q5Þ½Uæ›/Û+@ü óÔw[¸Ÿ"VþIq5FUéã:Ævx7«ßuähù¦¤T=hJÎéÍ@”r/0hòá"› ýüœË Ág£Ó ñäÄõí(ùzÉrÔëâr¦ÇÏǨ+n¸Œö;$'Zo´ƒ­´JxÅ+õ§µˆ±þ[ÌÀ¡øö¸1r¾cÏ°½wSMÐP•‚sû+î,~ZJÐf€,! ».Ù^§¥'v«§0v§x¡EØ÷®$!E[/ÂxüìQžÿú=ƒâéëK¥º +”àjl¡ÃÒUGÃ"rY‰&ÊýÍì§K!IÁG+6æÝ?oprÏ]5þÔL£Z™–­Ý +¨]E±ý¤g“Ä.òèBÝÁ2Y Ñ[c2ÏÈ~à F‰ÕNW˜t™@.t^äÌBàÅ3t±—t¢°d­ù@³+Ñ7Ú'"kšÎùëÔqa¬Ê:k×xÅ)䦇B‹=GÆDû¶R,«ÝKõ ;[9– bWL§½à%l\Ís”ƒòù^„¥2ɱ°=—^§àç¨VRk+iåO Ì>ãÜ,I""¥Ñࡺ +š'€LèH8g®2ó4;_ǜ°FzGT¤Õ‡q,øE˜±ÍµÍet®+Ù6ó¿'‹‚«:l*t2ðXHÃT~ÔÝvÁQ½ÈAæß|ccðCaR•€Ì) 1iN„Ì’©]]ýšÁä0”ÿùéZǚ0͹zÁ‡ûêàÆ/¤×lŸ%ŠÜA¢ñ¡åKNq êdö¢¹Û5Ò¼¬§KÖBƒ ÔÐ/ÓÍØÍ$mx¿ŸiQÀhϺ°î¥?‚Är²¦l¯Rh«@àö2&7îf¾ÏëÍþŠOŽ—n%èΞ½²¯ºG¹ æ´Ã«ÂªÄSªï\³É#Í·á“gôÁVh}¹++š:lpë‡7Iÿñ'‰T39$Õ¦ÆÖz *Fw#´,ITèß»º¬w[ØCÙèŠoÞ ø8Mœ+D/’ür”u +™A,è'ºW|‡úÐöïZ”2¸}ý‡äėœh…®x „”¢_v<0HÂ5ºì窇E+¹äλRç‰Üptæꪎ¤g..ÇP.®ÐM°ú`Ä%XâM…;Í{i™žÍ_:~Ôঞ[iMÄ $șÏ›¿ðßàB½Öíž.äóp¬ ;y]ëJ\){´ îºâ9‡{œ²Ð/&)üÁ³lT‘)|w2ÒîÕa×Û½[±Ñ½ú~mSý [Ã$øë&/JTJëòÖ:÷OÓ&¹)÷NJÐ"w—·Í_s»‡rÓ(‚¬ùd‰íÆÇæ$xN¾Äp÷m·Cy$`Ìm>ÂO†7¬8rÆaOÎ%ÕønKÏ)ãàYF¢Üû»8ø©"¸IJµ`ö¢ ¼dpjß÷Øàg3òMzœ–lr]M‰ŽRúô³“Uò®ñÍDM²rô®í(µw3 )ðe³k\//8ù2a¸*Êjr€C3˜Íí·-PtßUVônçjÍ}v½SÕ}OSæxdl;ï7yÐb¾‚q°?+ÝkÓ¸’ôz™çNŒ`2øÙÂͽ/­RZ\O5éÕtdÎßøÔ$ØÏP41g2­= wϱ.=¶®× R?5šwØ K+•Šɲ·Ä鱞RI,ÝsZݺ9š6÷›Ò6_ƒI™ +œ8²ªÇpP]ºÿc¸+°Þ™–û -£•äÒçË)ÂÁ¹ç¨ `tR¬ÅœèBlt· ›R_Fnáû@JvñK|¹Å¨š 6æˆáuºÕ.@Ùöªü³È;ë¶_=F8è†Ó +‰.Ûk÷ö†Oát²-÷ÆW8ÛÊrXºÅ,‹:îäF›¾Ý¾Ì»3¤#&1ã,”»–H¿xžñE4̬µ¥µG:铐\ŽÊc¹õS¨G¹hu†*ºØ¹­CÑ£h8aëÝ~–E˜ ²lÇ¥þð7rìpª)SÎX,±àRnYÎx²Zúè“b %(]çcÂKŠî%o4¤A%Åk)DÄp¿–¬˜œ­ÆàÃ8³ÅhŸï†Óuö\Š:¹*ÿÉìÜïçŸ'‹×¼T7> endobj +1499 0 obj << +/Length1 1536 +/Length2 7655 +/Length3 0 +/Length 8674 +/Filter /FlateDecode +>> +stream +x^wT\·¶tI‡¤ H÷RÒÝ!ÒH 00ÌC·H7Jw#‚ ÒÒ-Ò"ÝÜÑ·¾÷ûÿµî]³ÖÌÙûÙ{Ÿóœýì³Ö0ÒiêpJYÁ,@ò0(œÈÅ#QÓ~ +àááãâááÅfdÔÃ! ?¼ØŒz g0 *ò¸Œ3ÈŽðɚÃaj0(@Ù+ ÆP†AA.،20GOg°-±Ë_K+4‡¸Àùænæ`ˆ¹"à÷ÁÍòRZ+҄¹€=3+#‘µ"ãÕ²ó™Tbÿg‚…or,§’s´·Þßj0Bßh5]ûܘÅkm4a%ë)ø.UÝMƒEÍ©+¹ésëä£hÒ€Ô¦Ì˜ãäúO3ø½KÁ£º»t~0dzCk³BPç¦tœ3úy”q`ñ$c®Eæ9=:œ““èÐòôl‚({äžV9žÛw/š¯ÐÛp…7ærÊk±L—×¥‚Âœå”hpŒÉ[z;IùьwIá²ó`òYËЪÃ[ d›ÅkC]ûÂyçȔ‰qD„…‚œ…D)2j¹Q1Á¡˜.?ópAyÙCéH¨Á…C#|¯ªÂ3ë:¶«NiqÝLü¬™™\S_î 'ò¨áhWrSŽàë2xµ÷å½ úöµø¾_i-m*éV¦âš3DTKdÅ#^“[³ÿúí½j*ÕQïP´Î…³‹ÅUSþŒŸ2ºfŠc"™º¥iý‡r©¡âÓӏҕz=ß:éYumã‹FLeñ=“ÈY´¿y&r´»°²+.GŠ~sxð™í‘ÄÖ3ŌúÐAFõè&ѧÌÇs˜ +èÄц‰ío,z­VpMÁ{ åõ‡'q`JsÐÙ[—œº®¥Õ yVˆˆïãû +¾u}ìx4\5· ”FõÃ֙îGãE-Ü~/GÃÏéÓ÷P”Ñâ4xùžÎŁÑQœ&J +¯,×[¬…Ö'Šxg†(ãçò}uxw[=¸ï:%±˜&ü§ÙM"/ɖ¹à¸KIBèú¤F:à�! � x&Ša© ÚxEêØљ!Î]àm‰1þ€#$,'Ì+t-p´2:؇Øw ÑA´÷Öݎ"ù£Ì<‚‰š·Í3P¢ëý¸F£hx›u®Rqílì~šÛœàïÊx`V•&kŠÓˆ"ž¿þ ~›$q2³/D&ĺ%…‘sf¾®­ZûYóZ„ +ò0>\òd ·K¬!Tƹæ†|åÀ+sýìXp + ñÈ·bW„Sn䁄\@pë© ÙCqÂ㎹m‹3úàÑJ'] $Utã€Vl©Áô‹±2ôñ.µ¡7§j1‰Á°÷´Ùª­‘áã~®ýM‚šÌÆÆæ¶p‘H„G¹úK%'ê§QEörÃ.z²”¨Œò 8C"ˆ +[»•æžñ¦Í>dýžsÓøîã¶Âšn?¯H(Á¶"‡7ÁdúgòzoÏdä4<”C®°íäŠ^Û²Rè÷· äRO†F>­ ꥉœÛIòþæŠÑ‰l™Ï¶!Z2+ñ5 + Žà3ªCgÒ+5ªP/+tŽ-3#Ë!Å°9N™¼ÜÝÇG´¦³›b ÿsg^¦R€ð‚mN…üHx%7ãK²÷Õà¬=‚M•5àƒdµgã¡Å͸ü+õ©l2ô=3¸ræ{R§ÞÔ 哬ܷö®}ҞUOØK+ß÷TÍ¿[|Q¼ÝOMûtºÑƒó‚¶Ò„U+špÆΊ;àhH°/O6Ž[ˆ:{*²ËáVU%~‹¢Œ/Äkôâƒl£·l·ÐBpdzrÀRÖùèÆõàÉÐ.Yd Ê~Š¦Ç1Ó=‘HºAìq¹ãk^|%¯t¯«¸«Hü2áÁYš[Fkâ÷wâŒ\曞H*!±áåžjҗPºW{O7zó²^ØÓÅ TÌü”ýçËÃ^kùà2M—4öµOÔ5j“[òÙ3M4Ï*çä<äwÆ=6úÚnô¦ÏÖg؄&ƒX`}y[X¹¶/ºáqßéÔô6O9ÞÔ·l›£uŠ3ljwèj›÷N³–T¥ø]ƒ‚Í%Ť( 9ÜËJ¼ãx˜·^æ}ÝF at 3¿K(æ€ñ7ÝZ ±¶êœú•¤Nõ‰lµì¾‡û¸;̕_Ìj9Ót™PdŒÝWi.Jj+Rͦ)”p ï¹\¥Ô}Žåÿ0—¼Ù.tMËÛ|i°hNJR§Ž•™µHJaÏoú7¥ç±÷G]¼Ÿƒºú®dfG}8Œ:°ƒ4“¼}+ûI¼ß % Ó7|¶a Á'±&ü®ßY`ü°â˜Žç'c‹çýF({`ÍÖÃvMA¯˜:œqÅ­ÀmpärKωÇŸ8ݳ.Š‰'Ã}óQ³Z_¨+$Ì+âÑEÖ¯ö ;{)!JÈ!oîé×8£Ô‰o0  šbӝ¼ò“Hzí3SÞh÷P·ÉK)Q¥¥ñYñÚם”È …ߙ®y¬ Ù=óqÕ¤&"‰ø NøCµõÛ .ôò”<@�! �Úw-uUš!ó« Zêv[¹Quy˶¸À³uã/…Cú¤óî©Ã—yùûéÈ?)XRÉ(W½—c“ÞqxG½àŽ“·hÉÑ_iˑ-öĺɃñŽýñ²ª+:üâ»x*:4l¬“Q‘“,ûÂø½»@‹~c}éxŸQOöø]xYdLc:iÈøfƒç>]˜(Y±ÝK®w´u‰»,—ÂU k7VXtÅoyDcc“¸º"Ÿ=q‚­YŘdj=06B¾³ìÕÅ]ç¥màiâőéæûÌTƒcóð=Iô½çuS}™1vnh{¾›þ.qãwWÞ+¥9x{è~Ù'”6A© .âô,ŽZÍÅg9ôÚZí;Å:N@ðÁ"Ž­ u˜‘«V&Ú¡DBûì”F¹›æ‡7^1òÉW©&åᇠºÞ#¯lSþ]†ñ),=+ˆnÝ2à픏EríGóÈ)Òùýa‡š÷~“yßŏˆ®Ež/V/Þ ÉÕjöá é÷*4B… xÒbϽ#ǺLk-f¾#ûíØ#é+„³ ¤“f¾.š1È1þ”“sø—õQŠäG:Ǥ ])«*j%ËV `ܸÁù“Ð’Ló&n1£vŽÔ¢Yü€û^Üî¹-,[E—ö[÷~#l¼vFú»Ô¼Z=åñ*åÁ¤WÈóH˜ÚoÙq,€%·Mך–÷9=òÖ#´NK—i¤Ù„S°«�! �ù㠑'¾=|â6€föƒÌh'5Þ÷qݪ›ç™_•Ž·ÎPì€ût—éРŋ¸žÃäõDÛÝùýÉ(®Ãè^LMm.2f3‚ÑíÙ7 %}ú<àuݾ»–˜}l{·)OŒÕväOP–dYšÑ qH§+§|W~mTqÁ,ÜC ï~Ô;à=•¤ ?12_²0§rlEñ©#6è“ú»Ün nMÊ\çfU)NüYVÀÚ¡¡oARVxé[>m#î•·ï +u_i[¼h!%nˆç£ŸüVH¢Õ¯6ôd;"Äú=rŠÓQ:à” +¥|¶ü‹S”ø1¯ü0¶Ò©«ÎÞ*VÒgã<€·'ó]·Ix)Òi¤’ãPË•'ý #ý®\VñŠêÚl/aø>\€o÷ê–DØyÉÙ"J&à5Y4é‰iÅ ²d,îB½þt+HVELëuöçvwaM¼X·‰®Jž’QòÚÓ\»íË#cug<ãÌM®«ì`üzŠÓã6V$Û͋8Qds²p+ˆ3÷–å‘P“#á+~[Ž—Û’%Æw·¨1eU3cçËE_×Mi‚)J'høðÉ×GŸ5hq?PY—¯üyÏ7NâRl´ÿx#/Ì¡×:)®I~TFËÁ + ɈÚ¦\–¬"L«½í¼dä$Ûk_W?o¬>'ªÉä&”ƽ½ÇÑ3kÅI:8 Îõ½kÉíÎv9Qmèl™*!¤|Îåî¢?†J‹–’€·ôÕ8u ¤1ß +:õhD«Þ€eè`6¹c at nÅê‚6ñVì^éã©YJ´®—3Ö~´¦A*Q?ˆF[T\{º¤Q¢mL+Ë<*J¼ïҀÓÔäózªXÒHbfH) +s›tü\Ôëh?(ÊÇoê貜Täb±˜#=³§®ÛQ³ïŲ¾VubI4øâd<º@Ù½Ãð[iKÎF ÷Töï{›·Kû!¤jµ]:鈳ˆ£/Ôå9ó q‡–Ó7m#ɦsŸR¹/ 3 ëÓ '¾RB}ƒÍáÔ"ÑÛÔd• ´l’ÀÜvý~<ù¹ŒiÇØ^œ­Xß$Åb +»éœxöW$äÉ°“Ò¿~Yn€}X,O’6¬u ñ};ϝ©½Tè~–óPÖ©Ð?oÉ@5õ?Ü㚠+endstream +endobj +1500 0 obj << +/Type /FontDescriptor +/FontName /PXYKCN+CMR8 +/Flags 4 +/FontBBox [-36 -250 1070 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 76 +/XHeight 431 +/CharSet (/d/four/h/n/one/r/s/six/t/three/two) +/FontFile 1499 0 R +>> endobj +1501 0 obj << +/Length1 1487 +/Length2 6553 +/Length3 0 +/Length 7563 +/Filter /FlateDecode +>> +stream +x^x8ÛmÛ¾¢¨šµj‡Ú*jï½÷(U4"‘ ±©=kïUJkkQ[–¢FÍÚEmµWQ¥¾´OŸ÷}Ÿ÷ÿ?Žï;rÉï>¯uŸ÷u^wr„“MßH@ÁeSE!1` H ¤cd@ a $DÌÉi Ç `ãĜ¦074…”ü%7ƒÅ”!¬£ + ÐtG+ +‡a¼ÿ‘‚GÚƒq‘ôôôBœÑ@”›½,ï]€'ã+«g€çßòA±oàÿóüùÿiÿW–ÿUþÿ½#Uwⷝç/‡ÿÇq†#¼ÿx`õìŽÁΆ +;!Èÿv½ûk u`¶pwçÿ¶j` ØQ@Úcu.+ú/vô NØ»mÙo ;Yÿ¬«‚„¢l ˆ(+!h,g8Ú Û‡_Æß8«/AÔ € ÿÁ¢Ø#ÅNÉßÖÏŽtGÿ Âî Ü»Å_Ø?ö uwsÎôoaaÉü½þ}À`^0(ñô +*êø:´å¬JÑS`õ#ÁÂb[T‚yW¤†kò™¯ƒ6a–Ú¨«â#ۗ·ûÓõ§JÃG&üùvϽ¾Ë šOSÏÃà¨t-+î ä÷~?zgc±E1؉¥G-Sî%0“?²À·àN¾?q&Ö!¼þjíÅezýÄÀPtBÁ–ƈ‰UÈmÛÂ}bÎƱˆé3HwËÍ"ÃÝXÃdè÷ <îT±%†þ»÷²E\fßÜ܇œî®táíÎJїáTôÔ>šl¹ýI=ô4‰9š h.E‘¥ÒÔvúBçp®y¼Gbó?Æ +ºß$ö»×Ùë*ÝÔ{‚Å¥ßîþ̅t*€Š“J_O—ÍqѽÿÎ]à·ç]ðr3ÖdäñF㇖¾Žˆ}Ç.3ÍhP‚YkÖÖûÍÄ ‘“O”¦|*¢˜j­IT»5o|nüX€a^.¾þ›65©òSÃìñ¦ÂäùƔ“ÆÚë8º7Ì%ÃÇ(ȨœvK™_ÍTˆ<“ n”I=žÞ¿¦l°OQ½|Ó ãûu«·}A!"+­¼¶Šu¹51÷àõ[ Šæ£AûbóyŠ?M¬©J?̳‹ý÷mý¸n/ÏL¡&ò"*¥}4`Ùúù � Ê7ɾûÒ*À°bͲÌ9|…â¼8T«L¯w4ŽMãfÌë±×?Öo3¤üi»/•Ù>pÑã.Ïs§ Ã7PL5vÓäYŽ¯ßò·oþáUÕ^jۑ¸~#á‹QL’ú}…’Ž—KR5l3¦óÃ?I•šû¨CLQ5é³͹ÛIr5)¬R)9Õ2ýŸeï†v/—·=d/ÿ^ŸšE7b¸sÝÃP)uª?Ç@ف˜žlLÞúnnmy«Ó-ÚX;ĺ‚Æ™¾nYM¦çtU‘­F¯ºôT8ÄëGKtoжQŸ‰¾F¯Ö`éG4CÉîGóʖüÁmwñCùM?¦Xµ9õòå·2ÕC“oIÏësÇi>ïŸ ðH¿ÛÍQËî`R¬#w\³%·˜ìÂ7*æA6I'3«Fû/«‘! 'Ë¿ÐM±ÚN2^­·k0xE„4éñ†Ö’V€ÄÆÖF9ÉÂn„ª‘¼8O2ôyNutd÷Õ7b؊RÙáó±ôJofæ’bjÿæ„ÿùÛîé\´·Ò‘÷üR•uÏ«±Wò–Pñäj$ƒ˜+wýÚ5­È‹{Nz2t;?Ëå'L+|ð÷éî•ÏKã”'»vY +… º {g—kǾŒû–‘ê–ãì9p¢¿—}ÝÏà4M.ê¾  ^Y­0Yì i‡”fYoȍß%ÁÝ9´Áä#’3(D¯ô"=:¬‹ ¿ÔH$¬ðôwØ \No¼K`¾)Ì˾FLe­3sùH@¾†tË”à’‘û8g¨zø¤cTÒû‚ÜVn®ÚŒŸŠ'Ä<$ìý©“îý:ó·;ªSÒŠþ5i_jf;  wxfƇ¬„¦8)@¸ +—ÛΡopbÉ¿"üœCPc¶KïѬ6Ó¼ Í÷~Jå—?ãÁzkÿq‹<–÷)*uиO¯§ñ’tº·&_ž0Óna¦Âð.ÔaYáÓúJµ_=tw×ÙÕDýIŠ¶Iw ór-ëÀù +t ocRøýÖ«xVšLÇ¢ÕJ*bÁZvŒ÷©}æÝò¬wd~¨±ûr—Ýë7Óñ´ßîL­ߣ÷ü\S?í3ªÝù Ô¯)JùK÷=òï‹ •—úh†FçG +=‹D‘5é§VRšÞµbmՃê—ù8ÆA^èAæ0ý(¾Úg0Xi|‘]QŽ§ÓLÄm–3u0¯QI<œ=v¸s/˜Ä<õ3¨¶¼ÓTÞ~ëV”ÏѺxw—_{¡¬í•£·qVlPg©sÏZú"½kñ€½R}âQâÞÔÛæ¬k>×߬G*;ÇÅD+šieˆŸXÊÊ7žúz^¯´&>-Tݵk¯¹÷T1sc%{[¡¤üÖb«ëë¡ý~rօ·ó#÷ê£Y"^$ ï‚_éÛÝþt£âèî„QWžèñrËu¦gn/Š-çÞy<úBÒRWý#–î¸=ÀëTã*1´psèŸß4xs ¥¡„îóP›êÇÌhUuVb°Ìí—ïìØè®±òõ·– ×= ÞGŠ7óÈOO?Éò!…6¶Êwêri8§çÎ=—5cûàœ +;è“DВݿb5URß8{*þɉn<ñº´÷YŽ®;)$…p³°¤µ XÔ½‡‹Ñ­-|‰zMÑ褠aÁK§sFPoT°vež6¬cŽ% Ȍç*᳊cîI侀Êã/ݾàjèõ“^ìz‘~ÚÆ2°SuëjsºŒ?Jö2°^:ÿ±7·ó6Z:Óäk„ ›un±AËÌ·î"ÝlµÚ½Åë²d¸]%ß:ZÖÞB ›ÉjæûÈM+ïÊ螅]kµA’2ÇúºÒ٘óȲO‹ómÃù <ŠR_î Wö\j:³|HÒʘ@³eûÌW%‰¦¯°ó‰gÐ4ýb&%ƒÆtq݁“sâãÄáäÄayo«’jט^IñF ÿ~šüaÿÑá§'é.¬ƒÊgÉk™Qø6‹%4‚.G×ꎞ1'»¶©Žˆã[ÿW LjGnQ|"¼*p֊óåò‘’oÏ%r>\¶€‹ ÑÖnå]Rz˜Öì‹ÿ’÷„àgŽ5keoõ8OÓyvaÝMf⺚PR×n®úʾS¥…Ua]œzíèOc}wßDZtKóPՙ~î~§/KóMž¤W«~39Óg£5Î_Þ2jÞ£’•ó¤žÁm³´k¥ì%ÞÝâ1×HˆA4es9$ôIo¢ÖŸçT•yÜÑÓ­Ap2}’¯¦5¥ïPóX·Ö¢_£Ïz32P‰hߘÖg~ÔîÆú é±´”˜‹ kîa¿•UÀšÜ-—‹sü oÎ<, ¤\Òr²+€¡Ü5ńŸPlÖz,n¶hÍÞ÷ÍÑ›–›Œ-Õ9´ü.yŸ^ŠšÒƒ5!Œ"ãºÙ’ÔõPEÖ¤QÅfTñ@ýE )¹<6ã‘+$»N€{ÌÿYË`,DÏÞ7V>"³t€þ:¿â…Ò´\œ,cð¼՛ú?É ÄlõˆPî˜.õ—ÖðWP6T¼|{Á,]c‚Îz5QÚí½¾Ú÷>™Ð8/FIäBÍÍ~Ʉà=…È+`œrÂÎÙ­å÷È@ËÿKÁ‡åCwåðœä(2ÿ#®ÀË÷âÀˉâ7ë6 ! ŠPþ+Q¦mŒ¸o—åaŒsÓSÁú›Ý¹o&ãh +m<蟘㆘§üdõD¹PÍdËTy¯ÿTLUu{è½£>¹ÄÒáKöìwöɊÑOc»¦õw㎥­ âõJ“…¿·ó)Þ® qG¾ÁãhXÐè&ۼʳÖ#€ý|ô‰˜5ƒãí£` Á÷…«:5°À\¹©w=½›£Uu×X(¶Vð,£‹löÛo\~}³Yn½)$=rö1­›ŸbÃÔQVe1”SI¯™ÿ³TOþ§N¢FðüWRLQݔAHøøC†&A›å‘ÎCSUš>ÈÕ ¿“ƪÐ} Y»4ÿÒ �ôµÍ“ìkÙ>ÞCIãø0pŬӸHº­¡Âö#ž®0yß™ëÞ÷eÛ÷#WdÏ+×½å׺®šLω~ÿ¥Ð©.ÕõMۗöV´+E°qyÅ7ï_—/ø´—J$`›?Ûê¾²ù§ã#î{FÀ)·ûnŸ ›ì¬ðPm,]gËs«ñW)·yÇ3|ô⛪ô&΅( K:jɽ>ll±Ft{*Ú'.µ\]¾ÉÍfŸ,CdÛìŸøH5Ughx?T™¼þ®3ÊÅ­ÄI‡¤Až@¾Æõö™pj¢³/ +ctºöž“9h‡wCÐÅ°çl~úmûm¡:wâ X’Èÿûé*tñƒCn"êê¦âo_Öm" ^3ïW!nå9v+RÊèС¨x©‚4¡=¦_^HŽ2˜L 4Êö‚#'?$³“·Üo~¢wùm$ñŸžÏf ´ñÈšRnÎu±ðyjjˆ*~{SfKìVŠùíÌړ³û›wD} ªÑ©‚9rљ‹¤–4°VWðŠ2'ÕOl*¡{^a¿å·¬ª/Β6­öØDÔrƒëÚsÛ NOƒô8‹›9#ÎUcøß·×J);’ù Q3õRç¬wò. ¸}&hUö†|9ïEÞ´V»̑E^{ú@ÛC¶#ߍKìöØÛןӿ‘ái‘=‡+1}¢ÿšÊ,￞òaNòt¬ï{¾ÛÙ¦’êS­W …¥þ4Kf'ƒ'ÜÀ’£é!söåñcèës™a–OÔZ®íñ1«M³>5÷†Œ™šêž¤¾ïFöx q·‰Ó=ù$²¬|LçiÂç'FfD-ÀǖäUL›öeéÝmgB[4¥Í`ðdDk>}óºøßˤ쥺±Z©C3r*vðÉÑM².æ\Ó¥od´ª×ˆ›T֟™]¿Ö7Ð4r³C3q˜ß2MDÙ0ð&¼›¯$OEúôJ·÷é¥N9È"­eu§0ùaûÄfœ|ŽK×ÀPûff)˜AqÂO֐qÇ[¼Ÿ>—ºâ¥weuÜ¿³‰é²I7Œ½¢Ï»3ünu¤¸4Jýå1ðŒì§(8ÏwÃ{IwG5döbFæàǀPÚڌ~_ëÿ+endstream +endobj +1502 0 obj << +/Type /FontDescriptor +/FontName /KMSHUG+CMSY10 +/Flags 4 +/FontBBox [-29 -960 1116 775] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 40 +/XHeight 431 +/CharSet (/asteriskmath/backslash/bullet/minus/multiply) +/FontFile 1501 0 R +>> endobj +1503 0 obj << +/Length1 1413 +/Length2 6133 +/Length3 0 +/Length 7096 +/Filter /FlateDecode +>> +stream +x^uTÓíÿ6RâiPF÷ÝH7Ò:¶#6ØFƒt# Ò J(!"Ý""¡ ¡”tûŸñüžÿó{ßsÞ÷ìœí{_Ÿº¯û¾®ï8Xôa(;¸ +‰¥ÊºF’@0X 88ŒXøÀa +Gc(¤ôÿJPFÃ!X¦ÁâòtQH –‡ PH($.-$! …Á`©¿Qhi  +ÄꂀZ($àPF¹ù ŽXܘ¿ÜP ””ÿ¯r ¢+€B@]Ö…¸ „q*ðÂÙ÷þ¥o  ‰ÂâJ€8Ž@{ðóZ…„…€‚0ˆƒŽ6.ð ]HÌ/à_Ó h4΋¿DÛÊßë_ƇýáPÀÌ$ +*æTÖt\©Èè%ðexáSKt¢Ew”–s깟£ÎÕLõ1w¥°²[ýiúÓÅ£“þŒ¼[ÇCÞÖíÙÁó©Ï°xªÝKJ;¹}'{íð;0ƒÃ°DZôÅöcƒÛd¬­¸ž˜Mž‡Ktˆ¬–¯\´`V-¥¾]/ÉYR±sZ¾áÇZ°°¾³°&§D[¥{kš _àÇ"⏔šâèO|–¬â3ÞÍͽÍîéNÙÍÓî¬/‹ ¢§öÕbÉéOꥧyœ­UÁãT;T.NId¥áÁ9O+­åâ<眲^Äׇ9Oõoõ_O•ëü4ÎjY˓—"v™F{çCA@'íàbŠ@àݯ¾#Ó×Þì¢}+¾m»_¹/(•%m˜:æ›G6xßr©`»øA˜ÝäMQg•O C‡"eaK$·qö=¬ï#üêDž‡=àQ ïç°<ÇA1fέï=Á¥1D!Ž‰ÂÝò²’[‚øeÂcïþÒx¾§Ü_µÐwŸ¹æh±&âKáèIá²p<œ- K?s²D“€¯ú²ØÊcù"¹k:⨅/%šMpŸAà–Ä™¤Î½á³"‘=CdâÊb+—'ÿ Z` ‘c½þá½[OPùôªÆó‹»è»@ۇ‰±)÷­*è›[)2BU|³Ú=YÍF›&Ì6µ!H +S~.jSH_.8ô»cRA·ˆL£c×Áe3l­ùщk¦X´oa”³þ9C¨ô§d:ŠC‰áñIȶ’x3ÁDýÐù a°ì™û'¦vò®ø#ªO®ÕA.>`öš¯Á2&oA'.}¼©`Ñ1¾,!+.%/ |I‘6¶&n ¥Q½c qÓ¸ËîZs` Ô%ÂìpCç„m$êߑÏÔý‘ÙzU*ü½r—)s ò‚e`<䈾å¤)F…rQ +z–ú–†ÈHvò¤Ëu"sÙ?®4Jbý­;Äϱu<Ò;Bªc µlƅ¯AOè_úïYѧêÏ텮6šª/õ\¡ ÉÓú@Q%ëµü)•Í뤄!´’½yëV— v“Okàqâ÷T+ ä ÉÃ\Êҙ§,E«n¯VÃtKˆÅL=øñ䣝W¬‚MÄà ë†EÀcí<ƒBCqôuˏ1lç½ýß|{N;÷Yd#y}hm”¦s_{Ÿõƒ‹Ìï4¸³[¶ 3ç@÷If ‹j >{^ÓÊâMÀoOD¹ˆœã +ùD`Û,>9lÖ?ԚB¹IjmáúÝÂðî ŸÆLu Œ#7‰bC{öÀnòGáA]µ¾ô:CíC Íy~Pk ^™}æõýhνñº¸URËàߑBVG2¢ËÁn¶ku÷¶ÝÎJܕT€”d\ÓÑdz4\"ç³)̓Nº9×ú¬¨ã¤ôè×­¸¨ìRejµM k^kM]”ûáÏ1g9Îó FÚ]àŸ®µÖÌsßÅ+’ÝŠùËv®éccŠŠcñÛQöT€7ÝrŸ=%<'XZâMøüå­LG è2¼²ìžì‰mÙy”|mtó(Óx-´qŠ²ô¤¼œ2ÀpáPP«kó…Ãï¶UKQºÅ3ú÷%‘ÏYTfÙoú{vUžOñsV;²ô̄GÇM0lºÿ°Vë´ÏH—^=”0ퟘèNUJñ>" ë#ÔUe:[.`ð©De¼‘Î b‰Œ£`UYÊP¹²íîevpá5f˜)è¬}0œ·Gœ,KÕ÷–béœ>ž/o,/F¤3W”ï¼qÝáL¨®î±ùùir«š¿üBŒ³é¦8ëŏ©Çë‡*Så‡gà—GÓ£UߟQ²÷L÷͖çìªÐÊ{Íž÷YFBþÊ¡þ"ÙµÔ®)š•æ9Žc}®*>(ÎöÆ«£È¡éáq{À¬ø¹&†±ˆÔµ[Ò¸M;¬‹˜'iq¬#”ûòºÅ‘—ÂçÎG«.“䞆ækl­ûa‡7í õ+ïÞÚªŒ¦Ud䳟—ÆS”éu×)¬BåÇU…oÎNjfÙ¼6\îmå{›Ø©“n/}-OsQ¯! E aԙë#¸ ¶—µ$K>ÍTK&„gkDÐsßr’²îðrŸzölŽâÙÈáò¡;Ü+)œi’±§š¡¼³ÄzƒÇ°“]¨-gIôSô³òðåiÒæc˯*WÚÞøÖ©±2Í6²Ò¾à5øê†0:jàϹäÿ^c˜5ȽD(/䩇SØ¥€)f׍VX“ö¶öE®׬—zhCäƒzt²fÊÊ>uˆÕÙVɞŽÓ{îµ-|b;xyª~Ǩk÷vucš ¼é© V2{…Å„=r=ª‚R¦õ? EEÜukvt–Ô󩃽rõ¬ºŸö½ˆn^¨çu D5£šÚnêz†¿ú*‘á3­Ï@5}”˜1_l1HÕ{Æ}'¶ÿ’,×û0Ö¹ÝÆh qõü(zL·ObÓä÷&©Lve˜Ôÿ¶Ãý7mó‘;¨"·ðÍ©˜üÊÀ ¨o֌e§ñ +é!†…,)Zyûà|7¨Pô©R—©6)K‰qYNJKhW¸Åë—äšøg±Q.¯¿úðF _=ªükú&®<2ϝTnytúIGjü¾½…»üó@zï.Âۂ9)kyiz%³+Jî³Êg~>Ý*-1²¨Ö ⢺ũKg‘exþfv^^sÀ˜³1¢p(¸EÉ…ÿ°Çý![‘y·@‹‡úӆGc؅gۈï„üíN<”y­Ôw>ˆ<ÆZèÐ —›8~onó«hWø<¬Q÷ù›õvq#6©õõª€0áP¦bøÁì²ÒUh� �YyéÂcq}Šo3‡ƒ4ºl幒 ‡ÍÚѵ­mTÇ´ʪ°Îáò-cîyÕôSøò7Ç«ñ´ó"s¥:(6+®ê¥v»G rkWŒäKܦCT— +bîPˆ&}˜hºÏÆk%óôóêŽÆ øܹCÙùKãӂ;Ë£›‘>I.‹L¨ØI‰²Ÿcë›ñ4ógå2 PCC‘Åþ°"Õӎ ®¸%Þ¤R‡ý +ÏõÁD A%Æ¡Wo¤”I:$^àKâG–ë&«Tæ$òNÆñ«f´¹n²||°Ôz¢›i½ZŸ/‰Z{Ä Ø~Ùd¯~à8µÔ•X•c”OJ™@HsùÑ·@þ¼ÿõP˜FkRfÁ¡2„øI#YM/álYþCŒ2h,C¡Òä´©Jיjà=ßs‡½…ÈC§šÿæ¹&º0€€±¢/Kò×|Ƨ£l»as}{<ú4‡6ýk/í²Þ”7#?E}¡»ý"~ìà +ãÂTwwÉ>­±’Ûø@8…ñ1”£W¡=Ð֓<-çØÔµ¶ë™_kúÐÝŸY _»Îâáù +“êWB…9bN-Ÿ±0ïi/æS_ ÂËw pTI⨫QTÃKz"Ìúž|»Ž:ûzËI˜|FÁÔ1‰áê²,™×XÓ3VÏ^<à ãÍaÀå4*×ËÆ«tjWӞ5 6Th0žOeÕ<¢TQùXÓ}÷MzaísOvæÆ%‚.º«Âéå1‹k_ý D}hw}ÊYÈÓ‰Ä HS¦u•y÷Æç‘g"U¹)'!7+l}Ò¤íQ>&|^ïdFÉV^^hGG‡X6fˆÒQ1ݧcCœ^xZ(Ý6—™Ü¸ç”ãÙí|C:Üxi¶¿+JŽo‚{+_Tn¾¸0lIt­öP¾;Õ#÷~H“øþkK º&nÝý U …á®ù’®ù՗ÂRÒg-¿ñªÒÀ}¯ám ÜÊÅðÚ¤ùÔÜD6±F0µ³ ›Yü0”*™¦9DAï1;>úñǪ§­}lnÛ=åiZ%Ô@ÊUU’š3¾é¢é†¹D­mï^™³O['=r"a{œÜèâå—R¬?Le†ªóÍÎ %x +ç|êjªÉ=Ü8*Dƒ*¡‘ìk)ÑKš¹oϟN9](vÆešì¤4²ç³(𲓕ûµÎÑøñ;÷„ët +7Önkšêš ‘^ÑZVL°÷¿-ýR³‹R‰f€÷Ö4‘z'†(—^elŽŸ€Ùú!h7XjJåy…U}*ô5{ïÉç$ð¡× �%¶ÛÍQŒä+9ð1%iB¤5WGm âÊe¸B¿`ÆXóÙ*˝w¼_ɾ~^7;¥wÿÃ{Þ9Ï×°Ú͕w[ƒ½ëÁŸ{·¢éyمÀ÷Tœ(á)°‹OšŽ¿ {ýyå;ZMÆò‹´¡*EÙO˜Ð«¼+JŠ ½J?Ÿž§ä*C+6…”¨'7?nðgˆNEuÍ-e8ŸîC_z¨Ó¸\¹}ÐÌmºT7ÈõQÿɍà“0µQ ڀ³kE2W;‰$²2Öá;Yç¾<°²(ß±J’2uJoï9ãL¬:ùi|bƒGÂʹ¬šÏ–]»ûf+ ªüÌõU#ýì +QÞ"¡mI½s‡Ê·óVwoìʉ»~p³OÓÕÉõ¯ôßÕ*sjx4¾¶{¥5§|•ˆtͪâ¤ô†ÇÞ+¦‡¶c,«d Ò¤÷Àû—N–ä;‚·ß^ë¦OY»a¸ ä×É©­GôŒÊ՚_ª[)&éµ¾ÝûáÍn Ô]V‹8vø\r—¼sêêOLCjœ×p‰>35/×ËF’ [ƒŽ-IM^ïì1U±«ˆ—téW뮁bÏ#㖝…F±‘ +&šrOu>PÁå_äëÅdšªN 9ÒP˯ùÙÖk»ïoS%ÖDZܜIã‹¡â —É +¤Zð„gÇËħÈWÇns·ÔnV¢È·k&RQ?‹oNÿúaåƒÊ{ß®÷$<&ʓMnÍ£øæo +ï䢆±Éuã_ïUY™é'æ|)†ŽÛõª2j\¹Œê®¥{ܝ2.š\$O¯ê»~:›–Á¸:ôtk§‘™ÏúªDC §Pá˜ç!B_ÉwL`R[³±j­ž,Ÿz÷%x9uøˆõE¹ÏZŠ\ã…vÙùÍyì^DdÐI¯YŽõVº,hí–ž¤U#>úª¼£" °qM½ý¤Jfƒ÷Y¿Ýr®¢W‡îÕ{êRB + ±R½·ü©}/$µ¬=9+¦¦oVÄ7'*ù½¶‡úû:CÈ;±°³@[ŽœðiRº…Äl”ÿÿ ĉ +endstream +endobj +1504 0 obj << +/Type /FontDescriptor +/FontName /CXUWJA+CMSY8 +/Flags 4 +/FontBBox [-30 -955 1185 779] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 46 +/XHeight 431 +/CharSet (/dagger/minus) +/FontFile 1503 0 R +>> endobj +1505 0 obj << +/Length1 1606 +/Length2 15161 +/Length3 0 +/Length 15979 +/Filter /FlateDecode +>> +stream +x^­¶ct¦]³-;}Ƕí¤cw玝;¶mÛNÇfǶmÛý¼ïÙgŸ±¿ýëœýããZUµfͪYkEA¢¤Ê blk”´µ1°02óÌ­ åmmäDm­Œb@¹­¸È ø4ˆ+€˜­›ƒ¹©@­®òƒ†ŽŽþ?-ÿ„+ at -¥ Ú+ð``g0°rq8¹Y+Ðþ[23Ë¿ +ÿ_ß®tþ Œ„‘­ñ?S¢ +2°1þ;XÿÛðÛÈÉÁᯞÿ:ë þõ¿Ft!¬,ÚñZ¤f¤jprÇŵ{³@ٕԫæûVÙvû¤†nóTè¿U16Lò~´º-œÚ½ïËÐ ÿƶ¢êN^æz‘Ñôä£mP¶sÑø3é– §ýˆô¸š—Û‚Òâdþ~°3®¬¢[üC4ÙÎæ+êÁ†þÓ¸¢®I„ +tKb"Ï#Ã/¯9h«.½“9þ_€m|öÓA©Ïç#ßçb^ì¿ÜŪ±K)¶{Þ7ðáñªzÀZQ–QILÛ>8µÎM®Þ^L˶ÃòJ›و¸E¢–¤¬íòËJÿR|! i8ÔéÌw½EÈ9CÍ~¶Q⟥Ëȝží×ݐ]J¢úaçvö˜BÊ Ù_‹¥u]‘$KìrËÇÅCœÆןòœ¹“š*"­H2EXvÑ(Š®œ’‚¹È‹¯Lc3/ãùÄÙV’Z#o¾k¯çø²r„\3ŒšNwý1Sv +©«G³C+ŽÑ+¥5üAu+úÕøl¬¼6§eƍ*gc²Ñä®ùþ?ºÄãe~ áVTq¨Òî뙤·»6•=“TlW¨]·î1½7ÂÑ=ù(œ:ÚnÕ1–gU‰8j(³nûƒ=ktƗjWnR ÑÁ=ùâ¡ôŒh\S´ï- +‰¯2{‰,G׶aó’ǤTÆÂ|Ñr„?ƧøM>nø.Çl+¨Sˆ¬vÙÉÖegD•uª5í™Å¥„tHiø_ZÅxo‰£î{Ö*_UNQяpQ~M6æ5N‚9ݱÕWBE@ª]û¥)‚ ¡F•ªØ+Ü,6Äþ:’)a‘ZTëÃîÏ4ӓ$+<¬p3‘>gf÷ÿ!¹_z#z;Y»ãm?ÛR~Ð=ú ”Ø‘áZ›±ŽìÇ}=Gn* ‰å~Ï´FÌZkz%,°^Êuf~FÈh—‡»¶GŽy²7š ØÑHÁñU1Ö*åq‡»x73–t#TRUE÷ÀWÒU™‹ès}ŸëÝXN‡º¢¹$¿¡ô\ßPBtˆlrž£P‘±>[Éæ\?¸Ñí¡ñ|ýž;²«RT¤Ó L‘áb º2Så”ðbÂk&]|Žhâú:­À!îj"c€òm£zÓ ý£‰ŠÂ®2 Ÿ…Q½–`y€Cs¢oivÁ2̍ ¬—…‹G¬X®6jñiëp5¯¬ ¦mIŠåÇ.Ç.C—Êþìis+~-¹{F|Hˆ®ÀÆsΌݒ„–©ƒ/ߊòÂbî¸c˜&tàG_NU™}‚¯ªœ’úM¸‡jûgec0¾º‹à쉞-cŠd×ʎ԰K€ƒíLnτ4ÉÃfòB®]€q3JWXúNØë͜m٘ˆ+ÇçÝôW.FÇכmèye¼Íڟ´Þ ²r¼úoä*ÅY§¥¯G§ÊwúŒƒ‹ËL˜³j ¥®!ß; /ISøö!Ç÷¦tÙâ÷”»iúvÏK‡ÛÕffHÛG¡,<àXÆIøQ”F¨÷¬r@åô! r˜SÁ4Ï}Ù ïÏÚókî!EÒÛ35—ˆg™ftb€™c…?§ÞŸ‡â™ H‚r~2pñ3ð­!°ZO‘·ëE\gŽN*O3²yOäyšîïþîàRB»¸Äc8ØKÔð¥8óÈý-&$ìXªlAMb¡¤V¬ÐÄó:À§ è}ûº…!«¢À;S1!Ä%ëóJ˜¦?é6c«áì“î6†¢k¥i3Š&¾Ð<{®uÊ8ñ†g¥ e¬ûãÓü‡[‹çYíèš#ñç @Ra)ζK?*ŒŽüÊ‚–h@ -é£.Ã&–!F±9ã÷ʎ•‡P{¦Ÿ->Éoƒûh¶+¦6u1¤¯Žª#M?£0²q¿„¡%¾õy­Éü†PžŒ +8ô`øR£Ü+Éò&å:œi‚u➿Hño}ð~Ãç¤Ex¡O1ÓìŒ QBDÄUY©C d8!¥~·“ï÷†$7©ë*%Ìó ü¼qŒ®‘êõ~VU9Jmv«;ÊKü„ìéà¦Mš‚çiö ]Chl~&šß0 ó?“Ι%?Êý±†++ºƒ=d+ àÖøuæAËþ™¯V‹‡]y%ÞW¢(’‹îòK~fG?Ç}¤2ÞiwPjpäGÿÎ6aõƒ¾R[fˆ7%Â@„„²ñ#ۖ¶e5Ñv¤’Xó~æ^1Mñó[öœÏÝpGoŠ“÷ˆ‹)L1t¿+iɯ'š{ËÁ´dË܅ŠÞaºË%⤄9T‡Âò<ܸà‰^НµM䬍vöDwÁ9 Ún«¢pÁIp›Ë¹ÈZ宿%ì†ãçA=r^?Ӗù©sü*x\ï§]òŽ—ëî#Qz^•™ρt +} +ë×\{Xͦùš‚ë6ú¯½úÍ;„S‘uš +'Æ ÄiÞ'‚*‹¤i:+yØÅé´è¼+,Ï×õdŸ9Ïm˜U ÐoP}¬ÜQåÙáµ[*~½+jÀê1ÊxÉ6¶ê*õPÞa#݋‚Q9›9E(ygÉ&Ōôc¼?íÝBv2°¦­?®fZ¿ôFV;EÒâðõû +ŽünIŠ,ì´£ÉÛïÈÊr˜ãC#¼mÁˆ®H+O§yHyðåÜ.Ð ªyDu¡§a +÷±“[o¢íM|¡]£âþêŠqcŠ§J…–ÊY—âȊBÓdoð+K ‡?Õ}0µQúÜ÷’õ§ƒ"œ?ù7s¯¨Ôms#·ÙYטQIvN?Æ5ʵ½°É™ÔSˆ—ûÄÙÌkí®S}ª.ÿ¾ãÂøô&®˜™.{Øݕòå}ÎåԬʏ^tÀzÚ!„&ôZÊO«'ý–R1,Gô$÷jê(#ɏ{䮵e"Þ¦$é¢8 ¯ßK¨–ØžkFí3-ø³—¦;­èì w•b† ªÄZ¤ B‹bI°2l«üŒ&øámIAÂ~Ð:˜˜/£ç§1>®ž¦h$Æþtì\ðòÍ$̞©²asýÉn/ڃ–ÎWB…‚äRø•81CLAé(Ý~²T=£§6ÝHtÆ»Zs«'Ô9æ$B%‹rΠëJîÉ$®aXU¸‡ÀvŸ[]ª6’8ÍLTO—µµýàíÏò×HöZëß ^L-öÌà†h²•_™^^㹂.";lµÐr_ó‹æ&æ¿?*¹âž0- +a枳”/5ؾFjÙ¯…ìßál;Y+ý`Y1-s¥@ÕßÕ»ZMgY<6ý9  Ýë/½OÔc](ÿ“Sµí¾õxæy±Š +©AºIÚ§xý‹–º XýóüÞèîoÄäŒd¾bja¯ž™ëàšÇ[ÖnÙ ÑŽ?ÕB}Ÿ±“ù{Ÿå¸Áó·ìAoìPé”H˜·–%Ìì°Ó¯&§ëì,¢[ƒœ8:Ù÷ýÚp} +1˜o\•`Ëîâ“ÅM-\Äd´¶°0!˜ú‹6-Ÿ\Ù_©ãÖqU4ÊEö²êT rqû5èŠ8ÿ¾©íؑBc­>oÕ**}à–ã+ôÙ¾òߕöÁ…Ƀh¾ÙÓ x7J=}õÔ/6ë_ñƒ5ì)$%owrÎ:öÉ¥TÕPh6~ß¹xÙVüj±TÃ)F“à +¾¨{öVšXNe¿®†ãø…§ ¼a—)Qsˆh +$LðǒnncdŸûŠHÕ¶ê:" +6éƓóˆ>’Tœ =76‰êZuÂ5€Ò¢Ÿt©ŽCòƒŽ°YûÃRt+^Ï'ˆ¦ôû2iÞô}Œ‘5ÚȀHuÌð‘œËMÖö˜q·%Wn=€Uð_©+¶1€{}Åý-æ€Óª`ð“Gy ‚i7 ½£…ÿ€×p?ávìy•Áݛ=+ÿµ9¿˜r «UQà»è×~[¡/±(æšìÐ…¢ˆÁhؚ§8J¹¦GÃîžÔAšÇ_¯·äIç‹Q|V+øژ›h=.coç‰^~y²Ê‰qkniÜ\94!¼®Þ€›#¼K+/…Eÿ·D«5œöa„ðbO®$³üNä–À°_…+Þß6°ø–H2ԞIªpdjÙ÷â…jÕSŽ4'[åQ·—†·êa ŸÉKA¤ZY.S+ó‡Éßëgá(ә¡œÁåoAÚiås}÷°ýÛג Ù穖Ó'ZïVº€{JîM<p ™éõJjØ30”2ÿq´&§gÃ#·9e}fŒËïšËá®Auvž¹ÅÚÔ¢ôý rA5,Ö¤¹±­%§¹`:?â~"•\ÄkTÛËôÕIz¯soð•Àśeàc¥Ô3霱¥=Ù«½° –ˆÒ‹ æ%ýz âtàh=„Ãñ5$¢4ˆó†»UæeIéñ4£ÕNnÙ9Oîì,˜šoM ±%‹ž:Ví2>‰X@Û+´îÂèØp·û>jþ9µ“ð’q¡‘ÞHIqJ±%cF‚GPqšK[€J»Ùù¨Ý ôQº²¥ý~HÞ⤿¢²%¡YäÎ>òš|ì»ˆÄ ûý­Ñ„'¾éö[Ðyf<éá­oþkÕÌ}뒚w eÙ%î±qÃnù—£ˆD>·±Â*–¯÷¤*+—C›•“4É~œëš>;B6?TsÝÔä);¡ìçvÁrq‡"vÍaÆhæÙ0rÖkú8¦ÁÁBRiCfv”™ž¾>ð¦ çôE³¶ê¸A’‰7¼)R=ç݌úÝR`]†¥8ݜ™÷¾Þx‡ás¡ç›^ “ OѼƒKmÒn ÷! ¢ÍÛێP²±ëIw5F4%:_‘’ô\¬uèÈêñPNHý™CŸ¶ÅĬ¯FÆ¡¨ýŽÈ¼8Æ% +¢ºv[oïfoo96S9G\ð{L¥IZ.a¨Æ†L,4\l 6¯,r!ØЪÏKô_L$Uh(¬+„u= ƒØ”ד”*qiS-˜~ùù+¦q(ôþ®É5k/B Ó¿ï@·8$#æÿFΛ¢s LKØ"Dޝ wd2q ÇÙA¤“¡&Ù +eT¡õ}÷@†Šoˆ 0µ<3[Œ•V»6hІg¹`–×wõÌNÛé§Nx=³äòƒE…àëýäÕ¶ýƒÐ‚RÓ÷,˜•Æ »Ak{cë½Qˆ¬ã·ŠiZºïTæEh¤>2rm±\z'@¦šu¼s„­mT1‘VÝ'p}çÔ<èŠf ð€sšÿ8"JàÏ̎ʰR›¾f'„‡~ðõg9+paŽ bg}è¹x:1!<éޟ‚Uíå¹ÑÍzHˆÈ%Q“X쬛¢ê¥D̜îÍ÷:ďÙÞAÛwÀÆDœíï p§˜·y„Ëlç"ýJúúÐÆ4&°ŒRšcJ—-._uîõ<è«@l¼VM ¸YÍÐñÃô1Ҧ݋ϸjQ¥7Š™tfa·j.©Ÿ–+æ4÷^C'þµ¿?Íx}çWPý½nޙjӟ¨-&§&+ÅKmtž›Œô|½IUø¢Œ®ñU{„+ ÂßTÊ fîþeÿø0†óæ£SÆ£®á؛! *ÚØ~>+â§&”iû~M˜Å¶?'§iz®aŽ'7¸Óô¨êݲf|—e_ÎÀÔü{ÿó™Ý^srÑ6U¡qf4ºÑŸãïÜb¦mØŒð 7>·-¨fe#áb̃¼¤¾h£eÐ꧷wytÇÁ++TJ/($̚ šº¦KmêG&¿î Ô_ Ë9âʳ-qË´xó–IüZEà‚á.ŽC0D¿ŸŒ%Íaí¬)ûáü€™F¡O˜¡VÜïþù(qá¿CïÍ©VÚ4 +»fBXA;ªÃã¯yHɝtL56Òo7ÌÖbþÄì†\¸‡lás?b ,³:Ã"õ©¤ÑcøÌÀæpBšØ +ÎÜᘉ$ßÍ[ü¾‚® ¹×매DÚ6§“GŸÞ±¤‡¼ 1ÙÙ؉Cl›NMŠÔV©¥D¤U7 W¡îù™Qj99°\|Cn0v<šcxž;¾³zDs$_º¿v†£’×»Ìl~-D·q”` tƒ`5ÛÙíP‡V¤þ™Ø$™‹ó+Bs:tØ{ŒŸ[¶¥w›j‡5q7ÂVßÝíJ0~’Á&ï•ÚjÞün?Ø4„$V4\u©,dl¢ÿèÌ:{šÒÞ`ݤfãó3ß;Ÿ‹HùÉNM½\ï®Hҥ˘».vç¹)£2]j®¥ç© �ÕVž¢v^eE¸Áãä҂:{›ñ%õQ +ˆ“Bº¯]Ž›žÌ+9$†Cv“1u+Þ%j•My¦,lŒÇ§¡Þ" 1ÚUé4Á¡çEÇ'$x¢º³äÔH`¾@ ËÆ®‡´'°¸¹†kgî1¬î/‡Ðæ³3ÞåØ¢6(ùŸãk ӕ٠+™aD\†•9ˆ]n.¼òòÌ?›Œ†´)DìàO¯Ã†Cß»ÁXNOï¿QTˆÛÓ}SWW®¸@Ò»ïX[ñ3|dwˍ`ûËƾ˜FT1¥TL/t&¼RŠ)H))Òå+}=wn*3 n͗_œN dF\’× ½‹ø6ZÆ¶Ú 4w#YDvÀ!äaëSZ£ß±Ó +bnJHO)¬]Ñ÷k†}¹j£ð‰±¦ÍT•ïZÜvÎ8¿æŒ±•Í¼à-†Á֞Ù2¶C“xh³äúç" G‡v=¶ƒ8ÛÖqc¡90µürŸ֟ åÍåB7È÷„ Ì<ƒ!Pâ˜Í~;:§Š…cä‹7^IÔºl\Q¯€•2ÌÖ»¢ÒK¦äåz×ó ¯´¼ÕºŠ¶ÌëFƒ.qV¾Á¥¹äÍBý¹`ŸpBWØ-Íåˀ^îLï÷¾vepH@á‘Xžæ™a§C`2ÆØàºåMÛ+Ùd 4m̾•ÔW6ðÏ_êÑlˆÉ%A‰ÃÕ­¢™9ä¿Q66;ý×<Ëtû°2³0÷KQD‹¬† g<ÔZ3T¡`B"!³Ò|c‡ÑòMò{¼ŽƒïQ6þ$ô…Gp/c4lðÛ 9*럥¿ÿñ¨‹Û–)£<Ö/8>Y kœƒK2D·)ŸÎßy$%‚J;©‰ˆÞ[’­$+ZpÑUy–†ÆvÇr™à0Énd1v=@:„кÛO`ýþÍ·¥BœoƒÈ‹r;¸˜Äp éØEÛrá”α,ìÁê<ÎÅÜoæÇ7- +V75˜q9GýMl7Áb´âf´QÌéí+ûœ#€+\ÆÎ !ÿ5Nõ¶êKZÆϋԅ·ôÚM™0d"Ž3ð–ᾕÉ[ìĸ%y ®.B<½¥Ò_¹ã?PÁÔJ +WÜûàLH9•g%7@üUf%jBÂ/äkÞmµ»ûаÕ}'¢ùJ¾ù0û<ùër%¯Zˆ"]ƒÅÄBxì•`Μ‡¤#cÏ©/È\¾Ý+µQu.˜;ØÅ?žï*“]Áîþæ#|õÔ#‚à\ӊlïå÷š:DŸI¼:j;Ž‡ÁÓi›fNþºf6ðFCԃŽ*¸%{èÛå€O$Þ ¨•gŽeíJ/*Á¾n^¶êöÛ·'ÛZúÄqWŸz¹¯ù=Q¶¤#ÌÐ ³X OÐÐÀ±s íÂTëÙ[ì 9 üå-¦"zÝØ1må¦Á7ÇâíCFÁ^䶁:ø„ÅùS$Ð>×ÿ ø¾XȬ.§º£A“;Y;5ªßxÃᤔý¶÷|²˜Î±M ž ~ü 4|ÿÌB¿®ØL¾2´cc0þ²%òŠ³qf¤˜\‰¸.­–ó0¯Ðáٗ9&O’Þ9±‹}.áM¡ÖÛÖv)9R;J¹ÿcëFþø!¥íÝì3˙>öV!½¸¯Ho³IâjOáÆ¡DzÖ¦ÿ»V[?}Ì<jçbøꃴL¢,àÀӇ”KÛïIñ¦üîK¦ŠB€ˆêw*• ‡¹A.ÛÐ/kSU`Ù^ˆ,¥p3,±=`ߨTž ø÷ø¦%‰GêFÂö-âeoZ™¦ÄÒ¹Dð%-ýé-jïQ3˜Æ# =*Ÿ¤Þ%öÆÃí-®í:š+֑—Z«X¯Ù¿šŠt,ÕÌÖ-¢ß?ÞP  f°À<¾1›clj<‘{;/±ò38ë¥òXWæV³z¦Æv]•Ž!ÑJª ^Kp¹ªU'h÷[2ÓêOnß_T˱övéyh€Âμ¢ÅËNŒ¢ü"!¼P| +ùƒ ´´§?6p™árÓ,…¸¬ ÿ$fFŒ=bH=$Vé]ÅÖbª[‹á¶Œß”d•Yg—åO¢¨ã©^ÞîÒr² Ö=Ƙ¼Ixï­ í¿1i(6˜tÊki{CŒ…°\ — ¼PK+w ²ïÅÐ3šÇU++'µq¹<ÂyÙ¼«µÍ|†9?Մ¼OŽc'íÏÁK™]hÚe¾ô‚Ž›ãØÉ ÑäB1õÍ3o¼’…ÁÎw”+oýÀ2ê6q”L)ÞËÊïÇKÈ¥àÆ«ëü¬šu<ò[ƒÉ Î0Ì5…‡´Ä˜,ɺ1*µÖõ%Zˆw®5ËÆG{ûó 0²D¤°¤#{m—㎬J»î Պê_ïFº¸r˜?hîwm«`§Õ"_–Pžåe­٘5çŒÕµ¤ÏñP­¤“~Õ;šLpºÝ Íf5fl-ž¾NHÓY)q¡…R^œ.F/φ$µ3V0ÎweäûåX¥[Æ nƒÆx¢ëœýÃ0»p;GÝrS¬‡È:B"áž»„ÁÍÀláÿFB©o +endstream +endobj +1506 0 obj << +/Type /FontDescriptor +/FontName /JUWVIE+NimbusMonL-Bold +/Flags 4 +/FontBBox [-43 -278 681 871] +/Ascent 623 +/CapHeight 552 +/Descent -126 +/ItalicAngle 0 +/StemV 101 +/XHeight 439 +/CharSet (/A/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/W/X/a/b/bracketleft/bracketright/c/comma/d/e/eight/equal/f/four/g/i/j/l/m/n/o/one/p/parenleft/parenright/percent/period/r/s/six/t/three/two/u/underscore/v/w/x) +/FontFile 1505 0 R +>> endobj +1507 0 obj << +/Length1 1612 +/Length2 18979 +/Length3 0 +/Length 19819 +/Filter /FlateDecode +>> +stream +x^¬·ctf]°.ÛvÞØNGtìtlëmulÛ¶ítlÛ¶tœÜþ¾}ÎÙgì{îŸs÷5ƚU5Ÿzªžšs¬EA"¯Ä hlk³µqb`adæȚ[:;þ´µ‘aPš:þ¿ÁQP;+–“א”P‹Ëª+èèøæ/ö?ÝùÏ:ÿ[õvvVîÿî¶ý7êq0wrZ™0±°þÍiäô7·©¹ Ó?ƒ"icb `aþ»±³Ýÿô¹+ý÷š ÆÆ)žÏ6÷Å3»)ÚÑ,+ªîdàUÁ/2šÞ|ÔMÊNºC&ÝÄ´sµHÏë™mMfÕÃÝ EÝâw(©6˜ë'_2—|_ ò?vHÞF)õ1˜¿QAÐj ÎÎ)NžþP Œ vßBöàÓeÇÀR|7ÀöN:#Itr×wxh0ú„|uátÝý®€R ÎxžØùkĉøZcP°ÉBp(ԟ3¿Ù‡"mVÁ'{À©L)‹u´(ϗxI¬‰fª¯‘ùv wýÛKñf§¥ÁCgÛ’>¦Å”cã0ú‡[é[û¾M“pÏR8Ç^+ÆÉJÆe[îf¸Þçw^␼iDÏ{ ‚1o¢&…Ñ¥ød×å‚`÷U† ¾ÁêõÑ8ë +^4áî€Ø¹n_ñˆÊH +Ë%_^ÿùoÞ7 RÏSÌIęÍ:FaE“ÃÙYœ¾wŽ- ˆ‚1;bo*¿skű^•ø;‚ËÎKi2Ê℩wÉ/x|j3¼¦£†JTŽ"I~ Ù,p¹Âï#…qq¼‡Þd‹ª +‚:v‡Þµ+²ýÅ*sµû¥8íçïA†Ê{ˆFm¦ßá }W"à ¶Ý× Dtš‹ØKÔêÊ¿~I:Ÿ…«…÷ۉŒ£'媯îN,asã1Ñþ´G!ØàM?tQkp™žöærÂ8ÈÅ~Iü^Ö_.zªâÇhéçXÙ¡«7s”0ÛºóŸeŸiTbÑèëFnNJÛ<>9œ£ÄùÌ Oá ©D +âyTf8lÍöL©I®iNîBªÝôÂQ­ëiÑÒ+ 1‰#¯âHmÑõ/œn—•p“Ucâ$?¦â;ÚA +Ì[ùn‰ä^3IxkÚæÍ°œÜìoÈ2O„îN6S^­¢h:0Lß%^—n\£8?mȍ:ûQpÙõ™ƒÁ|[†ùQŸI..ÿb ™çåº=_ÞéÞÑwÚÎ\*64qxú+õªÌk|V=Ãõ½.«ö.²|ÀCò_OÔ½O™îf±¬²–ö&õæuNmÑ#Ó÷ßÕ3ûç×n+Š4I˙4žçƒ à?, ݅„N37Ï¢Š-B´%)½$&ª ô•È´¤«•Šã°'¹ÚE¶'Bþ •fÍL7ÎÜ4F ¼‚,­Æ†}B5…FûO7~’ +‡±_;É.„qÛ1ë ã¬ñk0€{"Oö"áÇ°Œ`½ `ÍG¿›Œ\S+ké“Øyt%xsŽƒœ?+8'ìú‚æW orw;HfHÿÄ D¼±àG@ڊy‚7êŒÂ/°Í›¸“ˆe®Eý¹ÕÔ½ÂS5$„ÔÔB[“™ºÊÑk.D8j6w³•C¾½—·§2Èõn-ï³ú6”¸; ¬ÅgÍgIçÂf–‚*\·Ï+ù¹©ŠX}K¸Õ$¸Ðy›¡4nÜ{/„©¾Ü´Æ„ê>´a ·æ xÊùv·¨¸ýå,]¥±-ªÎÈSêm¹ FQ? ¤¤Ð÷-¿ ‚Ñ¥-÷Kæ¹eJ•â“s‘!ÍÄЋ¶‚ú³P¦ùjuüyOF}¹ ¬®ä•Â/ +S›Ã,‹Ïò^Ð2ᎽÍUI€A=×7$‘çîOåÓ6ÿÚb%úñcåW̯ +¬!‰-‚ÌÈ92¤=#ž!ì$i¯lÃû”µ+Ñhý#ÈðÍrŒ35®P,:Sׁ¦¦î‘'Ý+‡$ùém¯þ§µÂÓvr؝½¯ÄîíÃKo ›yávH_:愘ŽãðÅ®euÅ oÞrµW!“FÄö¢-(³~A‹ÝAÛ_B«›…Âp1¶Ò¶V s *+«Ó„wf;b…CÒãËN °P0y=÷Y"í«¹º}ÃMgÒI9°NJžë­þá0 Ííýꙭz›ÏEz"ºû‚ÙãY½¼éÌ¢¯ŠÆÁð6,0ÊÓZ/+¶®ñwª{ãÁ… ø~Èùê®Ñö’øf€2ðoeNj&òzìôöKëZÖɘ›&ÛdØ¢Èm~žÐaï/€–ýÌ!³¹™‘öÞÆ:‡i™M5¼þ mNž‘‡©þêžÅq UÉÓpØc´"‰m°bŽñ¯‡±¢lÕq¢¶WzŸˆ/փ ͌ò¤§ªJ—‚Äýs©…\°ÇsßT —fÙ¬}—:°«›:G]‚»;jv¼8S¢™Ñ?ùÜ4Ç1Yœ¦“ø¸¾]MPÜÕdý[lö½NØgc‘ó€·ÎˆÇá7‘CÑK` +©ÃŠÑÖi¬ ºñóŸÛê`!HòÆJ™,oÖ"]+‚P6=ºzR}Ã`— Ï:þ}6 Ũ‡¾üàÂZŸ”Ÿd1–Õ³S“ɪ za£°ï­mW/øM7¤€ ”bÂñÖ«R±Ï‰!+Ûöòg*$¨Â€€¸åv¸‚y-*ÿo_/%Ð'k"=n+ÑÑõM{ϓ1$ì ê¤Xd„«@òš”6JC&lˆ= +Î²OoP‘šo¬“¬ûŒú ½l3¬ï`_áa^ÒÒÚßÒ­Ê#FM,‘Sqdߛ²”ä +d„"špS¢ã6ü÷BRuòª³l#¿Cròe‰ðÜ$…±üÄ3otp¹iGwT©W…±Lá·Ó?8b6XÞiiS7bÈ~“™Ä®¤ìÁÖ A„?Tq†ªƒ +¨ÆÅù6H|X]5­EKógU¬ß1uQšx¨ˆÉ†”Rì . 6D7>²xC½ÐÓÙ¶YÆy„7OÄ_Š¥…#i!9\Ç)ÁÎv2§ý(²Ô·­Úûĺ?{R=å¦éˆJG'"|½ËÓV6W°ò£<· +üˆÄèkóˆ¹M»7ä‰õp[^(DuòíÉفMzªàÐd:VD‘k@/½–Þku!OŒôAó¹WlZÖCd'‡ñdBöÏ/ué~ n½èÛ6jû`ÐYpifȍ±„¦…\×Èw<þno‰x’‘HªUÅùþò±½ñÉ Má,Ž}ºµ")[»+öˆÿ£HJ¾¨ø Þ˜Ú2X_rä‹ÑMðMj`³ˆÁÞñH \à™ýW3UPe´]飾š¤2X¯Æ=Ágk©U¥ÅÄGý»à{@¼0˜ø/y¢ÅiŋŒ·ÃY:nbÉj'j Ý ßmMâ\¨Ðïk"âÞ¦D!'Lê¯ Lï(½¨ã.Ç°94¿,LK8e)QrœÑ \¢ŸQ£Æœèc+ىh•©¸ÆC<ž¼é Fo›4SµÅOò5ÝHã4mò;Q†5à0ºÀ&u¥ì£_¦ì3NöZó©IÑåÁ’Ã4UYairŸcDP ÿÞÅÀs…€Å°˜³éŸÆ¦¦¬h+ãDq±o¤®XK¾ æñLÊ +¿‡¦× +CcÌÖÞ3“³¢kr×áñ»Îˆûæō›™Ò”fzV]0ϗ5bõ“ÉŸ Úvr¢ü+ܱ#ÜcŸ«>¡~:a&Ρ‹¹¿¸å,3†¤*±Oy+è(jeõ$O28¯tìÕҮփ.ʦuL¯#¢sxÓI £´=Ç9,fr©›ÔÍØ&º®7ÙD}¹ŠDK•„A¸äó XÝÀc]ClɱÁÖoiåØ[ÍmÊf¡å…e}w%ĸ¹£ +t?Ɗa’…Œu5C­ß¢SR¿fË3ììüÍƚ€ˆ„ÿ1ýí¼|NÏ· Þ}𵊼DbÕDÁ5 +áÔ!¬Ã®1A šE°i_¯­uõü{W›ÏÓÖ5ÓDÞÄøU:ÐÞj²Åµëlê;P ƒ4®ý½ ºÂý—¹늚wÛ´°wîy.ù±ó'¨<^´»ÿœ‰žfVÅxV²CÌÇ*Èd*Æ´ە[ìøív/±½€pmڙjMaúfߚIBÕ7B‘AIDC_]>+¶ÀyNßÓ{q{ΰdX®°¬ðqö¥{ö8ëb4«áér»$ê]¬Ð Æïäù£Íâ\n`£¼99äè²^!»TïڕܵŸo]1Jíç‹Ô4R|t=ZlÑÜ¥n‰oâ·Ú÷7®‹Ñõð¤®ÕU„”ù䐋v¦‘Z»ÐÛs°mªñWÖëŽû¨ízޘkü)T´îž-Ÿ8b|Xcƒ×g«ünƒkuñºF·Oê¾i vW$á2]˜vÓeM`G¶ NñÀ&-ûXæÛzÙô‘‘¿71æ 0´9õK°çVÞÔ§Ù°ëÛ¸\܁÷—cmŸyðì˜:݌ºã軫ý¬{ÖÀ».ßê´«ñ~xévtÅã茥QAT9­³Jÿs*"v0Ž¾7»-Ú}Uª+\5å÷¶O«w²ôÜlËkÌêÇuò†IQ  &³k=>¬¦eµ¸vhæ*;AÂB^ª8¬ÞktôÃ=QÉÆN×{Ü\]¼0ÈñÑ;ÞÁžÃ÷•šhJÖ\ý£0b:×߄ùOklØ|õ(ÿþƒ€c6ñ/õ<ñ„’\W—,ýÍÊÏiÌðHžXÒ[Ñ÷òÎ6¸[Ï=.Ø& }ÓQ®Uɕ.nR’‘Þ! dÅa‚¢ÔhŒ qr¶ç+ ‡5½ä‰«J„¢1]ß+> ÓÀì*ëˆÇ¤¾èfمD‘äh%'8žžöXm˜ì:=̌%¹&ã1úý ÇÔÝ/öF˵rx–/v?ò¶²`¦š|Î',èÐ3;tÐF —„˜ZbZíuleXÒéžäØM#‚· lF!U߃,TO¢-S +`€•5ÇìÏ3ɒS"a’†Þ8‚¹Ê†Z+1 •þXÝTðòjÇâ°«sLF½ìGF~_Ür„aöCĦ#¨ÑvêÂÙ H?‹¬ðì)^g~ LG =Ô|æR­£:îœŚSöñ¨Hè×ãcvm[éYÐyZ¦É½ÆìÅ°×'†«Ü²e +ó©Ö…¹ÅµêKÙº?³ôáʂ%;£6žã/a=fØ-ôU<[֗ FÔß©µ™?±Â—¤úP²u¹Š#ËG¤š„ˆjj®ÀRáŸWÞíñ@ВŒ¯'åܒё\Þ&¬,–ŒQ©5Ô÷g½Âô§ÆÁ¡"…·Ó¶,S].äòÑ¢²6joáJÓKôHGEÔ!dðŽ&¡û¦«Öjí³'"5Üõ[®JÇ5QF(»f[I²Ä~:äv©WûnÙl‡XAlÒvŽ Rüx¿îQ¡ Û*ŒK†t×µ¯”{ëO€ž"N\ètk–ڏ ’W¶ F猱óÒ¦1†qºýýMò¥À‚«®Q㱓,¥Èñkt[Qó§lš*N‘Ÿ„™—vb6FOH™a`‘}QAð{â8ýà«O¼yš yÀéÀ­_C;×$¸…èO6å”G>àOÛ½hрÏßLû2•ò]œ6B­/Læ2r¾ÚÆd0í"ѧ ±¹¶NYá„ P¢&“8Wî>ïP Ñ«ŸîWŒ‡k•²zŒ˜¥ý¨×üºyyüõ¡•j”žöp;4Æ·±xžò¥ìû&ÜÙՆJ”†Z¿Ñ‡d@¬8ÉãB¢ŸÞUMï$ß=‹ŒwA%” �ìNc©Šz‡lg~ùüçÛ4‚åhÎv‹œ¤ûˆr±³Î»/‚ÕZÚAâênô»©âíÑ9‹.w2Ôæg*[ŒÖ %ûÜ£Ú\î¯F½¾#hÖAâ~Ÿë׉ê¼ Œj"RRîé~.ÕWk·.„™·•%˜äóœ;‰R¸{BTB>'N!—PahÿÝÓTõ|ÎTÅ1ˆ­î_°¤u8�! �&WÂX†ê`mþ§Šü¨R«S<+p;*vsNÑ/`à8DŠOÄù[nŸ*®#¹ÒŠ™ƒ_¨2ÆÊ2É7qÉ:5åH׺ÁösêÌßÐT}2VßT¤»¬×a…f7‚£ÉQƒŽG˜}XÆ2aDy-b¾u/“Â)þ`‘èj~Ïí[ԗhqփò,fÉ £CZn×aØDKsŽk·–Á¨Çƒq¼’ܺ÷2yç©itæ]s}k] Úä콅ÉïæíøDöH5Dò„fÒÞ…_Ò³-;¦¹jì®­Ä1_»c?(Óêép¼áØrÑЙÎ_@žñ† -ÓDÚohy§†÷Àj\+ÒTn’åM†´UM®ô vƒÓî+<½Äç$ÚK?"ŒPˆéåw ‘ÌLr-\ÝÈD¬(vµyl±,ï $Uf¾»qÀ¨rËßM{Q8¤ŠÝGÈÍD*í` QEwáVb4 +6 f6Æ'Ô¯~S$-h!7•j~ûÍ.Úêö’a˜uà­¸o’°! Ÿ3†r¿ † +Ì\Ÿ‚¼qäy±x3ž ÄgÚçç{¤¤?ñPw|‚OÀór æk¯ü8Џ5ô[lל˜ ½¬—êîbὙ¤©Œ››wrò­ª»f¨ÌPZCeo¹¦œEÚQ :“f9ä¶òkçÄר£Àò3q¾fæ?¸!&܊g0¿ì™ 2ë±þ9œ±Óæ,jÄÔ_"WˆÀ“ŸÈ 9ŠÖÒ .\²áÁo‹w–+Ü/0]•,{yiÀ c'Ϩ•Q•+^âXC®í!_‘~ªð"wÞ-©áÚ´º*p"¢/$»iŽ¨|¹BÐ¥P¸²ê +=N[»Pî`‚®­¢ÑgÕØà‚+ÄúÉ[¯,‡Ûß-›ñïk¢ÞH ±>Yã9c&'¢xt[ä$æ­š}òŽ–sÿéô^´d'slºõFcÌâc ¥Ù¯DÎhNCԁ9Ɋ¨j™<…&ɸY¢ÿ )0{ ÑøZµ?ѱáË÷ÁWÐ}ÎÙ.¸N¡fŒL×iË/¹ºïNò÷71uh8cMM+ü¯L§ëïurÿ1×_¹À¤DڃI#,Ôo¡+­z ö +ŒaBE‹óÚh·À¹á8bap…ôÖÆ´Pá>¿.Yb.$|ö•² Ò-g nxñiyÊÙåôQv€Ø ¾-³C}KBšî¼êýJ£#úmÆYó1Á°×žUºQ\¼/Î9ÛçŠß¯äe +øY½Økòx‚v«xAå§5Tþ­<_tÄÛ²üw‡Ÿr„V|ȚDÉܽlq+m爴?@Í«i1z{üÁ¬"˂.lªa7>åýjm+Z@ótçT‚âE×Â+1&¿ü×î’¦•–/ÜmX[‹[ÇÇs$Hh(pÏê ©ð‘2wBq[OÔÖ¢ð¶Ÿÿ¸Y/È¥Ñ5Ñ8„J)lʓ\ä&›¿h€26vCã›\{ªŠH¾rsD¥é®Ð@Þ1–ñò›šE +ÒV>bú½”Iò“ 1ÑzG–³4Jsÿë‰ß²§ß/wwª½C]¢Í^s+ÚSSxkþX—Q³+zRR"ÁIc©p'vŽÓÜ-è9´(ÀÀ;âõ¯â—kgvx&BZÇþѹ‘¯XøÖ֎@x°lç·ìX¶™Q8Ð@ÔÑÀYñóž0…øt î´ÑڅâŠÞTb¾È¢¾nۖÎi. óîl¢$á84’òÊá‡Ûýd¼%®{çéï€Æ&B<¸ý)4HÓf%‡(—x`/o×9â)”Øq…#’.Â-š¨Éo¬ ìÔLÅçÝ@ 02öh-Q€0i|V0ë@'ºUV–¨}xh{§ýšaM;ɄX+´©e²¹Nq[F7gƒó—\kWb΄4„§K(ñ‘¦ø™ª‚þ·È”_ÒçSUgª~Ò!æÛíW­¿JL×ÌëË¿,ä›K@,Zä"f.ŒÍPÓZîÛ?Û:‘:ñÜUd#ïÃÌUçÜæÀ +M<Þ,‡ÚB~DÿÉ҂v-‘/™ +¾_ "¸üˆ¿,ÿ=4DaæpO|G½èifÉÕ £3F6¬RT‘m‚Å|DHÈi!&fI +òÇâküƒÐòº©.ƒ;50Z5QuéÑÿVœ‡¾²-å{+É«aìNïQ2+’ÜҔñ2üŽ¯‰µ¶å«ñðÍþæðÕú õü^ÛÄô'+ýø¼xûáŽHŹÚ^ù!û´†ìø+MÒ ŽïuÌgºß þiÙÓ~L±#$b¥¶z%0©\&ÖØƤyÆö_ÿN>ámB…›ã\e k‘&êŽD­Ùèr³Õ+R4ökCÄ(´PnQÛzŽû—Ž@³¿“²oO?xHôü7|Zµùý‰sžçÎ\+ϗ7}õ ®°,“_ÃZ3^l=\1Rmº[㭆ëþ›L*ÀŒÙ„K¸ÈÅ9ÑmáènáöÀá3ÿ¦9Ù2Žñ€©—ñX~g´'H¾Ý +WZq“ÔŸ8®^ÙxA5»˜­U+ü ÁGE³Ú/yð;eÑæQë6ãSÞ\Zcêô9Ò Ûö®t»Òs@Ž÷2ÚzL„q77ez·…ð‡3ž¥Wú§ÙpìënSaŸ2õÄ棌Ú|¿ÿ R§0ÔÞê¬e9x%qüç»Õ‡†bn?†š”4AÝ~üÆjPŒ ²ùQ²VùS*´Æ^ÍïF(¿‹á¾œÏ×ù[ìÕ­NÎf¶©Ž’Ÿ ¯±Z°ÈÓî^šQƒDPWm3Ȗ 8DL@Ñ÷KÖÌa¤qÍý³.¿a¾¼?7^ï{v*#ïbêkõ´E?»"¼RþT{x1›<¨#ß®×óW`[ùn†»~ÜI¼Da-‰ý(ªV–"§Ø¾FC?." Á È&Šv»àUÔ퀗ú¡=¾út«'IÖ± ÞË{zû8øó8‰€¦2V\5 EWØú 8;Á¨\8;µÐÕ¦r1 [RÊÃ¥ïä)£š\ëŽuˆo^wÌìl͏{nØ\¨HDòïì6¨åLØÛ%³Ú…¢õ¬)¶øfà`¤Q–¥ò$Ö zýÜvÂïY%õ`™_’NlÓB9 W.hªÙуóâ–Òaf¬aXÚhZê–x¿ÙO¸6!i¼rÏh¿!åÈ8÷=챔؄Ò2¯²±ëxXœÙ/,Fò7&ÎVó <1l}·éðmÊ7(ñÕɂQW„'´ç’o¾€lõ3Á­TæTJ†LÛLbö‡ôYáèVc¯î˜ÞdõJ¼oô3 MúÞëÛAæGñdÓªÈ}´f½ÕHÝÍrð¼÷I—í!ƒæçîљ´Þà¤#AP{N¼q�! �Šôð’ ôYë/tÑ÷e©¶¡1qU×:¡cMµé¿œºwLÒÀáºB&cbŠàŠ³€ˆ@fËBgøsK”°I”KР´cffi·*èûBxùª”ÎÀѼp‘x*뇤w9HH«QôTÀåÊ+¼¡’¨ r+Óa©dûôÆè¥^¬—TAö¼»ïrlžQ~Š.¢b¿QÀËnM…ۤş]'óÚj²y¯n”À ÙõÀ"Tpmå»ÌܛÓ6˜ÏBº×ݐ75-?Ä_èVKD¯•ìyÆ>ÑLO‡¿˜PÎkë2ñæg=ò)Ӊö]¼Býǽ±nٞ—ϔٷ‘Ðåº5H–¢qšø·ë_àCÔp ”&¶~!ô®)ØÇjÿ±ÒdÍMœCåLÕì˜~ýÔÙ@“â¾Ež?«ÌL³0“dO³×Úá1éï<®˜„Á.V%Ñ$Æ9sÆÐrž0]Þª³2. í8‚æBàÒÞÔ¢9kHn.Tüý‰ï.JGHÂ>…Œ‰ÝÜceè°2÷ áwüà{D® å ¥=ѽvL¯–LPäã"»>ÞÁ‚ºí­2;¹S£SxfWÍ{:'0, +l;§•5´<«ß5”°àlP õ?íbIíB?Wëy· X"–cŽÙ³U|¤ Eñý¢ô)Kû®¸€fi€°ú³Llw¾‡´¶W at 5grö÷eíÍx\ñ) $˜™®Š Õä“)˜cI¥“>€è6d³;U¨¬\ šò‚Ó+·ÝŸ#ÒÆ]ör{t ©‘»WI¼œ¥‡’(fÙ8~W 'Â&"i«.Ì{‘O +E«P^Ém‘sø +]ÍЗ£-s‰Ðž‚_2߬,#kI¯µzøÆ¥ S¡Màê ¦v4–Ü~|=®5Þxփ7ÍK4qåBÃC9åÜÖÑ)'sw2@@²è#Únp¡4ìHÂ÷Xð°Ì à‘u÷m´«¬ö£T†Ÿ[x˜´BÇ[»o½kMô·BÑÚ²þ|°~|Qc_™Rá@O¢Ö#§«Ü#œ‘ƒåB§ ¯?N?Véí¥²cËr€€f>^At•­=OE…}½„_=ê¬C+o]†B½>Ð4Á<kaŽkeñ¼hçå\+”yç»/òk8‡4”ÙÈß7«Ëþ’zŽxRᎵÜT¡5 *HŸðʓ3Œ­„{˜¯Ajéç‹‹ ›'¡cí¶AºÂ‡YÄìDȘú»ÀÉU¹qi¸Å̶:ßÏGßâÑïAf\°0RkƍÎ@lU-i¼Æa1%ßv¿bjQA}|‰~E-ãŠà6Ù |z$Âت¹V•á²ÑÑÜê-kY²`\œµš2!¿½)Lè<âRóøï·ÚÚjȋf>öx)Øã?¨Í¯cÓK(-»7ó;ªUún¨Dk|€p.†®>ð† ˶ؿ÷u¸÷jÚ î!kéB³xEªþ _®©K·çBnU\þÆéjà)ìt©+Ý^ö$1¼‚ƒ¹C‰˜Sê—&«Ô€lnâyDô‹Ä]>³É¹ ±DG›W [èñ³GÿlC°ÖËµé{v5Hu4snDƒ†›hµ×ùÐì}é¬Ql6Þe–bA©¸;|îüSIþŠØ=¨#7ñ)囪&òÉ=žZRôò]ïÂ6DPž¿Ê<ñ:2ZC¡3ÄMy+CVýÙég�! �¬Dôs“3ç‘殈OŸ_„÷Þ:šÌ*C.ÊdwÙ¸§ìY‘Ô™BEìÉòÌv¤MÏT¹¾{Êâ"/ÉšÓ}RߔvŠ£lGï'©X< æñ;d¡ùSfÝ0$`Kñå´ìÄÀ‰&CqŠÑT@Èw¤³Êó5¯?¼µêÝѤÜË Ùò €ÖV¿Ð”ϐáa=»)dˆR†Euo«4—Û‰ü´z²dAHYæ´%'p +ó‰B- +ì Šjuɵ1V°ƒØ3ܐ§³‰ó/D®ízð+n íÂÜÉÑI)W|s3†Ì¯ÂÜæó>”Qò÷ãâ±èºå¬vÍÏ?s݉ÐÏ'öè‡K‹rýy7Äçx´ú;P‹+ÞKÓÆ/ÿfD2óìî¡¢™0kÿ3v:ô‚‰„„W™5ñ¿}Üù^ÔcTç á‡àˆÀÉÏN–dï¯g[:ç\‘½<¾4ˆN··CŸŽ*åhQ“µ_r­³º „'ªҘ(±±îAàà+\í¾Á¶‘)ŠþSù)@$ 5Î=ƒƒ_ÚµÃV¡'GE÷@ìzÍVýB¾¥Óm}Aõ5kp´R4ö`¡@zweÈ eŒ®¢ ›Ê‚žzŠ/é ± +3bLôÜÚçRýEôZ¿G¼¡á-T-ç.»öNRôù‹#äÃæց&„t2†9:]ï +$¼“ãæf½_Å ø›ì‚Þ¸×Ṃ1Xó¨µ!ßT£Áûg"ø1ØÖæ/)¡©•?ٙT„Ž^óÐqV?\¯´¤ hºðÜ +vî±UîºÂ~çëGš&¸[FÍmóòûp|ݵ¯ 4ö®–1ÃjÌ¿Sh>í¹øòOm5â,yèÿp¡´Š-†ÄÎÌÌloTù8ðdBT3Ÿ #skʸ›K¤Þ|‹/%úC!ô5¼]u³X"c²ì¯W®Ó®èFéd÷^g-ÕÔ«ì»P©¼ ç¶/é cˆ›±©Ñ^SEX /õDžݮŽcu”Íl÷Ë_¯w5Pý+Js6ð}éË:ö6ý±gÅ l~¿A÷ų¿äžD×ö‚¿µ+ý`@yWšb·£Ö²"Oœ ÿŸ]0W{Ÿ <ôs†Ã7¦Hl@ˆôu?=)*’œ±g³Œò¼î«¡Ål„à昤 Oõò7þĬ×á(Î#I›\B‹gR°Xˆƒ~YÙePÞ;½¨È $ûz$t¾ÁÛ:DŠký†«Ð@Úôl‹Ùû ‚ ƒ#ñ8èÅ·îcµz''”­™É! ,KH÷^S”WÝ»Laù £ ¶a{ÇO£ÑÖ«¼é—úè-‡ÂÛÄöpþÑEƒ+[‚ҊóÈXS'OÀҘ»œF°<ôϾ¥lœGJÇ[*ŠûQ¶{² ‡èu4iþ²Üù¡+! Å¥rú¶Ûn7µQl6±²^7…Ú¢,ÛСâòR_æ|WÃm2Ys“VGê8!Ë#áí¼UÌË_§DWGº§¶œ^_­bÀæµûÒÒÄ(öíÓ)!6¦yÊT¼dÇ`·ÉE²è¦6œayb¯Íž‚9uT¿ÓèÉ˚ͣÎ!‡óþ’T¨FªæGêÃnÐ&°ù€È§k8êy^”XÞ8Œ~?—wzÃn +^Ûµ²ôåõù4OU/.pó˜üÿÔþjIØ×]>¯´Î1Ƃyoíª?§ò_Ûq•1›SÃ\¶9Ï[ ®­þއ=šÑùM#ªÃ»™)—1¾¥È˜nô«Lk~8N“–þ ¡c³‚ÊÙ#FmæG¥9ŒŸ•Òˆ9‰©~–´Šz-‰oÉmqNtgÉNÉjx`£ñ‚òÖ÷Ǖ°Ç£ ž+byùnr£ŒÁó+UIÒß×®èÕÕb “x¯®Ø\ÕÈ¿ºiûj}ñòM9†™u•k‚Á ÛċªÓ£«tÖ¼¸y?Ë©w…i3eŽÍÿ%éIÂw™À¼˜öíž& -,@¦¨.íØhémÜ¥…"¹ZE”¨˜Ãªi¯2]c®§ý÷H¹§ÊÊî!Å^màlÛ=ÓYH¥‹HaŽâÎÅÏÎZy0ÿ6¯ýƒÀqp×›>¨0„v‰Ÿý{ ò]:.szÄ<"{Wú8ÊPñxãÜÔ¼vÙfhý‡'£†õÏ>Yá2þ³{ñçSÙE)ùÐp0\B™’ŸtÑ Ïoõ½Nžt@`í~‹î|SÄ>¨ìSU|'Íb�! �3‰c´´j"ÃÃ)´ç8(c@6¼X™òµª˜Õ¹ lü—À‘AŒ®‡¸ëè� �~Äl——-víà"_6ÏoèÖ÷FǞ¤ ³Gùt[&ícÚÌ#TÑÁ˜Ó(/ßÊ\”%åÅwXDñ`£E‰<²Plçߦ߫H˜)Œ„pmY85ÏSÈ­KCòµP$‘XÅqðoÄê§W!h´0Ö″ Ý>ÀLjcô‘Ùm zkòꝛåôì÷02YöõțàJºêE çqh-|ܵ5Õ岈¥’ 1_Ÿß5š }«º`a²»gtF+4qLÅ´ + ƅ®QêÎIÏ6äM SYÙ9‰7½Hÿ%Ö»ÕА—Á,p,Œ_6234¿¹Ó òÈ Ç;ÅV9¤;½¨Ø¼uˆŒ¥Šh¸ˆ»Z٘n™s«¡©Ü;6:ÖYÐ<±Âî‹UéPeÐñŽ˜ñv5ó0mçœxüÌy÷áaõ›<Ù®}éñ¶ +{¡\Û".AvmWI¡Êc ÈÎaAq4«9ö¦…Ãá¿ Q*qèd{O‡`‡³àpӕ¢r¦.¿ø “ÒÞ;2MáŸM²_u¹1ȁ+ Ünµ/î;D°Ç1블G1šÉ§)IßX î@iÛ1œ,Vªœ´8(9žn´û†rŒcâ‡â +|¸52£îeY3¤†éËNJãËîÍØ.Å:Z¨#Ë ˜ƒÏ|‚u{ëõÚٝ¢Õ‹î—´E¥ $¿‹m÷¼IÞ8¨ëš1PJ?ê94VÅbRf²/º"bËoÉØX¶‘?œ'SýþÄ Ù"ð:ÜuóËciuðrhvWNøI€H•S°]öíÂêw°YÑV+Úú˜ Ê+Ëû òэÒ}wvhç4Ռj¶¾ŒšÏºZ¾b—„ö># +endstream +endobj +1508 0 obj << +/Type /FontDescriptor +/FontName /FEUGUV+NimbusMonL-Regu +/Flags 4 +/FontBBox [-12 -237 650 811] +/Ascent 625 +/CapHeight 557 +/Descent -147 +/ItalicAngle 0 +/StemV 41 +/XHeight 426 +/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/at/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) +/FontFile 1507 0 R +>> endobj +1509 0 obj << +/Length1 1630 +/Length2 4947 +/Length3 0 +/Length 5755 +/Filter /FlateDecode +>> +stream +x^­Ty<Ôkû&[¶’ìÄÙ×±5‘%K–²„Ș c†™±oٗٗ’%KÖ¬…²•%’-BˆY“m0ôõž÷¼Ÿó;½ïùcæó}î빯{¹îçà5¹!¡C;ÀuÐ(œHRZ0B¸9xb¯¡Q†×áNžÆH@äi®`àÒ‚ààʀ%hÁ¡€Œ gæëþÆòöïà ¦&Úð—P+½êíîzݺIÑþ…Sìá=jkPê2o +Î׳] =¦8ð{Ï©˜†1”“I®¤<‹ ìÁñlX½Ö¨÷'×èŠç7¸° d™?|…+½‘Ë"Óû8ïϘN½È@Gôæ[¾¼S#˜ç»Ðã,x–„’FNìàÄer’‡:´= +d£5ÞEÜãmétì³Z˜/Ob?Fsž¾­r¿, ºyV=ã:vÛ±ŽÕàÜúñ½Á9eBÍõ…9ê!uÜõT[T€è°ù¼×êá©kŸ^°Žšzœøø �ÉCąí“~±MnsÜy±®käS²÷ø[Œ³“Ä µ™ä÷2î¹~¶íwìÃ܏óPðî³X›ƒÙ8Ò6'uM> W³þRS߶ܱ·üòéUÉ2‰¢ÙÊ™fY6ï9NÅʳò£_a<ŠÀA2³ F;©¤†9Cßòo¦+žß"`$,¸è6‡vïï¿+Œ{ÌÃZ·ªpʓ³d|˜÷Ü[ËLï1éw õùœŽt jšõ#·â?9›Ýkr؂°ÉÌL]eeMŠ8,?_~óÀ«:6î6lí#?’%·*y5™cñhñh§Ìös3©¨Aý¹º± +àöÓp¥V+ð4¥LH$Ûb_h㠕ÁBûk{Bü÷ õ¥ ò J,æTíù@ SÞ§ó²qÑ“· …ÕsøUÃ=@ë›c%´ÕVÖ¾] +,Ø•Ë?%4oW¤<“£2Ê2´)ɼVÏw !êmÙ=Þ²\-Wݜ:ï­ZˆìO]Hú-‰­;)MrñFJÊ¿µöþòŽÑ­³5¸äÇÕ2W¨¼ä}ʘjbégµŒéà.3ÝÆõWqº ?âUŸ¾á/+…Ånzå×±5³k£iíq1¸eQ‘¡”vWúé¬Ô̳uv*TW[¨8Æ-ûPSZ•ø@1¥`ñJÙÄ$Í®/S5 ;¿»ÄI[P»ÈµìP-> +7xˆ|;Ê©ûý³ÙŠziÕÁJx¯/¤p¨mý^mh£Á…ïWª ®çOӕ'n\oe–Y‰úˆÕ9˜4áÀMÒ%Œ¶¥ . R2+$ +ø#¿>1ˆÐµ»|þ~F†Os¶­Š5hvÍ«×qÃñC·bg}Á%¿Ue'‹åñ,c›êՏä»üz;Ÿ_Ø/+ê¬náÜWá¡IlS¯^T|m¹šœþm¹(f¥óaö[¼jùðw6{ÆÚyŽÇêË)ڇÜsd¢£Ù1¶‰å¾=Àìô®F&Y‰+n:ž’ná˜öL¥ìI_b”±²´$îÝÚ~ôÙÎU 6nõ³½5ËO ‚)ðDÿÚŚ.+$‘\¤(~@‰ žç”'aõ&ô¼ˆ3¦u©íÓ%&²k åpŽçÊIT`ìg2ª•¥ÖØ`y=M4xó+׋õj£Tz3MÌ­¤pÏyÆ÷â›öS7? څ»ÖÂe éøA.#kßË_Ìõðo.WÚ_Õ7ZïJ5£ÚËTå÷®¿÷av‚.†P¿©µîÀÒxq=YK«šœFJ¡]~L§’XÎjΧf/|bzÙ5ì½S*¢W}p³n—[¯hôŸ¡ûg² Œ±ŽØtUÈ6‡…½` ³S0û$´ÈÍ~ÏÂFd'Toò“Ú$îq–d©XXùld±ÔMÿR^-ÙݝÂ|õ—r›ªYñ “ÁZzۼ‹¡&¼A®2¤p°æ.bGÇÒ¬I.™¸¾#ÊXûh¶ÒµQSß«.1|²p!3ØÀ)DÈ2o#Gv󃷋%û­V¸¤“òËÝ4Ì ›š¢˜‰¶[øÕüšXÂjÚÝIEæFÊX! fòí¦ÅS‹=ö Ô¥±xJù++ðx¼ƒ’ø,K5~%͈‰ˆ”Zmq(w‘B}Ó)š©kò  ¥¡áð ÝnÚRª© £Ïÿ9ía÷™�! �qÍґ[1NߞG¾m˜c øܪUï$¨œÔ-‰oœÑ˜á4ˆÔ$DK§ç´e»Ï\§šp双9Çyà*ÁÀ¡¯å@•µirö[©‰Ü¨Û3~+ TÊX¯5ÊmÎU3²s«µ§ïÝø~Uƒ˜A'ŠRç‹×Œ@Gę¨Hgnžìl:y#Dž<†~›H–RŠ7Iµ[_m!*¹–ï¿2xåÿ¶÷Ù²1Gù¢O›+ãy¹ø‡8k€úϐ¡hÒy’üK€QFg®ª³À!g‡íÈÀ~LÕÅcäþËÛ/‹GtE–ìépl ‰S¸úTV¸ù=v +KŽ£&¿œq#mËb…Š8’»:OÖ7ëøª0MS_²%¨åۏëMªo³ÆN­‡òù‹GCjÉnzBòʬhƒt.l˜øù3Ęç¤K]äŒèÔ±Q5¿ð(:æâ1*‡}oX=ÖswHGß Wꏐ.HÁ‡Á÷Ïî,z´Žjdª)dUž·Ç„r®„M] ¥ +©£IYJ¾#1K¿èÇcð(jqÁX甕èŠÞhe!išÝ%A™åf9º] Kº”|îãkŽ1·¥ègkè2aszúǼyitÜà‘VDõœ÷GŸoê°öÚ3 hWه­ªu‰6ËTìuëÙ¢ÜA}‚¬ædH4ÕÙ*“bWÿ•Ò\¿§ýª?ì£ÃðŽoL›øúe*þ׉m9¸Çd9 ‡fä’"n«Ùe½kµ†Gˌ:Œä¾}›¿zUíÚÛiVŔ7´X¶ ›ç]g;0Úà4rcN!gžÐÛ|xIóñÓÑ»§¥Rxä›uú(n9)ËG ½Èå¾_eñ¦8´¶æûÅ¡0u%9t’E¨Ó€tßë[.ï –/O¬®2v|ԋa7‚dÌí•~øڙ¾tÅ"~~Ä[&JŒâZ ÉcéŠ×ºˆÖ/ñºô&ÐÁ´îÖf…9Í ozñWWt«EŸª˜¬¤æèY«Ì> endobj +1511 0 obj << +/Length1 1626 +/Length2 16299 +/Length3 0 +/Length 17149 +/Filter /FlateDecode +>> +stream +x^¬¶ctåßÖ&»bsǶmÛvv’['›Û¶mTl£bWTÞúŸÓÝosû~éû~ØcüÖÄ3Ÿ9Ÿ¹Öؔ¤*ꌢŽf@)G7FV&>€ÈÞÌÝUÍÑ^ɑWQhüµs"PRŠ»+¤X:º+pz¹ýSË °+Tù»nÞN¹ýV-þ×á11G/ÀWFV.+9úÍ©¬I£¸0°Ö±/à{Äo•É[Ý7¦æ¾ïås§÷ŸrtGãýØvÔ}iÀëB?rځB´mª.nú£`f£²/Ú1_o–v¡ô¸X´Žö§UՌJß`ˆfºØ]ànžiÉ= +1)žœýÍÓ㱺Q›ÁÐë‹Î/¨’OŸŸ¨‡'ÆFGúî ~ÐçÆÃSò›âø§ž“¦¸y›¸<4™@¿xp;iN¸;éÉ­‹3%Z´tf*ZÖlÓd1Ñ×è0í/×Õ>ÝÛ+¦jƈÙ?•J¨º×.4H;Cµ /5%d’V@¿h&ô?Ƕ¸A…O?!Ìq³p2×C˱W×·ÓDZõcDž1’@•Ë{q$Lø²q¦Î5˜ùs*½ ™eE{ÎÀùÄÂx¯ t3}ÖnƒÆQÌ`6Jt*àîHb%›»VÝqP„ÏåSÈçÝð¡¹Ý7û™#òÀŸ˜D;¡W³gƇ3^òDVô¶“ÇÇX;wºa3ÚXÁÌ8ÚIÓy°ªfÜþ$ø\ ÁcšúN¸T2¯@Eò!…"¬b 6~dy•$ªtü¢ê4EÇkµÉ ÐçCO6r–oƒ™ãmÀÚÆÎßQ¥Ï¿Jÿ~F¼Ä4€%ÝHçöªÈ¡ ZAOÍ?ÙÔörÌê!QŽr#(sž[ØiVv#ʎº<¶eêæi÷å +¡|h®¶tÇè ‚ëˎԸb"ԙŸ‘ÄN¤YPù +’a7º‚7ÚNøn7÷9o(ãÝ6\Ÿ`³ø$e!ÏËT¥%klb°à¬™úóò4²ÉÄS떐ãzÞe‰?èÐ7-´¾äpúºûfø¡÷Ø⛝P·kÉ-8µWÅ,Q<"ܘuvmM÷ÍøòoœÙ)½zÒ>³ô¡éQµånûšQÿy²“Êñ•Ã¼Æ—`1”tÃƬ ՓޓW;g«Ó %1wmè›i­ QÚU9»g’  0]½Ëó>…H{Ÿ˜úó™k®SY@/é£8¯·1û˜:\à|:¸£Ãvv°®Lå7}öwý—Fȕä÷ÏÃAÜ>#ìÝb ¿DF“ûC­tÈÏtk7¹™²#GÄ +¡~صÀ[/èÞè3ôÇðr³uB•Ÿ -]u^Ò3`1Š|äVV­ôX ÖM P`'Ѐkä\×À¶ÁmEe§+ó)&sÜõÀùÛ¨OÜ+’ïŠàÝhì.dTÑ>ÉÂ*f;„zt>¼ÌÅèçÄõbÈåX°Ím¹K»_?z ÙÙ́Pï~o$_'ͼ·Ùòë¤KZ†'¶Š°bMš|0cŽ–{öW§ç+\ûhŽGkpõE±<½gk Õÿ A‚{‹ Ž`ÜÞ¿Šç)[ÝÊ峃2‰Õ±‘[òÚa/Ïn³6;Ånגz¸h#Gçl%çÊe‘šrۖ%£ïÂ?5´¯ÑmxŒ/I3TˁKðŠ ~pJŽ’·y–Äá»Î‰ˆmÌlØú ŠC9]uïùJÞM, oRw{e Õx/’½¢ydŠdÇ9±¬ååç)1s.:Ù:‡’•¡Ûn¦©s”¨œG{×ÙqþõÔ+íFÃqhºRÌlÉZ´vßÈb$ØÚAB՚zæCW +*gR¬— + [<=e'D¢C0?Þœ\gÆm¹6M]¢ÖÔ¼x'™wߧéÔ ½¹ °q­ÀÓ"¹ÏV´åAö…[} ‡64æ°g²QPG¼~ðՒjV3֍ÃU8à\jmÂäç‡C#ƒð é‹[‡V_ÇèS·É\ٛßð´¥å®–«~ØÙH6[s02Òº'N(¾e¡Ä}=@À½õéÜû6ÍÔ3ÉHðœm»1rLÂÍփoþ~Ý!‡±ô^œ_X?cÅäï'ÒsÝ#£ ¨ëXë'“T?Áد왟 "Aóø“2$hÂ('oq°ñ ¢´a `¤VT‘+.N`…Þ…¤±7Vê6åv“¼šk†"W93赘écí÷` ¥±jt÷"z%ðaOÞ'eO £™W»5ÁµmÛ]©Â¤+¿2/Æáñ³åU&±¶6‘#ÛÂç—öš‹æÕ—£c@Œg8#n›ìœq~uÙ½"–„jgû~…ì‰íâg~”Ù ‹r0/.º•MZ4¯¨¿£¿<"äêՕ•gå&þõ]œ™\¥¬ð4Ú$v”+·R“ÑdmBÎ ÙG7ÞQÅer'ô®tLÜ5h¶B#«0(‚Æ£Áõ# t¯WW/—QVÁÁ+±–ÂzÒ*PÔºéÐeh¹E_H™Û§5vF%§½LKÖÍBT&ñ;„Jãî<…]A! à)¸ï˜º¿ámý&ûðÞ%2 ¤z–›¯·qg³’=‘7Yf‘ËJ˜ª«þ6O)–NjAyàÜ?Z„'#A'-t§kµ.M·ù(~‡»Ù™}WëtIÂhÇ/„û>eI>B"ú‘iœc¬òE nq™æûŽB6¹P4PR—¬uÂw^ªŠ»š§ÆQÿGÁéEMó’K^à+¡RdŽ™Ï¬o›Y`dx¾î#Òü…³ +ŌrF at Aì=!ÿ6aa£dG¯/å¢ ,˵ŸþïsÇf}ߣ„u‘¬™É3pÈ ˜Œª§o¥âDy +ڎ}•ó‰@³é‘Îy §Ûw½Z×|%´”‰d¾eWÓBåt/0 +÷¢® £tv954n¨ð1¼¹¨ÓÒý}æìl\l¢)ïë/-ՔãŸùb0ä&Â>ù৕“r30F &íWaΝ.²ðù¹ÕӒf¥ž¬c6a^-J|¨|Ö´ã.+-Ӈ'ð~†ÎSáé€xáƒQ2»;Íd˜ïƒ'¶Îƒt+zÞ³DÅu†{Ðëãó/&âÆw C>ãÐ+ª|¯;»µž(‰¶UjD¢Š©8ÕµâŸî‡`dJb š>¼È¼ëemþÎ[ò"µu~€ö炵Þ»d—Û{ yҘQ9ôëbnsٌ$:ËöÂc«¤žõS÷èߘÙ?uu 6‹u³3"JfeŠ­Èèmùà+,¨ý3Î.þøFH%KÅ5|– â_§a'¨üºøûŽÊjaqÆ8•A‰ó‹Ú äYdøSÝی®9蠘åj%–3}ùŸaû|ß:ä¯m©°í­(Ԋyr—Ê<®Qâ`_#ãXŠC›jHΒµÞ‡ò:©5ÒÊÄÜÙRÅ@¯ TþŽiˆùt{ûë=¨ü ¢êranñË. ï}˜J)Îú|JZ!½'š‚ÀCÏ×Fj(¿–=³ öOÏNÕßõ ‚yl¡•¸„¢“6 reZÍA +vUiû\`ё¹ÌÖãF¾´ÌÑ +h¨?MüýkÀ90P*wôE€HFñ1l¥«f?oü[ÒQ–#¦ß(j0Ÿ²éôBå; �$†û%F‰4Áó$l 2 àÉGiEáh-½LS•a¾( ìÔ ÌÄÔÞ8aÍø`¯ßüîÚÀã`÷McSTáX4§ÉѺÖÈì†/5¸9WȲ@ŒÈ™ðqÂûþEd¢ñ ns.ùëϓh[i «ý« +dÁ¡Âq÷*ó…܉BMÍ#`†7)í„ëlõ2çld1ËêЪ÷ÊDèÀx6¢Ó3P±ãê7‹MgÌ8 ½#%ÛEIdÕtóÐ$œhšlf ×W ÎsԗþױȟÄ%èz³oZÄÝϊs•-ؐp¶2ÁÅæCü­÷œ¶Oa`I²üÄ!Þl8²K .­9ȐˆJr·i˜á‹æ x©`M¸ñX¬ÚÕc}³ùñ#aØ;µÑÁ€±¸´}ó7‚5ˆ+ŽX‘mÞvfð+æ $½;1çôkKîG^tnÉÉ8ods”MÜÁaQ•µNŒ½:I•šHSU¯éܞ&Ý[KÐ1»³§…ÚÀo«[+qR­ß'l©Œ¡gÈpß5¨}EÝ«ÖܚÃ}"û·Hälµ'öB}À¤QŽ£ò|ñ¬øKkðîõøËhîo4­kaᅝ|Í5$uS¦“kø¡¶œ„ž»7Û±™u` áe­<ÙûÕ}€ZæòšÉ´JŸŠØÑ)µ•J¬*-9Î<þèą)dðzÃPš üf°ín÷–Èç˜ãÓb. �ºm£Y4N›t0WUÏ 3ò—¤âJ˜/ºmeß$iéÅ‘±'È÷Bª›Ä£mÿl× Ñ¹aN3BEŸÞH΀éZqÍ%_ÙÔ'{˜y*?BI,C]ÒWÝçiñ۟>DØ HÛ-‡—e×ȵ—*9Ÿ•»Cœ$ö·›¸ ©AñJÁªù‘Îcô 'Á¾}›'¨U°-/¯ÃÒ*¡;¥ã©®á-«^ã¡+ýè¸L|vyöjí¬ LàëG†H'³çP¥ÇäÔÐeF!‘sw²ÐK ¯8¿nt×! ×Áã9u‘Îm°Ï’©l]»M/³Ç:ŸMaîÂMv\ã3óéÂnȗŐª76GãrðÚ\m‰‡oS}öÇ|¶m±¬[•ýy<2/†¯©¹£  º1|óòb°’îžÉ¤Õ°9·gH¨–iöçÇ+­d’Çt)o݄¯¢M.¨0³øZ°—¥o%wf­,ŸŽ‚Ç2²Ð"`‚Oä4¥‹üAìcŒéÀB·9|?˜åtHè?@*Égö壮B\^ócv'•6’óAŒ×s˜3‘q¾ïw ¼5ÓÌnSq›ÁÙu{FÓß69<¢¢ÁÅsYl$žÖøÐpa^öŸrýS_p£Ó/1 [±BzØ]lö‡íñ”W¼ÿŠjR(9v0Ǿ†<-Çó+6_–Eh‰h +ÌY]ø1ªíVá,Ä¥9Õjÿá™8 {Ú‹íDêQŒ;þ®Â|´…1§o8Ô]e%”twåa_ôCmÛÈݟ˜}nK|‰³hTÀŒ'žää›ómž¼K¯Ôkš¸îåÀÙíÀU(Z÷CA@ª²öBhÐR+wl”ªÇþ檨P%qï<'P&jn6¾þž¯¯I¸|¸Ì™ZÃpæéõ¢j…¥´ÌÐ +¿=È8A<§\>Q»9Ǒ·+’n¸çÕ<ÃZF¢<Ò°£_%:|'Ôªmmñ¤‡à;¦q\ßÖÐmƒ»Î9J ¡.ÁÛ3+R¡\בkQ6ÇùN¢èp¯CIÖ¸ç.¿ u~‚It~ î­þ*{- &àyЀs²8h{M at _…›ùม,u ^ \|¹sâËß?§ž¨¥Œâ!?á¨rÏÆÙ£&_Ž2Wƒ}Âå®N¬±]ªˆO bs%tG _¨+ ±ÄÎòa*f¶ éø¿|h>ã7Óú÷“!%þñ”Ø’ãûó|Ç΍ÕY{)ù|Ù¬«ìÑîÀ©q0 GîǼ©:­é5©y¿aÍ­_Rö[ߜ} ;ñx£E µUVétŸa Åý»o {× +1Ò¡ä|Iõéå>‰„ ]ˆ`Úý|tÒû›àùRs™Mϧ0&¤ÆïŽk´þz +¢÷<+½s Û¤Ûz£h +7Šü"bÐãDcĸ_EÛ¸³‚?T at .¬ ^\ïQp$H’É“On[흃±’Ÿæ© Ÿ¨‹H¤$NÈ°FOËyß¼Jš¢töf”u`˜ð¨ƒYj±ü:âêc‹£V£ö ÕízvÝ̀jaÌ0~êðºMà«vï2•ýò¼!PÆáºYÒϯ?’&¬ÀM†-Úf°72þ +98ñ9e9íbk˜æÊÊ}Ó„ +ç + ¨ºeiûƒÉ‘>cQ—â)å5Æÿ!åï8ßBK,mu<€a„~Ð1’½ý‡ò]°íù9¡ÆäÅs˜žU:ÂÐñ}|~#—¦]ipnk…§ùs‘õk½OQÀ7˜ÇtËøy-Ü0æ*ûi{¤G¶·?NO-T2L +Ic±ÍëçtÅ<Ïnjìd½ªsr1I;¸›Ç&¸³±Ÿ.d~xF=ѲE[j„¦ªõQç3~œ6‹K=èýTԂ¢mJ¦Ø° «ny{^ ÝÕw!€¤“qå2´ÝïÝI{PÊ¯Õr0:×æ5—’Ú!ÒÅPsÁ¢Ø&R„Ö -qñ+º¦„Ãü©ŒQËuÓc<¥£7»¶T£Ÿr½‚vœÑæ•~ò¾&+á×ÃôÃÐ*2uˆu &ªb&9ח? +sý¨÷Ac gE£uü`9LþefXœ_QCF¢ny íŸØډ ôOêRÖMì+6Z*Ô ×F¨3꺋PQàpÊ'ùŽÐøaàS¯™›Òéê…NÀ|_ÿ³çû®oÒ!>yE݈X»‡c16—ó7Ö£’b/zN§² +ÖG¥86ÒxֆaŌr- +ì«^´)K»e_Dc—¾[na¶(é[!ÅüJswã,"–A÷Szä f˜7ßyS‚§’4"ˆ+×+Snˆ÷ª—Í<˜jŒy­ŠÎ©€/‰‚>/x~¼úÊdzEZøG:)?U÷ãP4¶9hÇÛ¼Ü׿K¶ñúHý#µ)Q%˜¥ +m0§ãke°ëyX„ǃXÉO©L»)¼®Sü–{MÜ×twÔ¶‘ox ý×J(!(ݹ…ölã+–+fwù,cÙ]-•˜òð¿Îî°`º{˗l‡”»…E“êbJøæ%±ø–>xOk at fC8,öUý®;C‰+¿]–¼_ãú‘sℨíH~XAÄø&â^ܔZ¼l«|þ¬'Õ !Ÿ‘‰„õe(»\õÿ•º9òAµÐêi0úUdÍ¢G])÷¡ZO+1´x—\ÀPbs +å‰çn4Fôm8ç'ÿ +7Û§/s–÷%Kæ%Æôá–M ñùÞË' Y†¢çe‘Фøؽª¾KâÃ+Æ +¢rìê…"t 2p.Œ‹/Ql¢žŸ¤ø„'[|‰’ÇL>Öu­7@Æ;”íŒCüP&üuòBg©ñZ—Ë÷ñqMÉC:¸Çÿ£õW•ƒü ùm52É)“Ǹ*z x!WXðÜ ì¤f 9®Z¹ô6ieme(³íq¦ÈTÐÏ«ž´–bþëzaäƒ(ñMYr"uŔz<À³M뾚’YÅ1MWÿn ŠLÌҁÛùÅ' ÝwmWýÔ;…8s´ÎzdÌ&WHb¡{•Ù¾>2é 4G·2ùº¬þÊ6²×õYg!µ¤0-O¥¸êÈjR¼[UÁ…«3›½Ïx’äðB9=ý51ìRºŸ+ð#:ë+Sp¹è-¤y+Ù©ÜÁT¬+IÄÀµ7ÂMK²8ƒ|bÖþ uÔbìÜ+|ŒpàˆÜÂ\¢ ŠËÔT•s°÷ÒnóÍÅ’iӉ0™·Æ׍~͹4ñèMΖ»´rÖn6Yf¡þÈ|£âǧͳÒOaÐ ŒÉÇ +=*Ðp3EÎ×*©Î5,+k]«…#lÿœ%!/ÙÀZÆH eOâ\>”OâÐhËÌȶóg nVâŠZ‚I?y­¢ÒjñYÑ(@=b¯ð«ÏÈĖ!ºsaT¹"™œ$a_½‚Ïë<º“VÀ¨Î¸ô8 +žo¨àÝçT‡ ’ [;nµžnã= ¥®+ÁŽ ÕN-\Q“&*j³aÒ¹÷ÂtFÉ·È ¸A1Øfȼ1°¾‰´3rqmMžû^N‹ÍÔ²M§…³sö…«¥¿ØÙx¥ÿ܆FH„3a\ÁŽ¾šBUÆâÑõ[ÖbÛØÈ缊TfõöÂJoÞã_…¦—Ç!*D³X¶Ë°Òª=X?€ ×“‘-Õúó®É”Ô¿ð=­Dã¹É»fU¼”W“bÞÑe*cÑîº&MZ¨Q©õgÑWŒO 1… ›_½\ÓÛØè\ ð––½¥ë’TåÑ5s ˜qM`fúäG53ùK_rõfóø'›²j|­•fœÞ›:¹ê£’õç©8ÝFÃrâËù±=eŸòނ3Y5ta –à+Ê+ªÔ]Ⱦá6"ò| W7gþ¢­át³qh“ù”›”†z‘X† +9'mR“¥ î­C™ªÚ»5€_ýîO»žû\ô(µö+?¯"͌ÁˆeÎu²žⱓŽ9 &P’0]2&¹«^æ÷ôø4"É4¯ …Ï㊳uäI @ÔD§¨ºšŸ ÜꚁC¬c¬aŽ2º§¤ʹmÉy‹Ž<9ÊçÓppcºç´¹¢UD¶–Ç}D at BØE’ …¸)»í÷êhus®Æ0"(aîX•‘Çÿ˜ŽžÅ;+È]æ¶Ö,gÍÀÞ ¨ `LPÛa ˜SyyöøèÉé’GrMÚ +¸šA/%ý¸Ÿjv ‘Àöð} îX‚2 Ë̶ Z¦¼i<5R2ñ’ ¼™Ç‚XF¥‚þüvâj† ­$Ö ŠN¹}‘!ÊÔ6¡"5’ÑҀ´UõN£Pîš#âvÖYÂi4±²êJrÝ×Ãíh £ÄÛ· codýtV‹y.µØf M¡BN¨’!EL¯y*ÆG)D|•ðç蕪I<ú,peÑüñÇ0ˆë?7e �ö)ÏWøŠF…$V ìØ%1ž¹Øg8DA2ØU®w…B<\¨ÜS€O e­ð÷_³>;@®æFº}ñûíã@µÐŠ•½3”sqoÓø9ì8+ÛT“ä%$/Έ²VןåÓWv”m×Öša›Éi+}óCÍuòÿ +wÑcÕ>¿hÆ­¡‹ÈÑw°SÓÒÙ;̸¹UãlÀ]£¯Ha=ôôlÞ×BhW(a++Ì¥ž¶«g/÷)™þŎD@ô¾Xâ‚ß7Î7îmÇÿ6 ’'Ä÷—ûD{D¦@p0``+Rޜ.Â[Šrˆb½Æޮѝ +0# +÷"X‰8-•)ˆ ãKÛÆ 4ŠeR ƒÌgAހ¾yª³¥ßÍ6¯¿´¶“)®ø›ÙÚF Üo%¦¶­WÀ+endstream +endobj +1512 0 obj << +/Type /FontDescriptor +/FontName /ZRYYGD+NimbusRomNo9L-Medi +/Flags 4 +/FontBBox [-168 -341 1000 960] +/Ascent 690 +/CapHeight 690 +/Descent -209 +/ItalicAngle 0 +/StemV 140 +/XHeight 461 +/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/asterisk/b/c/colon/comma/d/e/eight/emdash/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/r/s/seven/six/t/three/two/u/underscore/v/w/x/y/z/zero) +/FontFile 1511 0 R +>> endobj +1513 0 obj << +/Length1 1630 +/Length2 19901 +/Length3 0 +/Length 20744 +/Filter /FlateDecode +>> +stream +x^¬¸ctem·&ÛvvlÛ¶JR±¹cÛ¶m£b';Û6+¬|õ¼oŸ>=Î×ý§ûüXc¬{⚸æ=Çދ‚DYAÄÔÁØLÒÁޅ…‘™ hegìê¬ê`§èÀ#Ï jfá +ø+瀣 š¹X9؋¹˜ñ´ÌLâf& �å?Ï +F. at +À·¿u3³ü«úÿñüçIÿ¿ÀH؛8˜þ3:j.Fö¦§í +þQ›¸Iþ×ø[õœÿ5÷fff&pkË&|!Öٙ. Øù#SâßûYÀGB˨—Ô9ôùgDìòT~ԇ26Ïðþéð\:wü<”¥=ëDz¥êK3».$ð%£(BÝ¢ìâ¢; +b2(G̼Њñ¾Y”߁ÐådÖ<ڛRQ5(û€"œébÂÜü¦ s+ +À vDò3IoŠÇìFiAk(>¿ L>ýýL54>:2Üw9pˆO—KÁg„í—zN’ââi|üaòò͍˹f)§M«5YÃÝ ÿ}ٕ˜ü)n%óŠÈâKô€YxÙ8^Îý:< >Žµ$IžxBlV]Ö ±{Yæb•sý²I7Ã&{•'Î +þ¸9zY*ƒ¬„cûª&µ°ôÐb¶nX¢©´&37J¦ŠŽf´À,{#ž…„ R´pCÀxUʞpi¬A—‹/Œ@/H­zÆÏÆÜ e†+p†X–c÷¨G'~faaë0ڋ˜gè7ÕJö8¡}~<°´­f,Ѫiëš_#kÐB-q=¨õîr×lo¸á¨Ò[vÍļ12ù>©m}ßzz3$8‚„ gO›åÊö`<ŒèH÷^TÈÁ +Æ)ø±§ê^|"-×77Ó‹>ÕÛ­ÆÏéMËî‹âÜOá#Ì<ß°cíSº i¦M †yDÙ -Ä 7 ÉŽƒ>}g²`¶=“­Ó†mðuéFã|3oz)Œ’°‹7^Ýó—ÿ˜Þ„{ÓôK©vß,èpŒ¦¤p<€õqsË^J(ȯÅ$;è!Zú qíoñNÅ֙/Õsü‘é¸9땳‘–`Ybl3fRG¨•Š®>-Ø£Ò"‹_é‘ïæ¡n³ý,Ÿ£2é`&O¡Ã'çC×W+eJV­=ì/ÝT*Ÿ+^Ëa‡bVñ=Ô£ÑYåÙÍ#؃å©H™MDÐÊó¨"Žü rU¢õRKŠÅfjªŠó=$o_E +Ì´@qÝ¢½þê9I‰¡ öUüðšÝžÍù»½‡û^Œˆç}ü†…à€5¬à¥J‰ +ó×Þâ@¡„½`-$>踢~ޙ|¨Þ~û‘øqøý~eþj˜î¢bÒBV†¬7#VƒýO>‡3SòMmÿm؅U‹³›m™Áà-ñO¶¹’óé«À' ¿ûs5uMÑj˜?â{#H*Áq”µ²ÁfþéÅù•û9?q3j×aˆ•n”K!•Ñ%ìR"W=UzÕiq¼fhj¬wJr|8¦«“kY5X¸8ùŠn7;?…ßâßÜ¥.²[§AiðûÙ0Y66Ï}›ä³ÀÁÆ#­ èçpñV£Ùæ8è8l“3ü֌¸+9ZÀӁW6ô÷ù5°'ïÞ΢‡ë?í9ÁK¨Xrj́ÝIÈÂK¹˜tObâĈ£'¥ÛŠäSž+ùÀ³*.EÒ*¦’ƒ‚)ò«,<<˜Ÿ´PVjD +ýÎcØ]ûçK텝ŸJ•–ß’(ܹ44챩ÒQÛ»§N–Ÿcì4_1¯ ƒ)r …YšŸKwŒôÃy–¡ô©Q:†u·¸EDñWÐïôiª¸½6acwJAlpr›a£·Ãíä_äW‚}êIݦ¶Š‰aEMnsy™IZJ%˜·–‹Š¸RS'o„c¿“¼t-2†‹ZPCžÈµÖxÐ>ßF–+-§Í +6%{9)‡kOýå¨î&Ÿaz"yÎJ¤oÀSº?獫åù\°\΂ê€GYòŽ˜É²Sõç‰OäÈ䁑G•’+Û´PÜöK~ÝLµ>- :êbÌæ1xÞî›éƝõ͸ˆSxu0äAŠ ·dÃ.{ýØœÊûJ-‹µŽxíkBÈk8=$4¯ægüË$—à¬oEe‰uðع„Ëœ"æ¯RX­ T«sÝæ¤ag$G#V¹ð}•Û»v+.¬pøž^3Ü\v MϚ¦¬í•%¢Pd†B^EGE·4ZA ¢ìí¯/È òœ}ÛH8>ø˜µPæàz°Æ änÏiɉÌÃ-ù'ðF¬H(½4»Jèd¶Ý£QñÉ=¨ƒJSrºèe%>è½ÄAКÆ?±š·1”"{[«fە©c,#Þ®bû¾’z³È{ÅÎ6„Ï[yÏ/oÄê-%´)'y¥‡4WÎ*d*ƒèݕ¿åƒåŸ€Z•2öIaQ½g+ 4 +oVUšqº­‘HX€Ñ®iŸÉUw¨÷îPë궅K²gf1„,µÏ— 8¸ž¡[óêþže;çš_D¨Ùü„?#ú€%Rh©bÎÕæS¢ðôcpIƒo „‰C"MO +]璌8öPØMIÄxÅÓôSÝ?}‡ás‘ßÁՀuøÄWµ…9út×Äuʾ:ªØRái™`zÈñ=°ê"<4ÿ<“°3Ûlúg ˦é’v˜¬ Œ:NzççÕä2±PŠú- + /màbßlå)xÆ\¼˜µž*ç‚Ë"äcŠR&¶Ä³·ìÞ%TÌêÒf½žmCF~} B1—DrÖ¿5#ßì¦X|ü­\w$ˆjK¹)‚ çGTʐW 4Föì²Â¶‹=– @z¯ ¿˜òñHqƒcóRÝoH,Á†*Ñ·A wbƒ]E̋ÜaØüFÚ X J( ¢;¿@-sÏۛaÞ@%›áîŒ9–/Aô"Ÿ÷‘·t‡ç¹âDhö’RT0Ö%”'½+"šO Ț–B)ä0õ†´,kÅÐ>9Ü°ÃÉ$âÁ±[¢êW§+ûƒt}!4çB6´$q“|ÌzXU|¿ª#š6üOž{ •S #!‰¾ƒlÁ§¥ßÒN,t°Ûÿ‰Ïò»Ìáöá$7¾uK"G»…~ùȶ8ž€W/Sn©…ºÝœ›Eÿ& +[0§]’ÆbjF×Ãÿ¢}Äã +w߄Ø]kXãä¤ãmMä)¹J+Ð&̪ºVªúÇðԑ—!åùb›÷¸Nda A-(–ó¾1ÂÌ ‡ÝJ‡g†[å·£ \¥ÃV¸6+áÈãæ ))]âAê]Lbr90= ‚vi{iAùfa UøÊdε€ò²ã»ú˞ðûÌd^›ALòêhûê²sü:äÌïס¯ÜÔü†å…;;ýjÌ*Ñs,4;ÇÍÀíy ‹Ú«™• Ü{ÏÍ+NéÒÜ4LŒ1-°‹”]OM’B¨´:’Ê«Ç'wGEý-R«±Pž k™N"’Î U~»óîyƒ)7EfaŒA0]Ó<à@0ÁÓi"|¾×êóU†¤Ê®4rÅ_ñ(BݬùZFñ-Ån Ã1#֒Ç÷PKÛ.AâS“ˆÑoü×ïY=¦#¢™ì8ÉÀ£]B°ü÷ΟÇk¢ƒ,†þ§4Sf»ýŒÈ–vÛpgï7dcª PZ·8_¤îw˜>érº[0r'Ya(ú•³J:¾Ü—Ýef~¼ÇÜ»ëh轢ðß1nY! £¸#U‘ _Pë_ÍGjµnW%ù-F8èÈc“' ý^ k"àIçOßÂǐÃplÁSö¬Å4¼^ÇMœ xävé|GŠdúËâ'€Ð]æý!t.Æ9¸ k÷ì-$ۉ­Î©ª›½Ö9Tèiù¦Ÿ.ÑmÉ?ŸÄ/¢4 L¶5ÀÄ ÈÆ3ùJ_‚/ÆÎû\G'®dÇÿþ<ê¹tŸL°)BÎZ³PƒŒ ¥;™[´ýñžû 7“‘B!‘€¼74éwÛï‰'×à J¿à&ÓNBÏd^ªò<¸¾±— Õ'Žïµ*ý‚ýˆS¥{¡ÕŽ‹VëRæ‰a÷¡‹+œ+7ˆÍó«3)Ðr`‰ödGÀlXÖ¬dÍÂ3© ê2éª,ðV(çè—Û'\{“§ËË:^Âõå fÍ­ç,u͵…ú0åj¶$M1âŸzÖiŸˆ«Té%=oƲþºۗ×0,Ö ±Wùž¯6ë°Lé?'[§1håön= ;·¯×D/Oz˜dÔؚ„‹ á}YEI (*°H™þU€ËÙ}¨YT´7–yH3î ‚Ž'Ö,Ãú/«QÖïj^)Þé”c +Ԏآ¡Y¼Î$oë4IïV†ÄAl‹‘V›[T˜f+wA –»ÜÞ±qëz—rþ3¡&Ú|]¦Â=pu×é¼ÔIaiÞEß^È«7);·L´^U/ÈßÄÑÏ ®v+ZÕE(AñÚURìB<ËéßNqƒ]îo‹1Ž=Ùá“ëeÏt©õcö¼MØû$û³* ¹½æÇ$®5©Vöϼv>H"É{J oû%Ì{|™t==kúB›åkñpÖ¹pbò©ÙGj•ùÞž®–”›Öьåܞ–èÌ˔T¡%gT]œ $ÅJo$³nf.«pXŽlãʦÚl:æ’ãÌÓ –ßs¯%B¹‰]¶ˆ¢Ïž÷@փeŠ¥£ê!B‡IãÛËS¯ö{À@x·†~,gÙ­ö †;[ãRx³‘¨v\NZ,.j1w÷CùeñònbŠ‘¦¬}n¼KJ‹¿.—õ‰è?‹7‰ad-ñãøþú½¬ö| %w¶—“97‡ÿTGx~Àÿå«9¯6Ýèµz‰ rœ‰Ä{j.U¯áÊ[=‡'äh€õ%É!JiÎà’ìÙ乫ƒÐþlnCÿÔHÀ~îP”Vü_$qn¤w¡)[.¥¶ödÍ­&=¾ÊÍʋ´"ö3éfQxÇÕr诎}-Õʎ‹ž£Œºâ5¨åòÇ4]~aÚ官«˜Œ¯O­² +•å¤û’žÙ*8õr¥íðp˜M4öë»]à¨eÆèC(ŸÄ"¢38í ¬P3 %Îâö´ÂctyÒ¥72ƒy¼÷Ž³$P"ídô݃~¨…Ý@ê{9dW`?ÜKÁÊ9„hÞ!í}Ï(E(©êgûnTw:ÉaóÍÕj€’Ãéç’þ«¯x¼Ð&¦'«`¤[ ‘ž8ìAxƊ @MÅ7§èbTùn&¤Â.␿h)žk;nw·ÔD™Ñ%.–© a¼‰õqK(ú{_¦(J"§‚¡ð1vdÕzIK¿ój¸Î«Êïb³Ê¸ä#MTÈS^ôÔ֚A”}˜È"O͗ëù睩‹d.»—à›þÚrƒšë(B<¶ã‡ˆ½Ñ`|aqëÍ|;©å×õùèc#_ûÜþ¸ü^7õÛØäÝo,¡äìlr¶Ù ñŽõæ˅ªÒ&xE`ÏCû[Å>¬R)Æa·{¬ ÎkÖ¿élï®Á¶+UÇh Šô[Ç| ëË7®ÊögûYŸ>U\ž.=æ¹U@*ÐäH1RÑtü} ±3FMYd+B|Îk9†WZ®ñ¿q•Ü <€[­æø¼ì†®ïo‚fɺ›i¨]½¿‡PP10².ÞÔñß>Tw÷EgϽ`…„_WÏ€ê½(øú{ŒËþ"/„?½ÄË +).c©G'¯èÚãaÚr¨©½£¥×³^§ +Ô·“*©Â/ fT˜ß²žE&ö§B¼´çlÍæ#ƕ{oøÂÕ: ñénŽçÞàɱ^Ò5Þº#Þ¹û˜O+烈ë½Î~]À6Ž@„“?֎›ŽÙò䑐È^–¥J;Fæ¿ðÑ ¿Ø€M/~qßwr¶ÍÓÍíIcÒôŊ—ó6ßz·MI‘i`Vm7[½+'¹ò†ýwŠ âóz¨ cf éïjÛ¦qÍÖ"cb¾Œ:)/ +ìï´Rc²Óϒ±ójŸ›Éõ1‚'îeçS*Ï@YœN 9×ëÔ©,ó–tlF¡@0/ÀÕðÌÄâ)fgzÜýZ¡dÙm^£ÂqìöšÓ†dücɈ$$Y–ôÅÕïˆNeíCÍ)(C‰pŽ…~ gö4½©°“õ91m¬D‹,šøîp?yÍË+'=#°@`PÉgH鄆^!x4ÓAó”øÈ"ˆQ>î:æø¾Åž?wF.ƒf‰qåÜ(¢zš#gílBØäûÄ0³òû]òçïâ¡*ŠËÃú[¿ZoÎüɁųV/ øæo ¯9³r—! +ç Ñ9™Ä6's \/R³ÀÅ~$úžÇ¬RK!¸O˜ýKNúp~WÐÙ£ÿ›ñ&ˆÉjð—4c3 !¬›P Þ7±KÌ WÙZRçlwX™íZDžZ_t<^¯[=Ôõù@¯>- d+»~ÒaT蟇¤äQÛK-›ÞׂʒJÏÂñŸ¬ª›ÅOÚ¦žcæìNÁË­\,î ª„ /ã~¢¯ +H£%Þ¥–8WËɬÌV›×@6RWîhâÔ,…'¾5c]–ækŽ„Úü®oд,2:åãÈ ®{1A2çvðßÍQ»q}|OÜ4Ô-ŽîáŽ*à™¬M ¸WƁ³¢?|„q±Ë„²¢Ù:_Œ;§@N%+g³dQ1Çor3½çôû¼ºÚ®Ñ1™Âï7ùÖûxŠ6a€äÀ.È6rœn~$l—¥0Vbf×Ֆ+­XžÝeᅩñZ<#ñÓ£ÂÐYQfyí»R²è$ŠSà”XÖAÛ§j'P‚bQÊú4æ8v™6…£¸@ÎGš•†u´›Éz¹ ªóRz&Á\ Œ$-îÑíµþÜãÆZ¨SÇWò<Ò«´1ia†p«m$ç>‡JA5Îð¢ÇÒû­T‚´-õK´E^Sõv¤%:f¹Û¾VböWܲÑæè,q÷ºTØSk9Í-ÖÑ0<¹µï(BfÛÆÛ:h;¶ÌµLÉ׶ãÂç|V‹U-ŒÙ¾m>ˆt# +Ü +½Iò¸i¹óíÕ>ÿݞÙBVE :k…÷‡<£¯8÷ü¼Í0–Ú[‘²¶z½5+,ú6²ƒ2·1û/K_¤î]„Ã×4©-V—¸éµ“ûTª=úIp»èDÞçã!‹×I³[vøíÏÁ‹±Ô†Î@ëŸÛjj ò›È;ú±[鯼9Û-Rpw;JŠ½‰é²+¹×º_籯<J¢½?g„h-›8Àªk¢z ÞárõÛ>̕Muˆ¬Å¬X-"úYd¾í]X8¹AV£®k›þhÞ;!÷Tg¯OÜÅG(‰<’N?í¸-8a±´f—«¹~ÞTßS O ϦÝBöÃB›=Že¡jEåb¢BÂ9›kû"³á˜E]éç>¸ªØ/ÔPùŸ¢ïŠ“ña@ï1>Žç<X³ Cyð‰Põ[ˆÜރ“S¨ ´¬Î¥\¬t®ªÔ]YÃ%˜ÓsŽJn Ùš¤'S“}—s9ñRgœ +ýåMäMt&ŽQ݅$;Ú³ùJÎS\÷q·þì§GÌ®‰äæJo3øJ˜”ïZâ Úÿ4 ,ò/Pæÿ9Qäd ôXGJ. +>[à +¹=LþíÀ{Âdng‰§TÑ$呌ýæúI“ó‡'Â÷G +œ\/Ԙ':Ñ¬eÓR'8‡( Äà‰ýNeJ9"X¿…¬ÂîÏ-Ú4°´6ïß0.’ v»"&ïf—(29¡+õ ÉIa®ä² ¬jaööÛ\C›“6Ì¡úû¾ŽVŒÖç«;ÌuG2I`ý,j at GØ 'ÚjèjûL}¼¬ÆÍ}º Ï6´­D9× ÐÎ6"Íçî“Ü׈úa¨²LatÖÁ¼’·Ý_my&(¬6EŽNv+P:JGamk~­âÊ4Uí}²g­ ƗµòòóP¦ë_Ùê÷D©“ÒФ++xüÙ@î}r™mNhK=Zw•=jºÚí'+4¶4¢SXnrHQÁê¨A•Þ ¶ þqõGý\Ó&øD¥ +ËUŽØŒÄvÃ\f%AÈÞüÀ÷rႤžùÐ25MÂ÷SU¿kñ¥öí1:RÁ/ñáØK8îKÙ`†±˜àJR+ä38òQVê ý>,U?ƒ "+°]£7i2êÊýš†¨©ïql[«üÐ]»n"œ©Ç3ª¹äù)ãl3cE>»‹°Š* ƒÌh©è? +{-Øð!oj©RÝ$øÿ¬Ä+iž9TÇ_h »QU7 ßýØ^МáA³"·_µ±Jc{!^Zõ±K`+Œèµ-ý»x³'À봄CÏ*U b¶y„ûø®…F{…媲ª2˜ ¿AÁP•…B[Â!Fì`ä&#úâ䍌”ži¦Å¡MžÐý§ +âRšdxd` tUOôl6 ây†%Ø-3…œ¥m JÁ9‹æÙÓ°3¹JŸGmÄ£å2Ô¼Ï ,qzìbŒR‡³hëõúMýÚ5¹.Jbۓñtz#z„‘_„ÞHðñ1×ÅY7ŒÁùUq¹ßÆ%MU׀‘Ì݃cd…ãç+… l6,=FÿCc„á)‰/è0Ɏ¢>3¬³iåâh=áÐE«5û²ÓEýmÿàÚÙ/6¦R^iüå†@؜½g¿i«f™´¶>0=©òÈ»ˆ6}Ïy—é£ôGƒ“î\¨>t²êÐOŠì,7å;ær4Ô9\˜Ö‘IŠSˆ¹4œk\esªáœ#—Ø"F0sօ€<èk¨CÌ_ý›'šèVb #Ú!t^ð«¤1ýr#\S”êp˜É؟ï {Ö4£ó*t'il$Gh0-ûOï¿;P#ŽéÀ~È_þdۘ7£s˜4€ t»õép¡+Çê` éÂU½côB¨ûãPžÑÐ4AÐ÷;úÈ6t™÷ö ͛'ÃÕX—[€4ÖÛ­"t¦ÓÿcŚw',©LZ4­éBÁ,Ñ4?FjK@Ù«D4p Íðçð>^†µ'Ñý «ñ‡ympôZÙâ'ž%و£º:ÕÖÌ÷G ­æêV‡XԎú•;Ø­ñì~üŸ×e㑉#"íÎ?‰Âï8Óì8ZG­LªÃ5F!ö“—‚8+Go¶GÑãÔݐÌÀ#L²äM|ãj1âFæß½'‡SÀÉP2GƤ¨<ޖžšˆ}uj%þôoQÐ6¯ñP¿͈E;(‹ÜþÇß¹÷ƒ­¢œžkÂEÞQEI9ÝBdŽµÉÓ«$-3UTÿCŒÖØÙDô9à �ø8"ÑÃË%þ'ïŸ+8ˆo»pœîߓPæáÓVEp°Á¹|¬Ô/›ùüO¦¥¥H”.8i‡¯Jünªâ»ih¡îCïÇ^töö̹'d·Ñ#5r7L~Îñwp>UT+xˆOMP@L ¬Þîî ¦,D„]mò@µœRMæ>¬·…6Ãð&E=* ì0jßí»¢¦˜ŸÜý($[‡ DÌ=يÚ(ŏˆÃé0<ù-h*ÞúohK%£P2Ulxy=»SïuÊðò‚…¸^h)‘}bO­ªì9cê=°÷$ù»¡¡«jwŸ.“øé_o…™×TYˆ-å}c3Vš⼿]h+i¹öã/IL,-7@*ºqœ‘£Êö>Ä[Ö+•¤êáS¸VX´°YëUõÍ5ѧ ŒkÝj|Ç+8uÅí¹Ó-¾ÕÆmÔKìǶB”ŒÐo‰‘J¬gB4ðvIµ…3Õbl9+‚­Y,W5·ªÀÞ¨4(~É +õŽöԀnpé;-ÈBø¸œ#—Ể‡K&wñïÑ{ò ¦/ØMW]s1R‰QÕä>ÜN 1Do:áyÅ-º˜Sk·ÎKõ<þH|z¿?›]øÕÅ[¡1gÀ½ÉqoXM™ÅwjÇa%'@`Âm{Q¹¾Ç•ˆ+à^]i&Á—Í«Öûuï¦Êý!ûPm›¤ÁˆUë±;©{OHuqö‰Úì`´ÍÙ(~0…!Rª“º\Ü(t"XßØMm`¯žÊëåM֖ !Îdø§9‚…"ëè ¢b…ëêÛš´E at 0x—Î u\™0ß݋œ™5ç+4¯ŒøÂ:„à…––¸0JÆHÈÆ­àNÀ +­6dhX\‰žßä­±æ{L¹W£êŠR[Ç(¶äɞã g(¸Ö0F¬Â)ôj‹W¤ñ°O,ar¥nrLœ2D˅ÂÒË(³8~:y#Ð.ÛVWþâ^Q”püét,Õ¨4¼7´=TŒÿ5 +ïA*ûRÊ$ãòq9õ0ÐÆ" öKaÇa‰Ó€'©1ütýᜟ†ÄLG(µø ôÛ:!×G²¤=¯"M‡Uގaƅ2ñL&×u§LŠöùWƒÆ¸Yd%_sFÜDgiÌë+ÔW£pžø3»|ê­Í?ÆSnD€*Fžf5âôà—Ëä½y§C× !6Óþdn“ÿÔD±ŠÙO5 Ý¿…z5ÜC”¹ +ß^ýŠaŠÍ*þA >e‰Œ3ÙHsB9`—v5¶eý€ +ÌüèÖp´—O}«¸²¼·‰-Ȋ*û·+n,ÄrÎòÒܨ†0˜±¼Ê2l êsí» ËI¿%¡L–¢ÐÖ·zÚv¶%€ª¬Iv1^;^ï‹f:ìñ9KŠ#UhJ ôúñ|/¬ù”‡Á¥ùy˜ þÿÞ{Œä¡‡‰÷7H +x\MæY{à½å”+žŽ„Ûˆˆÿû %cýôuúƒO:ÛÎõLSÅuñíÝ!Ž>;U2ݤPÕ+Sî==ה_öƒùÒXÑÝ÷0¡ÿ¦¨"¶Ø0®i‘ Û6õ†~á·Z"@6;C¿›f<š¥kɆÎV@!VÇ´ ÍÆpoŽs­ÞêsQS,ï ¤<¡?xëôÔàžÝØƶïƒïÁðlðI™ ñ–+~8à"Ta ӍÛybÕuåÒ-†Wt»‰ù­B”USìw­› Bà";¤Ì Å·^å‘EØ·¥ðçjò‚Ìí +Ö¥Ç3•u{~6~Ÿ~‚¬2´«Í&Ɲ( ª| æ‡î§´€;+Õç“°àŒ®+›áÉ!æßÊop×7¥›mšCѯ ð·ú„Êv4 ØìK)2@ù¶Ej¿ +8ë)ÖÌôÂîÌ ‡N%Çg{ð$œ’{&hµi+wEò$ywd\'͛¿˜F¡4%k+©å nš/&·2Ü»¿àÌ©¬³ªÞh§…¿P¿b)p¨0ܳ+; +Z& WFÝ`_xGŠÿbÃã4¦Î/Óô€~SÖà¢_Ki÷¤‘^Då~WZ¯ð<қ3½)8 tÒÇ؀‹þ¡Á”õ’ÄëŒóK÷Óx¥z 㗃ÎåǒYÛjö•Šà1ª|ÈôÜüÞ¡ÈbɽÃ"“˜Õ}ˆòѝ>I=ÿ®‹æ@?3ì<ï'9Óå8úAJûór„ °a™ý|ªŠ‡‘ŒºÔ"l8ñxm³ÉÞøÇï†Ryƒòat1œYÐa«Sá–ð¢~Zø‰†i‚Šã:_¡N¢A¼ó(½¯3T¢ºJmÎAñ¯óãúÜH/GTå=ßÌ[+ˆ]ilS'K>§1ÍqÕåؾBUŸ«Ð²JÒV +þf>}Pþ3QˆŒCJp]†oÛbE$UÐI”â蟸㣟÷±îò²y™öu˜Ä†9ë×r³ûq„K ŸH02N`{Ãfb¥ PeÐë_•¦²žÖÆ:¤H|‘_ù„E \§„Rå9Ô1)Î “3”Jh‰£±û5ð0’»mä0æôœ¦IÆ %£ÉÖ^Ået§ 3'üY÷ë¦RÀ¬‹ùG¡•ŒHŒƒùl•~Ñjk 6líF™. ô´ðÀÒ×£{ðægÁ>Ä| œÑ …qŠ¯@Õ[Ø+6+*ŀ·ùõüãÍ:^ÎÊ76Mž—$½ùۍ_¼9°5á3‰µ° +endstream +endobj +1514 0 obj << +/Type /FontDescriptor +/FontName /CQFTRV+NimbusRomNo9L-Regu +/Flags 4 +/FontBBox [-168 -281 1000 924] +/Ascent 678 +/CapHeight 651 +/Descent -216 +/ItalicAngle 0 +/StemV 85 +/XHeight 450 +/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/asterisk/at/b/c/caron/colon/comma/d/dollar/e/eight/emdash/endash/exclam/f/fi/five/fl/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) +/FontFile 1513 0 R +>> endobj +1515 0 obj << +/Length1 1647 +/Length2 11997 +/Length3 0 +/Length 12850 +/Filter /FlateDecode +>> +stream +x^­wUT\í–-Ü] ww÷ànÁ) €Â¥°@ðÜ‚ îw Ü!8Áݹüÿéӧǹ·_úöCÕØߚËçúÖ›–R]‹UÒÒÉôÞÉÂÊÉÆ!P;˜»»i:9¨: *³j‚¬Ý @{ÀƋLK+í +BÀNŽ2@H ²Ȁ,+rñ|ú„ýÛç¿Î*@ˆ+Ø `ÈÁÆÁÁ xûÿçï_'ãs#ëhádù×iA€Ž–o£÷Ÿ‚¿` wW×7ÆÿÞo•ÿóü÷%+»úÛáºÄýÛú¾áÁþÎsøîmæìX$Za _ò!eÄÛÌõªÎâþÁƒßÅÍ'ýٝ:Б*ÍIºæã¯{®+M|gþŒ "[Ôm®Q[ˆ P);R9ø + Ô‰…¹x™BƨH~êôzxóühzù#¶Ž-g;ûÞÁ(÷ù„¾<¾/ר”ª±µeþŒ­x•½)ñµ±ý0#n:¸{£C\")+Óõ~«Ï±/vå Ríï/÷“œK-­âçâ©Ëòi&¯´¨þïf¨X«9ßÉk°`×ÚR%@Íœ‚½´, ïQ3 ™,Wâ‰á›&§Ûð@þýŒ)8|!+úþ;$›âŽzZ¹ÞÚ2)e,× +¯;‘ϯ¦ ÉÊ(ŠAÜýq¢­ßƒúã”~ QÎԎ†8šÅyM‘ÊÍ[Ïè„yì´¢§¼lôrù¾žÐ*žŠ +U‡rìÔ'™'¿ŽÎo±@ÑWˆ\Ž£Ú¬‹N¨V„¢7{99ʘJÁs¥¹ʾaŸÄk¦?Æn…I2#¾Z Ж·Íùƒà%ÕÕ¡{÷ŒŸ_§”¬H‡!5r^>0Ô 4rѺÈ5‡ÉÚÿ¤i¦¨Ð¯pùvhó£Üaܜ­óòîhŽÔ9E¯ÿ·’%™3fÁ«`÷âyÃ^ÿ?ô!ÝyÆæÙK+ìÈÐ÷+DèŒ-܂NCú1Z^ý]UxR–ãþŽ¼ÛB6 +ÉÛçBë|ŸÀsôD¿mf nòu%ruäÍÂGÏ÷NMîh®”ÞMú û×õ(ي„É,Í  ùh—ßí >~M¾¸É +P¦I,uÒyëŠüymÿq¿n3§xÂ+J'öõÁs/¬ÿÔu7¿!©~Åq§˜yõÍ/<#8ÞÐU ¸ð¥X¦fœÖá,±××2âiIÐ< ù†~Q`§ÕAJI”Öîë.ó¹9õ¡ëžuŒ1ûO éâÖ'“§¥d3Å+‚vo²Gd bòúZ%µ<½ñ!¥°½‘‚rz냕å‡F¦ .ju<ìaràšv­â\”äÏÌ8‡z›ôÙáj»Àï;…A¯ ïð?ZÜs43f¯«æ9|ÌGõ=Ç wësW ò Šbßڎ9z…1Rˆ¶D<^ÜÃú™Ç™£çÜjn¬³;$wÿ¤M"èÙ㪠£ÔX·²£„²Ñ*¢š‚®-?7jG/0Ž(“zïÞ§ÒÆEÌ/p=¿K,²2eRѱ&à®)²þŠ!…¤èë‡6{ÁÁÛÿm†`£®¬Y86›KŽ§'Ïa’À€Üà}_†•PXlÔÖº†/åϖéèeÊõ¸z·v£ 2ŠOALz-šÏ6T<ªtA· ?³S‘‘ÇŽ§(ZÐ랊Ð{ڜ׌K½oD·i`–ˆ 9Š]˜·š§­è†µÊS˜ˆz¿X3©`’“<¾›¸¿öü€±_¯I]¤®\0F÷°ënN}ñj¨Óî»Ån15¸€P ÊRÙ?)s“#A_·^àK¸ßŒá ƒ¡„>ßp|s7©-^n^MÉn¡,VäÌu6¶u¥ ¸¸D¸¯¿J'7p†WSX5¡ym`cG]^6ìJÅP8v>#Y´¨J´Ä!;h;¶M‘¨ÛŒŒ~s@°Á?¼ýeí?†+iU¤ï¦†×SÀÌ¢‹3uÓ š˜û! u~›?¡ìW  \.¸èr_gâßç#'¸·8/TŸeÒÆ°ƒãjOKÐ_¤™Å¦-êøÀÇo¯ö‹ ‹Ø¤6ŠquóÂ+'¾Meù(Q;5[ˆ¤¹ät%ìè¸1OfƒæLÝykq,&4„LJ„Jn1帔ž_Á°Ô®‹øó×~`V¿ZÄ.ùësÚ»î­Q`*Û+µ`ÄÀŽÍŒâÍ1Ì [•ÂW®–Â^憸~J àÖ¦/ž [ÿQä±3cJ^[«KñËÝî»ÂxÜÃhÚÕ­«È¤,k-ZÝ9öJH}YZ‚Aáë[\‹ÁìU=1+ÿc:ØåTõÆ@ýýg^aÀñò*ºÅú±Cٕ5°))c-,b{­Ac¡ƒu&žàWÎÙ·”‚‚2¥ÚñÞ)àÊbbZ78l–±WmŠ»†¬TýbjP™z ˜”ƙǠêi‡Påª\®H`RKÞ£ö¢hhˆ0¨Tê9zV†ƒýAYË3I7 N1«'í›aÞ62d8ă3œÑ;Z~…T +o\>g™[,^’9運bøbÈî,+"ÓÖ êÙñÊ&puÚøOÊ»ÓòmƒhŽY¹Âùÿ‰BÑ˟„_³æß㡚4\!ŒN7Ð7ƧP/ +⹬£ö(žôjV¯žPuµ¸e+Cýza‰,}5íÊæ*<@íœe€1¢0;f) +_øO5p²+«­55þÌ2 at C×aÎÌ%MØÇ:Mû3'þ±Ï¤q–4¦“¿Þ¥¥ÿô>8TÛU-ñŸK´€ŽuG÷ÔxÞ©{ªŸõu£eÒQ:Ý§«u؝åË»1Ø ì™8§ßgäV(¿f܈¾ l—ž·y¬³(Ý;wâ,Dv½ôx¹ J/¹‹”9ñüh%I¼6ûš‰W1¿ËÉ D2‚¬áPjî‚7è_$tîìƒ×9–ÍÙjÁÏ}ú× èJ2 T·³'T J³¹à :lÍuù䍈ùRC@ϊëqš¹|¤?’Ð;\ðº,{¨ b¿ªš ÅC‰Üô£îIV?"ö>Î$\Ü=Ùۓ©†ïˆú0ÞþVê4ÙÄC²m“ÊÍ[£Å>CYp­øŒNè ÎÂÙá5ÄWŒªÚ¤‡›ËAq—N½;©§ö€I9IC#Úc4n˜u$a•àX£ ¨û8ší@ +·X.ÑÅÂma°¯¼PtØ×p{ÿÕjð‹üÞíÀ]s÷†‡+OéÄýÀSdƒe²ð"2³ÎBaÄ°$×ύm졝Ïíä·^¥&ø'ÑUB +Mî+ÖÚºôIy‡·¿êK¯=,T¢}&Tƒ™æþlL Dül ­§äÙÛÃãùQr·—±%|Þ·†r:j/[h~‘eӓî®A„àöÈKâ>³¯QÃrö2ö}™,Ò? ­s:ã] DMF$ÍúJÏ®P]F‡®2à¤ô˜3P$HT: žÐë÷•Q¾^ Ü_×r%hê¸!ȋÑëDžV¯¯{ŸFƄúýß >§˜ãóÁ”0~ööõê™ïþÍ;°/ãÑæÍϼOÙ¤)†#Β#%\@ZŠì6J eu«û-³´;Z+Ǽ†+køÖ¡]• +Юz x¨€ÿ1ì K;ö´µw‚©ñ„P"Þ[j”pœè 6sKW„¢1eáÅâ°áLù4ºõ#'\é —PUk̄šâƒÏx÷ 1j¬ÑÃ^(œnføȺ&Å_ë$³?AL$¸Éîåýz8 â<ðäeØs’éx1°ŽÞ(ÔÊòeõ£m´ïÿÒ­ºX­o'Ÿ§xì7öñÖÀ#é®Ù§îӍ$Ȭï‡ðåžìà°Sæ£ãPq^ÒØùVðb3vÇ3¶A©ðžeäi³pUÍkôÜ$9´ï4ñƒ#ü¢€uJ tj¸@äðëÏï¥JÓC;¸/ô҂ì–kÍ« kDj=ÏO#·Ãõ¾SM´e¥¦¢v8Àõa”{ÚӞJ©BGäkGîî½Æ¿ýR֑ï(ͱ•unqžw’,ëÔ=QŠœéff)jïgý»ðš,L™¯òüÖk~ ‹r~ªt V¹a¿ …µ]© 4‹¦D»J ±d­–øӐ$Ü÷'Ý¡”C‰~Lƒ@ý¹Øc¶L,. Ž)&§)1’ñÚh{Y~²6>pÒ&?‰\Án›ŸKGó1 3ãl¤àÊY×Ňøbùì+>Ê “ jÚh!F·ðïvDÒÇÌ­€Íçìµ87´Šß3;桶$×bÛ +÷·¿À^2¯çF'¥Mkþ½Ð=ÐTY>™Îú¥ôÇ·’ˆ¢üaŸN«ˆMÔñRüb]£Ùi”eŒ7foÍƒ…âðUŠ|MzQ$¶]Ûc*œÏqk'‹]ڎ«ÞC …€L¤PY¼¾t¤å‡À;èõåÁ£%oq-faóçð*¬Á™È&KºpRãc_åÖDք”`[1‘1;(Àrs$œK=T+—I—!)¾ª¦¿]@Ò(öþµ;xæ6nŒL­f  ªKw¶,yßw,ª¬~”²~ g`{þ©¯~ü[à:çc£Æ—PlÝ9ãU;N', ‹ >¥½"ö´>lüÃýÅ4Hæó’Ú¶aÉ’êÌÖÔݪôö‚zÞI>Aë¥ãTYŠ5郯ò»ôæu²ù˜®ƒXяîk†ö‘:¬{Þf£~âä.ÛøèÎü²;YMªÕKÉOC¥ZÓÁÚ»µžWyv®][‡ùêv#Rj%ˆœí¬÷éÏB‡ËËS°+¼ä…(ÒòºD›üTý½›"“ý»óλ!ä?õ›ÐÔØÞ3䈟Æ—‹ƒùÝå˜Ð¬%  ™$YÚtH(ÄÅ s­¦!Ü^z"ÅQ:Ah1”™^φõ,\ Í§«"P²Qqë}f-Ê'º+3@*Š œPIËgT8ÎãQÀEÇR…ÉãJ !{eΫN˽fûhããçÖ挛ŽíO]ÜçEÍd¯¯û40™R~œAvˆÂîdakaŒá.†€ÄP#0—öU™ÙtßÀ²¶ÀÚ³Ÿ¤=¹˜ËÔ^´7v>G‘¾û…*íXï‚6ˆV>=¨1¼Ÿ'9ð! É=HýêՈŽÐ~މk40cžSº&‚Ä•.Öi8‘YÛ +ˆzÑ;T˜‚·ða„恉Ê=øœSs-Êga÷èÉ +iIm9(ž›fG¢Ko³•Ø™ûþÐvùoZOäÒÁÁÇBT*ƒóùsæL at 2‚$ÄvÇ94UD¤ xgÜ°K•þ„çFk0ŒÆÔ?¢é2—ÚŠ¢ÕõÙÁÏÍ5Ĝëæ9*’Fçác¸]|%1¬ÊIAñRS :zò±–“èbíõu¶=f1QÙqo3:ÿ‚:¶Ñð\õ³ŒÛ§ _2Ž>r R`@ BÜե੠LÍŸed­_§,'ÂÇ·oÌ9xWÇýle¨VS¯®`¼nVXÆ_ò˜iÜömîsÃpKõꄒéR ŸÄ2ùQcÅ­¬®3èېùø~«é Åà~ü/–‘{œ3Jg›ùvà§J4øç㋇y¸‰³#`- E0Uûސ(MÐý’FåêՑÍ÷@@ñªå#:sr/>:•†HX²RèriÉPÖJD~|K¤p`Z»LìzіǏÊÌ5½)émTøÒkþ%?OBtqYO“eW‹hñÀ«NÆnœÌ +•ðÞL̓L;z>ÙDÚ®…†ÑÃ?Äô]=¶7;5ßüšÕÛìƉÙ&î{U%«Ï݂"SnKŠ£)!õnHržÐ§­ì-òâÙ_tUæ´e“§“¡Ÿgù»kNµ7¹ØûšÁ…!Ó+ýeýë"¬Ì5MÔj"LLJîι\“‚NdÍX**’=!]Ó†úfw4í Â‚>y QáZ½ª2úMñÏp* EôPFsÏ»¨}$¡t6kÖœ3áÚYL´ˆ­ƒÑ&C×¹| QÉë*ä/È­14¥ä3†ñ;3ì–òU~«ØÏ}àlÞA%2†‰Ê` ØWù_ï°O§@Àڍ|ä4ÍéÒÓ³q¥“z‚TҘ*pe¨Äò(_}x>M–ä\¾1m¿V‹#3¨RîÔ2“Ó±Œáñ+Å#ôuÀ1wɫܨtoîY¾ó‹MG*¬ÅäxŒnxIpGB îA7 ýš¾õ|ò$¾‡hÚ›_|µs°êA +Ϧ;`MÑÜú劈B&͚ºæqL?”èK—´ØLx‚&¸:’ˆßþ`õN;µ²ß²ù£© &ÆsòÅ`õ‰sø´…Ù£ÞÚ=Ïs¬3¢¸Õ‡ˆ¶œ‘³gZÿókTu&^iËE›¢\×R<µ/\¼áĂFdÞ{çråÙ¹+y”÷¥¤64X^q^šŠsJïzAžËÁ "G‹ÅV.Ò çe?ôäàªu¢gO9sà-Ó}®¶½‹Ýº Ï:®Ðñ«Ö™’ƒÅRbý3_i€ó¸ŠºúTœËºÉÐäškñÚK+G’N Wqs‡TwQÀö/„H‡¦ ^ç٘°yÁïâL&jœH†ÆÌzÚdzP*“’Ⱦ߱ñ©MêÃãæζ¸0W”42±n´GâL=w¡;æ’ Ï„Û!{kIÚ¨ +Õ6ÖB¥^5—HvŠ‚­~.×'Q«sÕy\žID©,…áÛD÷„‡äwpUé(E!HvBmjå2rרN7þ0TßD9…p$+ÒTâQcºdƒâtÍe"Š,;yn¾--ì[i‡OÞe»†íQ­V‡ŸT¦á˜Îó ÒKî•N±øNR/Š3`P°'”›^8w++¥6òxâÀ„ÎÜe¹pš °xþ}H&©ˆ6ÒJöPI"{b•ì†!%þÕb;®Ó¾[—ÿfƒÓgÈð‰º÷Ϥñ]xŠRYáRÂà»<±&ŽÜXi‡•L½gb4ÁGÌþzWA;Äï¥w¯ÄH¢§Ë¢£Àq˜.¡çAd†é<˜¾=Ùø>BÑÃ;x˜ùUXߊOn“èŽç¸ kÝv÷ ͔5k9®½›ý¨2_Τ(µ~Ëêa 5‘,<7qîŸnb •[Ц¡DM³ª94°í„×h£Â(K‘b®1g´yÖ»Ã{Tu›Ðb¤þä`çFŽ0>r­nõûákl at tؘ_%QۖQÐÀPˆ40}?tXˆéºróûžKŠš¦3.£8²Éð[Ks9¹a¢š eumuӃýÎÐ_ˆdžMÆ!9oAž9©þËe®Ãa95r›±éÝÚÖ«^p$Öñƒó¨Ü¤ +ðw _0|@†+q]›;ï"°IKÙ2]lù4õƒcÇ$<ŠzÑ/k7£½t.¶é£i$^˜VR[ŒCïdÄ<}µÇX@ÜM ¶žZ|«O¦XF©þ8ì»±éë#¢§çÊvfª=ïß±À,†Urð3Çח˞1¦ û"êÊz³Íä}Nö{º²¤TÝ´‚뜏…vU§ä¼·v°d´Ô,·Ä+{GñM°o?ù—1X»j2t´Šz u·gS˜p„Š@4#òÛàèÐMñ­©T'¼,02÷eèÖ1û³Ýօgüì+3*ºGÏÓeMeñz.âv¢ºñÌHINÊz¸qœÜ~¼bdÜo7;þ¡çtח£] W'鎆Äo&ç¢Ú\óÝ!ði{ï§P.ã”…µ6O‘3÷«(£Žô’¬k¸®ÐiÍF>_,¯ë �bó•C6MÄ …zI`î¾Ä–³ßÜ-a^¯©šü +WÃx)Ƌ‚2=‰Ã niøyà9Pø“Tʺ tÓ-¦ ÀäAä‰o}Ðú“þXe¼þÈèÙÅÙbH…VGý™*¼Hi©X¹bY¹d/`'èe(…­š1~–dVk,º­R¶F!~gáC€Æ0|˜•Óø#M+f]9SNå »ªe{fóÜÄ×s"’ʧU­ÛH'–÷M?ýYî„Íb°&7úò(;ÛÈgœÕÈâ¦p㗦¸Þ‡”åÊ_=ÛrÃ7-‚fgɄµð«Â(ôùÛamZœ¥ãû­È¬­¯ÀL´‹k\'¦áù±ɸƒŽ¡yrÍâG?b†6ƒaòú&Q‰òÄÓë“O"t¹öþôÕp;ØÓÜ"ï“™í°Šb‰5²ŸÌ¡2[• ýL­Nlø^*{m +v+‹C¶„S28®èó'LDO”ËÜ©Y>¡$ÈO麶b_w®-UOˆdËU‘©‹Ò«KBöFéò§¬ú_XtVùU_w&8͐?üaUSˆA-™_Ç͎/•Q²®G„Ó 7ŚWxVÓtpÇný6wçÂiR˱§XÞ¼ÕHCĵZ«0êEq7¯6–^wê$ñ),-]aÿS,ªƒ“/úAzà ó‘ë;Iò÷ ×B…º»š \²-˜³Äz«Ïê/ªˆë/¤Îۅ¹Ä7LЊ ®÷Æ£Y/;ó-¨S´Íì]‹œõvАTƬˆúWv¬H?Ћά6`€jnµ[å#jö®ñ††ØJÏá4Î'¸ª³ÔÄË[“&È:IæLÒ¯6Ú‹ß7œÞÉEë ñÈig¾|šàˆùn|%¦ÿu²:–œÝZÖÆd4¿Yyaf˝``ª‹„aÏþ Z.·JÅri:ß÷q§¶+`æ„dHÛtۆiZY7%Zûí‡sNÓ 7Ew¤KÃ(u®_Sd€Uˍmèƒ-ri†\~ÐMÛö‰kª!=JÇÚô¡9¾n‰ÆAÀš±ÇW…®¸ žœóÈ,†×JóŽñ^¬/¡wÁÞæól—S4ß}”Ki1L`m¾Ÿ´0Þ¾²÷Èò!¿À|(„^¨”fþú«øD´V»‡þYÇ6—7Õ1'ñÚÚá—ßϦ…ÔÜKøsrD¼6Waü]¦. Ù¼"˜ù½ 2âAé¯ ù`‹|¸Õ˜ÔÌçAÂ:$¨´j} ⊾µéf³oõ#ÖJ×¹|‰©‚š‡°Z©M'Ì^;ÿq·Ÿ•@ÀÅèÒ*ÆZ1!ã—ªÂü�! � Gâ -cÛ§*pèRwþþéq,?±?1€j(3×)Ät± ‚ŽA=ë9 §¾+™ó1Ó+¶4:nf¬í#ºipÙښþ+ÒÏZ$vŸâuVÔnrlŠÿÙ ú~uÜë®5Ø0ÎXç Q×VwŒ+ZÈæ†:‹mNäÑHª¤Ke¸’²¼¥2 õsىê]t•R;Fú®µèÓ=oÅUN%„uI¦--Ñ[ß-­Š_àÄÓÖYDÀbV…ͽxÂ@ ÇgôNŠ»ãÔo¸ñ½2È¥øãΊ3™Mñ>Ík/Û +sbuÉ824êÜò6ýÛR8ăÃG‡yOÊwÄõ\êi*‘èá’ã qÄOäÎkN”À¼õýüí$—gãNä½ëv¬Õo‰›¡^Ìw%Èü¬7±¥…™wuŒ†@LkI + zÖ68ßɱ—XÚ5í0Û¡Ò¬ßlE¤ÁÖ¦°½v<ú½ýÐgíÁëŠÍW ¹Õ½Âíñ,î5e¼Q;‘Õ?³¶>9ÁfW u>±ŠüÞú’—Ÿ²¦ò«ŽŽE’®÷‹Îg)6†9ñ¬±eÈÏQ¡ä0Eú¬ØGßU«øµôMñ8 ,K»A@,ύûÙ¯ê>­ïQ£©—¸Ýfñòz!|9xÞͶ À\hf©5÷Kѐ.yŽínr袤÷(pºé´£)Ñè€dÎX«Ú½½{¯Ú$>_>Â!p²_sÄ tl§~FpÙkú!Ûì«wn# ÎwåhåúèaO:Á–+endstream +endobj +1516 0 obj << +/Type /FontDescriptor +/FontName /BKLWOF+NimbusRomNo9L-ReguItal +/Flags 4 +/FontBBox [-169 -270 1010 924] +/Ascent 668 +/CapHeight 668 +/Descent -193 +/ItalicAngle -15 +/StemV 78 +/XHeight 441 +/CharSet (/A/B/D/F/I/M/R/S/V/W/X/a/b/c/comma/d/e/eight/f/four/g/h/hyphen/i/l/m/n/o/one/p/q/r/s/six/t/three/two/u/v/w/x/y) +/FontFile 1515 0 R +>> endobj +1474 0 obj << +/Type /Encoding +/Differences [2/fi/fl 16/caron 33/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 95/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 125/braceright 147/quotedblleft/quotedblright 150/endash/emdash] +>> endobj +797 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /MALCHJ+CMMI10 +/FontDescriptor 1488 0 R +/FirstChar 61 +/LastChar 120 +/Widths 1471 0 R +>> endobj +636 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /VEBHQC+CMMI12 +/FontDescriptor 1490 0 R +/FirstChar 58 +/LastChar 121 +/Widths 1480 0 R +>> endobj +639 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /PTAHGI+CMMI8 +/FontDescriptor 1492 0 R +/FirstChar 119 +/LastChar 119 +/Widths 1477 0 R +>> endobj +795 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /PZGEHT+CMR10 +/FontDescriptor 1494 0 R +/FirstChar 48 +/LastChar 61 +/Widths 1473 0 R +>> endobj +638 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /YDTWCL+CMR12 +/FontDescriptor 1496 0 R +/FirstChar 40 +/LastChar 61 +/Widths 1478 0 R +>> endobj +796 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /JGKPJP+CMR7 +/FontDescriptor 1498 0 R +/FirstChar 49 +/LastChar 57 +/Widths 1472 0 R +>> endobj +640 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /PXYKCN+CMR8 +/FontDescriptor 1500 0 R +/FirstChar 49 +/LastChar 116 +/Widths 1476 0 R +>> endobj +637 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /KMSHUG+CMSY10 +/FontDescriptor 1502 0 R +/FirstChar 0 +/LastChar 110 +/Widths 1479 0 R +>> endobj +620 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /CXUWJA+CMSY8 +/FontDescriptor 1504 0 R +/FirstChar 0 +/LastChar 121 +/Widths 1482 0 R +>> endobj +779 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /JUWVIE+NimbusMonL-Bold +/FontDescriptor 1506 0 R +/FirstChar 37 +/LastChar 120 +/Widths 1475 0 R +/Encoding 1474 0 R +>> endobj +451 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /FEUGUV+NimbusMonL-Regu +/FontDescriptor 1508 0 R +/FirstChar 33 +/LastChar 125 +/Widths 1484 0 R +/Encoding 1474 0 R +>> endobj +621 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /JKRAQN+NimbusMonL-ReguObli +/FontDescriptor 1510 0 R +/FirstChar 45 +/LastChar 121 +/Widths 1481 0 R +/Encoding 1474 0 R +>> endobj +359 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /ZRYYGD+NimbusRomNo9L-Medi +/FontDescriptor 1512 0 R +/FirstChar 2 +/LastChar 151 +/Widths 1485 0 R +/Encoding 1474 0 R +>> endobj +327 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /CQFTRV+NimbusRomNo9L-Regu +/FontDescriptor 1514 0 R +/FirstChar 2 +/LastChar 151 +/Widths 1486 0 R +/Encoding 1474 0 R +>> endobj +612 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /BKLWOF+NimbusRomNo9L-ReguItal +/FontDescriptor 1516 0 R +/FirstChar 44 +/LastChar 121 +/Widths 1483 0 R +/Encoding 1474 0 R +>> endobj +328 0 obj << +/Type /Pages +/Count 6 +/Parent 1517 0 R +/Kids [322 0 R 357 0 R 397 0 R 419 0 R 447 0 R 504 0 R] +>> endobj +558 0 obj << +/Type /Pages +/Count 6 +/Parent 1517 0 R +/Kids [554 0 R 580 0 R 584 0 R 593 0 R 601 0 R 609 0 R] +>> endobj +622 0 obj << +/Type /Pages +/Count 6 +/Parent 1517 0 R +/Kids [617 0 R 625 0 R 633 0 R 644 0 R 653 0 R 660 0 R] +>> endobj +675 0 obj << +/Type /Pages +/Count 6 +/Parent 1517 0 R +/Kids [670 0 R 677 0 R 700 0 R 715 0 R 721 0 R 734 0 R] +>> endobj +745 0 obj << +/Type /Pages +/Count 6 +/Parent 1517 0 R +/Kids [740 0 R 747 0 R 752 0 R 758 0 R 764 0 R 770 0 R] +>> endobj +780 0 obj << +/Type /Pages +/Count 6 +/Parent 1517 0 R +/Kids [776 0 R 782 0 R 786 0 R 791 0 R 799 0 R 803 0 R] +>> endobj +813 0 obj << +/Type /Pages +/Count 6 +/Parent 1518 0 R +/Kids [809 0 R 815 0 R 819 0 R 824 0 R 829 0 R 835 0 R] +>> endobj +846 0 obj << +/Type /Pages +/Count 6 +/Parent 1518 0 R +/Kids [841 0 R 850 0 R 855 0 R 859 0 R 866 0 R 873 0 R] +>> endobj +884 0 obj << +/Type /Pages +/Count 6 +/Parent 1518 0 R +/Kids [880 0 R 886 0 R 892 0 R 900 0 R 907 0 R 914 0 R] +>> endobj +936 0 obj << +/Type /Pages +/Count 6 +/Parent 1518 0 R +/Kids [924 0 R 940 0 R 948 0 R 954 0 R 960 0 R 964 0 R] +>> endobj +973 0 obj << +/Type /Pages +/Count 6 +/Parent 1518 0 R +/Kids [969 0 R 976 0 R 983 0 R 987 0 R 993 0 R 997 0 R] +>> endobj +1005 0 obj << +/Type /Pages +/Count 6 +/Parent 1518 0 R +/Kids [1002 0 R 1007 0 R 1015 0 R 1023 0 R 1027 0 R 1031 0 R] +>> endobj +1048 0 obj << +/Type /Pages +/Count 6 +/Parent 1519 0 R +/Kids [1041 0 R 1050 0 R 1057 0 R 1062 0 R 1068 0 R 1074 0 R] +>> endobj +1084 0 obj << +/Type /Pages +/Count 6 +/Parent 1519 0 R +/Kids [1080 0 R 1086 0 R 1097 0 R 1109 0 R 1116 0 R 1120 0 R] +>> endobj +1128 0 obj << +/Type /Pages +/Count 6 +/Parent 1519 0 R +/Kids [1125 0 R 1130 0 R 1135 0 R 1140 0 R 1145 0 R 1151 0 R] +>> endobj +1160 0 obj << +/Type /Pages +/Count 6 +/Parent 1519 0 R +/Kids [1155 0 R 1162 0 R 1167 0 R 1172 0 R 1179 0 R 1187 0 R] +>> endobj +1198 0 obj << +/Type /Pages +/Count 6 +/Parent 1519 0 R +/Kids [1194 0 R 1200 0 R 1205 0 R 1211 0 R 1216 0 R 1220 0 R] +>> endobj +1227 0 obj << +/Type /Pages +/Count 6 +/Parent 1519 0 R +/Kids [1224 0 R 1230 0 R 1234 0 R 1239 0 R 1245 0 R 1251 0 R] +>> endobj +1262 0 obj << +/Type /Pages +/Count 6 +/Parent 1520 0 R +/Kids [1258 0 R 1265 0 R 1271 0 R 1278 0 R 1282 0 R 1286 0 R] +>> endobj +1293 0 obj << +/Type /Pages +/Count 6 +/Parent 1520 0 R +/Kids [1290 0 R 1295 0 R 1301 0 R 1305 0 R 1309 0 R 1313 0 R] +>> endobj +1333 0 obj << +/Type /Pages +/Count 6 +/Parent 1520 0 R +/Kids [1328 0 R 1335 0 R 1351 0 R 1357 0 R 1364 0 R 1374 0 R] +>> endobj +1438 0 obj << +/Type /Pages +/Count 2 +/Parent 1520 0 R +/Kids [1435 0 R 1468 0 R] +>> endobj +1517 0 obj << +/Type /Pages +/Count 36 +/Parent 1521 0 R +/Kids [328 0 R 558 0 R 622 0 R 675 0 R 745 0 R 780 0 R] +>> endobj +1518 0 obj << +/Type /Pages +/Count 36 +/Parent 1521 0 R +/Kids [813 0 R 846 0 R 884 0 R 936 0 R 973 0 R 1005 0 R] +>> endobj +1519 0 obj << +/Type /Pages +/Count 36 +/Parent 1521 0 R +/Kids [1048 0 R 1084 0 R 1128 0 R 1160 0 R 1198 0 R 1227 0 R] +>> endobj +1520 0 obj << +/Type /Pages +/Count 20 +/Parent 1521 0 R +/Kids [1262 0 R 1293 0 R 1333 0 R 1438 0 R] +>> endobj +1521 0 obj << +/Type /Pages +/Count 128 +/Kids [1517 0 R 1518 0 R 1519 0 R 1520 0 R] +>> endobj +1522 0 obj << +/Type /Outlines +/First 3 0 R +/Last 295 0 R +/Count 10 +>> endobj +319 0 obj << +/Title 320 0 R +/A 317 0 R +/Parent 303 0 R +/Prev 315 0 R +>> endobj +315 0 obj << +/Title 316 0 R +/A 313 0 R +/Parent 303 0 R +/Prev 311 0 R +/Next 319 0 R +>> endobj +311 0 obj << +/Title 312 0 R +/A 309 0 R +/Parent 303 0 R +/Prev 307 0 R +/Next 315 0 R +>> endobj +307 0 obj << +/Title 308 0 R +/A 305 0 R +/Parent 303 0 R +/Next 311 0 R +>> endobj +303 0 obj << +/Title 304 0 R +/A 301 0 R +/Parent 295 0 R +/Prev 299 0 R +/First 307 0 R +/Last 319 0 R +/Count -4 +>> endobj +299 0 obj << +/Title 300 0 R +/A 297 0 R +/Parent 295 0 R +/Next 303 0 R +>> endobj +295 0 obj << +/Title 296 0 R +/A 293 0 R +/Parent 1522 0 R +/Prev 259 0 R +/First 299 0 R +/Last 303 0 R +/Count -2 +>> endobj +291 0 obj << +/Title 292 0 R +/A 289 0 R +/Parent 267 0 R +/Prev 287 0 R +>> endobj +287 0 obj << +/Title 288 0 R +/A 285 0 R +/Parent 267 0 R +/Prev 283 0 R +/Next 291 0 R +>> endobj +283 0 obj << +/Title 284 0 R +/A 281 0 R +/Parent 267 0 R +/Prev 279 0 R +/Next 287 0 R +>> endobj +279 0 obj << +/Title 280 0 R +/A 277 0 R +/Parent 267 0 R +/Prev 275 0 R +/Next 283 0 R +>> endobj +275 0 obj << +/Title 276 0 R +/A 273 0 R +/Parent 267 0 R +/Prev 271 0 R +/Next 279 0 R +>> endobj +271 0 obj << +/Title 272 0 R +/A 269 0 R +/Parent 267 0 R +/Next 275 0 R +>> endobj +267 0 obj << +/Title 268 0 R +/A 265 0 R +/Parent 259 0 R +/Prev 263 0 R +/First 271 0 R +/Last 291 0 R +/Count -6 +>> endobj +263 0 obj << +/Title 264 0 R +/A 261 0 R +/Parent 259 0 R +/Next 267 0 R +>> endobj +259 0 obj << +/Title 260 0 R +/A 257 0 R +/Parent 1522 0 R +/Prev 255 0 R +/Next 295 0 R +/First 263 0 R +/Last 267 0 R +/Count -2 +>> endobj +255 0 obj << +/Title 256 0 R +/A 253 0 R +/Parent 1522 0 R +/Prev 251 0 R +/Next 259 0 R +>> endobj +251 0 obj << +/Title 252 0 R +/A 249 0 R +/Parent 1522 0 R +/Prev 203 0 R +/Next 255 0 R +>> endobj +247 0 obj << +/Title 248 0 R +/A 245 0 R +/Parent 203 0 R +/Prev 219 0 R +>> endobj +243 0 obj << +/Title 244 0 R +/A 241 0 R +/Parent 219 0 R +/Prev 239 0 R +>> endobj +239 0 obj << +/Title 240 0 R +/A 237 0 R +/Parent 219 0 R +/Prev 235 0 R +/Next 243 0 R +>> endobj +235 0 obj << +/Title 236 0 R +/A 233 0 R +/Parent 219 0 R +/Prev 231 0 R +/Next 239 0 R +>> endobj +231 0 obj << +/Title 232 0 R +/A 229 0 R +/Parent 219 0 R +/Prev 227 0 R +/Next 235 0 R +>> endobj +227 0 obj << +/Title 228 0 R +/A 225 0 R +/Parent 219 0 R +/Prev 223 0 R +/Next 231 0 R +>> endobj +223 0 obj << +/Title 224 0 R +/A 221 0 R +/Parent 219 0 R +/Next 227 0 R +>> endobj +219 0 obj << +/Title 220 0 R +/A 217 0 R +/Parent 203 0 R +/Prev 207 0 R +/Next 247 0 R +/First 223 0 R +/Last 243 0 R +/Count -6 +>> endobj +215 0 obj << +/Title 216 0 R +/A 213 0 R +/Parent 207 0 R +/Prev 211 0 R +>> endobj +211 0 obj << +/Title 212 0 R +/A 209 0 R +/Parent 207 0 R +/Next 215 0 R +>> endobj +207 0 obj << +/Title 208 0 R +/A 205 0 R +/Parent 203 0 R +/Next 219 0 R +/First 211 0 R +/Last 215 0 R +/Count -2 +>> endobj +203 0 obj << +/Title 204 0 R +/A 201 0 R +/Parent 1522 0 R +/Prev 179 0 R +/Next 251 0 R +/First 207 0 R +/Last 247 0 R +/Count -3 +>> endobj +199 0 obj << +/Title 200 0 R +/A 197 0 R +/Parent 191 0 R +/Prev 195 0 R +>> endobj +195 0 obj << +/Title 196 0 R +/A 193 0 R +/Parent 191 0 R +/Next 199 0 R +>> endobj +191 0 obj << +/Title 192 0 R +/A 189 0 R +/Parent 179 0 R +/Prev 183 0 R +/First 195 0 R +/Last 199 0 R +/Count -2 +>> endobj +187 0 obj << +/Title 188 0 R +/A 185 0 R +/Parent 183 0 R +>> endobj +183 0 obj << +/Title 184 0 R +/A 181 0 R +/Parent 179 0 R +/Next 191 0 R +/First 187 0 R +/Last 187 0 R +/Count -1 +>> endobj +179 0 obj << +/Title 180 0 R +/A 177 0 R +/Parent 1522 0 R +/Prev 127 0 R +/Next 203 0 R +/First 183 0 R +/Last 191 0 R +/Count -2 +>> endobj +175 0 obj << +/Title 176 0 R +/A 173 0 R +/Parent 167 0 R +/Prev 171 0 R +>> endobj +171 0 obj << +/Title 172 0 R +/A 169 0 R +/Parent 167 0 R +/Next 175 0 R +>> endobj +167 0 obj << +/Title 168 0 R +/A 165 0 R +/Parent 127 0 R +/Prev 163 0 R +/First 171 0 R +/Last 175 0 R +/Count -2 +>> endobj +163 0 obj << +/Title 164 0 R +/A 161 0 R +/Parent 127 0 R +/Prev 143 0 R +/Next 167 0 R +>> endobj +159 0 obj << +/Title 160 0 R +/A 157 0 R +/Parent 143 0 R +/Prev 155 0 R +>> endobj +155 0 obj << +/Title 156 0 R +/A 153 0 R +/Parent 143 0 R +/Prev 151 0 R +/Next 159 0 R +>> endobj +151 0 obj << +/Title 152 0 R +/A 149 0 R +/Parent 143 0 R +/Prev 147 0 R +/Next 155 0 R +>> endobj +147 0 obj << +/Title 148 0 R +/A 145 0 R +/Parent 143 0 R +/Next 151 0 R +>> endobj +143 0 obj << +/Title 144 0 R +/A 141 0 R +/Parent 127 0 R +/Prev 131 0 R +/Next 163 0 R +/First 147 0 R +/Last 159 0 R +/Count -4 +>> endobj +139 0 obj << +/Title 140 0 R +/A 137 0 R +/Parent 131 0 R +/Prev 135 0 R +>> endobj +135 0 obj << +/Title 136 0 R +/A 133 0 R +/Parent 131 0 R +/Next 139 0 R +>> endobj +131 0 obj << +/Title 132 0 R +/A 129 0 R +/Parent 127 0 R +/Next 143 0 R +/First 135 0 R +/Last 139 0 R +/Count -2 +>> endobj +127 0 obj << +/Title 128 0 R +/A 125 0 R +/Parent 1522 0 R +/Prev 11 0 R +/Next 179 0 R +/First 131 0 R +/Last 167 0 R +/Count -4 +>> endobj +123 0 obj << +/Title 124 0 R +/A 121 0 R +/Parent 11 0 R +/Prev 111 0 R +>> endobj +119 0 obj << +/Title 120 0 R +/A 117 0 R +/Parent 111 0 R +/Prev 115 0 R +>> endobj +115 0 obj << +/Title 116 0 R +/A 113 0 R +/Parent 111 0 R +/Next 119 0 R +>> endobj +111 0 obj << +/Title 112 0 R +/A 109 0 R +/Parent 11 0 R +/Prev 79 0 R +/Next 123 0 R +/First 115 0 R +/Last 119 0 R +/Count -2 +>> endobj +107 0 obj << +/Title 108 0 R +/A 105 0 R +/Parent 79 0 R +/Prev 103 0 R +>> endobj +103 0 obj << +/Title 104 0 R +/A 101 0 R +/Parent 79 0 R +/Prev 99 0 R +/Next 107 0 R +>> endobj +99 0 obj << +/Title 100 0 R +/A 97 0 R +/Parent 79 0 R +/Prev 95 0 R +/Next 103 0 R +>> endobj +95 0 obj << +/Title 96 0 R +/A 93 0 R +/Parent 79 0 R +/Prev 91 0 R +/Next 99 0 R +>> endobj +91 0 obj << +/Title 92 0 R +/A 89 0 R +/Parent 79 0 R +/Prev 87 0 R +/Next 95 0 R +>> endobj +87 0 obj << +/Title 88 0 R +/A 85 0 R +/Parent 79 0 R +/Prev 83 0 R +/Next 91 0 R +>> endobj +83 0 obj << +/Title 84 0 R +/A 81 0 R +/Parent 79 0 R +/Next 87 0 R +>> endobj +79 0 obj << +/Title 80 0 R +/A 77 0 R +/Parent 11 0 R +/Prev 63 0 R +/Next 111 0 R +/First 83 0 R +/Last 107 0 R +/Count -7 +>> endobj +75 0 obj << +/Title 76 0 R +/A 73 0 R +/Parent 63 0 R +/Prev 71 0 R +>> endobj +71 0 obj << +/Title 72 0 R +/A 69 0 R +/Parent 63 0 R +/Prev 67 0 R +/Next 75 0 R +>> endobj +67 0 obj << +/Title 68 0 R +/A 65 0 R +/Parent 63 0 R +/Next 71 0 R +>> endobj +63 0 obj << +/Title 64 0 R +/A 61 0 R +/Parent 11 0 R +/Prev 43 0 R +/Next 79 0 R +/First 67 0 R +/Last 75 0 R +/Count -3 +>> endobj +59 0 obj << +/Title 60 0 R +/A 57 0 R +/Parent 43 0 R +/Prev 55 0 R +>> endobj +55 0 obj << +/Title 56 0 R +/A 53 0 R +/Parent 43 0 R +/Prev 51 0 R +/Next 59 0 R +>> endobj +51 0 obj << +/Title 52 0 R +/A 49 0 R +/Parent 43 0 R +/Prev 47 0 R +/Next 55 0 R +>> endobj +47 0 obj << +/Title 48 0 R +/A 45 0 R +/Parent 43 0 R +/Next 51 0 R +>> endobj +43 0 obj << +/Title 44 0 R +/A 41 0 R +/Parent 11 0 R +/Prev 27 0 R +/Next 63 0 R +/First 47 0 R +/Last 59 0 R +/Count -4 +>> endobj +39 0 obj << +/Title 40 0 R +/A 37 0 R +/Parent 27 0 R +/Prev 35 0 R +>> endobj +35 0 obj << +/Title 36 0 R +/A 33 0 R +/Parent 27 0 R +/Prev 31 0 R +/Next 39 0 R +>> endobj +31 0 obj << +/Title 32 0 R +/A 29 0 R +/Parent 27 0 R +/Next 35 0 R +>> endobj +27 0 obj << +/Title 28 0 R +/A 25 0 R +/Parent 11 0 R +/Prev 15 0 R +/Next 43 0 R +/First 31 0 R +/Last 39 0 R +/Count -3 +>> endobj +23 0 obj << +/Title 24 0 R +/A 21 0 R +/Parent 15 0 R +/Prev 19 0 R +>> endobj +19 0 obj << +/Title 20 0 R +/A 17 0 R +/Parent 15 0 R +/Next 23 0 R +>> endobj +15 0 obj << +/Title 16 0 R +/A 13 0 R +/Parent 11 0 R +/Next 27 0 R +/First 19 0 R +/Last 23 0 R +/Count -2 +>> endobj +11 0 obj << +/Title 12 0 R +/A 9 0 R +/Parent 1522 0 R +/Prev 7 0 R +/Next 127 0 R +/First 15 0 R +/Last 123 0 R +/Count -7 +>> endobj +7 0 obj << +/Title 8 0 R +/A 5 0 R +/Parent 1522 0 R +/Prev 3 0 R +/Next 11 0 R +>> endobj +3 0 obj << +/Title 4 0 R +/A 1 0 R +/Parent 1522 0 R +/Next 7 0 R +>> endobj +1523 0 obj << +/Names [(Doc-Start) 326 0 R (Hfootnote.1) 596 0 R (Hfootnote.10) 656 0 R (Hfootnote.11) 657 0 R (Hfootnote.12) 665 0 R (Hfootnote.13) 674 0 R] +/Limits [(Doc-Start) (Hfootnote.13)] +>> endobj +1524 0 obj << +/Names [(Hfootnote.14) 693 0 R (Hfootnote.15) 694 0 R (Hfootnote.16) 710 0 R (Hfootnote.17) 711 0 R (Hfootnote.18) 712 0 R (Hfootnote.19) 713 0 R] +/Limits [(Hfootnote.14) (Hfootnote.19)] +>> endobj +1525 0 obj << +/Names [(Hfootnote.2) 597 0 R (Hfootnote.20) 744 0 R (Hfootnote.21) 794 0 R (Hfootnote.22) 812 0 R (Hfootnote.23) 833 0 R (Hfootnote.24) 845 0 R] +/Limits [(Hfootnote.2) (Hfootnote.24)] +>> endobj +1526 0 obj << +/Names [(Hfootnote.25) 853 0 R (Hfootnote.26) 869 0 R (Hfootnote.27) 883 0 R (Hfootnote.28) 895 0 R (Hfootnote.29) 904 0 R (Hfootnote.3) 599 0 R] +/Limits [(Hfootnote.25) (Hfootnote.3)] +>> endobj +1527 0 obj << +/Names [(Hfootnote.30) 911 0 R (Hfootnote.31) 943 0 R (Hfootnote.32) 951 0 R (Hfootnote.33) 952 0 R (Hfootnote.34) 972 0 R (Hfootnote.35) 1018 0 R] +/Limits [(Hfootnote.30) (Hfootnote.35)] +>> endobj +1528 0 obj << +/Names [(Hfootnote.36) 1044 0 R (Hfootnote.37) 1045 0 R (Hfootnote.38) 1046 0 R (Hfootnote.39) 1053 0 R (Hfootnote.4) 614 0 R (Hfootnote.40) 1072 0 R] +/Limits [(Hfootnote.36) (Hfootnote.40)] +>> endobj +1529 0 obj << +/Names [(Hfootnote.41) 1103 0 R (Hfootnote.42) 1113 0 R (Hfootnote.43) 1114 0 R (Hfootnote.44) 1133 0 R (Hfootnote.45) 1242 0 R (Hfootnote.46) 1254 0 R] +/Limits [(Hfootnote.41) (Hfootnote.46)] +>> endobj +1530 0 obj << +/Names [(Hfootnote.47) 1261 0 R (Hfootnote.48) 1268 0 R (Hfootnote.49) 1274 0 R (Hfootnote.5) 615 0 R (Hfootnote.6) 630 0 R (Hfootnote.7) 631 0 R] +/Limits [(Hfootnote.47) (Hfootnote.7)] +>> endobj +1531 0 obj << +/Names [(Hfootnote.8) 647 0 R (Hfootnote.9) 648 0 R (Item.1) 673 0 R (Item.10) 688 0 R (Item.11) 689 0 R (Item.12) 690 0 R] +/Limits [(Hfootnote.8) (Item.12)] +>> endobj +1532 0 obj << +/Names [(Item.13) 691 0 R (Item.14) 692 0 R (Item.15) 703 0 R (Item.16) 705 0 R (Item.17) 706 0 R (Item.18) 707 0 R] +/Limits [(Item.13) (Item.18)] +>> endobj +1533 0 obj << +/Names [(Item.19) 708 0 R (Item.2) 680 0 R (Item.20) 709 0 R (Item.21) 725 0 R (Item.22) 726 0 R (Item.23) 727 0 R] +/Limits [(Item.19) (Item.23)] +>> endobj +1534 0 obj << +/Names [(Item.24) 728 0 R (Item.25) 729 0 R (Item.26) 730 0 R (Item.27) 731 0 R (Item.28) 732 0 R (Item.29) 919 0 R] +/Limits [(Item.24) (Item.29)] +>> endobj +1535 0 obj << +/Names [(Item.3) 681 0 R (Item.30) 927 0 R (Item.31) 928 0 R (Item.32) 929 0 R (Item.33) 930 0 R (Item.34) 931 0 R] +/Limits [(Item.3) (Item.34)] +>> endobj +1536 0 obj << +/Names [(Item.35) 920 0 R (Item.36) 932 0 R (Item.37) 933 0 R (Item.38) 934 0 R (Item.39) 935 0 R (Item.4) 682 0 R] +/Limits [(Item.35) (Item.4)] +>> endobj +1537 0 obj << +/Names [(Item.40) 1089 0 R (Item.41) 1090 0 R (Item.42) 1091 0 R (Item.43) 1092 0 R (Item.44) 1093 0 R (Item.45) 1100 0 R] +/Limits [(Item.40) (Item.45)] +>> endobj +1538 0 obj << +/Names [(Item.46) 1101 0 R (Item.47) 1102 0 R (Item.48) 1316 0 R (Item.49) 1317 0 R (Item.5) 683 0 R (Item.50) 1318 0 R] +/Limits [(Item.46) (Item.50)] +>> endobj +1539 0 obj << +/Names [(Item.51) 1319 0 R (Item.52) 1320 0 R (Item.53) 1321 0 R (Item.54) 1322 0 R (Item.55) 1323 0 R (Item.56) 1324 0 R] +/Limits [(Item.51) (Item.56)] +>> endobj +1540 0 obj << +/Names [(Item.57) 1325 0 R (Item.58) 1326 0 R (Item.59) 1331 0 R (Item.6) 684 0 R (Item.60) 1332 0 R (Item.61) 1338 0 R] +/Limits [(Item.57) (Item.61)] +>> endobj +1541 0 obj << +/Names [(Item.62) 1339 0 R (Item.63) 1340 0 R (Item.64) 1341 0 R (Item.65) 1342 0 R (Item.66) 1343 0 R (Item.67) 1344 0 R] +/Limits [(Item.62) (Item.67)] +>> endobj +1542 0 obj << +/Names [(Item.68) 1345 0 R (Item.69) 1346 0 R (Item.7) 685 0 R (Item.70) 1347 0 R (Item.71) 1348 0 R (Item.72) 1349 0 R] +/Limits [(Item.68) (Item.72)] +>> endobj +1543 0 obj << +/Names [(Item.73) 1354 0 R (Item.74) 1367 0 R (Item.75) 1368 0 R (Item.76) 1369 0 R (Item.77) 1370 0 R (Item.78) 1371 0 R] +/Limits [(Item.73) (Item.78)] +>> endobj +1544 0 obj << +/Names [(Item.79) 1372 0 R (Item.8) 686 0 R (Item.9) 687 0 R (appendix.A) 294 0 R (chapter*.1) 360 0 R (chapter*.2) 450 0 R] +/Limits [(Item.79) (chapter*.2)] +>> endobj +1545 0 obj << +/Names [(chapter*.3) 507 0 R (chapter.1) 2 0 R (chapter.2) 6 0 R (chapter.3) 10 0 R (chapter.4) 126 0 R (chapter.5) 178 0 R] +/Limits [(chapter*.3) (chapter.5)] +>> endobj +1546 0 obj << +/Names [(chapter.6) 202 0 R (chapter.7) 250 0 R (chapter.8) 254 0 R (chapter.9) 258 0 R (figure.3.1) 510 0 R (figure.3.10) 519 0 R] +/Limits [(chapter.6) (figure.3.10)] +>> endobj +1547 0 obj << +/Names [(figure.3.11) 520 0 R (figure.3.12) 521 0 R (figure.3.13) 522 0 R (figure.3.14) 523 0 R (figure.3.15) 524 0 R (figure.3.16) 525 0 R] +/Limits [(figure.3.11) (figure.3.16)] +>> endobj +1548 0 obj << +/Names [(figure.3.17) 526 0 R (figure.3.18) 527 0 R (figure.3.19) 528 0 R (figure.3.2) 511 0 R (figure.3.20) 529 0 R (figure.3.21) 530 0 R] +/Limits [(figure.3.17) (figure.3.21)] +>> endobj +1549 0 obj << +/Names [(figure.3.22) 531 0 R (figure.3.23) 532 0 R (figure.3.24) 533 0 R (figure.3.25) 534 0 R (figure.3.26) 535 0 R (figure.3.27) 559 0 R] +/Limits [(figure.3.22) (figure.3.27)] +>> endobj +1550 0 obj << +/Names [(figure.3.28) 560 0 R (figure.3.29) 561 0 R (figure.3.3) 512 0 R (figure.3.30) 562 0 R (figure.3.31) 563 0 R (figure.3.32) 564 0 R] +/Limits [(figure.3.28) (figure.3.32)] +>> endobj +1551 0 obj << +/Names [(figure.3.33) 565 0 R (figure.3.34) 566 0 R (figure.3.35) 567 0 R (figure.3.36) 568 0 R (figure.3.37) 569 0 R (figure.3.4) 513 0 R] +/Limits [(figure.3.33) (figure.3.4)] +>> endobj +1552 0 obj << +/Names [(figure.3.5) 514 0 R (figure.3.6) 515 0 R (figure.3.7) 516 0 R (figure.3.8) 517 0 R (figure.3.9) 518 0 R (figure.4.1) 570 0 R] +/Limits [(figure.3.5) (figure.4.1)] +>> endobj +1553 0 obj << +/Names [(figure.5.1) 571 0 R (figure.5.2) 572 0 R (figure.5.3) 573 0 R (figure.6.1) 574 0 R (figure.9.1) 575 0 R (figure.9.2) 576 0 R] +/Limits [(figure.5.1) (figure.9.2)] +>> endobj +1554 0 obj << +/Names [(page.1) 325 0 R (page.10) 603 0 R (page.100) 1218 0 R (page.101) 1222 0 R (page.102) 1226 0 R (page.103) 1232 0 R] +/Limits [(page.1) (page.103)] +>> endobj +1555 0 obj << +/Names [(page.104) 1236 0 R (page.105) 1241 0 R (page.106) 1247 0 R (page.107) 1253 0 R (page.108) 1260 0 R (page.109) 1267 0 R] +/Limits [(page.104) (page.109)] +>> endobj +1556 0 obj << +/Names [(page.11) 611 0 R (page.110) 1273 0 R (page.111) 1280 0 R (page.112) 1284 0 R (page.113) 1288 0 R (page.114) 1292 0 R] +/Limits [(page.11) (page.114)] +>> endobj +1557 0 obj << +/Names [(page.115) 1297 0 R (page.116) 1303 0 R (page.117) 1307 0 R (page.118) 1311 0 R (page.119) 1315 0 R (page.12) 619 0 R] +/Limits [(page.115) (page.12)] +>> endobj +1558 0 obj << +/Names [(page.120) 1330 0 R (page.121) 1337 0 R (page.122) 1353 0 R (page.123) 1359 0 R (page.124) 1366 0 R (page.125) 1376 0 R] +/Limits [(page.120) (page.125)] +>> endobj +1559 0 obj << +/Names [(page.126) 1437 0 R (page.127) 1470 0 R (page.13) 627 0 R (page.14) 635 0 R (page.15) 646 0 R (page.16) 655 0 R] +/Limits [(page.126) (page.16)] +>> endobj +1560 0 obj << +/Names [(page.17) 662 0 R (page.18) 672 0 R (page.19) 679 0 R (page.2) 399 0 R (page.20) 702 0 R (page.21) 717 0 R] +/Limits [(page.17) (page.21)] +>> endobj +1561 0 obj << +/Names [(page.22) 723 0 R (page.23) 736 0 R (page.24) 742 0 R (page.25) 749 0 R (page.26) 754 0 R (page.27) 760 0 R] +/Limits [(page.22) (page.27)] +>> endobj +1562 0 obj << +/Names [(page.28) 766 0 R (page.29) 772 0 R (page.3) 421 0 R (page.30) 778 0 R (page.31) 784 0 R (page.32) 788 0 R] +/Limits [(page.28) (page.32)] +>> endobj +1563 0 obj << +/Names [(page.33) 793 0 R (page.34) 801 0 R (page.35) 805 0 R (page.36) 811 0 R (page.37) 817 0 R (page.38) 821 0 R] +/Limits [(page.33) (page.38)] +>> endobj +1564 0 obj << +/Names [(page.39) 826 0 R (page.4) 449 0 R (page.40) 831 0 R (page.41) 837 0 R (page.42) 843 0 R (page.43) 852 0 R] +/Limits [(page.39) (page.43)] +>> endobj +1565 0 obj << +/Names [(page.44) 857 0 R (page.45) 861 0 R (page.46) 868 0 R (page.47) 875 0 R (page.48) 882 0 R (page.49) 888 0 R] +/Limits [(page.44) (page.49)] +>> endobj +1566 0 obj << +/Names [(page.5) 506 0 R (page.50) 894 0 R (page.51) 902 0 R (page.52) 909 0 R (page.53) 916 0 R (page.54) 926 0 R] +/Limits [(page.5) (page.54)] +>> endobj +1567 0 obj << +/Names [(page.55) 942 0 R (page.56) 950 0 R (page.57) 956 0 R (page.58) 962 0 R (page.59) 966 0 R (page.6) 556 0 R] +/Limits [(page.55) (page.6)] +>> endobj +1568 0 obj << +/Names [(page.60) 971 0 R (page.61) 978 0 R (page.62) 985 0 R (page.63) 989 0 R (page.64) 995 0 R (page.65) 999 0 R] +/Limits [(page.60) (page.65)] +>> endobj +1569 0 obj << +/Names [(page.66) 1004 0 R (page.67) 1009 0 R (page.68) 1017 0 R (page.69) 1025 0 R (page.7) 582 0 R (page.70) 1029 0 R] +/Limits [(page.66) (page.70)] +>> endobj +1570 0 obj << +/Names [(page.71) 1033 0 R (page.72) 1043 0 R (page.73) 1052 0 R (page.74) 1059 0 R (page.75) 1064 0 R (page.76) 1070 0 R] +/Limits [(page.71) (page.76)] +>> endobj +1571 0 obj << +/Names [(page.77) 1076 0 R (page.78) 1082 0 R (page.79) 1088 0 R (page.8) 586 0 R (page.80) 1099 0 R (page.81) 1111 0 R] +/Limits [(page.77) (page.81)] +>> endobj +1572 0 obj << +/Names [(page.82) 1118 0 R (page.83) 1122 0 R (page.84) 1127 0 R (page.85) 1132 0 R (page.86) 1137 0 R (page.87) 1142 0 R] +/Limits [(page.82) (page.87)] +>> endobj +1573 0 obj << +/Names [(page.88) 1147 0 R (page.89) 1153 0 R (page.9) 595 0 R (page.90) 1157 0 R (page.91) 1164 0 R (page.92) 1169 0 R] +/Limits [(page.88) (page.92)] +>> endobj +1574 0 obj << +/Names [(page.93) 1174 0 R (page.94) 1181 0 R (page.95) 1189 0 R (page.96) 1196 0 R (page.97) 1202 0 R (page.98) 1207 0 R] +/Limits [(page.93) (page.98)] +>> endobj +1575 0 obj << +/Names [(page.99) 1213 0 R (section*.10) 704 0 R (section*.11) 724 0 R (section*.12) 743 0 R (section*.13) 761 0 R (section*.14) 767 0 R] +/Limits [(page.99) (section*.14)] +>> endobj +1576 0 obj << +/Names [(section*.15) 822 0 R (section*.16) 832 0 R (section*.17) 844 0 R (section*.18) 862 0 R (section*.19) 863 0 R (section*.20) 876 0 R] +/Limits [(section*.15) (section*.20)] +>> endobj +1577 0 obj << +/Names [(section*.21) 877 0 R (section*.22) 878 0 R (section*.23) 903 0 R (section*.24) 910 0 R (section*.25) 917 0 R (section*.26) 918 0 R] +/Limits [(section*.21) (section*.26)] +>> endobj +1578 0 obj << +/Names [(section*.27) 1071 0 R (section*.28) 1077 0 R (section*.29) 1020 0 R (section*.30) 1083 0 R (section*.31) 1112 0 R (section*.32) 1138 0 R] +/Limits [(section*.27) (section*.32)] +>> endobj +1579 0 obj << +/Names [(section*.33) 1143 0 R (section*.34) 1148 0 R (section*.35) 1149 0 R (section*.36) 1158 0 R (section*.37) 1159 0 R (section*.38) 1165 0 R] +/Limits [(section*.33) (section*.38)] +>> endobj +1580 0 obj << +/Names [(section*.39) 1170 0 R (section*.4) 557 0 R (section*.40) 1175 0 R (section*.41) 1176 0 R (section*.42) 1182 0 R (section*.43) 1183 0 R] +/Limits [(section*.39) (section*.43)] +>> endobj +1581 0 obj << +/Names [(section*.44) 1184 0 R (section*.45) 1185 0 R (section*.46) 1190 0 R (section*.47) 1191 0 R (section*.48) 1192 0 R (section*.49) 1197 0 R] +/Limits [(section*.44) (section*.49)] +>> endobj +1582 0 obj << +/Names [(section*.5) 613 0 R (section*.50) 1203 0 R (section*.51) 1208 0 R (section*.52) 1209 0 R (section*.53) 1214 0 R (section*.6) 628 0 R] +/Limits [(section*.5) (section*.6)] +>> endobj +1583 0 obj << +/Names [(section*.7) 629 0 R (section*.8) 663 0 R (section*.9) 664 0 R (section.3.1) 14 0 R (section.3.2) 26 0 R (section.3.3) 42 0 R] +/Limits [(section*.7) (section.3.3)] +>> endobj +1584 0 obj << +/Names [(section.3.4) 62 0 R (section.3.5) 78 0 R (section.3.6) 110 0 R (section.3.7) 122 0 R (section.4.1) 130 0 R (section.4.2) 142 0 R] +/Limits [(section.3.4) (section.4.2)] +>> endobj +1585 0 obj << +/Names [(section.4.3) 162 0 R (section.4.4) 166 0 R (section.5.1) 182 0 R (section.5.2) 190 0 R (section.6.1) 206 0 R (section.6.2) 218 0 R] +/Limits [(section.4.3) (section.6.2)] +>> endobj +1586 0 obj << +/Names [(section.6.3) 246 0 R (section.9.1) 262 0 R (section.9.2) 266 0 R (section.A.1) 298 0 R (section.A.2) 302 0 R (subsection.3.1.1) 18 0 R] +/Limits [(section.6.3) (subsection.3.1.1)] +>> endobj +1587 0 obj << +/Names [(subsection.3.1.2) 22 0 R (subsection.3.2.1) 30 0 R (subsection.3.2.2) 34 0 R (subsection.3.2.3) 38 0 R (subsection.3.3.1) 46 0 R (subsection.3.3.2) 50 0 R] +/Limits [(subsection.3.1.2) (subsection.3.3.2)] +>> endobj +1588 0 obj << +/Names [(subsection.3.3.3) 54 0 R (subsection.3.3.4) 58 0 R (subsection.3.4.1) 66 0 R (subsection.3.4.2) 70 0 R (subsection.3.4.3) 74 0 R (subsection.3.5.1) 82 0 R] +/Limits [(subsection.3.3.3) (subsection.3.5.1)] +>> endobj +1589 0 obj << +/Names [(subsection.3.5.2) 86 0 R (subsection.3.5.3) 90 0 R (subsection.3.5.4) 94 0 R (subsection.3.5.5) 98 0 R (subsection.3.5.6) 102 0 R (subsection.3.5.7) 106 0 R] +/Limits [(subsection.3.5.2) (subsection.3.5.7)] +>> endobj +1590 0 obj << +/Names [(subsection.3.6.1) 114 0 R (subsection.3.6.2) 118 0 R (subsection.4.1.1) 134 0 R (subsection.4.1.2) 138 0 R (subsection.4.2.1) 146 0 R (subsection.4.2.2) 150 0 R] +/Limits [(subsection.3.6.1) (subsection.4.2.2)] +>> endobj +1591 0 obj << +/Names [(subsection.4.2.3) 154 0 R (subsection.4.2.4) 158 0 R (subsection.4.4.1) 170 0 R (subsection.4.4.2) 174 0 R (subsection.5.1.1) 186 0 R (subsection.5.2.1) 194 0 R] +/Limits [(subsection.4.2.3) (subsection.5.2.1)] +>> endobj +1592 0 obj << +/Names [(subsection.5.2.2) 198 0 R (subsection.6.1.1) 210 0 R (subsection.6.1.2) 214 0 R (subsection.6.2.1) 222 0 R (subsection.6.2.2) 226 0 R (subsection.6.2.3) 230 0 R] +/Limits [(subsection.5.2.2) (subsection.6.2.3)] +>> endobj +1593 0 obj << +/Names [(subsection.6.2.4) 234 0 R (subsection.6.2.5) 238 0 R (subsection.6.2.6) 242 0 R (subsection.9.2.1) 270 0 R (subsection.9.2.2) 274 0 R (subsection.9.2.3) 278 0 R] +/Limits [(subsection.6.2.4) (subsection.9.2.3)] +>> endobj +1594 0 obj << +/Names [(subsection.9.2.4) 282 0 R (subsection.9.2.5) 286 0 R (subsection.9.2.6) 290 0 R (subsection.A.2.1) 306 0 R (subsection.A.2.2) 310 0 R (subsection.A.2.3) 314 0 R] +/Limits [(subsection.9.2.4) (subsection.A.2.3)] +>> endobj +1595 0 obj << +/Names [(subsection.A.2.4) 318 0 R (table.3.1) 452 0 R (table.3.2) 453 0 R (table.3.3) 454 0 R (table.3.4) 455 0 R (table.3.5) 456 0 R] +/Limits [(subsection.A.2.4) (table.3.5)] +>> endobj +1596 0 obj << +/Names [(table.4.1) 457 0 R (table.4.10) 466 0 R (table.4.11) 467 0 R (table.4.2) 458 0 R (table.4.3) 459 0 R (table.4.4) 460 0 R] +/Limits [(table.4.1) (table.4.4)] +>> endobj +1597 0 obj << +/Names [(table.4.5) 461 0 R (table.4.6) 462 0 R (table.4.7) 463 0 R (table.4.8) 464 0 R (table.4.9) 465 0 R (table.5.1) 468 0 R] +/Limits [(table.4.5) (table.5.1)] +>> endobj +1598 0 obj << +/Names [(table.7.1) 469 0 R (table.9.1) 470 0 R (table.9.2) 471 0 R (table.9.3) 472 0 R (table.9.4) 473 0 R (table.9.5) 474 0 R] +/Limits [(table.7.1) (table.9.5)] +>> endobj +1599 0 obj << +/Names [(table.A.1) 475 0 R] +/Limits [(table.A.1) (table.A.1)] +>> endobj +1600 0 obj << +/Kids [1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R] +/Limits [(Doc-Start) (Hfootnote.40)] +>> endobj +1601 0 obj << +/Kids [1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R] +/Limits [(Hfootnote.41) (Item.29)] +>> endobj +1602 0 obj << +/Kids [1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R] +/Limits [(Item.3) (Item.61)] +>> endobj +1603 0 obj << +/Kids [1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R] +/Limits [(Item.62) (figure.3.10)] +>> endobj +1604 0 obj << +/Kids [1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R] +/Limits [(figure.3.11) (figure.4.1)] +>> endobj +1605 0 obj << +/Kids [1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R 1558 0 R] +/Limits [(figure.5.1) (page.125)] +>> endobj +1606 0 obj << +/Kids [1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R] +/Limits [(page.126) (page.43)] +>> endobj +1607 0 obj << +/Kids [1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R] +/Limits [(page.44) (page.76)] +>> endobj +1608 0 obj << +/Kids [1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R] +/Limits [(page.77) (section*.20)] +>> endobj +1609 0 obj << +/Kids [1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R] +/Limits [(section*.21) (section*.6)] +>> endobj +1610 0 obj << +/Kids [1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R] +/Limits [(section*.7) (subsection.3.5.1)] +>> endobj +1611 0 obj << +/Kids [1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R] +/Limits [(subsection.3.5.2) (subsection.A.2.3)] +>> endobj +1612 0 obj << +/Kids [1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R] +/Limits [(subsection.A.2.4) (table.A.1)] +>> endobj +1613 0 obj << +/Kids [1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R] +/Limits [(Doc-Start) (page.125)] +>> endobj +1614 0 obj << +/Kids [1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R] +/Limits [(page.126) (subsection.A.2.3)] +>> endobj +1615 0 obj << +/Kids [1612 0 R] +/Limits [(subsection.A.2.4) (table.A.1)] +>> endobj +1616 0 obj << +/Kids [1613 0 R 1614 0 R 1615 0 R] +/Limits [(Doc-Start) (table.A.1)] +>> endobj +1617 0 obj << +/Dests 1616 0 R +>> endobj +1618 0 obj << +/Type /Catalog +/Pages 1521 0 R +/Outlines 1522 0 R +/Names 1617 0 R +/PageMode/UseOutlines/PageLabels<>1<>]>> +/OpenAction 321 0 R +>> endobj +1619 0 obj << +/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() +/CreationDate (D:20120702171433+02'00') +/ModDate (D:20120702171433+02'00') +/Trapped /False +/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) +>> endobj +xref +0 1620 +0000000000 65535 f +0000000015 00000 n +0000047708 00000 n +0000520348 00000 n +0000000060 00000 n +0000000090 00000 n +0000048608 00000 n +0000520263 00000 n +0000000135 00000 n +0000000174 00000 n +0000050941 00000 n +0000520137 00000 n +0000000219 00000 n +0000000266 00000 n +0000051002 00000 n +0000520026 00000 n +0000000314 00000 n +0000000350 00000 n +0000051062 00000 n +0000519952 00000 n +0000000403 00000 n +0000000444 00000 n +0000051123 00000 n +0000519878 00000 n +0000000497 00000 n +0000000535 00000 n +0000062952 00000 n +0000519754 00000 n +0000000583 00000 n +0000000627 00000 n +0000063013 00000 n +0000519680 00000 n +0000000680 00000 n +0000000728 00000 n +0000066513 00000 n +0000519593 00000 n +0000000781 00000 n +0000000815 00000 n +0000068868 00000 n +0000519519 00000 n +0000000868 00000 n +0000000904 00000 n +0000088596 00000 n +0000519395 00000 n +0000000952 00000 n +0000000997 00000 n +0000088657 00000 n +0000519321 00000 n +0000001050 00000 n +0000001088 00000 n +0000088780 00000 n +0000519234 00000 n +0000001141 00000 n +0000001181 00000 n +0000088841 00000 n +0000519147 00000 n +0000001234 00000 n +0000001262 00000 n +0000088902 00000 n +0000519073 00000 n +0000001315 00000 n +0000001361 00000 n +0000094996 00000 n +0000518949 00000 n +0000001409 00000 n +0000001450 00000 n +0000095057 00000 n +0000518875 00000 n +0000001503 00000 n +0000001554 00000 n +0000102027 00000 n +0000518788 00000 n +0000001607 00000 n +0000001638 00000 n +0000102088 00000 n +0000518714 00000 n +0000001691 00000 n +0000001726 00000 n +0000106230 00000 n +0000518588 00000 n +0000001774 00000 n +0000001808 00000 n +0000109490 00000 n +0000518514 00000 n +0000001861 00000 n +0000001905 00000 n +0000114486 00000 n +0000518427 00000 n +0000001958 00000 n +0000001988 00000 n +0000117062 00000 n +0000518340 00000 n +0000002041 00000 n +0000002098 00000 n +0000118795 00000 n +0000518253 00000 n +0000002151 00000 n +0000002182 00000 n +0000134692 00000 n +0000518164 00000 n +0000002235 00000 n +0000002269 00000 n +0000139741 00000 n +0000518073 00000 n +0000002323 00000 n +0000002352 00000 n +0000147181 00000 n +0000517995 00000 n +0000002406 00000 n +0000002449 00000 n +0000160278 00000 n +0000517865 00000 n +0000002498 00000 n +0000002534 00000 n +0000163363 00000 n +0000517786 00000 n +0000002588 00000 n +0000002628 00000 n +0000163425 00000 n +0000517707 00000 n +0000002682 00000 n +0000002731 00000 n +0000163486 00000 n +0000517629 00000 n +0000002780 00000 n +0000002822 00000 n +0000170469 00000 n +0000517497 00000 n +0000002869 00000 n +0000002901 00000 n +0000170531 00000 n +0000517379 00000 n +0000002950 00000 n +0000002980 00000 n +0000170592 00000 n +0000517300 00000 n +0000003034 00000 n +0000003073 00000 n +0000170716 00000 n +0000517221 00000 n +0000003127 00000 n +0000003172 00000 n +0000172854 00000 n +0000517089 00000 n +0000003221 00000 n +0000003249 00000 n +0000172916 00000 n +0000517010 00000 n +0000003303 00000 n +0000003336 00000 n +0000175021 00000 n +0000516917 00000 n +0000003390 00000 n +0000003423 00000 n +0000175144 00000 n +0000516824 00000 n +0000003477 00000 n +0000003513 00000 n +0000177416 00000 n +0000516745 00000 n +0000003567 00000 n +0000003607 00000 n +0000187423 00000 n +0000516652 00000 n +0000003656 00000 n +0000003688 00000 n +0000189257 00000 n +0000516534 00000 n +0000003737 00000 n +0000003767 00000 n +0000189320 00000 n +0000516455 00000 n +0000003821 00000 n +0000003857 00000 n +0000202364 00000 n +0000516376 00000 n +0000003911 00000 n +0000003943 00000 n +0000204423 00000 n +0000516243 00000 n +0000003990 00000 n +0000004045 00000 n +0000204486 00000 n +0000516125 00000 n +0000004094 00000 n +0000004129 00000 n +0000206975 00000 n +0000516060 00000 n +0000004183 00000 n +0000004217 00000 n +0000207101 00000 n +0000515942 00000 n +0000004266 00000 n +0000004301 00000 n +0000223371 00000 n +0000515863 00000 n +0000004355 00000 n +0000004394 00000 n +0000223434 00000 n +0000515784 00000 n +0000004448 00000 n +0000004508 00000 n +0000224793 00000 n +0000515651 00000 n +0000004555 00000 n +0000004584 00000 n +0000224856 00000 n +0000515533 00000 n +0000004633 00000 n +0000004662 00000 n +0000224919 00000 n +0000515454 00000 n +0000004716 00000 n +0000004755 00000 n +0000224981 00000 n +0000515375 00000 n +0000004809 00000 n +0000004865 00000 n +0000227207 00000 n +0000515243 00000 n +0000004914 00000 n +0000004958 00000 n +0000229548 00000 n +0000515164 00000 n +0000005012 00000 n +0000005059 00000 n +0000234302 00000 n +0000515071 00000 n +0000005113 00000 n +0000005148 00000 n +0000238836 00000 n +0000514978 00000 n +0000005202 00000 n +0000005243 00000 n +0000245800 00000 n +0000514885 00000 n +0000005297 00000 n +0000005344 00000 n +0000245927 00000 n +0000514792 00000 n +0000005398 00000 n +0000005436 00000 n +0000252340 00000 n +0000514713 00000 n +0000005490 00000 n +0000005529 00000 n +0000261906 00000 n +0000514634 00000 n +0000005578 00000 n +0000005630 00000 n +0000265174 00000 n +0000514540 00000 n +0000005677 00000 n +0000005720 00000 n +0000265884 00000 n +0000514446 00000 n +0000005767 00000 n +0000005808 00000 n +0000266894 00000 n +0000514313 00000 n +0000005855 00000 n +0000005886 00000 n +0000267914 00000 n +0000514234 00000 n +0000005935 00000 n +0000005958 00000 n +0000270719 00000 n +0000514116 00000 n +0000006007 00000 n +0000006034 00000 n +0000270782 00000 n +0000514037 00000 n +0000006088 00000 n +0000006113 00000 n +0000273794 00000 n +0000513944 00000 n +0000006167 00000 n +0000006218 00000 n +0000276773 00000 n +0000513851 00000 n +0000006272 00000 n +0000006308 00000 n +0000279541 00000 n +0000513758 00000 n +0000006362 00000 n +0000006391 00000 n +0000282298 00000 n +0000513665 00000 n +0000006445 00000 n +0000006478 00000 n +0000284897 00000 n +0000513586 00000 n +0000006532 00000 n +0000006562 00000 n +0000307978 00000 n +0000513467 00000 n +0000006610 00000 n +0000006647 00000 n +0000308041 00000 n +0000513388 00000 n +0000006696 00000 n +0000006744 00000 n +0000308104 00000 n +0000513270 00000 n +0000006793 00000 n +0000006843 00000 n +0000308167 00000 n +0000513191 00000 n +0000006897 00000 n +0000006936 00000 n +0000311177 00000 n +0000513098 00000 n +0000006990 00000 n +0000007022 00000 n +0000311240 00000 n +0000513005 00000 n +0000007076 00000 n +0000007123 00000 n +0000311303 00000 n +0000512926 00000 n +0000007177 00000 n +0000007218 00000 n +0000007878 00000 n +0000008114 00000 n +0000007270 00000 n +0000007990 00000 n +0000008052 00000 n +0000509288 00000 n +0000509645 00000 n +0000009528 00000 n +0000009680 00000 n +0000009832 00000 n +0000009984 00000 n +0000010137 00000 n +0000010296 00000 n +0000010454 00000 n +0000010607 00000 n +0000010765 00000 n +0000010924 00000 n +0000011083 00000 n +0000011236 00000 n +0000011394 00000 n +0000011553 00000 n +0000011711 00000 n +0000011870 00000 n +0000012023 00000 n +0000012182 00000 n +0000012341 00000 n +0000012499 00000 n +0000012653 00000 n +0000012812 00000 n +0000012971 00000 n +0000013130 00000 n +0000013289 00000 n +0000013448 00000 n +0000015391 00000 n +0000013668 00000 n +0000009196 00000 n +0000008186 00000 n +0000509112 00000 n +0000013606 00000 n +0000015550 00000 n +0000015704 00000 n +0000015863 00000 n +0000016022 00000 n +0000016176 00000 n +0000016328 00000 n +0000016482 00000 n +0000016641 00000 n +0000016799 00000 n +0000016953 00000 n +0000017112 00000 n +0000017271 00000 n +0000017430 00000 n +0000017589 00000 n +0000017743 00000 n +0000017897 00000 n +0000018055 00000 n +0000018214 00000 n +0000018366 00000 n +0000018520 00000 n +0000018679 00000 n +0000018833 00000 n +0000018991 00000 n +0000019150 00000 n +0000019302 00000 n +0000019456 00000 n +0000019615 00000 n +0000019774 00000 n +0000019924 00000 n +0000020083 00000 n +0000020242 00000 n +0000020400 00000 n +0000020558 00000 n +0000020716 00000 n +0000022109 00000 n +0000020937 00000 n +0000014987 00000 n +0000013753 00000 n +0000020875 00000 n +0000022263 00000 n +0000022415 00000 n +0000022567 00000 n +0000022719 00000 n +0000022871 00000 n +0000023025 00000 n +0000023184 00000 n +0000023343 00000 n +0000023501 00000 n +0000023659 00000 n +0000023818 00000 n +0000023977 00000 n +0000024130 00000 n +0000024284 00000 n +0000024438 00000 n +0000024595 00000 n +0000024754 00000 n +0000024913 00000 n +0000025133 00000 n +0000021833 00000 n +0000021022 00000 n +0000025071 00000 n +0000026566 00000 n +0000026718 00000 n +0000026870 00000 n +0000027022 00000 n +0000027174 00000 n +0000027326 00000 n +0000027478 00000 n +0000027630 00000 n +0000027782 00000 n +0000027934 00000 n +0000028085 00000 n +0000028236 00000 n +0000028387 00000 n +0000028539 00000 n +0000028691 00000 n +0000028843 00000 n +0000028996 00000 n +0000029148 00000 n +0000029300 00000 n +0000029452 00000 n +0000029602 00000 n +0000029753 00000 n +0000029905 00000 n +0000030057 00000 n +0000030332 00000 n +0000026250 00000 n +0000025218 00000 n +0000030208 00000 n +0000030270 00000 n +0000508760 00000 n +0000090781 00000 n +0000090843 00000 n +0000095179 00000 n +0000097392 00000 n +0000097454 00000 n +0000170654 00000 n +0000172978 00000 n +0000175083 00000 n +0000175206 00000 n +0000177354 00000 n +0000180654 00000 n +0000182221 00000 n +0000184258 00000 n +0000187360 00000 n +0000192941 00000 n +0000202427 00000 n +0000207038 00000 n +0000265237 00000 n +0000286964 00000 n +0000290225 00000 n +0000292440 00000 n +0000292503 00000 n +0000296799 00000 n +0000312682 00000 n +0000031880 00000 n +0000032033 00000 n +0000032186 00000 n +0000032339 00000 n +0000032492 00000 n +0000032643 00000 n +0000032796 00000 n +0000032948 00000 n +0000033100 00000 n +0000033253 00000 n +0000033407 00000 n +0000033561 00000 n +0000033714 00000 n +0000033868 00000 n +0000034022 00000 n +0000034176 00000 n +0000034330 00000 n +0000034638 00000 n +0000034792 00000 n +0000034945 00000 n +0000035098 00000 n +0000035252 00000 n +0000035560 00000 n +0000035714 00000 n +0000035868 00000 n +0000036022 00000 n +0000038447 00000 n +0000036300 00000 n +0000031532 00000 n +0000030430 00000 n +0000036176 00000 n +0000036238 00000 n +0000034484 00000 n +0000035406 00000 n +0000054379 00000 n +0000059605 00000 n +0000066451 00000 n +0000081295 00000 n +0000086078 00000 n +0000086140 00000 n +0000092725 00000 n +0000094934 00000 n +0000099908 00000 n +0000102149 00000 n +0000104303 00000 n +0000117122 00000 n +0000120692 00000 n +0000122731 00000 n +0000124878 00000 n +0000126601 00000 n +0000128734 00000 n +0000131251 00000 n +0000131313 00000 n +0000133012 00000 n +0000133074 00000 n +0000134815 00000 n +0000134877 00000 n +0000137316 00000 n +0000137378 00000 n +0000142052 00000 n +0000038601 00000 n +0000038755 00000 n +0000038909 00000 n +0000039063 00000 n +0000039217 00000 n +0000039371 00000 n +0000039525 00000 n +0000039679 00000 n +0000039833 00000 n +0000039986 00000 n +0000040139 00000 n +0000040292 00000 n +0000040445 00000 n +0000040598 00000 n +0000040751 00000 n +0000040904 00000 n +0000041057 00000 n +0000041334 00000 n +0000038179 00000 n +0000036398 00000 n +0000041210 00000 n +0000041272 00000 n +0000509763 00000 n +0000142114 00000 n +0000144408 00000 n +0000144470 00000 n +0000147119 00000 n +0000149915 00000 n +0000149977 00000 n +0000152219 00000 n +0000154592 00000 n +0000160217 00000 n +0000165684 00000 n +0000167967 00000 n +0000189383 00000 n +0000209617 00000 n +0000214191 00000 n +0000222132 00000 n +0000264126 00000 n +0000273731 00000 n +0000273856 00000 n +0000043717 00000 n +0000043870 00000 n +0000044085 00000 n +0000043577 00000 n +0000041432 00000 n +0000044023 00000 n +0000044843 00000 n +0000044669 00000 n +0000044183 00000 n +0000044781 00000 n +0000046665 00000 n +0000046819 00000 n +0000047126 00000 n +0000046973 00000 n +0000047492 00000 n +0000047954 00000 n +0000046493 00000 n +0000044941 00000 n +0000047646 00000 n +0000047768 00000 n +0000047830 00000 n +0000047309 00000 n +0000047892 00000 n +0000048668 00000 n +0000048434 00000 n +0000048052 00000 n +0000048546 00000 n +0000050419 00000 n +0000050572 00000 n +0000050725 00000 n +0000057021 00000 n +0000051370 00000 n +0000050271 00000 n +0000048753 00000 n +0000050879 00000 n +0000509464 00000 n +0000051184 00000 n +0000051246 00000 n +0000051308 00000 n +0000054441 00000 n +0000054205 00000 n +0000051481 00000 n +0000054317 00000 n +0000508442 00000 n +0000508934 00000 n +0000509881 00000 n +0000057175 00000 n +0000057635 00000 n +0000056881 00000 n +0000054565 00000 n +0000057326 00000 n +0000057388 00000 n +0000057450 00000 n +0000057512 00000 n +0000057573 00000 n +0000059667 00000 n +0000059431 00000 n +0000057733 00000 n +0000059543 00000 n +0000507430 00000 n +0000508297 00000 n +0000507866 00000 n +0000507576 00000 n +0000508153 00000 n +0000062582 00000 n +0000062736 00000 n +0000063198 00000 n +0000062442 00000 n +0000059830 00000 n +0000062890 00000 n +0000063074 00000 n +0000063136 00000 n +0000065927 00000 n +0000066079 00000 n +0000066234 00000 n +0000066698 00000 n +0000065779 00000 n +0000063309 00000 n +0000066389 00000 n +0000066574 00000 n +0000066636 00000 n +0000068651 00000 n +0000069114 00000 n +0000068519 00000 n +0000066822 00000 n +0000068806 00000 n +0000068929 00000 n +0000068991 00000 n +0000069053 00000 n +0000071350 00000 n +0000073766 00000 n +0000073921 00000 n +0000071691 00000 n +0000071218 00000 n +0000069225 00000 n +0000071505 00000 n +0000071567 00000 n +0000071629 00000 n +0000509999 00000 n +0000075066 00000 n +0000073626 00000 n +0000071789 00000 n +0000074075 00000 n +0000074137 00000 n +0000074199 00000 n +0000074261 00000 n +0000074323 00000 n +0000074385 00000 n +0000074447 00000 n +0000074509 00000 n +0000074571 00000 n +0000074633 00000 n +0000074695 00000 n +0000074757 00000 n +0000074819 00000 n +0000074880 00000 n +0000074942 00000 n +0000075004 00000 n +0000077773 00000 n +0000077928 00000 n +0000078083 00000 n +0000078238 00000 n +0000079136 00000 n +0000077617 00000 n +0000075151 00000 n +0000078393 00000 n +0000078455 00000 n +0000078517 00000 n +0000078579 00000 n +0000078641 00000 n +0000078703 00000 n +0000078764 00000 n +0000078826 00000 n +0000078888 00000 n +0000078950 00000 n +0000079012 00000 n +0000079074 00000 n +0000081357 00000 n +0000081121 00000 n +0000079234 00000 n +0000081233 00000 n +0000083420 00000 n +0000085863 00000 n +0000084193 00000 n +0000083288 00000 n +0000081455 00000 n +0000083573 00000 n +0000083635 00000 n +0000083697 00000 n +0000083759 00000 n +0000083821 00000 n +0000083883 00000 n +0000083945 00000 n +0000084007 00000 n +0000084069 00000 n +0000084131 00000 n +0000086202 00000 n +0000085731 00000 n +0000084291 00000 n +0000086016 00000 n +0000088230 00000 n +0000088380 00000 n +0000089025 00000 n +0000088090 00000 n +0000086287 00000 n +0000088534 00000 n +0000088718 00000 n +0000088963 00000 n +0000510117 00000 n +0000090905 00000 n +0000090607 00000 n +0000089136 00000 n +0000090719 00000 n +0000092510 00000 n +0000092786 00000 n +0000092378 00000 n +0000090990 00000 n +0000092663 00000 n +0000094569 00000 n +0000094720 00000 n +0000095241 00000 n +0000094429 00000 n +0000092884 00000 n +0000094872 00000 n +0000095118 00000 n +0000097178 00000 n +0000097577 00000 n +0000097046 00000 n +0000095339 00000 n +0000097330 00000 n +0000097515 00000 n +0000099693 00000 n +0000099970 00000 n +0000099561 00000 n +0000097675 00000 n +0000099846 00000 n +0000101658 00000 n +0000101811 00000 n +0000102210 00000 n +0000101518 00000 n +0000100068 00000 n +0000101965 00000 n +0000508586 00000 n +0000510235 00000 n +0000104364 00000 n +0000104129 00000 n +0000102321 00000 n +0000104241 00000 n +0000106291 00000 n +0000106056 00000 n +0000104462 00000 n +0000106168 00000 n +0000109273 00000 n +0000109613 00000 n +0000109141 00000 n +0000106389 00000 n +0000109428 00000 n +0000109551 00000 n +0000507722 00000 n +0000508010 00000 n +0000507284 00000 n +0000112221 00000 n +0000112047 00000 n +0000109787 00000 n +0000112159 00000 n +0000114547 00000 n +0000114312 00000 n +0000112371 00000 n +0000114424 00000 n +0000116846 00000 n +0000118579 00000 n +0000117244 00000 n +0000116714 00000 n +0000114697 00000 n +0000117000 00000 n +0000117182 00000 n +0000510353 00000 n +0000118856 00000 n +0000118447 00000 n +0000117355 00000 n +0000118733 00000 n +0000120754 00000 n +0000120456 00000 n +0000118954 00000 n +0000120568 00000 n +0000120630 00000 n +0000122793 00000 n +0000122557 00000 n +0000120852 00000 n +0000122669 00000 n +0000124599 00000 n +0000124940 00000 n +0000124467 00000 n +0000122878 00000 n +0000124754 00000 n +0000124816 00000 n +0000328911 00000 n +0000126663 00000 n +0000126427 00000 n +0000125038 00000 n +0000126539 00000 n +0000128365 00000 n +0000128519 00000 n +0000128919 00000 n +0000128225 00000 n +0000126748 00000 n +0000128672 00000 n +0000128796 00000 n +0000128858 00000 n +0000510471 00000 n +0000130882 00000 n +0000131037 00000 n +0000131437 00000 n +0000130742 00000 n +0000129017 00000 n +0000131189 00000 n +0000131375 00000 n +0000133136 00000 n +0000132838 00000 n +0000131522 00000 n +0000132950 00000 n +0000135001 00000 n +0000134518 00000 n +0000133221 00000 n +0000134630 00000 n +0000134753 00000 n +0000134939 00000 n +0000137099 00000 n +0000137502 00000 n +0000136967 00000 n +0000135099 00000 n +0000137254 00000 n +0000137440 00000 n +0000141681 00000 n +0000141836 00000 n +0000139927 00000 n +0000139506 00000 n +0000137587 00000 n +0000139618 00000 n +0000139680 00000 n +0000139803 00000 n +0000139865 00000 n +0000142238 00000 n +0000141541 00000 n +0000140025 00000 n +0000141990 00000 n +0000142176 00000 n +0000510589 00000 n +0000144532 00000 n +0000144234 00000 n +0000142323 00000 n +0000144346 00000 n +0000146902 00000 n +0000149388 00000 n +0000147305 00000 n +0000146770 00000 n +0000144617 00000 n +0000147057 00000 n +0000147243 00000 n +0000149541 00000 n +0000149700 00000 n +0000151849 00000 n +0000150162 00000 n +0000149240 00000 n +0000147403 00000 n +0000149853 00000 n +0000150039 00000 n +0000150100 00000 n +0000152004 00000 n +0000152405 00000 n +0000151709 00000 n +0000150273 00000 n +0000152157 00000 n +0000152281 00000 n +0000152343 00000 n +0000154380 00000 n +0000154840 00000 n +0000154248 00000 n +0000152529 00000 n +0000154530 00000 n +0000154654 00000 n +0000154716 00000 n +0000154778 00000 n +0000157006 00000 n +0000156484 00000 n +0000159675 00000 n +0000157315 00000 n +0000156352 00000 n +0000154977 00000 n +0000156634 00000 n +0000156696 00000 n +0000156758 00000 n +0000156820 00000 n +0000156882 00000 n +0000156944 00000 n +0000157068 00000 n +0000157130 00000 n +0000157192 00000 n +0000157253 00000 n +0000510707 00000 n +0000159829 00000 n +0000159983 00000 n +0000160402 00000 n +0000159527 00000 n +0000157439 00000 n +0000160155 00000 n +0000160340 00000 n +0000162837 00000 n +0000162991 00000 n +0000163146 00000 n +0000163672 00000 n +0000162689 00000 n +0000160513 00000 n +0000163301 00000 n +0000163548 00000 n +0000163610 00000 n +0000165746 00000 n +0000165510 00000 n +0000163783 00000 n +0000165622 00000 n +0000167751 00000 n +0000168660 00000 n +0000168029 00000 n +0000167619 00000 n +0000165831 00000 n +0000167905 00000 n +0000168876 00000 n +0000168528 00000 n +0000168127 00000 n +0000168814 00000 n +0000170253 00000 n +0000170839 00000 n +0000170121 00000 n +0000168948 00000 n +0000170407 00000 n +0000170777 00000 n +0000510825 00000 n +0000172640 00000 n +0000173040 00000 n +0000172508 00000 n +0000170937 00000 n +0000172792 00000 n +0000174489 00000 n +0000174648 00000 n +0000174807 00000 n +0000175268 00000 n +0000174341 00000 n +0000173164 00000 n +0000174959 00000 n +0000177478 00000 n +0000177180 00000 n +0000175366 00000 n +0000177292 00000 n +0000180289 00000 n +0000180440 00000 n +0000178294 00000 n +0000178120 00000 n +0000177589 00000 n +0000178232 00000 n +0000180716 00000 n +0000180149 00000 n +0000178379 00000 n +0000180592 00000 n +0000184041 00000 n +0000182283 00000 n +0000182041 00000 n +0000180801 00000 n +0000182157 00000 n +0000510943 00000 n +0000184321 00000 n +0000183904 00000 n +0000182369 00000 n +0000184194 00000 n +0000186601 00000 n +0000186754 00000 n +0000186908 00000 n +0000188880 00000 n +0000187550 00000 n +0000186437 00000 n +0000184407 00000 n +0000187296 00000 n +0000187486 00000 n +0000187102 00000 n +0000209680 00000 n +0000189039 00000 n +0000189446 00000 n +0000188734 00000 n +0000187649 00000 n +0000189193 00000 n +0000190767 00000 n +0000190587 00000 n +0000189545 00000 n +0000190703 00000 n +0000193004 00000 n +0000192761 00000 n +0000190866 00000 n +0000192877 00000 n +0000195916 00000 n +0000196072 00000 n +0000196228 00000 n +0000196383 00000 n +0000199792 00000 n +0000199948 00000 n +0000197017 00000 n +0000195743 00000 n +0000193129 00000 n +0000196761 00000 n +0000196825 00000 n +0000196889 00000 n +0000196953 00000 n +0000196572 00000 n +0000511068 00000 n +0000200501 00000 n +0000199637 00000 n +0000197140 00000 n +0000200373 00000 n +0000200437 00000 n +0000200161 00000 n +0000202147 00000 n +0000202490 00000 n +0000202010 00000 n +0000200587 00000 n +0000202300 00000 n +0000204204 00000 n +0000204549 00000 n +0000204067 00000 n +0000202589 00000 n +0000204359 00000 n +0000206596 00000 n +0000206756 00000 n +0000207292 00000 n +0000206450 00000 n +0000204635 00000 n +0000206911 00000 n +0000207164 00000 n +0000207228 00000 n +0000209744 00000 n +0000209373 00000 n +0000207391 00000 n +0000209489 00000 n +0000209553 00000 n +0000211952 00000 n +0000212234 00000 n +0000211815 00000 n +0000209843 00000 n +0000212106 00000 n +0000212170 00000 n +0000511193 00000 n +0000214573 00000 n +0000214011 00000 n +0000212333 00000 n +0000214127 00000 n +0000214254 00000 n +0000214318 00000 n +0000214381 00000 n +0000214445 00000 n +0000214509 00000 n +0000217245 00000 n +0000217401 00000 n +0000218146 00000 n +0000217090 00000 n +0000214672 00000 n +0000217826 00000 n +0000217890 00000 n +0000217954 00000 n +0000218018 00000 n +0000218082 00000 n +0000217614 00000 n +0000219642 00000 n +0000219798 00000 n +0000219951 00000 n +0000220361 00000 n +0000219487 00000 n +0000218232 00000 n +0000220106 00000 n +0000220170 00000 n +0000220234 00000 n +0000220297 00000 n +0000222195 00000 n +0000221952 00000 n +0000220460 00000 n +0000222068 00000 n +0000223497 00000 n +0000223191 00000 n +0000222281 00000 n +0000223307 00000 n +0000226987 00000 n +0000225044 00000 n +0000224613 00000 n +0000223609 00000 n +0000224729 00000 n +0000511318 00000 n +0000227334 00000 n +0000226850 00000 n +0000225143 00000 n +0000227143 00000 n +0000227270 00000 n +0000229675 00000 n +0000229368 00000 n +0000227433 00000 n +0000229484 00000 n +0000229611 00000 n +0000232447 00000 n +0000232203 00000 n +0000229787 00000 n +0000232319 00000 n +0000232383 00000 n +0000234493 00000 n +0000234122 00000 n +0000232572 00000 n +0000234238 00000 n +0000234365 00000 n +0000234429 00000 n +0000236603 00000 n +0000236423 00000 n +0000234592 00000 n +0000236539 00000 n +0000238963 00000 n +0000238592 00000 n +0000236715 00000 n +0000238708 00000 n +0000238772 00000 n +0000238899 00000 n +0000511443 00000 n +0000241167 00000 n +0000240923 00000 n +0000239075 00000 n +0000241039 00000 n +0000241103 00000 n +0000243764 00000 n +0000243520 00000 n +0000241266 00000 n +0000243636 00000 n +0000243700 00000 n +0000245990 00000 n +0000245556 00000 n +0000243876 00000 n +0000245672 00000 n +0000245736 00000 n +0000245863 00000 n +0000247701 00000 n +0000248176 00000 n +0000247564 00000 n +0000246102 00000 n +0000247856 00000 n +0000247920 00000 n +0000247984 00000 n +0000248048 00000 n +0000248112 00000 n +0000250273 00000 n +0000249902 00000 n +0000248275 00000 n +0000250018 00000 n +0000250082 00000 n +0000250146 00000 n +0000250210 00000 n +0000252467 00000 n +0000252160 00000 n +0000250372 00000 n +0000252276 00000 n +0000252403 00000 n +0000511568 00000 n +0000254547 00000 n +0000254303 00000 n +0000252592 00000 n +0000254419 00000 n +0000254483 00000 n +0000257398 00000 n +0000257091 00000 n +0000254659 00000 n +0000257207 00000 n +0000257271 00000 n +0000257334 00000 n +0000259722 00000 n +0000259478 00000 n +0000257497 00000 n +0000259594 00000 n +0000259658 00000 n +0000261969 00000 n +0000261726 00000 n +0000259834 00000 n +0000261842 00000 n +0000263041 00000 n +0000262861 00000 n +0000262094 00000 n +0000262977 00000 n +0000264189 00000 n +0000263946 00000 n +0000263140 00000 n +0000264062 00000 n +0000511693 00000 n +0000264957 00000 n +0000265300 00000 n +0000264820 00000 n +0000264275 00000 n +0000265110 00000 n +0000265947 00000 n +0000265704 00000 n +0000265399 00000 n +0000265820 00000 n +0000266675 00000 n +0000267021 00000 n +0000266538 00000 n +0000266033 00000 n +0000266830 00000 n +0000266957 00000 n +0000267666 00000 n +0000267977 00000 n +0000267529 00000 n +0000267107 00000 n +0000267850 00000 n +0000270500 00000 n +0000273204 00000 n +0000270909 00000 n +0000270363 00000 n +0000268076 00000 n +0000270655 00000 n +0000270845 00000 n +0000273358 00000 n +0000273513 00000 n +0000273983 00000 n +0000273049 00000 n +0000271034 00000 n +0000273667 00000 n +0000273919 00000 n +0000511818 00000 n +0000276554 00000 n +0000276900 00000 n +0000276417 00000 n +0000274082 00000 n +0000276709 00000 n +0000276836 00000 n +0000279321 00000 n +0000279668 00000 n +0000279184 00000 n +0000277012 00000 n +0000279477 00000 n +0000279604 00000 n +0000281915 00000 n +0000282075 00000 n +0000282361 00000 n +0000281769 00000 n +0000279767 00000 n +0000282234 00000 n +0000284960 00000 n +0000284717 00000 n +0000282473 00000 n +0000284833 00000 n +0000287027 00000 n +0000286784 00000 n +0000285098 00000 n +0000286900 00000 n +0000288374 00000 n +0000288194 00000 n +0000287113 00000 n +0000288310 00000 n +0000511943 00000 n +0000290288 00000 n +0000290045 00000 n +0000288460 00000 n +0000290161 00000 n +0000292071 00000 n +0000292224 00000 n +0000292566 00000 n +0000291925 00000 n +0000290374 00000 n +0000292376 00000 n +0000294347 00000 n +0000294167 00000 n +0000292652 00000 n +0000294283 00000 n +0000296862 00000 n +0000296619 00000 n +0000294433 00000 n +0000296735 00000 n +0000299464 00000 n +0000298581 00000 n +0000296974 00000 n +0000298697 00000 n +0000298761 00000 n +0000298825 00000 n +0000298888 00000 n +0000298952 00000 n +0000299016 00000 n +0000299080 00000 n +0000299144 00000 n +0000299208 00000 n +0000299272 00000 n +0000299336 00000 n +0000299400 00000 n +0000301968 00000 n +0000301660 00000 n +0000299563 00000 n +0000301776 00000 n +0000301840 00000 n +0000301904 00000 n +0000512068 00000 n +0000304631 00000 n +0000303685 00000 n +0000302054 00000 n +0000303801 00000 n +0000303865 00000 n +0000303929 00000 n +0000303993 00000 n +0000304057 00000 n +0000304121 00000 n +0000304185 00000 n +0000304248 00000 n +0000304312 00000 n +0000304376 00000 n +0000304439 00000 n +0000304503 00000 n +0000304567 00000 n +0000306276 00000 n +0000306032 00000 n +0000304717 00000 n +0000306148 00000 n +0000306212 00000 n +0000307754 00000 n +0000308230 00000 n +0000307617 00000 n +0000306362 00000 n +0000307914 00000 n +0000310268 00000 n +0000310425 00000 n +0000310577 00000 n +0000311366 00000 n +0000310113 00000 n +0000308329 00000 n +0000310729 00000 n +0000310793 00000 n +0000310857 00000 n +0000310921 00000 n +0000310985 00000 n +0000311049 00000 n +0000311113 00000 n +0000312745 00000 n +0000312502 00000 n +0000311465 00000 n +0000312618 00000 n +0000314636 00000 n +0000314786 00000 n +0000314936 00000 n +0000315087 00000 n +0000315238 00000 n +0000315388 00000 n +0000315538 00000 n +0000315688 00000 n +0000315840 00000 n +0000315991 00000 n +0000316142 00000 n +0000316293 00000 n +0000316443 00000 n +0000316594 00000 n +0000316745 00000 n +0000316895 00000 n +0000317046 00000 n +0000317197 00000 n +0000317347 00000 n +0000317496 00000 n +0000317647 00000 n +0000317798 00000 n +0000317949 00000 n +0000318100 00000 n +0000318251 00000 n +0000318400 00000 n +0000318550 00000 n +0000318701 00000 n +0000318852 00000 n +0000319003 00000 n +0000319150 00000 n +0000319301 00000 n +0000319452 00000 n +0000319603 00000 n +0000319755 00000 n +0000319906 00000 n +0000320057 00000 n +0000320208 00000 n +0000320358 00000 n +0000320507 00000 n +0000320658 00000 n +0000320807 00000 n +0000320956 00000 n +0000321106 00000 n +0000321257 00000 n +0000321408 00000 n +0000321559 00000 n +0000321710 00000 n +0000321861 00000 n +0000322012 00000 n +0000322163 00000 n +0000322313 00000 n +0000322464 00000 n +0000322615 00000 n +0000322766 00000 n +0000324244 00000 n +0000324395 00000 n +0000322981 00000 n +0000314013 00000 n +0000312831 00000 n +0000322917 00000 n +0000512193 00000 n +0000324546 00000 n +0000324697 00000 n +0000324848 00000 n +0000324999 00000 n +0000325149 00000 n +0000325300 00000 n +0000325450 00000 n +0000325600 00000 n +0000325750 00000 n +0000325901 00000 n +0000326052 00000 n +0000326203 00000 n +0000326354 00000 n +0000326504 00000 n +0000326655 00000 n +0000326805 00000 n +0000326956 00000 n +0000327107 00000 n +0000327258 00000 n +0000327408 00000 n +0000327559 00000 n +0000327708 00000 n +0000327859 00000 n +0000328010 00000 n +0000328160 00000 n +0000328311 00000 n +0000328461 00000 n +0000328610 00000 n +0000328825 00000 n +0000323846 00000 n +0000323080 00000 n +0000328761 00000 n +0000328943 00000 n +0000329309 00000 n +0000329383 00000 n +0000506758 00000 n +0000329467 00000 n +0000329823 00000 n +0000330250 00000 n +0000330276 00000 n +0000330418 00000 n +0000331057 00000 n +0000331445 00000 n +0000331773 00000 n +0000332531 00000 n +0000332863 00000 n +0000333255 00000 n +0000333835 00000 n +0000334412 00000 n +0000341853 00000 n +0000342085 00000 n +0000353058 00000 n +0000353325 00000 n +0000360484 00000 n +0000360707 00000 n +0000369229 00000 n +0000369480 00000 n +0000378332 00000 n +0000378622 00000 n +0000386340 00000 n +0000386582 00000 n +0000395377 00000 n +0000395630 00000 n +0000403314 00000 n +0000403581 00000 n +0000410798 00000 n +0000411032 00000 n +0000427133 00000 n +0000427557 00000 n +0000447498 00000 n +0000448099 00000 n +0000453975 00000 n +0000454228 00000 n +0000471499 00000 n +0000471968 00000 n +0000492834 00000 n +0000493437 00000 n +0000506409 00000 n +0000512282 00000 n +0000512402 00000 n +0000512523 00000 n +0000512649 00000 n +0000512757 00000 n +0000512849 00000 n +0000520420 00000 n +0000520624 00000 n +0000520835 00000 n +0000521044 00000 n +0000521253 00000 n +0000521465 00000 n +0000521680 00000 n +0000521897 00000 n +0000522107 00000 n +0000522289 00000 n +0000522460 00000 n +0000522630 00000 n +0000522801 00000 n +0000522970 00000 n +0000523139 00000 n +0000523316 00000 n +0000523491 00000 n +0000523668 00000 n +0000523843 00000 n +0000524020 00000 n +0000524195 00000 n +0000524372 00000 n +0000524554 00000 n +0000524738 00000 n +0000524930 00000 n +0000525133 00000 n +0000525335 00000 n +0000525538 00000 n +0000525740 00000 n +0000525941 00000 n +0000526136 00000 n +0000526331 00000 n +0000526509 00000 n +0000526694 00000 n +0000526876 00000 n +0000527058 00000 n +0000527243 00000 n +0000527419 00000 n +0000527589 00000 n +0000527760 00000 n +0000527930 00000 n +0000528101 00000 n +0000528271 00000 n +0000528442 00000 n +0000528611 00000 n +0000528780 00000 n +0000528951 00000 n +0000529126 00000 n +0000529303 00000 n +0000529478 00000 n +0000529655 00000 n +0000529830 00000 n +0000530007 00000 n +0000530203 00000 n +0000530406 00000 n +0000530609 00000 n +0000530818 00000 n +0000531027 00000 n +0000531234 00000 n +0000531443 00000 n +0000531646 00000 n +0000531842 00000 n +0000532043 00000 n +0000532246 00000 n +0000532458 00000 n +0000532695 00000 n +0000532932 00000 n +0000533171 00000 n +0000533414 00000 n +0000533657 00000 n +0000533900 00000 n +0000534143 00000 n +0000534386 00000 n +0000534587 00000 n +0000534776 00000 n +0000534963 00000 n +0000535150 00000 n +0000535237 00000 n +0000535360 00000 n +0000535481 00000 n +0000535596 00000 n +0000535716 00000 n +0000535839 00000 n +0000535959 00000 n +0000536076 00000 n +0000536192 00000 n +0000536312 00000 n +0000536435 00000 n +0000536563 00000 n +0000536697 00000 n +0000536815 00000 n +0000536934 00000 n +0000537060 00000 n +0000537142 00000 n +0000537235 00000 n +0000537275 00000 n +0000537447 00000 n +trailer +<< /Size 1620 +/Root 1618 0 R +/Info 1619 0 R +/ID [<6F5757647AA5B3D2BCACF3262EE47315> <6F5757647AA5B3D2BCACF3262EE47315>] >> +startxref +537774 +%%EOF Added: vmkit/trunk/docs/vmkit-critics.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/docs/vmkit-critics.txt?rev=180302&view=auto ============================================================================== --- vmkit/trunk/docs/vmkit-critics.txt (added) +++ vmkit/trunk/docs/vmkit-critics.txt Thu Apr 25 11:50:58 2013 @@ -0,0 +1,12 @@ +VMKit implementation critics: +============================= +* strictfp Java keyword not implemented. +* No verification of Java class bytecode. This is a requirement for any JVM, except CLDC and Card profiles. +* POSIX-dependent. Could use BoostC++ for OS portability. +* Manipulation of C++ object virtual table, which is compiler-specific and architecture-specific and is not standard. + VMKit implementation supposes vtable pointer is placed in offset zero of the object, which is not true among all + versions of G++ (sometimes it is placed last). + Moreover, multiple inheritence produces multiple vtable pointers in one derived object. VMKit supposes the existence + of a single vtable. +* Reinventing the wheel in some situations. Use BoostC++. e.g. Lock classes. + Modified: vmkit/trunk/include/j3/J3Intrinsics.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/include/j3/J3Intrinsics.h (original) +++ vmkit/trunk/include/j3/J3Intrinsics.h Thu Apr 25 11:50:58 2013 @@ -43,7 +43,7 @@ public: llvm::Type* UTF8Type; llvm::Type* JavaMethodType; llvm::Type* JavaFieldType; - llvm::Type* AttributType; + llvm::Type* AttributeType; llvm::Type* JavaThreadType; llvm::Type* MutatorThreadType; llvm::Type* J3DenseMapType; Modified: vmkit/trunk/include/j3/JavaAOTCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaAOTCompiler.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaAOTCompiler.h (original) +++ vmkit/trunk/include/j3/JavaAOTCompiler.h Thu Apr 25 11:50:58 2013 @@ -17,7 +17,7 @@ namespace j3 { class ArrayObject; -class Attribut; +class JavaAttribute; class ClassBytes; class JnjvmBootstrapLoader; @@ -89,7 +89,7 @@ private: llvm::Constant* CreateConstantFromClass(Class* cl); llvm::Constant* CreateConstantFromClassPrimitive(ClassPrimitive* cl); llvm::Constant* CreateConstantFromClassArray(ClassArray* cl); - llvm::Constant* CreateConstantFromAttribut(Attribut& attribut); + llvm::Constant* CreateConstantFromAttribute(JavaAttribute& attribute); llvm::Constant* CreateConstantFromJavaField(JavaField& field); llvm::Constant* CreateConstantFromJavaMethod(JavaMethod& method); llvm::Constant* CreateConstantFromStaticInstance(Class* cl); Modified: vmkit/trunk/include/vmkit/Thread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Thread.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Thread.h (original) +++ vmkit/trunk/include/vmkit/Thread.h Thu Apr 25 11:50:58 2013 @@ -219,7 +219,7 @@ public: internalClearException(); } - bool isVmkitThread() { + bool isVmkitThread() const { if (!baseAddr) return false; else return (((word_t)this) & System::GetVmkitThreadMask()) == baseAddr; } Modified: vmkit/trunk/include/vmkit/UTF8.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/UTF8.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/UTF8.h (original) +++ vmkit/trunk/include/vmkit/UTF8.h Thu Apr 25 11:50:58 2013 @@ -2,6 +2,8 @@ #define _UTF8_INTERNAL_H_ #include +#include +#include #include "vmkit/Allocator.h" #include "vmkit/VmkitDenseMap.h" #include "vmkit/VmkitDenseSet.h" @@ -22,7 +24,7 @@ private: public: /// size - The (constant) size of the UTF8. - ssize_t size; + int32_t size; /// elements - Elements of this UTF8. /// The size should be set to zero, but this is invalid C99. @@ -61,6 +63,10 @@ public: UTF8(sint32 n) { size = n; } + + friend std::ostream& operator << (std::ostream&, const UTF8&); + void dump() const __attribute__((noinline)); + int compare(const char *) const; }; extern "C" const UTF8 TombstoneKey; Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 11:50:58 2013 @@ -108,4 +108,12 @@ JavaObjectField* JavaObjectField::create vm->upcalls->initField->invokeIntSpecial(vm, FieldClass, ret, &vmField); return ret; } + +UserClass* JavaObjectConstructor::getClass(JavaObjectConstructor* self) +{ + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); +} + } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:50:58 2013 @@ -71,138 +71,74 @@ public: static int getModifiers(JavaObjectClass* Cl); }; -class JavaObjectVMField : public JavaObject { -private: - JavaObjectClass* declaringClass; - JavaObject* name; - uint32 slot; - // others -public: - static void staticTracer(JavaObjectVMField* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->name, closure); - vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); - } - - static JavaField* getInternalField(JavaObjectVMField* self) { - llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return &(cls->asClass()->virtualFields[self->slot]); - } - - static UserClass* getClass(JavaObjectVMField* self) { - llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); - } -}; - class JavaObjectField : public JavaObject { private: uint8 flag; - JavaObject* p; - JavaObjectVMField* vmField; + JavaObjectClass* declaringClass; + JavaObject* name; + uint32 slot; public: static void staticTracer(JavaObjectField* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->p, closure); - vmkit::Collector::markAndTrace(obj, &obj->vmField, closure); + vmkit::Collector::markAndTrace(obj, &obj->name, closure); + vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); } static JavaField* getInternalField(JavaObjectField* self) { llvm_gcroot(self, 0); - return JavaObjectVMField::getInternalField(self->vmField); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return &(cls->asClass()->virtualFields[self->slot]); } static UserClass* getClass(JavaObjectField* self) { llvm_gcroot(self, 0); - return JavaObjectVMField::getClass(self->vmField); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); } static JavaObjectField* createFromInternalField(JavaField* field, int i); }; -class JavaObjectVMMethod : public JavaObject { -public: - JavaObjectClass* declaringClass; - JavaString* name; - uint32 slot; -public: - static void staticTracer(JavaObjectVMMethod* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->name, closure); - vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); - } - - static JavaMethod* getInternalMethod(JavaObjectVMMethod* self); - - static UserClass* getClass(JavaObjectVMMethod* self) { - llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); - } -}; - class JavaObjectMethod : public JavaObject { private: uint8 flag; - JavaObject* p; - JavaObjectVMMethod* vmMethod; + JavaObjectClass* declaringClass; + JavaObject* name; + uint32 slot; public: static void staticTracer(JavaObjectMethod* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->p, closure); - vmkit::Collector::markAndTrace(obj, &obj->vmMethod, closure); + vmkit::Collector::markAndTrace(obj, &obj->name, closure); + vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); } static JavaMethod* getInternalMethod(JavaObjectMethod* self); static UserClass* getClass(JavaObjectMethod* self) { llvm_gcroot(self, 0); - return JavaObjectVMMethod::getClass(self->vmMethod); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); } static JavaObjectMethod* createFromInternalMethod(JavaMethod* meth, int i); }; - -class JavaObjectVMConstructor : public JavaObject { -private: - JavaObjectClass* declaringClass; - uint32 slot; - -public: - static void staticTracer(JavaObjectVMConstructor* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); - } - - static JavaMethod* getInternalMethod(JavaObjectVMConstructor* self); - - static UserClass* getClass(JavaObjectVMConstructor* self) { - llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); - } -}; - class JavaObjectConstructor : public JavaObject { private: uint8 flag; - JavaObject* p; - JavaObjectVMConstructor* vmCons; + JavaObjectClass* declaringClass; + uint32 slot; public: static void staticTracer(JavaObjectConstructor* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->p, closure); - vmkit::Collector::markAndTrace(obj, &obj->vmCons, closure); + vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); } static JavaMethod* getInternalMethod(JavaObjectConstructor* self); - static UserClass* getClass(JavaObjectConstructor* self) { - llvm_gcroot(self, 0); - return JavaObjectVMConstructor::getClass(self->vmCons); - } + static UserClass* getClass(JavaObjectConstructor* self); static JavaObjectConstructor* createFromInternalConstructor(JavaMethod* cons, int i); }; @@ -221,9 +157,13 @@ public: static void setVmdata(JavaObjectVMThread* vmthread, JavaThread* internal_thread) { llvm_gcroot(vmthread, 0); + assert(internal_thread && "Invalid internal thread"); vmthread->vmdata = internal_thread; } + static JavaThread* getVmdata(JavaObjectVMThread* vmthread) {return vmthread->vmdata;} + + friend std::ostream& operator << (std::ostream&, JavaObjectVMThread&); }; Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc Thu Apr 25 11:50:58 2013 @@ -100,7 +100,7 @@ JavaObject* consStackElement(vmkit::Fram Class* cl = meth->classDef; className = JavaString::internalToJava(cl->name, vm); - Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut); + JavaAttribute* sourceAtt = cl->lookupAttribute(JavaAttribute::sourceFileAttribute); // We don't have the bytes if the class was vmjc'ed. if (sourceAtt && cl->getBytes()) { Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp Thu Apr 25 11:50:58 2013 @@ -219,7 +219,7 @@ JavaObjectField* JavaObjectField::create return ret; } -static inline JavaString** getSignatureString(Attribut* sigAtt, Class* cl) { +static inline JavaString** getSignatureString(JavaAttribute* sigAtt, Class* cl) { if (!sigAtt) return 0; Reader reader(sigAtt, cl->bytes); @@ -230,26 +230,26 @@ static inline JavaString** getSignatureS } JavaString** JavaObjectClass::getSignature(Class *cl) { - Attribut* sigAtt = cl->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = cl->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, cl); } JavaString** JavaObjectField::getSignature(JavaField* field) { - Attribut* sigAtt = field->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = field->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, field->classDef); } JavaString** JavaObjectMethod::getSignature(JavaMethod* meth) { - Attribut* sigAtt = meth->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = meth->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, meth->classDef); } JavaString** JavaObjectConstructor::getSignature(JavaMethod* cons) { - Attribut* sigAtt = cons->lookupAttribut(Attribut::signatureAttribut); + JavaAttribute* sigAtt = cons->lookupAttribute(JavaAttribute::signatureAttribute); return getSignatureString(sigAtt, cons->classDef); } -static inline ArraySInt8* getAttrBytes(Attribut* annotationsAtt, Class* cl) { +static inline ArraySInt8* getAttrBytes(JavaAttribute* annotationsAtt, Class* cl) { ArraySInt8* ret = 0; llvm_gcroot(ret, 0); @@ -270,47 +270,47 @@ static inline ArraySInt8* getAttrBytes(A } ArraySInt8* JavaObjectClass::getAnnotations(Class *cl) { - Attribut* attr = - cl->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + cl->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, cl); } ArraySInt8* JavaObjectField::getAnnotations(JavaField *field) { - Attribut* attr = - field->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + field->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, field->classDef); } ArraySInt8* JavaObjectMethod::getAnnotations(JavaMethod *meth) { - Attribut* attr = - meth->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + meth->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectMethod::getParamAnnotations(JavaMethod *meth) { - Attribut* attr = - meth->lookupAttribut(Attribut::paramAnnotationsAttribut); + JavaAttribute* attr = + meth->lookupAttribute(JavaAttribute::paramAnnotationsAttribute); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectMethod::getAnnotationDefault(JavaMethod *meth) { - Attribut* attr = - meth->lookupAttribut(Attribut::annotationDefaultAttribut); + JavaAttribute* attr = + meth->lookupAttribute(JavaAttribute::annotationDefaultAttribute); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectConstructor::getAnnotations(JavaMethod *cons) { - Attribut* attr = - cons->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* attr = + cons->lookupAttribute(JavaAttribute::annotationsAttribute); return getAttrBytes(attr, cons->classDef); } ArraySInt8* JavaObjectConstructor::getParamAnnotations(JavaMethod *cons) { - Attribut* attr = - cons->lookupAttribut(Attribut::paramAnnotationsAttribut); + JavaAttribute* attr = + cons->lookupAttribute(JavaAttribute::paramAnnotationsAttribute); return getAttrBytes(attr, cons->classDef); } Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 11:50:58 2013 @@ -86,7 +86,7 @@ JavaObject* consStackElement(vmkit::Fram Class* cl = meth->classDef; className = JavaString::internalToJava(cl->name, vm); - Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut); + Attribute* sourceAtt = cl->lookupAttribute(Attribute::sourceFileAttribute); if (sourceAtt) { Reader reader(sourceAtt, cl->bytes); @@ -2910,7 +2910,7 @@ JVM_GetEnclosingMethodInfo(JNIEnv* env, // Primitives arrays, interfaces... if (!cl) RETURN_FROM_JNI(0); - Attribut* emAtt = cl->lookupAttribut(Attribut::enclosingMethodAttribut); + Attribute* emAtt = cl->lookupAttribute(Attribute::enclosingMethodAttribute); if (emAtt) { Reader reader(emAtt, cl->bytes); Modified: vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h (original) +++ vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h Thu Apr 25 11:50:58 2013 @@ -47,7 +47,7 @@ public: /// Is the object a VMStaticInstance object? /// - static bool isVMStaticInstance(JavaObject* obj) { + static bool isVMStaticInstance(const JavaObject* obj) { llvm_gcroot(obj, 0); return obj->getVirtualTable() == &VT; } @@ -70,11 +70,12 @@ public: /// getStaticInstance - Get the static instance contained in this object /// - void * getStaticInstance() { + void * getStaticInstance() const { assert(OwningClass); return OwningClass->getStaticInstance(); } + Class* getOwningClass() const {return OwningClass;} }; } Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 11:50:58 2013 @@ -92,8 +92,8 @@ void J3Intrinsics::init(llvm::Module* mo PointerType::getUnqual(module->getTypeByName("JavaMethod")); UTF8Type = PointerType::getUnqual(module->getTypeByName("UTF8")); - AttributType = - PointerType::getUnqual(module->getTypeByName("Attribut")); + AttributeType = + PointerType::getUnqual(module->getTypeByName("Attribute")); JavaThreadType = PointerType::getUnqual(module->getTypeByName("JavaThread")); MutatorThreadType = @@ -150,7 +150,7 @@ void J3Intrinsics::init(llvm::Module* mo OffsetObjectSizeInClassConstant = constantOne; OffsetVTInClassConstant = ConstantInt::get(Type::getInt32Ty(Context), 7); OffsetTaskClassMirrorInClassConstant = constantThree; - OffsetStaticInstanceInTaskClassMirrorConstant = constantThree; + OffsetStaticInstanceInTaskClassMirrorConstant = constantTwo; OffsetStatusInTaskClassMirrorConstant = constantZero; OffsetInitializedInTaskClassMirrorConstant = constantOne; Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:50:58 2013 @@ -458,9 +458,9 @@ Constant* JavaAOTCompiler::CreateConstan LLVMAssessorInfo& LAI = getTypedefInfo(type); Type* Ty = LAI.llvmType; - Attribut* attribut = field.lookupAttribut(Attribut::constantAttribut); + JavaAttribute* attribute = field.lookupAttribute(JavaAttribute::constantAttribute); - if (attribut == NULL) { + if (attribute == NULL) { if ((cl->getStaticInstance() != NULL) && !useCooperativeGC()) { if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; @@ -512,7 +512,7 @@ Constant* JavaAOTCompiler::CreateConstan Elts.push_back(Constant::getNullValue(Ty)); } } else { - Reader reader(attribut, cl->bytes); + Reader reader(attribute, cl->bytes); JavaConstantPool * ctpInfo = cl->ctpInfo; uint16 idx = reader.readU2(); if (type->isPrimitive()) { @@ -809,21 +809,21 @@ Constant* JavaAOTCompiler::CreateConstan } -Constant* JavaAOTCompiler::CreateConstantFromAttribut(Attribut& attribut) { +Constant* JavaAOTCompiler::CreateConstantFromAttribute(JavaAttribute& attribute) { StructType* STy = - dyn_cast(JavaIntrinsics.AttributType->getContainedType(0)); + dyn_cast(JavaIntrinsics.AttributeType->getContainedType(0)); std::vector Elmts; // name - Elmts.push_back(getUTF8(attribut.name)); + Elmts.push_back(getUTF8(attribute.name)); // start - Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribut.start)); + Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribute.start)); // nbb - Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribut.nbb)); + Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribute.nbb)); return ConstantStruct::get(STy, Elmts); } @@ -913,29 +913,29 @@ Constant* JavaAOTCompiler::CreateConstan // type FieldElts.push_back(getUTF8(field.type)); - // attributs - if (field.nbAttributs) { - llvm::Type* AttrTy = JavaIntrinsics.AttributType->getContainedType(0); - ArrayType* ATy = ArrayType::get(AttrTy, field.nbAttributs); - for (uint32 i = 0; i < field.nbAttributs; ++i) { - TempElts.push_back(CreateConstantFromAttribut(field.attributs[i])); + // attributes + if (field.nbAttributes) { + llvm::Type* AttrTy = JavaIntrinsics.AttributeType->getContainedType(0); + ArrayType* ATy = ArrayType::get(AttrTy, field.nbAttributes); + for (uint32 i = 0; i < field.nbAttributes; ++i) { + TempElts.push_back(CreateConstantFromAttribute(field.attributes[i])); } - Constant* attributs = ConstantArray::get(ATy, TempElts); + Constant* attributes = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributs = new GlobalVariable(*getLLVMModule(), ATy, true, + attributes = new GlobalVariable(*getLLVMModule(), ATy, true, GlobalValue::InternalLinkage, - attributs, ""); - attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, - JavaIntrinsics.AttributType); + attributes, ""); + attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, + JavaIntrinsics.AttributeType); - FieldElts.push_back(attributs); + FieldElts.push_back(attributes); } else { - FieldElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); + FieldElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); } - // nbAttributs - FieldElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), field.nbAttributs)); + // nbAttributes + FieldElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), field.nbAttributes)); // classDef FieldElts.push_back(getNativeClass(field.classDef)); @@ -963,29 +963,29 @@ Constant* JavaAOTCompiler::CreateConstan // access MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.access)); - // attributs - if (method.nbAttributs) { - llvm::Type* AttrTy = JavaIntrinsics.AttributType->getContainedType(0); - ArrayType* ATy = ArrayType::get(AttrTy, method.nbAttributs); - for (uint32 i = 0; i < method.nbAttributs; ++i) { - TempElts.push_back(CreateConstantFromAttribut(method.attributs[i])); + // attributes + if (method.nbAttributes) { + llvm::Type* AttrTy = JavaIntrinsics.AttributeType->getContainedType(0); + ArrayType* ATy = ArrayType::get(AttrTy, method.nbAttributes); + for (uint32 i = 0; i < method.nbAttributes; ++i) { + TempElts.push_back(CreateConstantFromAttribute(method.attributes[i])); } - Constant* attributs = ConstantArray::get(ATy, TempElts); + Constant* attributes = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributs = new GlobalVariable(Mod, ATy, true, + attributes = new GlobalVariable(Mod, ATy, true, GlobalValue::InternalLinkage, - attributs, ""); - attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, - JavaIntrinsics.AttributType); + attributes, ""); + attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, + JavaIntrinsics.AttributeType); - MethodElts.push_back(attributs); + MethodElts.push_back(attributes); } else { - MethodElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); + MethodElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); } - // nbAttributs - MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.nbAttributs)); + // nbAttributes + MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.nbAttributes)); // classDef MethodElts.push_back(getNativeClass(method.classDef)); @@ -1293,29 +1293,29 @@ Constant* JavaAOTCompiler::CreateConstan ctpInfo, ""); ClassElts.push_back(varGV); - // attributs - if (cl->nbAttributs) { - ATy = ArrayType::get(JavaIntrinsics.AttributType->getContainedType(0), - cl->nbAttributs); + // attributes + if (cl->nbAttributes) { + ATy = ArrayType::get(JavaIntrinsics.AttributeType->getContainedType(0), + cl->nbAttributes); - for (uint32 i = 0; i < cl->nbAttributs; ++i) { - TempElts.push_back(CreateConstantFromAttribut(cl->attributs[i])); + for (uint32 i = 0; i < cl->nbAttributes; ++i) { + TempElts.push_back(CreateConstantFromAttribute(cl->attributes[i])); } - Constant* attributs = ConstantArray::get(ATy, TempElts); + Constant* attributes = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributs = new GlobalVariable(*getLLVMModule(), ATy, true, + attributes = new GlobalVariable(*getLLVMModule(), ATy, true, GlobalValue::InternalLinkage, - attributs, ""); - attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, - JavaIntrinsics.AttributType); - ClassElts.push_back(attributs); + attributes, ""); + attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, + JavaIntrinsics.AttributeType); + ClassElts.push_back(attributes); } else { - ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); + ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); } - // nbAttributs - ClassElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), cl->nbAttributs)); + // nbAttributes + ClassElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), cl->nbAttributes)); // innerClasses if (cl->nbInnerClasses) { Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:50:58 2013 @@ -23,6 +23,7 @@ #include #include "vmkit/JIT.h" +#include "vmkit/GC.h" #include "debug.h" #include "JavaArray.h" @@ -95,7 +96,7 @@ bool JavaJIT::canBeInlined(JavaMethod* m if (isSynchro(meth->access)) return false; if (isNative(meth->access)) return false; - Attribut* codeAtt = meth->lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = meth->lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt == NULL) return false; Reader reader(codeAtt, meth->classDef->bytes); @@ -643,22 +644,23 @@ llvm::Function* JavaJIT::nativeCompile(w return llvmFunction; } +llvm::Value* JavaJIT::objectToHeader(Value* obj) { + obj = new PtrToIntInst(obj, intrinsics->pointerSizeType, "", currentBlock); + Value* d = ConstantInt::get(intrinsics->pointerSizeType, gcHeader::hiddenHeaderSize()); + obj = BinaryOperator::CreateSub(obj, d, "", currentBlock); + return new IntToPtrInst(obj, intrinsics->ObjectHeaderType, "", currentBlock); +} + void JavaJIT::monitorEnter(Value* obj) { - std::vector gep; - gep.push_back(intrinsics->constantZero); - gep.push_back(intrinsics->JavaObjectLockOffsetConstant); - Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock); - + Value* lockPtr = objectToHeader(obj); + Value* lock = new LoadInst(lockPtr, "", currentBlock); - lock = new PtrToIntInst(lock, intrinsics->pointerSizeType, "", currentBlock); + Value* NonLockBitsMask = ConstantInt::get(intrinsics->pointerSizeType, vmkit::ThinLock::NonLockBitsMask); lock = BinaryOperator::CreateAnd(lock, NonLockBitsMask, "", currentBlock); - lockPtr = new BitCastInst(lockPtr, - PointerType::getUnqual(intrinsics->pointerSizeType), - "", currentBlock); Value* threadId = getMutatorThreadPtr(); threadId = new PtrToIntInst(threadId, intrinsics->pointerSizeType, "", currentBlock); @@ -687,14 +689,10 @@ void JavaJIT::monitorEnter(Value* obj) { } void JavaJIT::monitorExit(Value* obj) { - std::vector gep; - gep.push_back(intrinsics->constantZero); - gep.push_back(intrinsics->JavaObjectLockOffsetConstant); - Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock); - lockPtr = new BitCastInst(lockPtr, - PointerType::getUnqual(intrinsics->pointerSizeType), - "", currentBlock); + Value* lockPtr = objectToHeader(obj); + Value* lock = new LoadInst(lockPtr, "", currentBlock); + Value* NonLockBitsMask = ConstantInt::get( intrinsics->pointerSizeType, vmkit::ThinLock::NonLockBitsMask); @@ -801,7 +799,7 @@ static void removeUnusedObjects(std::vec Instruction* JavaJIT::inlineCompile(BasicBlock*& curBB, BasicBlock* endExBlock, std::vector& args) { - Attribut* codeAtt = compilingMethod->lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = compilingMethod->lookupAttribute(JavaAttribute::codeAttribute); Reader reader(codeAtt, compilingClass->bytes); uint16 maxStack = reader.readU2(); uint16 maxLocals = reader.readU2(); @@ -975,7 +973,7 @@ llvm::Function* JavaJIT::javaCompile() { DbgSubprogram = TheCompiler->getDebugFactory()->createFunction( DIDescriptor(), "", "", DIFile(), 0, DIType(), false, false, 0); - Attribut* codeAtt = compilingMethod->lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = compilingMethod->lookupAttribute(JavaAttribute::codeAttribute); if (!codeAtt) { fprintf(stderr, "I haven't verified your class file and it's malformed:" @@ -1247,8 +1245,8 @@ llvm::Function* JavaJIT::javaCompile() { UTF8Buffer(compilingClass->name).cString(), UTF8Buffer(compilingMethod->name).cString()); - Attribut* annotationsAtt = - compilingMethod->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* annotationsAtt = + compilingMethod->lookupAttribute(JavaAttribute::annotationsAttribute); if (annotationsAtt) { Reader reader(annotationsAtt, compilingClass->bytes); @@ -1259,10 +1257,11 @@ llvm::Function* JavaJIT::javaCompile() { const UTF8* name = compilingClass->ctpInfo->UTF8At(AR.AnnotationNameIndex); if (name->equals(TheCompiler->InlinePragma)) { - llvmFunction->removeFnAttr(Attribute::NoInline); - llvmFunction->addFnAttr(Attribute::AlwaysInline); + llvmFunction->removeFnAttr( + Attributes::get(*llvmContext, llvm::Attributes::NoInline)); + llvmFunction->addFnAttr(llvm::Attributes::AlwaysInline); } else if (name->equals(TheCompiler->NoInlinePragma)) { - llvmFunction->addFnAttr(Attribute::NoInline); + llvmFunction->addFnAttr(llvm::Attributes::NoInline); } } } @@ -1342,7 +1341,7 @@ void JavaJIT::loadConstant(uint16 index) void JavaJIT::JITVerifyNull(Value* obj) { if (TheCompiler->hasExceptionsEnabled()) { if (nbHandlers == 0 && vmkit::System::SupportsHardwareNullCheck()) { - Value* indexes[2] = { intrinsics->constantZero, intrinsics->constantZero }; + Value* indexes[2] = { intrinsics->constantZero, intrinsics->JavaObjectVTOffsetConstant }; Value* VTPtr = GetElementPtrInst::Create(obj, indexes, "", currentBlock); Instruction* VT = new LoadInst(VTPtr, "", true, currentBlock); VT->setDebugLoc(DebugLoc::get(currentBytecodeIndex, 1, DbgSubprogram)); @@ -1828,7 +1827,7 @@ void JavaJIT::invokeNew(uint16 index) { Class* cl = 0; Value* Cl = getResolvedClass(index, true, true, &cl); - + Value* VT = 0; Value* Size = 0; Modified: vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp Thu Apr 25 11:50:58 2013 @@ -401,7 +401,7 @@ Value* JavaJ3LazyJITCompiler::addCallbac JavaConstantPool* ctpInfo = cl->ctpInfo; word_t stub = stat ? sign->getStaticCallStub() : sign->getSpecialCallStub(); if (!ctpInfo->ctpRes[index]) { - // Do a compare and swap, so that we do not overwrtie what a stub might + // Do a compare and swap, so that we do not overwrite what a stub might // have just updated. word_t val = (word_t) __sync_val_compare_and_swap(&(ctpInfo->ctpRes[index]), NULL, (void*)stub); Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll Thu Apr 25 11:50:58 2013 @@ -22,9 +22,9 @@ %ArrayUInt8 = type { %JavaObject, i8*, [0 x i8] } ;;; The task class mirror. -;;; Field 1: The class state -;;; Field 2: The initialization state -;;; Field 3: The static instance +;;; Field 0: The class state +;;; Field 1: The initialization state +;;; Field 2: The static instance %TaskClassMirror = type { i8, i1, i8* } %CircularBase = type { %VT*, %CircularBase*, %CircularBase* } @@ -41,21 +41,21 @@ ;;; field 9: void* routine ;;; field 10: void* lastKnownFrame ;;; field 11: void* lastExceptionBuffer -%Thread = type { %CircularBase, i8*, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8* } +%Thread = type { %CircularBase, i32, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8* } %JavaThread = type { %MutatorThread, i8*, %JavaObject* } %JavaConstantPool = type { %JavaClass*, i32, i8*, i32*, i8** } -%Attribut = type { %UTF8*, i32, i32 } +%Attribute = type { %UTF8*, i32, i32 } -%UTF8 = type { i8*, [0 x i16] } +%UTF8 = type { i32, [0 x i16] } -%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribut*, i16, %JavaClass*, i32, +%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribute*, i16, %JavaClass*, i32, i16 } -%JavaMethod = type { i8*, i16, %Attribut*, i16, %JavaClass*, +%JavaMethod = type { i8*, i16, %Attribute*, i16, %JavaClass*, %UTF8*, %UTF8*, i8, i8*, i32 } %JavaClassPrimitive = type { %JavaCommonClass, i32 } @@ -88,7 +88,7 @@ declare void @listAllTypes(%JavaObject, %JavaField, %JavaMethod, %UTF8, - %Attribut, + %Attribute, %JavaThread, %MutatorThread, %J3DenseMap); Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll Thu Apr 25 11:50:58 2013 @@ -9,5 +9,5 @@ %JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror], %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, - %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribut*, + %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribute*, i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 } Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:50:58 2013 @@ -30,18 +30,19 @@ #include using namespace j3; +using namespace std; -const UTF8* Attribut::annotationsAttribut = 0; -const UTF8* Attribut::codeAttribut = 0; -const UTF8* Attribut::exceptionsAttribut = 0; -const UTF8* Attribut::constantAttribut = 0; -const UTF8* Attribut::lineNumberTableAttribut = 0; -const UTF8* Attribut::innerClassesAttribut = 0; -const UTF8* Attribut::sourceFileAttribut = 0; -const UTF8* Attribut::signatureAttribut = 0; -const UTF8* Attribut::enclosingMethodAttribut = 0; -const UTF8* Attribut::paramAnnotationsAttribut = 0; -const UTF8* Attribut::annotationDefaultAttribut = 0; +const UTF8* JavaAttribute::annotationsAttribute = 0; +const UTF8* JavaAttribute::codeAttribute = 0; +const UTF8* JavaAttribute::exceptionsAttribute = 0; +const UTF8* JavaAttribute::constantAttribute = 0; +const UTF8* JavaAttribute::lineNumberTableAttribute = 0; +const UTF8* JavaAttribute::innerClassesAttribute = 0; +const UTF8* JavaAttribute::sourceFileAttribute = 0; +const UTF8* JavaAttribute::signatureAttribute = 0; +const UTF8* JavaAttribute::enclosingMethodAttribute = 0; +const UTF8* JavaAttribute::paramAnnotationsAttribute = 0; +const UTF8* JavaAttribute::annotationDefaultAttribute = 0; Class* ClassArray::SuperArray; Class** ClassArray::InterfacesArray; @@ -51,7 +52,7 @@ extern "C" void ArrayObjectTracer(JavaOb extern "C" void RegularObjectTracer(JavaObject*); extern "C" void ReferenceObjectTracer(JavaObject*); -Attribut::Attribut(const UTF8* name, uint32 length, +JavaAttribute::JavaAttribute(const UTF8* name, uint32 length, uint32 offset) { this->start = offset; @@ -59,27 +60,27 @@ Attribut::Attribut(const UTF8* name, uin this->name = name; } -Attribut* Class::lookupAttribut(const UTF8* key) { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); +JavaAttribute* Class::lookupAttribute(const UTF8* key) { + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); if (cur->name->equals(key)) return cur; } return 0; } -Attribut* JavaField::lookupAttribut(const UTF8* key) { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); +JavaAttribute* JavaField::lookupAttribute(const UTF8* key) { + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); if (cur->name->equals(key)) return cur; } return 0; } -Attribut* JavaMethod::lookupAttribut(const UTF8* key) { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); +JavaAttribute* JavaMethod::lookupAttribute(const UTF8* key) { + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); if (cur->name->equals(key)) return cur; } @@ -90,9 +91,9 @@ CommonClass::~CommonClass() { } Class::~Class() { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); - cur->~Attribut(); + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); + cur->~JavaAttribute(); classLoader->allocator.Deallocate(cur); } @@ -134,17 +135,17 @@ Class::~Class() { } JavaField::~JavaField() { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); - cur->~Attribut(); + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); + cur->~JavaAttribute(); classDef->classLoader->allocator.Deallocate(cur); } } JavaMethod::~JavaMethod() { - for (uint32 i = 0; i < nbAttributs; ++i) { - Attribut* cur = &(attributs[i]); - cur->~Attribut(); + for (uint32 i = 0; i < nbAttributes; ++i) { + JavaAttribute* cur = &(attributes[i]); + cur->~JavaAttribute(); classDef->classLoader->allocator.Deallocate(cur); } } @@ -592,12 +593,12 @@ void JavaField::InitStaticField(float va void JavaField::InitStaticField(Jnjvm* vm) { const Typedef* type = getSignature(); - Attribut* attribut = lookupAttribut(Attribut::constantAttribut); + JavaAttribute* attribute = lookupAttribute(JavaAttribute::constantAttribute); - if (!attribut) { + if (!attribute) { InitNullStaticField(); } else { - Reader reader(attribut, classDef->bytes); + Reader reader(attribute, classDef->bytes); JavaConstantPool * ctpInfo = classDef->ctpInfo; uint16 idx = reader.readU2(); if (type->isPrimitive()) { @@ -675,7 +676,7 @@ void Class::readParents(Reader& reader) void internalLoadExceptions(JavaMethod& meth) { - Attribut* codeAtt = meth.lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = meth.lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt) { Reader reader(codeAtt, meth.classDef->bytes); @@ -710,15 +711,15 @@ void UserClass::loadExceptions() { internalLoadExceptions(staticMethods[i]); } -Attribut* Class::readAttributs(Reader& reader, uint16& size) { +JavaAttribute* Class::readAttributes(Reader& reader, uint16& size) { uint16 nba = reader.readU2(); - Attribut* attributs = new(classLoader->allocator, "Attributs") Attribut[nba]; + JavaAttribute* attributes = new(classLoader->allocator, "Attributes") JavaAttribute[nba]; for (int i = 0; i < nba; i++) { const UTF8* attName = ctpInfo->UTF8At(reader.readU2()); uint32 attLen = reader.readU4(); - Attribut& att = attributs[i]; + JavaAttribute& att = attributes[i]; att.start = reader.cursor; att.nbb = attLen; att.name = attName; @@ -726,7 +727,7 @@ Attribut* Class::readAttributs(Reader& r } size = nba; - return attributs; + return attributes; } void Class::readFields(Reader& reader) { @@ -748,7 +749,7 @@ void Class::readFields(Reader& reader) { field->initialise(this, name, type, access); ++nbVirtualFields; } - field->attributs = readAttributs(reader, field->nbAttributs); + field->attributes = readAttributes(reader, field->nbAttributes); } } @@ -847,7 +848,7 @@ void Class::readMethods(Reader& reader) meth->initialise(this, name, type, access); ++nbVirtualMethods; } - meth->attributs = readAttributs(reader, meth->nbAttributs); + meth->attributes = readAttributes(reader, meth->nbAttributes); } if (isAbstract(access)) { @@ -905,7 +906,7 @@ void Class::readClass() { readParents(reader); readFields(reader); readMethods(reader); - attributs = readAttributs(reader, nbAttributs); + attributes = readAttributes(reader, nbAttributes); } void UserClass::resolveParents() { @@ -929,9 +930,9 @@ void Class::resolveClass() { void UserClass::resolveInnerOuterClasses() { if (!innerOuterResolved) { - Attribut* attribut = lookupAttribut(Attribut::innerClassesAttribut); - if (attribut != 0) { - Reader reader(attribut, bytes); + JavaAttribute* attribute = lookupAttribute(JavaAttribute::innerClassesAttribute); + if (attribute != 0) { + Reader reader(attribute, bytes); uint16 nbi = reader.readU2(); for (uint16 i = 0; i < nbi; ++i) { uint16 inner = reader.readU2(); @@ -1002,7 +1003,7 @@ ArrayObject* JavaMethod::getExceptionTyp llvm_gcroot(res, 0); llvm_gcroot(delegatee, 0); - Attribut* exceptionAtt = lookupAttribut(Attribut::exceptionsAttribut); + JavaAttribute* exceptionAtt = lookupAttribute(JavaAttribute::exceptionsAttribute); Jnjvm* vm = JavaThread::get()->getJVM(); if (exceptionAtt == 0) { return (ArrayObject*)vm->upcalls->classArrayClass->doNew(0, vm); @@ -1295,7 +1296,7 @@ bool UserClass::needsInitialisationCheck if (super && super->needsInitialisationCheck()) return true; - if (nbStaticFields) return true; + if (nbStaticFields > 0) return true; JavaMethod* meth = lookupMethodDontThrow(classLoader->bootstrapLoader->clinitName, @@ -1699,7 +1700,7 @@ void AnnotationReader::readElementValue( } uint16 JavaMethod::lookupLineNumber(vmkit::FrameInfo* info) { - Attribut* codeAtt = lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt == NULL) return 0; Reader reader(codeAtt, classDef->bytes); reader.readU2(); // max_stack @@ -1712,7 +1713,7 @@ uint16 JavaMethod::lookupLineNumber(vmki for (uint16 att = 0; att < nba; ++att) { const UTF8* attName = classDef->ctpInfo->UTF8At(reader.readU2()); uint32 attLen = reader.readU4(); - if (attName->equals(Attribut::lineNumberTableAttribut)) { + if (attName->equals(JavaAttribute::lineNumberTableAttribute)) { uint16_t lineLength = reader.readU2(); uint16_t currentLine = 0; for (uint16 j = 0; j < lineLength; ++j) { @@ -1729,7 +1730,7 @@ uint16 JavaMethod::lookupLineNumber(vmki } uint16 JavaMethod::lookupCtpIndex(vmkit::FrameInfo* FI) { - Attribut* codeAtt = lookupAttribut(Attribut::codeAttribut); + JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); Reader reader(codeAtt, classDef->bytes); reader.cursor = reader.cursor + 2 + 2 + 4 + FI->SourceIndex + 1; return reader.readU2(); @@ -1764,19 +1765,20 @@ void Class::broadcastClass() { JavaObject::notifyAll(delegatee); } -void JavaField::setInstanceObjectField(JavaObject* obj, JavaObject* val) { - llvm_gcroot(obj, 0); - llvm_gcroot(val, 0); - if (val != NULL) assert(val->getVirtualTable()); - assert(classDef->isResolved()); - JavaObject** ptr = (JavaObject**)((uint64)obj + ptrOffset); - vmkit::Collector::objectReferenceWriteBarrier((gc*)obj, (gc**)ptr, (gc*)val); -} - -void JavaField::setStaticObjectField(JavaObject* val) { - llvm_gcroot(val, 0); - if (val != NULL) assert(val->getVirtualTable()); - assert(classDef->isResolved()); - JavaObject** ptr = (JavaObject**)((uint64)classDef->getStaticInstance() + ptrOffset); - vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); -} +std::ostream& j3::operator << (std::ostream& os, const JavaMethod& m) +{ + return os << *m.classDef->name << '.' << *m.name << " (" << *m.type << ')'; +} + +void JavaMethod::dump() const +{ + cerr << *this << endl; +} + +JavaField_IMPL_ASSESSORS(float, Float) +JavaField_IMPL_ASSESSORS(double, Double) +JavaField_IMPL_ASSESSORS(uint8, Int8) +JavaField_IMPL_ASSESSORS(uint16, Int16) +JavaField_IMPL_ASSESSORS(uint32, Int32) +JavaField_IMPL_ASSESSORS(sint64, Long) +JavaField_IMPL_ASSESSORS(JavaObject*, Object) Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 11:50:58 2013 @@ -22,6 +22,9 @@ #include "JavaObject.h" #include "JnjvmClassLoader.h" #include "JnjvmConfig.h" +#include "Jnjvm.h" +#include "JavaTypes.h" +#include "JavaThread.h" #include #include @@ -70,84 +73,84 @@ public: void readElementValue(); }; -/// Attribut - This class represents JVM attributes to Java class, methods and +/// Attribute - This class represents JVM attributes to Java class, methods and /// fields located in the .class file. /// -class Attribut : public vmkit::PermanentObject { +class JavaAttribute : public vmkit::PermanentObject { public: - /// name - The name of the attribut. These are specified in the JVM book. + /// name - The name of the attribute. These are specified in the JVM book. /// Experimental attributes exist, but the JnJVM does nor parse them. /// const UTF8* name; - /// start - The offset in the class of this attribut. + /// start - The offset in the class of this attribute. /// uint32 start; - /// nbb - The size of the attribut. + /// nbb - The size of the attribute. /// uint32 nbb; - /// Attribut - Create an attribut at the given length and offset. + /// Attribute - Create an attribute at the given length and offset. /// - Attribut(const UTF8* name, uint32 length, uint32 offset); - Attribut() {} + JavaAttribute(const UTF8* name, uint32 length, uint32 offset); + JavaAttribute() {} - /// codeAttribut - The "Code" JVM attribut. This is a method attribut for + /// codeAttribute - The "Code" JVM attribute. This is a method attribute for /// finding the bytecode of a method in the .class file. // - static const UTF8* codeAttribut; + static const UTF8* codeAttribute; - /// annotationsAttribut - The "RuntimeVisibleAnnotations" JVM attribut. - /// This is a method attribut for getting the runtime annotations. + /// annotationsAttribute - The "RuntimeVisibleAnnotations" JVM attribute. + /// This is a method attribute for getting the runtime annotations. // - static const UTF8* annotationsAttribut; + static const UTF8* annotationsAttribute; - /// exceptionsAttribut - The "Exceptions" attribut. This is a method - /// attribut for finding the exception table of a method in the .class + /// exceptionsAttribute - The "Exceptions" attribute. This is a method + /// attribute for finding the exception table of a method in the .class /// file. /// - static const UTF8* exceptionsAttribut; + static const UTF8* exceptionsAttribute; - /// constantAttribut - The "ConstantValue" attribut. This is a field attribut + /// constantAttribute - The "ConstantValue" attribute. This is a field attribute /// when the field has a static constant value. /// - static const UTF8* constantAttribut; + static const UTF8* constantAttribute; - /// lineNumberTableAttribut - The "LineNumberTable" attribut. This is used + /// lineNumberTableAttribute - The "LineNumberTable" attribute. This is used /// for corresponding JVM bytecode to source line in the .java file. /// - static const UTF8* lineNumberTableAttribut; + static const UTF8* lineNumberTableAttribute; - /// innerClassAttribut - The "InnerClasses" attribut. This is a class attribut + /// innerClassAttribute - The "InnerClasses" attribute. This is a class attribute /// for knowing the inner/outer informations of a Java class. /// - static const UTF8* innerClassesAttribut; + static const UTF8* innerClassesAttribute; - /// sourceFileAttribut - The "SourceFile" attribut. This is a class attribut - /// and gives the correspondance between a class and the name of its Java + /// sourceFileAttribute - The "SourceFile" attribute. This is a class attribute + /// and gives the correspondence between a class and the name of its Java /// file. /// - static const UTF8* sourceFileAttribut; + static const UTF8* sourceFileAttribute; - /// signatureAttribut - The "Signature" attribut. This is used to record + /// signatureAttribute - The "Signature" attribute. This is used to record /// generics information about a class or method. /// - static const UTF8* signatureAttribut; + static const UTF8* signatureAttribute; - /// enclosingMEthodAttribut - The "EnclosingMethod" attribut. This is a class - /// attribut that identifies the method definining a local or anonymous class + /// enclosingMEthodAttribute - The "EnclosingMethod" attribute. This is a class + /// attribute that identifies the method defining a local or anonymous class /// - static const UTF8* enclosingMethodAttribut; + static const UTF8* enclosingMethodAttribute; - /// paramAnnotationsAttribut - Annotations for parameters attribut + /// paramAnnotationsAttribute - Annotations for parameters attribute /// - static const UTF8* paramAnnotationsAttribut; + static const UTF8* paramAnnotationsAttribute; - /// annotationDefaultAttribut - The "AnnotationDefault" attribut + /// annotationDefaultAttribute - The "AnnotationDefault" attribute /// - static const UTF8* annotationDefaultAttribut; + static const UTF8* annotationDefaultAttribute; }; /// TaskClassMirror - The isolate specific class information: the initialization @@ -463,13 +466,13 @@ public: /// JavaConstantPool* ctpInfo; - /// attributs - JVM attributes of this class. + /// attributes - JVM attributes of this class. /// - Attribut* attributs; + JavaAttribute* attributes; - /// nbAttributs - The number of attributes. + /// nbAttributes - The number of attributes. /// - uint16 nbAttributs; + uint16 nbAttributes; /// innerClasses - The inner classes of this class. /// @@ -609,9 +612,9 @@ public: ~Class(); Class(); - /// lookupAttribut - Look up a JVM attribut of this class. + /// lookupAttribute - Look up a JVM attribute of this class. /// - Attribut* lookupAttribut(const UTF8* key); + JavaAttribute* lookupAttribute(const UTF8* key); /// allocateStaticInstance - Allocate the static instance of this class. /// @@ -630,9 +633,9 @@ public: /// void loadExceptions(); - /// readAttributs - Reads the attributs of the class. + /// readAttributes - Reads the attributes of the class. /// - Attribut* readAttributs(Reader& reader, uint16& size); + JavaAttribute* readAttributes(Reader& reader, uint16& size); /// readFields - Reads the fields of the class. /// @@ -877,13 +880,13 @@ public: /// uint16 access; - /// attributs - List of Java attributs of this method. + /// attributes - List of Java attributes of this method. /// - Attribut* attributs; + JavaAttribute* attributes; - /// nbAttributs - The number of attributes. + /// nbAttributes - The number of attributes. /// - uint16 nbAttributs; + uint16 nbAttributes; /// classDef - The Java class where the method is defined. /// @@ -909,10 +912,10 @@ public: /// uint32 offset; - /// lookupAttribut - Look up an attribut in the method's attributs. Returns - /// null if the attribut is not found. + /// lookupAttribute - Look up an attribute in the method's attributes. Returns + /// null if the attribute is not found. /// - Attribut* lookupAttribut(const UTF8* key); + JavaAttribute* lookupAttribute(const UTF8* key); /// lookupLineNumber - Find the line number based on the given frame info. /// @@ -923,7 +926,7 @@ public: /// uint16 lookupCtpIndex(vmkit::FrameInfo* FI); - /// getSignature - Get the signature of thes method, resolving it if + /// getSignature - Get the signature of the method, resolving it if /// necessary. /// Signdef* getSignature() { @@ -986,108 +989,126 @@ public: // //===----------------------------------------------------------------------===// - /// This class of methods takes a variable argument list. - uint32 invokeIntSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - float invokeFloatSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - double invokeDoubleSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - sint64 invokeLongSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - - uint32 invokeIntVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - float invokeFloatVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - double invokeDoubleVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - sint64 invokeLongVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, - va_list ap) __attribute__ ((noinline)); - - uint32 invokeIntStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - float invokeFloatStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - double invokeDoubleStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - sint64 invokeLongStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectStaticAP(Jnjvm* vm, UserClass*, va_list ap) - __attribute__ ((noinline)); - - /// This class of methods takes a buffer which contain the arguments of the - /// call. - uint32 invokeIntSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - float invokeFloatSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - double invokeDoubleSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - sint64 invokeLongSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - - uint32 invokeIntVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - float invokeFloatVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - double invokeDoubleVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - sint64 invokeLongVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, - void* buf) __attribute__ ((noinline)); - - uint32 invokeIntStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - float invokeFloatStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - double invokeDoubleStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - sint64 invokeLongStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectStaticBuf(Jnjvm* vm, UserClass*, void* buf) - __attribute__ ((noinline)); - - /// This class of methods is variadic. - uint32 invokeIntSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - float invokeFloatSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - double invokeDoubleSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - sint64 invokeLongSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, - ...) __attribute__ ((noinline)); - - uint32 invokeIntVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - float invokeFloatVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - double invokeDoubleVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - sint64 invokeLongVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, - ...) __attribute__ ((noinline)); - - uint32 invokeIntStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - float invokeFloatStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - double invokeDoubleStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - sint64 invokeLongStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); - JavaObject* invokeJavaObjectStatic(Jnjvm* vm, UserClass*, ...) - __attribute__ ((noinline)); +#define DO_TRY +#define DO_CATCH if (th->pendingException) { th->throwFromJava(); } + +private: + jvalue* marshalArguments(vmkit::ThreadAllocator& allocator, va_list ap); + + template + TYPE invokeSpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) { + llvm_gcroot(obj, 0); + verifyNull(obj); + + void* func = this->compiledPtr(); + FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)getSignature()->getVirtualCallBuf(); + + JavaThread* th = JavaThread::get(); + th->startJava(); + TYPE res; + + DO_TRY + res = call(cl->getConstantPool(), func, obj, buf); + DO_CATCH + + th->endJava(); + return res; + } + + template + TYPE invokeVirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) { + UserCommonClass* theClass = JavaObject::getClass(obj); + UserClass* objCl = theClass->isArray() ? theClass->super : theClass->asClass(); + + JavaMethod* meth = this; + if ((objCl != classDef) && !isFinal(access)) { + meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); + assert(meth && "No method found"); + } + + assert(objCl->isSubclassOf(meth->classDef) && "Wrong type"); + + return meth->invokeSpecialBuf(vm, cl, obj, buf); + } + + template + TYPE invokeStaticBuf(Jnjvm* vm, UserClass* cl, void* buf) { + if (!cl->isReady()) { + cl->resolveClass(); + cl->initialiseClass(vm); + } + + void* func = this->compiledPtr(); + FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)getSignature()->getStaticCallBuf(); + + JavaThread* th = JavaThread::get(); + th->startJava(); + TYPE res; + + DO_TRY + res = call(cl->getConstantPool(), func, buf); + DO_CATCH + + th->endJava(); + return res; + } + + template + TYPE invokeVirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { + llvm_gcroot(obj, 0); + verifyNull(obj); + + vmkit::ThreadAllocator allocator; + jvalue* buffer = marshalArguments(allocator, ap); + return invokeVirtualBuf(vm, cl, obj, buffer); + } + + template + TYPE invokeSpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { + llvm_gcroot(obj, 0); + verifyNull(obj); + + vmkit::ThreadAllocator allocator; + jvalue* buffer = marshalArguments(allocator, ap); + return invokeSpecialBuf(vm, cl, obj, buffer); + } + + template + TYPE invokeStaticAP(Jnjvm* vm, UserClass* cl, va_list ap) { + vmkit::ThreadAllocator allocator; + jvalue* buffer = marshalArguments(allocator, ap); + return invokeStaticBuf(vm, cl, buffer); + } + +#define JavaMethod_DECL_INVOKE_VA(TYPE, TYPE_NAME) \ + TYPE invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) __attribute__ ((noinline)); + +#define JavaMethod_DECL_INVOKE_AP(TYPE, TYPE_NAME) \ + TYPE invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) __attribute__ ((noinline)); + +#define JavaMethod_DECL_INVOKE_BUF(TYPE, TYPE_NAME) \ + TYPE invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__ ((noinline)); \ + TYPE invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) __attribute__ ((noinline)); + +#define JavaMethod_DECL_INVOKE(TYPE, TYPE_NAME) \ + JavaMethod_DECL_INVOKE_BUF(TYPE, TYPE_NAME) \ + JavaMethod_DECL_INVOKE_AP(TYPE, TYPE_NAME) \ + JavaMethod_DECL_INVOKE_VA(TYPE, TYPE_NAME) + +public: + JavaMethod_DECL_INVOKE(uint32_t, Int) + JavaMethod_DECL_INVOKE(int64_t, Long) + JavaMethod_DECL_INVOKE(float, Float) + JavaMethod_DECL_INVOKE(double, Double) + JavaMethod_DECL_INVOKE(JavaObject*, JavaObject) + + friend std::ostream& operator << (std::ostream&, const JavaMethod&); + void dump() const __attribute__((noinline)); #define JNI_NAME_PRE "Java_" #define JNI_NAME_PRE_LEN 5 @@ -1132,13 +1153,13 @@ public: /// const UTF8* type; - /// attributs - List of Java attributs for this field. + /// attributes - List of Java attributes for this field. /// - Attribut* attributs; + JavaAttribute* attributes; - /// nbAttributs - The number of attributes. + /// nbAttributes - The number of attributes. /// - uint16 nbAttributs; + uint16 nbAttributes; /// classDef - The class where the field is defined. /// @@ -1167,9 +1188,9 @@ public: /// void InitStaticField(Jnjvm* vm); - /// lookupAttribut - Look up the attribut in the field's list of attributs. + /// lookupAttribute - Look up the attribute in the field's list of attributes. /// - Attribut* lookupAttribut(const UTF8* key); + JavaAttribute* lookupAttribute(const UTF8* key); JavaObject** getStaticObjectFieldPtr() { assert(classDef->getStaticInstance()); @@ -1181,74 +1202,89 @@ public: return (JavaObject**)((uint64)obj + ptrOffset); } +private: /// getStatic*Field - Get a static field. /// - #define GETSTATICFIELD(TYPE, TYPE_NAME) \ - TYPE getStatic##TYPE_NAME##Field() { \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ - return ((TYPE*)ptr)[0]; \ + template + TYPE getStaticField() { + assert(classDef->isResolved()); + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); + return *static_cast(ptr); } + /* + The struct FieldSetter is a workaround in C++ to enable + template-based method specialization in a non-template + class. See specialization below the class declaration. + */ + template + struct FieldSetter { + /// setStatic*Field - Set a field of an object. + /// + static void setStaticField(const JavaField* field, TYPE val) { + assert(field->classDef->isResolved()); + void* ptr = (void*)((uint64)field->classDef->getStaticInstance() + field->ptrOffset); + *static_cast(ptr) = val; + } + + /// setInstance*Field - Set an instance field. + /// + static void setInstanceField(const JavaField* field, JavaObject* obj, TYPE val) { + llvm_gcroot(obj, 0); + assert(field->classDef->isResolved()); + void* ptr = (void*)((uint64)obj + field->ptrOffset); + *static_cast(ptr) = val; + } + }; + /// setStatic*Field - Set a field of an object. /// - #define SETSTATICFIELD(TYPE, TYPE_NAME) \ - void setStatic##TYPE_NAME##Field(TYPE val) { \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ - ((TYPE*)ptr)[0] = val; \ + template + void setStaticField(TYPE val) { + FieldSetter::setStaticField(this, val); } /// getInstance*Field - Get an instance field. /// - #define GETINSTANCEFIELD(TYPE, TYPE_NAME) \ - TYPE getInstance##TYPE_NAME##Field(JavaObject* obj) { \ - llvm_gcroot(obj, 0); \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)obj + ptrOffset); \ - return ((TYPE*)ptr)[0]; \ - } \ - - /// setInstance*Field - Set an instance field. - /// - #define SETINSTANCEFIELD(TYPE, TYPE_NAME) \ - void setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \ - llvm_gcroot(obj, 0); \ - assert(classDef->isResolved()); \ - void* ptr = (void*)((uint64)obj + ptrOffset); \ - ((TYPE*)ptr)[0] = val; \ - } - - #define MK_ASSESSORS(TYPE, TYPE_NAME) \ - GETSTATICFIELD(TYPE, TYPE_NAME) \ - SETSTATICFIELD(TYPE, TYPE_NAME) \ - GETINSTANCEFIELD(TYPE, TYPE_NAME) \ - SETINSTANCEFIELD(TYPE, TYPE_NAME) \ - - MK_ASSESSORS(float, Float) - MK_ASSESSORS(double, Double) - MK_ASSESSORS(uint8, Int8) - MK_ASSESSORS(uint16, Int16) - MK_ASSESSORS(uint32, Int32) - MK_ASSESSORS(sint64, Long) - - JavaObject* getStaticObjectField() { - assert(classDef->isResolved()); - void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); - return ((JavaObject**)ptr)[0]; - } - - void setStaticObjectField(JavaObject* val); - - JavaObject* getInstanceObjectField(JavaObject* obj) { + template + TYPE getInstanceField(JavaObject* obj) { llvm_gcroot(obj, 0); assert(classDef->isResolved()); void* ptr = (void*)((uint64)obj + ptrOffset); - return ((JavaObject**)ptr)[0]; + return *static_cast(ptr); } - // This can't be inlined because of a linker bug. - void setInstanceObjectField(JavaObject* obj, JavaObject* val); + /// setInstance*Field - Set an instance field. + /// + template + void setInstanceField(JavaObject* obj, TYPE val) { + FieldSetter::setInstanceField(this, obj, val); + } + +#define JavaField_DECL_ASSESSORS(TYPE, TYPE_NAME) \ + TYPE getStatic##TYPE_NAME##Field(); \ + void setStatic##TYPE_NAME##Field(TYPE val); \ + TYPE getInstance##TYPE_NAME##Field(JavaObject* obj); \ + void setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val); + +#define JavaField_IMPL_ASSESSORS(TYPE, TYPE_NAME) \ + TYPE JavaField::getStatic##TYPE_NAME##Field() { \ + return getStaticField();} \ + void JavaField::setStatic##TYPE_NAME##Field(TYPE val) { \ + return setStaticField(val);} \ + TYPE JavaField::getInstance##TYPE_NAME##Field(JavaObject* obj) { \ + return this->getInstanceField(obj);} \ + void JavaField::setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \ + return this->setInstanceField(obj, val);} + +public: + JavaField_DECL_ASSESSORS(float, Float) + JavaField_DECL_ASSESSORS(double, Double) + JavaField_DECL_ASSESSORS(uint8, Int8) + JavaField_DECL_ASSESSORS(uint16, Int16) + JavaField_DECL_ASSESSORS(uint32, Int32) + JavaField_DECL_ASSESSORS(sint64, Long) + JavaField_DECL_ASSESSORS(JavaObject*, Object) bool isReference() { uint16 val = type->elements[0]; @@ -1289,6 +1325,28 @@ public: }; +// Specialization for TYPE=JavaObject* +template<> +struct JavaField::FieldSetter { + + static void setStaticField(const JavaField* field, JavaObject* val) { + llvm_gcroot(val, 0); + if (val != NULL) assert(val->getVirtualTable()); + assert(field->classDef->isResolved()); + JavaObject** ptr = (JavaObject**)((uint64)field->classDef->getStaticInstance() + field->ptrOffset); + vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); + } + + static void setInstanceField(const JavaField* field, JavaObject* obj, JavaObject* val) { + llvm_gcroot(obj, 0); + llvm_gcroot(val, 0); + if (val != NULL) assert(val->getVirtualTable()); + assert(field->classDef->isResolved()); + JavaObject** ptr = (JavaObject**)((uint64)obj + field->ptrOffset); + vmkit::Collector::objectReferenceWriteBarrier((gc*)obj, (gc**)ptr, (gc*)val); + } +}; + } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp Thu Apr 25 11:50:58 2013 @@ -23,260 +23,88 @@ using namespace j3; -#define readArgs(buf, signature, ap, jni) { \ - jvalue* buffer = (jvalue*)buf; \ - Typedef* const* arguments = signature->getArgumentsType(); \ - for (uint32 i = 0; i < signature->nbArguments; ++i) { \ - const Typedef* type = arguments[i];\ - if (type->isPrimitive()) {\ - const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type;\ - if (prim->isLong()) {\ - buffer[i].j = va_arg(ap, sint64);\ - } else if (prim->isInt()){ \ - buffer[i].i = va_arg(ap, sint32);\ - } else if (prim->isChar()) { \ - buffer[i].c = va_arg(ap, uint32);\ - } else if (prim->isShort()) { \ - buffer[i].s = va_arg(ap, sint32);\ - } else if (prim->isByte()) { \ - buffer[i].b = va_arg(ap, sint32);\ - } else if (prim->isBool()) { \ - buffer[i].z = va_arg(ap, uint32);\ - } else if (prim->isFloat()) {\ - buffer[i].f = (float)va_arg(ap, double);\ - } else if (prim->isDouble()) {\ - buffer[i].d = va_arg(ap, double);\ - } else {\ - fprintf(stderr, "Can't happen");\ - abort();\ - }\ - } else{\ - buffer[i].l = reinterpret_cast(va_arg(ap, JavaObject**));\ - }\ - }\ -} - -#define DO_TRY -#define DO_CATCH if (th->pendingException) { th->throwFromJava(); } - //===----------------------------------------------------------------------===// // We do not need to have special care on the GC-pointers in the buffer // manipulated in these functions because the objects in the buffer are // addressed and never stored directly. //===----------------------------------------------------------------------===// -#if 1 // VA_ARGS do not work on all platforms for LLVM. -#define INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -\ -TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \ - llvm_gcroot(obj, 0); \ - verifyNull(obj); \ - Signdef* sign = getSignature(); \ - vmkit::ThreadAllocator allocator; \ - jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ - readArgs(buf, sign, ap, jni); \ - return invoke##TYPE_NAME##VirtualBuf(vm, cl, obj, buf); \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj); \ - Signdef* sign = getSignature(); \ - vmkit::ThreadAllocator allocator; \ - jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ - readArgs(buf, sign, ap, jni); \ - return invoke##TYPE_NAME##SpecialBuf(vm, cl, obj, buf); \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) {\ - Signdef* sign = getSignature(); \ - vmkit::ThreadAllocator allocator; \ - jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ - readArgs(buf, sign, ap, jni); \ - return invoke##TYPE_NAME##StaticBuf(vm, cl, buf); \ -} - -#else - -#define INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \ - llvm_gcroot(obj, 0); \ - verifyNull(obj); \ - UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ - if (objCl == classDef || isFinal(access)) { \ - meth = this; \ - } else { \ - meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \ - } \ - assert(meth && "No method found"); \ - void* func = meth->compiledPtr(); \ - Signdef* sign = getSignature(); \ - FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, ap);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj);\ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, ap);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) {\ - if (!cl->isReady()) { \ - cl->resolveClass(); \ - cl->initialiseClass(vm); \ - } \ - \ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_STATIC_AP call = (FUNC_TYPE_STATIC_AP)sign->getStaticCallAP(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, ap);\ - DO_CATCH \ - th->endJava(); \ - return res; \ +jvalue* JavaMethod::marshalArguments(vmkit::ThreadAllocator& allocator, va_list ap) +{ + Signdef* signature = getSignature(); + if (signature->nbArguments == 0) return NULL; //Zero arguments + + Typedef* const* arguments = signature->getArgumentsType(); + + jvalue* buffer = (jvalue*)allocator.Allocate(signature->nbArguments * sizeof(jvalue)); + + for (uint32 i = 0; i < signature->nbArguments; ++i) { + const Typedef* type = arguments[i]; + + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + + if (prim->isLong()) buffer[i].j = va_arg(ap, sint64); + else if (prim->isInt()) buffer[i].i = va_arg(ap, sint32); + else if (prim->isChar()) buffer[i].c = va_arg(ap, uint32); + else if (prim->isShort()) buffer[i].s = va_arg(ap, sint32); + else if (prim->isByte()) buffer[i].b = va_arg(ap, sint32); + else if (prim->isBool()) buffer[i].z = va_arg(ap, uint32); + else if (prim->isFloat()) buffer[i].f = (float)va_arg(ap, double); + else if (prim->isDouble()) buffer[i].d = va_arg(ap, double); + else assert(0 && "Unknown primitive type."); + } else + buffer[i].l = reinterpret_cast(va_arg(ap, JavaObject**)); + } + return buffer; } -#endif - -#define INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj);\ - Signdef* sign = getSignature(); \ - UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ - JavaMethod* meth = NULL; \ - if (objCl == classDef || isFinal(access)) { \ - meth = this; \ - } else { \ - meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \ - } \ - assert(meth && "No method found"); \ - assert(objCl->isSubclassOf(meth->classDef) && "Wrong type"); \ - void* func = meth->compiledPtr(); \ - FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, buf);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\ - llvm_gcroot(obj, 0); \ - verifyNull(obj);\ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, obj, buf);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) {\ - if (!cl->isReady()) { \ - cl->resolveClass(); \ - cl->initialiseClass(vm); \ - } \ - \ - void* func = this->compiledPtr();\ - Signdef* sign = getSignature(); \ - FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)sign->getStaticCallBuf(); \ - JavaThread* th = JavaThread::get(); \ - th->startJava(); \ - TYPE res = 0; \ - DO_TRY \ - res = call(cl->getConstantPool(), func, buf);\ - DO_CATCH \ - th->endJava(); \ - return res; \ -}\ - -#define INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ -TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ - llvm_gcroot(obj, 0); \ - va_list ap;\ - va_start(ap, obj);\ - TYPE res = invoke##TYPE_NAME##VirtualAP(vm, cl, obj, ap);\ - va_end(ap); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) {\ - llvm_gcroot(obj, 0); \ - va_list ap;\ - va_start(ap, obj);\ - TYPE res = invoke##TYPE_NAME##SpecialAP(vm, cl, obj, ap);\ - va_end(ap); \ - return res; \ -}\ -\ -TYPE JavaMethod::invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) {\ - va_list ap;\ - va_start(ap, cl);\ - TYPE res = invoke##TYPE_NAME##StaticAP(vm, cl, ap);\ - va_end(ap); \ - return res; \ -}\ - -#define INVOKE(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) - -typedef uint32 (*uint32_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef sint64 (*sint64_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef float (*float_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef double (*double_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); -typedef JavaObject* (*object_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); - -typedef uint32 (*uint32_static_ap)(UserConstantPool*, void*, va_list); -typedef sint64 (*sint64_static_ap)(UserConstantPool*, void*, va_list); -typedef float (*float_static_ap)(UserConstantPool*, void*, va_list); -typedef double (*double_static_ap)(UserConstantPool*, void*, va_list); -typedef JavaObject* (*object_static_ap)(UserConstantPool*, void*, va_list); - -typedef uint32 (*uint32_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef sint64 (*sint64_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef float (*float_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef double (*double_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); -typedef JavaObject* (*object_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); - -typedef uint32 (*uint32_static_buf)(UserConstantPool*, void*, void*); -typedef sint64 (*sint64_static_buf)(UserConstantPool*, void*, void*); -typedef float (*float_static_buf)(UserConstantPool*, void*, void*); -typedef double (*double_static_buf)(UserConstantPool*, void*, void*); -typedef JavaObject* (*object_static_buf)(UserConstantPool*, void*, void*); - -INVOKE(uint32, Int, uint32_virtual_ap, uint32_static_ap, uint32_virtual_buf, uint32_static_buf) -INVOKE(sint64, Long, sint64_virtual_ap, sint64_static_ap, sint64_virtual_buf, sint64_static_buf) -INVOKE(float, Float, float_virtual_ap, float_static_ap, float_virtual_buf, float_static_buf) -INVOKE(double, Double, double_virtual_ap, double_static_ap, double_virtual_buf, double_static_buf) -INVOKE(JavaObject*, JavaObject, object_virtual_ap, object_static_ap, object_virtual_buf, object_static_buf) +#define JavaMethod_INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ + llvm_gcroot(obj, 0); \ + va_list ap; \ + va_start(ap, obj); \ + TYPE res = invokeVirtualAP(vm, cl, obj, ap); \ + va_end(ap); \ + return res; \ + } \ + TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ + llvm_gcroot(obj, 0); \ + va_list ap; \ + va_start(ap, obj); \ + TYPE res = invokeSpecialAP(vm, cl, obj, ap); \ + va_end(ap); \ + return res; \ + } \ + TYPE JavaMethod::invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) { \ + va_list ap; \ + va_start(ap, cl); \ + TYPE res = invokeStaticAP(vm, cl, ap); \ + va_end(ap); \ + return res; \ + } + +#define JavaMethod_INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {return invokeVirtualAP(vm, cl, obj, ap);} \ + TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {return invokeSpecialAP(vm, cl, obj, ap);} \ + TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) {return invokeStaticAP(vm, cl, ap);} + +#define JavaMethod_INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {return invokeVirtualBuf(vm, cl, obj, buf);} \ + TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {return invokeSpecialBuf(vm, cl, obj, buf);} \ + TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) {return invokeStaticBuf(vm, cl, buf);} + +#define JavaMethod_INVOKE(TYPE, TYPE_NAME) \ + typedef TYPE (* func_virtual_ap_##TYPE_NAME)(UserConstantPool*, void*, JavaObject*, va_list); \ + typedef TYPE (* func_static_ap_##TYPE_NAME)(UserConstantPool*, void*, va_list); \ + typedef TYPE (* func_virtual_buf_##TYPE_NAME)(UserConstantPool*, void*, JavaObject*, void*); \ + typedef TYPE (* func_static_buf_##TYPE_NAME)(UserConstantPool*, void*, void*); \ + JavaMethod_INVOKE_AP(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) \ + JavaMethod_INVOKE_BUF(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) \ + JavaMethod_INVOKE_VA(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) + +JavaMethod_INVOKE(uint32, Int) +JavaMethod_INVOKE(sint64, Long) +JavaMethod_INVOKE(float, Float) +JavaMethod_INVOKE(double, Double) +JavaMethod_INVOKE(JavaObject*, JavaObject) Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 11:50:58 2013 @@ -7,6 +7,8 @@ // //===----------------------------------------------------------------------===// +#include + #include "vmkit/Locks.h" #include "JavaArray.h" @@ -16,11 +18,13 @@ #include "JavaTypes.h" #include "JavaUpcalls.h" #include "Jnjvm.h" +#include "VMStaticInstance.h" #include #include "debug.h" using namespace j3; +using namespace std; static const int hashCodeIncrement = vmkit::GCBitMask + 1; uint16_t JavaObject::hashCodeGenerator = hashCodeIncrement; @@ -367,3 +371,49 @@ bool JavaObject::instanceOf(JavaObject* if (self == NULL) return false; else return getClass(self)->isSubclassOf(cl); } + +std::ostream& j3::operator << (std::ostream& os, JavaObjectVMThread& threadObj) +{ + for (int retries = 10; (!threadObj.vmdata) && (retries >= 0); --retries) + usleep(100); + + if (threadObj.vmdata != NULL) + os << *threadObj.vmdata; + + return os; +} + +std::ostream& j3::operator << (std::ostream& os, const JavaObject& obj) +{ + if (VMClassLoader::isVMClassLoader(&obj)) { + JnjvmClassLoader* loader = ((const VMClassLoader&)obj).getClassLoader(); + JavaObject* javaLoader = loader->getJavaClassLoader(); + CommonClass* javaCl = JavaObject::getClass(javaLoader); + os << &obj << + "(class=j3::VMClassLoader" << + ",loader=" << loader << + ",javaLoader=" << javaLoader << + ",javaClass=" << *javaCl->name << + ')'; + } else if (VMStaticInstance::isVMStaticInstance(&obj)) { + Class* ownerClass = ((const VMStaticInstance&)obj).getOwningClass(); + void* staticInst = ((const VMStaticInstance&)obj).getStaticInstance(); + os << &obj << + "(class=j3::VMStaticInstance" << + ",ownerClass=" << *ownerClass->name << + ",staticInst=" << staticInst << + ')'; + } else { + CommonClass* ccl = JavaObject::getClass(&obj); + os << &obj << + "(class=" << *ccl->name << + ')'; + } + + return os; +} + +void JavaObject::dump() const +{ + cerr << *this << endl; +} Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.h Thu Apr 25 11:50:58 2013 @@ -306,6 +306,9 @@ public: /// hashCode - Return the hash code of this object. static uint32_t hashCode(JavaObject* self); + + void dump() const __attribute__((noinline)); + friend std::ostream& operator << (std::ostream&, const JavaObject&); }; Modified: vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp Thu Apr 25 11:50:58 2013 @@ -65,9 +65,9 @@ extern "C" void* j3VirtualFieldLookup(Us UserClass* lookup = cl->isArray() ? cl->super : cl->asClass(); JavaField* field = lookup->lookupField(utf8, sign->keyName, false, true, 0); - ctpInfo->ctpRes[index] = (void*)field->ptrOffset; + ctpInfo->ctpRes[index] = (void*)(intptr_t)field->ptrOffset; - res = (void*)field->ptrOffset; + res = (void*)(intptr_t)field->ptrOffset; } return res; Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Thu Apr 25 11:50:58 2013 @@ -7,17 +7,21 @@ // //===----------------------------------------------------------------------===// +#include + #include "vmkit/Locks.h" #include "vmkit/Thread.h" #include "JavaClass.h" #include "JavaObject.h" #include "JavaThread.h" +#include "JavaString.h" #include "JavaUpcalls.h" #include "Jnjvm.h" using namespace j3; +using namespace std; JavaThread::JavaThread(Jnjvm* isolate) : MutatorThread() { MyVM = isolate; @@ -163,3 +167,25 @@ void JNILocalReferences::removeJNIRefere length -= num; } } + +std::ostream& j3::operator << (std::ostream& os, const JavaThread& thread) +{ + os << '[' << (void*)(&thread); + + Jnjvm* vm = thread.getJVM(); + JavaObject* jThread = thread.currentThread(); + if (vm && jThread) { + JavaString* threadNameObj = static_cast( + vm->upcalls->threadName->getInstanceObjectField(jThread)); + char *threadName = JavaString::strToAsciiz(threadNameObj); + os << '(' << threadName << ')'; + delete [] threadName; + } + + return os << ']'; +} + +void JavaThread::dump() const +{ + cerr << *this << endl; +} Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 11:50:58 2013 @@ -10,6 +10,8 @@ #ifndef JNJVM_JAVA_THREAD_H #define JNJVM_JAVA_THREAD_H +#include + #include "vmkit/Cond.h" #include "vmkit/Locks.h" #include "vmkit/ObjectLocks.h" @@ -129,13 +131,13 @@ public: /// getJVM - Get the Java VM in which this thread executes. /// - Jnjvm* getJVM() { + Jnjvm* getJVM() const { return (Jnjvm*)MyVM; } /// currentThread - Return the current thread as a Java object. /// - JavaObject* currentThread() { + JavaObject* currentThread() const { return javaThread; } @@ -215,6 +217,10 @@ private: virtual void internalClearException() { pendingException = NULL; } + +public: + friend std::ostream& operator << (std::ostream&, const JavaThread&); + void dump() const __attribute__((noinline)); }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:50:58 2013 @@ -94,7 +94,7 @@ public: char* jarFile; std::vector< std::pair > agents; - void readArgs(Jnjvm *vm); + void readArgs(class Jnjvm *vm); void extractClassFromJar(Jnjvm* vm, int argc, char** argv, int i); void javaAgent(char* cur); Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:50:58 2013 @@ -142,18 +142,18 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad arrayTable[JavaArray::T_LONG - 4] = upcalls->ArrayOfLong; arrayTable[JavaArray::T_DOUBLE - 4] = upcalls->ArrayOfDouble; - Attribut::annotationsAttribut = + JavaAttribute::annotationsAttribute = asciizConstructUTF8("RuntimeVisibleAnnotations"); - Attribut::codeAttribut = asciizConstructUTF8("Code"); - Attribut::exceptionsAttribut = asciizConstructUTF8("Exceptions"); - Attribut::constantAttribut = asciizConstructUTF8("ConstantValue"); - Attribut::lineNumberTableAttribut = asciizConstructUTF8("LineNumberTable"); - Attribut::innerClassesAttribut = asciizConstructUTF8("InnerClasses"); - Attribut::sourceFileAttribut = asciizConstructUTF8("SourceFile"); - Attribut::signatureAttribut = asciizConstructUTF8("Signature"); - Attribut::enclosingMethodAttribut = asciizConstructUTF8("EnclosingMethod"); - Attribut::paramAnnotationsAttribut = asciizConstructUTF8("RuntimeVisibleParameterAnnotations"); - Attribut::annotationDefaultAttribut = asciizConstructUTF8("AnnotationDefault"); + JavaAttribute::codeAttribute = asciizConstructUTF8("Code"); + JavaAttribute::exceptionsAttribute = asciizConstructUTF8("Exceptions"); + JavaAttribute::constantAttribute = asciizConstructUTF8("ConstantValue"); + JavaAttribute::lineNumberTableAttribute = asciizConstructUTF8("LineNumberTable"); + JavaAttribute::innerClassesAttribute = asciizConstructUTF8("InnerClasses"); + JavaAttribute::sourceFileAttribute = asciizConstructUTF8("SourceFile"); + JavaAttribute::signatureAttribute = asciizConstructUTF8("Signature"); + JavaAttribute::enclosingMethodAttribute = asciizConstructUTF8("EnclosingMethod"); + JavaAttribute::paramAnnotationsAttribute = asciizConstructUTF8("RuntimeVisibleParameterAnnotations"); + JavaAttribute::annotationDefaultAttribute = asciizConstructUTF8("AnnotationDefault"); JavaCompiler::InlinePragma = asciizConstructUTF8("Lorg/vmmagic/pragma/Inline;"); @@ -211,7 +211,7 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, VMClassLoader* vmdata, - Jnjvm* I) : allocator(Alloc) { + Jnjvm* VM) : allocator(Alloc) { llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); bootstrapLoader = JCL.bootstrapLoader; @@ -226,7 +226,7 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit vmdata->JCL = this; vmkit::Collector::objectReferenceNonHeapWriteBarrier( (gc**)&javaLoader, (gc*)loader); - isolate = I; + vm = VM; JavaMethod* meth = bootstrapLoader->upcalls->loadInClassLoader; loadClassMethod = @@ -330,9 +330,9 @@ UserClass* JnjvmClassLoader::internalLoa if (!cl) { UserClass* forCtp = loadClass; if (strName == NULL) { - strName = JavaString::internalToJava(name, isolate); + strName = JavaString::internalToJava(name, vm); } - obj = loadClassMethod->invokeJavaObjectVirtual(isolate, forCtp, javaLoader, + obj = loadClassMethod->invokeJavaObjectVirtual(vm, forCtp, javaLoader, &strName); cl = JavaObjectClass::getClass(((JavaObjectClass*)obj)); } @@ -837,8 +837,8 @@ const UTF8* JnjvmClassLoader::readerCons JnjvmClassLoader::~JnjvmClassLoader() { - if (isolate) { - isolate->removeFrameInfos(TheCompiler); + if (vm) { + vm->removeFrameInfos(TheCompiler); } if (classes) { @@ -879,7 +879,7 @@ JnjvmBootstrapLoader::~JnjvmBootstrapLoa JavaString** JnjvmClassLoader::UTF8ToStr(const UTF8* val) { JavaString* res = NULL; llvm_gcroot(res, 0); - res = isolate->internalUTF8ToStr(val); + res = vm->internalUTF8ToStr(val); return strings->addString(this, res); } Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:50:58 2013 @@ -57,7 +57,7 @@ private: /// isolate - Which isolate defined me? Null for the bootstrap class loader. /// - Jnjvm* isolate; + Jnjvm* vm; /// javaLoder - The Java representation of the class loader. Null for the /// bootstrap class loader. @@ -78,7 +78,7 @@ private: /// first use of a Java class loader. /// JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, - JavaObject* loader, VMClassLoader* vmdata, Jnjvm* isolate); + JavaObject* loader, VMClassLoader* vmdata, Jnjvm* VM); /// lookupComponentName - Try to find the component name of the given array /// name. If the component name is not in the table of UTF8s and holder @@ -132,7 +132,7 @@ public: /// getIsolate - Returns the isolate that created this class loader. /// - Jnjvm* getIsolate() const { return isolate; } + Jnjvm* getIsolate() const { return vm; } /// getClasses - Returns the classes this class loader has loaded. /// @@ -490,7 +490,7 @@ public: /// Is the object a VMClassLoader object? /// - static bool isVMClassLoader(JavaObject* obj) { + static bool isVMClassLoader(const JavaObject* obj) { llvm_gcroot(obj, 0); return obj->getVirtualTable() == &VT; } @@ -514,7 +514,7 @@ public: /// getClassLoader - Get the internal class loader. /// - JnjvmClassLoader* getClassLoader() { + JnjvmClassLoader* getClassLoader() const { return JCL; } Modified: vmkit/trunk/lib/j3/VMCore/Reader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Reader.h?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Reader.h (original) +++ vmkit/trunk/lib/j3/VMCore/Reader.h Thu Apr 25 11:50:58 2013 @@ -44,7 +44,7 @@ public: uint32 cursor; uint32 max; - Reader(Attribut* attr, ClassBytes* bytes) { + Reader(JavaAttribute* attr, ClassBytes* bytes) { this->bytes = bytes; this->cursor = attr->start; this->min = attr->start; Modified: vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Thu Apr 25 11:50:58 2013 @@ -254,7 +254,7 @@ void JnjvmBootstrapLoader::tracer(word_t // Support for scanning the roots of a program: JVM and threads. The JVM // must trace: // (1) The bootstrap class loader: where core classes live. -// (2) The applicative class loader: the JVM may be the ony one referencing it. +// (2) The applicative class loader: the JVM may be the only one referencing it. // (3) Global references from JNI. // // The threads must trace: @@ -265,7 +265,7 @@ void JnjvmBootstrapLoader::tracer(word_t void Jnjvm::tracer(word_t closure) { - // (1) Trace the bootrap loader. + // (1) Trace the bootstrap loader. bootstrapLoader->tracer(closure); // (2) Trace the application class loader. Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 11:50:58 2013 @@ -36,7 +36,7 @@ int Thread::kill(int signo) { } void Thread::exit(int value) { - pthread_exit((void*)value); + pthread_exit((void*)(intptr_t)value); } void Thread::yield(void) { Modified: vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp Thu Apr 25 11:50:58 2013 @@ -45,7 +45,7 @@ bool InlineMalloc::runOnFunction(Functio Function* ArrayWriteBarrier = F.getParent()->getFunction("arrayWriteBarrier"); Function* NonHeapWriteBarrier = F.getParent()->getFunction("nonHeapWriteBarrier"); bool Changed = false; - const DataLayout *TD = getAnalysisIfAvailable(); + const DataLayout *DL = getAnalysisIfAvailable(); for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) { BasicBlock *Cur = BI; for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) { @@ -59,14 +59,14 @@ bool InlineMalloc::runOnFunction(Functio Function* Temp = Call.getCalledFunction(); if (Temp == Malloc) { if (dyn_cast(Call.getArgument(0))) { - InlineFunctionInfo IFI(NULL, TD); + InlineFunctionInfo IFI(NULL, DL); Changed |= InlineFunction(Call, IFI); break; } } else if (Temp == FieldWriteBarrier || Temp == NonHeapWriteBarrier || Temp == ArrayWriteBarrier) { - InlineFunctionInfo IFI(NULL, TD); + InlineFunctionInfo IFI(NULL, DL); Changed |= InlineFunction(Call, IFI); break; } Modified: vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp Thu Apr 25 11:50:58 2013 @@ -10,6 +10,8 @@ #include "vmkit/Allocator.h" #include "vmkit/UTF8.h" +using namespace std; + namespace vmkit { extern "C" const UTF8 TombstoneKey(-1); @@ -39,6 +41,28 @@ uint32 UTF8::readerHasher(const uint16* return (r1 & 255) + ((r0 & 255) << 8); } +int UTF8::compare(const char *s) const +{ + int len = strlen(s); + int diff = size - len; + if (diff != 0) return diff; + + for (int i = 0; (i < size) && (diff == 0); ++i) + diff = (char)(elements[i]) - s[i]; + return diff; +} + +std::ostream& operator << (std::ostream& os, const UTF8& utf8) +{ + for (ssize_t i = 0; i < utf8.size; ++i) + os << (std::string::value_type)(utf8.elements[i]); + return os; +} + +void UTF8::dump() const +{ + cerr << (const void *)this << "=\"" << *this << '\"' << endl; +} const UTF8* UTF8Map::lookupOrCreateAsciiz(const char* asciiz) { sint32 size = strlen(asciiz); Added: vmkit/trunk/llvm.patch URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/llvm.patch?rev=180302&view=auto ============================================================================== --- vmkit/trunk/llvm.patch (added) +++ vmkit/trunk/llvm.patch Thu Apr 25 11:50:58 2013 @@ -0,0 +1,70 @@ +diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +index d74a703..1831bb6 100644 +--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp ++++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +@@ -177,7 +177,7 @@ bool AsmPrinter::doInitialization(Module &M) { + for (GCModuleInfo::iterator I = MI->begin(), E = MI->end(); I != E; ++I) + if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*I)) + MP->beginAssembly(*this); +- ++/* + // Emit module-level inline asm if it exists. + if (!M.getModuleInlineAsm().empty()) { + OutStreamer.AddComment("Start of file scope inline assembly"); +@@ -186,7 +186,7 @@ bool AsmPrinter::doInitialization(Module &M) { + OutStreamer.AddComment("End of file scope inline assembly"); + OutStreamer.AddBlankLine(); + } +- ++*/ + if (MAI->doesSupportDebugInformation()) + DD = new DwarfDebug(this, &M); + +@@ -928,6 +928,15 @@ bool AsmPrinter::doFinalization(Module &M) { + if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*--I)) + MP->finishAssembly(*this); + ++ // Emit module-level inline asm if it exists. ++ if (!M.getModuleInlineAsm().empty()) { ++ OutStreamer.AddComment("Start of file scope inline assembly"); ++ OutStreamer.AddBlankLine(); ++ EmitInlineAsm(M.getModuleInlineAsm()+"\n"); ++ OutStreamer.AddComment("End of file scope inline assembly"); ++ OutStreamer.AddBlankLine(); ++ } ++ + // If we don't have any trampolines, then we don't require stack memory + // to be executable. Some targets have a directive to declare this. + Function *InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline"); +diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp +index 0f3efd8..d96a258 100644 +--- a/lib/Target/CppBackend/CPPBackend.cpp ++++ b/lib/Target/CppBackend/CPPBackend.cpp +@@ -375,6 +375,7 @@ std::string CppWriter::getCppName(Type* Ty) { + case Type::DoubleTyID: return "Type::getDoubleTy(mod->getContext())"; + case Type::LabelTyID: return "Type::getLabelTy(mod->getContext())"; + case Type::X86_MMXTyID: return "Type::getX86_MMXTy(mod->getContext())"; ++ case Type::MetadataTyID: return "Type::getMetadataTy(mod->getContext())"; + default: + error("Invalid primitive type"); + break; +@@ -445,6 +446,8 @@ std::string CppWriter::getCppName(const Value* val) { + } else { + name = getTypePrefix(val->getType()); + } ++ } else if (dyn_cast(val)) { ++ name = std::string("metadata_"); + } else { + name = getTypePrefix(val->getType()); + } +@@ -1411,6 +1414,10 @@ void CppWriter::printInstruction(const Instruction *I, + << (ila->hasSideEffects() ? "true" : "false") << ");"; + nl(Out); + } ++ if (const Function* F = dyn_cast(call->getCalledValue())) { ++ if (F->getName().compare("llvm.dbg.value") == 0) ++ break; //Generate nothing ++ } + if (call->getNumArgOperands() > 1) { + Out << "std::vector " << iName << "_params;"; + nl(Out); Modified: vmkit/trunk/mmtk/java/build.xml.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/build.xml.in?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/build.xml.in (original) +++ vmkit/trunk/mmtk/java/build.xml.in Thu Apr 25 11:50:58 2013 @@ -1,7 +1,7 @@ - + Added: vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile?rev=180302&view=auto ============================================================================== --- vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile (added) +++ vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile Thu Apr 25 11:50:58 2013 @@ -0,0 +1,6 @@ +LEVEL := .. +DACAPO_VERSION := 2006-10-MR2 +DACAPO_ARGS := -s default +DECAPO_BENCHMARKS := antlr bloat chart eclipse fop hsqldb jython luindex lusearch pmd xalan batik ps + +include ../Makefile.inc Added: vmkit/trunk/tests/dacapo/2006-10/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/2006-10/Makefile?rev=180302&view=auto ============================================================================== --- vmkit/trunk/tests/dacapo/2006-10/Makefile (added) +++ vmkit/trunk/tests/dacapo/2006-10/Makefile Thu Apr 25 11:50:58 2013 @@ -0,0 +1,6 @@ +LEVEL := .. +DACAPO_VERSION := 2006-10 +DACAPO_ARGS := -s default +DECAPO_BENCHMARKS := antlr bloat chart eclipse fop hsqldb jython luindex lusearch pmd xalan batik ps + +include ../Makefile.inc Added: vmkit/trunk/tests/dacapo/9.12-bach/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/9.12-bach/Makefile?rev=180302&view=auto ============================================================================== --- vmkit/trunk/tests/dacapo/9.12-bach/Makefile (added) +++ vmkit/trunk/tests/dacapo/9.12-bach/Makefile Thu Apr 25 11:50:58 2013 @@ -0,0 +1,6 @@ +LEVEL := .. +DACAPO_VERSION := 9.12-bach +DACAPO_ARGS := -s default +DECAPO_BENCHMARKS := avrora batik eclipse fop h2 jython luindex lusearch pmd sunflow tomcat tradebeans tradesoap xalan + +include ../Makefile.inc Added: vmkit/trunk/tests/dacapo/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/Makefile?rev=180302&view=auto ============================================================================== --- vmkit/trunk/tests/dacapo/Makefile (added) +++ vmkit/trunk/tests/dacapo/Makefile Thu Apr 25 11:50:58 2013 @@ -0,0 +1,9 @@ +LEVEL := . +DIRS := 2006-10 2006-10-MR2 9.12-bach + +default: all + +$(DIRS):: + $(MAKE) -C $@ $(MAKECMDGOALS) + +all clean: $(DIRS) Added: vmkit/trunk/tests/dacapo/Makefile.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/Makefile.inc?rev=180302&view=auto ============================================================================== --- vmkit/trunk/tests/dacapo/Makefile.inc (added) +++ vmkit/trunk/tests/dacapo/Makefile.inc Thu Apr 25 11:50:58 2013 @@ -0,0 +1,35 @@ +TEMP_LEVEL := ../.. +DACAPO := $(PWD)/$(LEVEL)/jars/dacapo-$(DACAPO_VERSION).jar +LOG_DIR := $(LEVEL)/logs +LOG_DIR_FROM_TEMP := $(PWD)/$(LOG_DIR) +J3_PATH := $(PWD)/../$(TEMP_LEVEL)/$(LEVEL)/vmkit_stale_ref/Debug+Asserts/bin/j3 +TEMP_J3 := $(PWD)/$(LEVEL)/$(DACAPO_VERSION)/j3 +IJVM_PATH := $(PWD)/../$(TEMP_LEVEL)/$(LEVEL)/ijvm/Debug+Asserts/bin/j3 +TEMP_IJVM := $(PWD)/$(LEVEL)/$(DACAPO_VERSION)/ijvm + +ifndef ENABLE_J3 + ENABLE_J3 := 1 +endif + +ifndef ENABLE_IJVM + ENABLE_IJVM := 1 +endif + +J3_DEFINED := [ "$(ENABLE_J3)" -ne 0 ] +IJVM_DEFINED := [ "$(ENABLE_IJVM)" -ne 0 ] + +all: $(VM) $(LOG_DIR) $(DECAPO_BENCHMARKS) + +$(LOG_DIR): + @mkdir -p $@ 2>/dev/null + +$(DECAPO_BENCHMARKS): + @-$(J3_DEFINED) && echo "Dacapo benchmark version " $(DACAPO_VERSION) ": j3 ==> " $@ + @-$(J3_DEFINED) && rm -rf $(TEMP_J3)/$@ && mkdir -p $(TEMP_J3)/$@ + @-$(J3_DEFINED) && cd $(TEMP_J3)/$@ && $(J3_PATH) -jar $(DACAPO) $(DACAPO_ARGS) $@ >$(LOG_DIR_FROM_TEMP)/j3-$@-$(DACAPO_VERSION).log 2>&1 + @-$(IJVM_DEFINED) && echo "Dacapo benchmark version " $(DACAPO_VERSION) ": ijvm ==> " $@ + @-$(IJVM_DEFINED) && rm -rf $(TEMP_IJVM)/$@ && mkdir -p $(TEMP_IJVM)/$@ + @-$(IJVM_DEFINED) && cd $(TEMP_IJVM)/$@ && $(IJVM_PATH) -jar $(DACAPO) $(DACAPO_ARGS) $@ >$(LOG_DIR_FROM_TEMP)/ijvm-$@-$(DACAPO_VERSION).log 2>&1 + +clean: + @-rm -rf $(LOG_DIR) $(TEMP_J3) $(TEMP_IJVM) 2>/dev/null Added: vmkit/trunk/tests/dacapo/jars/download.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/jars/download.txt?rev=180302&view=auto ============================================================================== --- vmkit/trunk/tests/dacapo/jars/download.txt (added) +++ vmkit/trunk/tests/dacapo/jars/download.txt Thu Apr 25 11:50:58 2013 @@ -0,0 +1,3 @@ +http://sourceforge.net/projects/dacapobench/files/archive/2006-10/ +http://sourceforge.net/projects/dacapobench/files/archive/2006-10-MR2/ +http://sourceforge.net/projects/dacapobench/files/9.12-bach/ Modified: vmkit/trunk/tools/precompiler/trainer/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=180302&r1=180301&r2=180302&view=diff ============================================================================== --- vmkit/trunk/tools/precompiler/trainer/Makefile (original) +++ vmkit/trunk/tools/precompiler/trainer/Makefile Thu Apr 25 11:50:58 2013 @@ -19,7 +19,7 @@ include $(LEVEL)/Makefile.common PRECOMPILER := $(ToolDir)/precompiler$(EXEEXT) ifndef VERBOSE - J3.Flags := > /dev/null +# J3.Flags := > /dev/null endif HelloWorld.class: HelloWorld.java @@ -33,7 +33,7 @@ generated.bc: $(PRECOMPILER) HelloWorld. Precompiled.bc: HelloWorld.class $(LibDir)/StaticGCPass$(SHLIBEXT) $(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc $(Echo) "Building precompiled bootstrap code" $(Verb) $(MKDIR) $(ObjDir) - $(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim -O3 -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc -o $(ObjDir)/Precompiled.s + $(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim $(PRECOMPILER_FLAGS) -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc -o $(ObjDir)/Precompiled.s $(Verb) $(CC) -c $(ObjDir)/Precompiled.s -o $(ObjDir)/Precompiled.o $(Verb) $(Archive) $(LibDir)/libPrecompiled.a $(ObjDir)/Precompiled.o $(Verb) $(Ranlib) $(LibDir)/libPrecompiled.a From peter.senna at gmail.com Thu Apr 25 09:52:40 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:40 -0000 Subject: [vmkit-commits] [vmkit] r180304 - Added README.txt for compilation instructions. Message-ID: <20130425165110.5E75A2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:51:10 2013 New Revision: 180304 URL: http://llvm.org/viewvc/llvm-project?rev=180304&view=rev Log: Added README.txt for compilation instructions. (cherry picked from commit d0ac73d436f46296e8b0d7f83ebbe73b3d346645) Added: vmkit/trunk/README.TXT Added: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180304&view=auto ============================================================================== --- vmkit/trunk/README.TXT (added) +++ vmkit/trunk/README.TXT Thu Apr 25 11:51:10 2013 @@ -0,0 +1,95 @@ +============= +Requirements: +============= + +* Install required packages (Debian): +apt-get install ant libgconf2-dev libgtk2.0-dev + +* Install required packages (SUSE): +zypper install ant gconf2-devel gtk2-devel + +* If you want to use OpenJDK: +apt-get install default-jre default-jdk + +============== +GNU Classpath: +============== + +wget http://ftp.gnu.org/gnu/classpath/classpath-0.97.2.tar.gz +tar zxvf classpath-0.97.2.tar.gz +ln -s classpath-0.97.2 classpath +cd classpath +./configure --disable-plugin --disable-examples --disable-Werror +make -j12 +cd lib +ln -sf ../native/jni/gtk-peer/.libs/libgtkpeer.so +ln -sf ../native/jni/gconf-peer/.libs/libgconfpeer.so +ln -sf ../native/jni/java-io/.libs/libjavaio.so +ln -sf ../native/jni/java-lang/.libs/libjavalangreflect.so +ln -sf ../native/jni/java-lang/.libs/libjavalang.so +ln -sf ../native/jni/java-net/.libs/libjavanet.so +ln -sf ../native/jni/java-nio/.libs/libjavanio.so +ln -sf ../native/jni/java-util/.libs/libjavautil.so + +* Go root +cd classpath +make install +ldconfig + +===== +LLVM: +===== + +* Get it (git): + +git clone http://llvm.org/git/llvm.git +cd llvm/tools +git clone http://llvm.org/git/clang.git +cd clang +git config branch.master.rebase true +cd ../.. +git config branch.master.rebase true + +* You can also get it via svn: + +svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm +cd llvm/tools +svn co http://llvm.org/svn/llvm-project/cfe/trunk clang +cd ../projects +svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt +cd .. + +* Patch it: + +cd llvm +patch -p1 < ../ijvm/llvm.patch + +* Make it (release mode): + +./configure --enable-optimized --enable-assertions --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen +make -j12 ENABLE_OPTIMIZED=1 BUILD_EXAMPLES=0 ENABLE_DOCS=0 +ln -s Release+Asserts Debug+Asserts + +* You can also make it in debug mode, but this is is not necessary to debug compiled programs: + +./configure --disable-optimized --enable-assertions --enable-debug-runtime --enable-debug-symbols --enable-keep-symbols --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen +make -j12 ENABLE_OPTIMIZED=0 BUILD_EXAMPLES=0 ENABLE_DOCS=0 + +====== +VMKit: +====== + +* Get it (git): + +git clone git://scm.gforge.inria.fr/vmkit2/vmkit2.git -b ijvm ijvm +or: +git clone git+ssh://YOUR_USER_NAME.gforge.inria.fr//gitroot/vmkit2/vmkit2.git -b ijvm ijvm + +* You can also get it via svn: + +svn co http://llvm.org/svn/llvm-project/vmkit/trunk vmkit + +* Make it (debug mode): + +./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip +make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 From peter.senna at gmail.com Thu Apr 25 09:52:45 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:52:45 -0000 Subject: [vmkit-commits] [vmkit] r180303 - Reverting the changes made to this files with the aim of porting to GNUClasspath 0.99. the chaes destroy the porting to OpenJDK. Message-ID: <20130425165107.23C442A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:51:06 2013 New Revision: 180303 URL: http://llvm.org/viewvc/llvm-project?rev=180303&view=rev Log: Reverting the changes made to this files with the aim of porting to GNUClasspath 0.99. the chaes destroy the porting to OpenJDK. (cherry picked from commit 677cee481b8235d0bafb8741920f9c3aa9d70e4c) Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc?rev=180303&r1=180302&r2=180303&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathConstructor.inc Thu Apr 25 11:51:06 2013 @@ -25,75 +25,75 @@ using namespace j3; extern "C" { - - -JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMConstructor_getParameterTypes( +JNIEXPORT jobject JNICALL Java_java_lang_reflect_Constructor_getParameterTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMConstructor* cons) { +JavaObjectConstructor* cons) { - JavaObject* res = 0; - UserCommonClass* cls = 0; - JavaMethod* method = 0; - // Local object references - llvm_gcroot(cons, 0); - llvm_gcroot(res, 0); - - BEGIN_NATIVE_EXCEPTION(0) - // Store local reference - verifyNull(cons); - cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); - method = JavaObjectVMConstructor::getInternalMethod(cons); - res = method->getParameterTypes(cls->classLoader); + JavaObject* res = 0; - END_NATIVE_EXCEPTION + llvm_gcroot(cons, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) - return (jobject)res; + verifyNull(cons); + UserClass* cl = JavaObjectConstructor::getClass(cons); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); + JnjvmClassLoader* loader = cl->classLoader; + + res = meth->getParameterTypes(loader); + END_NATIVE_EXCEPTION + + return (jobject)res; } -JNIEXPORT jint JNICALL Java_java_lang_reflect_VMConstructor_getModifiersInternal( +JNIEXPORT jint JNICALL Java_java_lang_reflect_Constructor_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMConstructor* cons) { +JavaObjectConstructor* cons) { - jint res = 0; + llvm_gcroot(cons, 0); + jint res = 0; - JavaMethod* method = 0; - // Local object references - llvm_gcroot(cons, 0); + BEGIN_NATIVE_EXCEPTION(0) - BEGIN_NATIVE_EXCEPTION(0) - // Store local reference - verifyNull(cons); - method = JavaObjectVMConstructor::getInternalMethod(cons); - res = method->access; + verifyNull(cons); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); + res = meth->access; - END_NATIVE_EXCEPTION + END_NATIVE_EXCEPTION - return res; + return res; } -JavaObject* proceedRealConstructor(ArrayObject* args, - UserCommonClass* clazz, JavaMethod* method) +JavaObject* proceedConstructor(JavaObjectConstructor* cons, + ArrayObject* args, + JavaObject* Clazz, jint index) __attribute__ ((noinline)); -JavaObject* proceedRealConstructor(ArrayObject* args, - UserCommonClass* clazz, JavaMethod* method) { +JavaObject* proceedConstructor(JavaObjectConstructor* cons, + ArrayObject* args, + JavaObject* Clazz, jint index) { JavaObject* res = 0; JavaObject* excp = 0; + llvm_gcroot(cons, 0); llvm_gcroot(args, 0); + llvm_gcroot(Clazz, 0); llvm_gcroot(res, 0); llvm_gcroot(excp, 0); Jnjvm* vm = JavaThread::get()->getJVM(); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); + UserClass* cl = JavaObjectConstructor::getClass(cons); sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; - Signdef* sign = method->getSignature(); + Signdef* sign = meth->getSignature(); sint32 size = sign->nbArguments; - if (isAbstract(clazz->access)) vm->instantiationException(clazz); + if (isAbstract(cl->access)) vm->instantiationException(cl); vmkit::ThreadAllocator allocator; // Allocate a buffer to store the arguments. @@ -101,7 +101,8 @@ JavaObject* proceedRealConstructor(Array (jvalue*)allocator.Allocate(size * sizeof(jvalue)) : NULL; if (nbArgs == size) { - UserClass* cl = clazz->asClass(); + UserCommonClass* _cl = UserCommonClass::resolvedImplClass(vm, Clazz, false); + UserClass* cl = _cl->asClass(); if (cl) { cl->initialiseClass(vm); res = cl->doNew(vm); @@ -118,7 +119,7 @@ JavaObject* proceedRealConstructor(Array JavaThread* th = JavaThread::get(); TRY { - method->invokeIntSpecialBuf(vm, cl, res, buf); + meth->invokeIntSpecialBuf(vm, cl, res, buf); } CATCH { excp = th->getJavaException(); } END_CATCH; @@ -146,75 +147,71 @@ JavaObject* proceedRealConstructor(Array return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMConstructor_construct( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Constructor_constructNative( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMConstructor* cons, ArrayObject* args) { +JavaObjectConstructor* cons, ArrayObject* args, JavaObject* Clazz, jint index) { JavaObject* res = 0; - JavaMethod* m = 0; - UserCommonClass* cls = 0; llvm_gcroot(res, 0); llvm_gcroot(cons, 0); llvm_gcroot(args, 0); + llvm_gcroot(Clazz, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(cons); - cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); - m = JavaObjectVMConstructor::getInternalMethod(cons); - res = proceedRealConstructor(args, cls, m); + res = proceedConstructor(cons, args, Clazz, index); END_NATIVE_EXCEPTION + return res; } JNIEXPORT -ArrayObject* JNICALL Java_java_lang_reflect_VMConstructor_getExceptionTypes( +ArrayObject* JNICALL Java_java_lang_reflect_Constructor_getExceptionTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMConstructor* cons) { +JavaObjectConstructor* cons) { ArrayObject* res = 0; - JavaMethod* m = 0; - UserCommonClass* cls = 0; + llvm_gcroot(res, 0); llvm_gcroot(cons, 0); BEGIN_NATIVE_EXCEPTION(0) verifyNull(cons); - cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); - m = JavaObjectVMConstructor::getInternalMethod(cons); - JnjvmClassLoader* loader = cls->classLoader; - res = (ArrayObject*)m->getExceptionTypes(loader); + UserClass* cl = JavaObjectConstructor::getClass(cons); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(cons); + JnjvmClassLoader* loader = cl->classLoader; - END_NATIVE_EXCEPTION + res = (ArrayObject*)meth->getExceptionTypes(loader); + END_NATIVE_EXCEPTION return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMConstructor_getSignature( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Constructor_getSignature( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMConstructor* cons) { +JavaObjectConstructor* Meth) { JavaObject* result = 0; - JavaMethod* m = 0; + llvm_gcroot(result, 0); - llvm_gcroot(cons, 0); + llvm_gcroot(Meth, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(cons); - m = JavaObjectVMConstructor::getInternalMethod(cons); + verifyNull(Meth); + JavaMethod* meth = JavaObjectConstructor::getInternalMethod(Meth); Jnjvm* vm = JavaThread::get()->getJVM(); - result = vm->internalUTF8ToStr(m->type); + result = vm->internalUTF8ToStr(meth->type); END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc?rev=180303&r1=180302&r2=180303&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathField.inc Thu Apr 25 11:51:06 2013 @@ -19,20 +19,19 @@ using namespace j3; extern "C" { -JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal( + +JNIEXPORT jint JNICALL Java_java_lang_reflect_Field_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field) { +JavaObjectField* Field) { jint res = 0; llvm_gcroot(Field, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); - - JavaField* field = JavaObjectVMField::getInternalField(Field); + JavaField* field = JavaObjectField::getInternalField(Field); res = field->access; END_NATIVE_EXCEPTION @@ -40,11 +39,11 @@ JavaObjectVMField* Field) { return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_getType( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Field_getType( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field) { +JavaObjectField* Field) { JavaObject* res = 0; @@ -52,26 +51,24 @@ JavaObjectVMField* Field) { llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); - Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cls = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); - - JnjvmClassLoader* loader = cls->classLoader; - UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); - res = fieldCl->getClassDelegatee(vm); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); + JnjvmClassLoader* loader = cl->classLoader; + UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); + res = fieldCl->getClassDelegatee(vm); END_NATIVE_EXCEPTION return res; } -JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getInt( +JNIEXPORT jint JNICALL Java_java_lang_reflect_Field_getInt( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jint res = 0; @@ -79,15 +76,15 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); const Typedef* type = field->getSignature(); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -132,11 +129,11 @@ JavaObjectVMField* Field, JavaObject* ob } -JNIEXPORT jlong JNICALL Java_java_lang_reflect_VMField_getLong( +JNIEXPORT jlong JNICALL Java_java_lang_reflect_Field_getLong( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jlong res = 0; @@ -144,14 +141,14 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -202,11 +199,11 @@ JavaObjectVMField* Field, JavaObject* ob return res; } -JNIEXPORT jboolean JNICALL Java_java_lang_reflect_VMField_getBoolean( +JNIEXPORT jboolean JNICALL Java_java_lang_reflect_Field_getBoolean( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jboolean res = 0; @@ -214,14 +211,14 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -248,25 +245,25 @@ JavaObjectVMField* Field, JavaObject* ob } -JNIEXPORT jfloat JNICALL Java_java_lang_reflect_VMField_getFloat( +JNIEXPORT jfloat JNICALL Java_java_lang_reflect_Field_getFloat( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jfloat res = 0; llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -323,25 +320,25 @@ JavaObjectVMField* Field, JavaObject* ob return res; } -JNIEXPORT jbyte JNICALL Java_java_lang_reflect_VMField_getByte( +JNIEXPORT jbyte JNICALL Java_java_lang_reflect_Field_getByte( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jbyte res = 0; llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -367,25 +364,25 @@ JavaObjectVMField* Field, JavaObject* ob return res; } -JNIEXPORT jchar JNICALL Java_java_lang_reflect_VMField_getChar( +JNIEXPORT jchar JNICALL Java_java_lang_reflect_Field_getChar( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jchar res = 0; llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -412,11 +409,11 @@ JavaObjectVMField* Field, JavaObject* ob } -JNIEXPORT jshort JNICALL Java_java_lang_reflect_VMField_getShort( +JNIEXPORT jshort JNICALL Java_java_lang_reflect_Field_getShort( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jshort res = 0; @@ -424,14 +421,14 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -463,26 +460,25 @@ JavaObjectVMField* Field, JavaObject* ob return res; } -JNIEXPORT jdouble JNICALL Java_java_lang_reflect_VMField_getDouble( +JNIEXPORT jdouble JNICALL Java_java_lang_reflect_Field_getDouble( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { jdouble res = 0; llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -544,11 +540,11 @@ JavaObjectVMField* Field, JavaObject* ob return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_get( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Field_get( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj) { +JavaObjectField* Field, JavaObject* obj) { JavaObject* res = 0; @@ -557,15 +553,14 @@ JavaObjectVMField* Field, JavaObject* ob llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -627,11 +622,11 @@ JavaObjectVMField* Field, JavaObject* ob return res; } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_set( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_set( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, JavaObject* val) { +JavaObjectField* Field, JavaObject* obj, JavaObject* val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); @@ -640,15 +635,14 @@ JavaObjectVMField* Field, JavaObject* ob BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); - verifyNull(Field); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); jvalue buf; bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -719,25 +713,24 @@ JavaObjectVMField* Field, JavaObject* ob END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setBoolean( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setBoolean( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jboolean val) { +JavaObjectField* Field, JavaObject* obj, jboolean val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -762,25 +755,24 @@ JavaObjectVMField* Field, JavaObject* ob } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setByte( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setByte( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jbyte val) { +JavaObjectField* Field, JavaObject* obj, jbyte val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -834,25 +826,24 @@ JavaObjectVMField* Field, JavaObject* ob END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setChar( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setChar( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jchar val) { +JavaObjectField* Field, JavaObject* obj, jchar val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -899,25 +890,24 @@ JavaObjectVMField* Field, JavaObject* ob END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setShort( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setShort( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jshort val) { +JavaObjectField* Field, JavaObject* obj, jshort val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -964,25 +954,24 @@ JavaObjectVMField* Field, JavaObject* ob END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setInt( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setInt( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jint val) { +JavaObjectField* Field, JavaObject* obj, jint val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -1024,25 +1013,24 @@ JavaObjectVMField* Field, JavaObject* ob END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setLong( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setLong( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jlong val) { +JavaObjectField* Field, JavaObject* obj, jlong val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -1078,25 +1066,24 @@ JavaObjectVMField* Field, JavaObject* ob END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setFloat( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setFloat( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jfloat val) { +JavaObjectField* Field, JavaObject* obj, jfloat val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } @@ -1126,25 +1113,24 @@ JavaObjectVMField* Field, JavaObject* ob END_NATIVE_EXCEPTION } -JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setDouble( +JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setDouble( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMField* Field, JavaObject* obj, jdouble val) { +JavaObjectField* Field, JavaObject* obj, jdouble val) { llvm_gcroot(Field, 0); llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Field); Jnjvm* vm = JavaThread::get()->getJVM(); - UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); - JavaField* field = JavaObjectVMField::getInternalField(Field); + UserClass* cl = JavaObjectField::getClass(Field); + JavaField* field = JavaObjectField::getInternalField(Field); bool stat = isStatic(field->access); if (stat) { - cl->asClass()->initialiseClass(vm); + cl->initialiseClass(vm); } else { verifyNull(obj); } Modified: vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc?rev=180303&r1=180302&r2=180303&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/ClasspathMethod.inc Thu Apr 25 11:51:06 2013 @@ -25,18 +25,18 @@ using namespace j3; extern "C" { -JNIEXPORT jint JNICALL Java_java_lang_reflect_VMMethod_getModifiersInternal( +JNIEXPORT jint JNICALL Java_java_lang_reflect_Method_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMMethod* Meth) { +JavaObjectMethod* Meth) { jint res = 0; llvm_gcroot(Meth, 0); BEGIN_NATIVE_EXCEPTION(0) - JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); res = meth->access; END_NATIVE_EXCEPTION @@ -44,22 +44,21 @@ JavaObjectVMMethod* Meth) { return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getReturnType( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_getReturnType( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMMethod* Meth) { +JavaObjectMethod* Meth) { JavaObject* res = 0; llvm_gcroot(Meth, 0); llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Meth); - JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); - UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); - JnjvmClassLoader* loader = cls->classLoader; + UserClass* cl = JavaObjectMethod::getClass(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + JnjvmClassLoader* loader = cl->classLoader; res = meth->getReturnType(loader); END_NATIVE_EXCEPTION @@ -68,22 +67,22 @@ JavaObjectVMMethod* Meth) { } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getParameterTypes( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_getParameterTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMMethod* Meth) { +JavaObjectMethod* Meth) { JavaObject* res = 0; llvm_gcroot(Meth, 0); llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Meth); - JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); - UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); - JnjvmClassLoader* loader = cls->classLoader; + UserClass* cl = JavaObjectMethod::getClass(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + JnjvmClassLoader* loader = cl->classLoader; + res = meth->getParameterTypes(loader); END_NATIVE_EXCEPTION @@ -91,13 +90,12 @@ JavaObjectVMMethod* Meth) { return res; } - -JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj, - ArrayObject* args) +JavaObject* proceedMethod(JavaObjectMethod* Meth, JavaObject* obj, + ArrayObject* args, JavaObject* Cl, jint index) __attribute__((noinline)); -JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj, - ArrayObject* args) { +JavaObject* proceedMethod(JavaObjectMethod* Meth, JavaObject* obj, + ArrayObject* args, JavaObject* Cl, jint index) { JavaObject* res = 0; JavaObject* exc = 0; @@ -106,11 +104,12 @@ JavaObject* proceedVMMethod(JavaObjectVM llvm_gcroot(Meth, 0); llvm_gcroot(obj, 0); llvm_gcroot(args, 0); + llvm_gcroot(Cl, 0); llvm_gcroot(exc, 0); Jnjvm* vm = JavaThread::get()->getJVM(); - JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); - UserCommonClass* _cl = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; Signdef* sign = meth->getSignature(); @@ -121,7 +120,7 @@ JavaObject* proceedVMMethod(JavaObjectVM (jvalue*)allocator.Allocate(size * sizeof(jvalue)) : NULL; if (nbArgs == size) { - //UserCommonClass* _cl = UserCommonClass::resolvedImplClass(vm, Cl, false); + UserCommonClass* _cl = UserCommonClass::resolvedImplClass(vm, Cl, false); UserClass* cl = (UserClass*)_cl; if (isVirtual(meth->access)) { @@ -235,32 +234,33 @@ JavaObject* proceedVMMethod(JavaObjectVM #undef RUN_METH -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_invoke( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_invokeNative( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMMethod* Meth, JavaObject* obj, ArrayObject* args) { +JavaObjectMethod* Meth, JavaObject* obj, ArrayObject* args, JavaObject* Cl, jint index) { JavaObject* res = 0; llvm_gcroot(res, 0); llvm_gcroot(Meth, 0); llvm_gcroot(obj, 0); llvm_gcroot(args, 0); + llvm_gcroot(Cl, 0); BEGIN_NATIVE_EXCEPTION(0) - verifyNull(Meth); - res = proceedVMMethod(Meth, obj, args); + + res = proceedMethod(Meth, obj, args, Cl, index); END_NATIVE_EXCEPTION return res; } -JNIEXPORT ArrayObject* JNICALL Java_java_lang_reflect_VMMethod_getExceptionTypes( +JNIEXPORT ArrayObject* JNICALL Java_java_lang_reflect_Method_getExceptionTypes( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMMethod* Meth) { +JavaObjectMethod* Meth) { ArrayObject* res = 0; llvm_gcroot(Meth, 0); @@ -269,10 +269,9 @@ JavaObjectVMMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - - JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); - UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); - JnjvmClassLoader* loader = cls->classLoader; + UserClass* cl = JavaObjectMethod::getClass(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); + JnjvmClassLoader* loader = cl->classLoader; res = meth->getExceptionTypes(loader); END_NATIVE_EXCEPTION @@ -280,11 +279,11 @@ JavaObjectVMMethod* Meth) { return res; } -JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getSignature( +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_Method_getSignature( #ifdef NATIVE_JNI JNIEnv *env, #endif -JavaObjectVMMethod* Meth) { +JavaObjectMethod* Meth) { JavaObject* result = 0; llvm_gcroot(Meth, 0); @@ -293,7 +292,7 @@ JavaObjectVMMethod* Meth) { BEGIN_NATIVE_EXCEPTION(0) verifyNull(Meth); - JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + JavaMethod* meth = JavaObjectMethod::getInternalMethod(Meth); Jnjvm* vm = JavaThread::get()->getJVM(); result = vm->internalUTF8ToStr(meth->type); From peter.senna at gmail.com Thu Apr 25 09:53:21 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:53:21 -0000 Subject: [vmkit-commits] [vmkit] r180305 - Implementing native methods of some important classes Message-ID: <20130425165116.B00BD2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:51:16 2013 New Revision: 180305 URL: http://llvm.org/viewvc/llvm-project?rev=180305&view=rev Log: Implementing native methods of some important classes (cherry picked from commit 27080702e91589805249c5360982a457bdaebb47) Added: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMConstructor.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc Added: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMConstructor.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMConstructor.inc?rev=180305&view=auto ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMConstructor.inc (added) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMConstructor.inc Thu Apr 25 11:51:16 2013 @@ -0,0 +1,225 @@ +//===- ClasspathConstructor.cpp -------------------------------------------===// +//===----------- GNU classpath java/lang/reflect/Constructor --------------===// +// +// The VMKit project +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "types.h" + +#include "Classpath.h" +#include "ClasspathReflect.h" +#include "JavaArray.h" +#include "JavaClass.h" +#include "JavaObject.h" +#include "JavaThread.h" +#include "JavaTypes.h" +#include "JavaUpcalls.h" +#include "Jnjvm.h" +#include "JnjvmClassLoader.h" + +using namespace j3; + +extern "C" { + + + +JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMConstructor_getParameterTypes( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMConstructor* cons) { + + JavaObject* res = 0; + UserCommonClass* cls = 0; + JavaMethod* method = 0; + // Local object references + llvm_gcroot(cons, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + // Store local reference + verifyNull(cons); + cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); + method = JavaObjectVMConstructor::getInternalMethod(cons); + res = method->getParameterTypes(cls->classLoader); + + END_NATIVE_EXCEPTION + + return (jobject)res; +} + +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMConstructor_getModifiersInternal( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMConstructor* cons) { + + jint res = 0; + + JavaMethod* method = 0; + // Local object references + llvm_gcroot(cons, 0); + + BEGIN_NATIVE_EXCEPTION(0) + // Store local reference + verifyNull(cons); + method = JavaObjectVMConstructor::getInternalMethod(cons); + res = method->access; + + END_NATIVE_EXCEPTION + + return res; +} + +JavaObject* proceedRealConstructor(ArrayObject* args, + UserCommonClass* clazz, JavaMethod* method) + __attribute__ ((noinline)); + +JavaObject* proceedRealConstructor(ArrayObject* args, + UserCommonClass* clazz, JavaMethod* method) { + JavaObject* res = 0; + JavaObject* excp = 0; + + llvm_gcroot(args, 0); + llvm_gcroot(res, 0); + llvm_gcroot(excp, 0); + + Jnjvm* vm = JavaThread::get()->getJVM(); + sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; + Signdef* sign = method->getSignature(); + sint32 size = sign->nbArguments; + + if (isAbstract(clazz->access)) vm->instantiationException(clazz); + + vmkit::ThreadAllocator allocator; + // Allocate a buffer to store the arguments. + jvalue* buf = size ? + (jvalue*)allocator.Allocate(size * sizeof(jvalue)) : NULL; + + if (nbArgs == size) { + UserClass* cl = clazz->asClass(); + if (cl) { + cl->initialiseClass(vm); + res = cl->doNew(vm); + JavaObject** ptr = (JavaObject**)ArrayObject::getElements(args); + + Typedef* const* arguments = sign->getArgumentsType(); + // Store the arguments, unboxing primitives if necessary. + for (sint32 i = 0; i < size; ++i) { + JavaObject::decapsulePrimitive(ptr[i], vm, &buf[i], arguments[i]); + if (!arguments[i]->isPrimitive()) { + buf[i].l = reinterpret_cast(&ptr[i]); + } + } + + JavaThread* th = JavaThread::get(); + TRY { + method->invokeIntSpecialBuf(vm, cl, res, buf); + } CATCH { + excp = th->getJavaException(); + } END_CATCH; + if (excp) { + if (JavaObject::getClass(excp)->isSubclassOf(vm->upcalls->newException)) { + th->clearException(); + // If it's an exception, we encapsule it in an + // invocationTargetException + vm->invocationTargetException(excp); + } else { + // If it's an error, throw it again. + th->throwPendingException(); + } + return NULL; + } + } else { + vm->illegalArgumentException("class is not a regular class"); + return NULL; + } + } else { + vm->illegalArgumentException("wrong number of arguments"); + return NULL; + } + + return res; +} + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMConstructor_construct( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMConstructor* cons, ArrayObject* args) { + + JavaObject* res = 0; + JavaMethod* m = 0; + UserCommonClass* cls = 0; + + llvm_gcroot(res, 0); + llvm_gcroot(cons, 0); + llvm_gcroot(args, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(cons); + + cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); + m = JavaObjectVMConstructor::getInternalMethod(cons); + res = proceedRealConstructor(args, cls, m); + + END_NATIVE_EXCEPTION + return res; +} + +JNIEXPORT +ArrayObject* JNICALL Java_java_lang_reflect_VMConstructor_getExceptionTypes( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMConstructor* cons) { + + ArrayObject* res = 0; + JavaMethod* m = 0; + UserCommonClass* cls = 0; + llvm_gcroot(res, 0); + llvm_gcroot(cons, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + verifyNull(cons); + cls = (UserCommonClass*)JavaObjectVMConstructor::getClass(cons); + m = JavaObjectVMConstructor::getInternalMethod(cons); + JnjvmClassLoader* loader = cls->classLoader; + res = (ArrayObject*)m->getExceptionTypes(loader); + + END_NATIVE_EXCEPTION + + + return res; +} + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMConstructor_getSignature( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMConstructor* cons) { + + JavaObject* result = 0; + JavaMethod* m = 0; + llvm_gcroot(result, 0); + llvm_gcroot(cons, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + verifyNull(cons); + m = JavaObjectVMConstructor::getInternalMethod(cons); + Jnjvm* vm = JavaThread::get()->getJVM(); + result = vm->internalUTF8ToStr(m->type); + + END_NATIVE_EXCEPTION + + return result; +} + + +} Added: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc?rev=180305&view=auto ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc (added) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Thu Apr 25 11:51:16 2013 @@ -0,0 +1,1190 @@ +//===- ClasspathReflect.cpp - Internal representation of core system classes -// +// +// The VMKit project +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +//===- ClasspathVMField.cpp - GNU classpath java/lang/reflect/Field -------===// +// +// The VMKit project +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "Classpath.h" +#include "ClasspathReflect.h" +#include "JavaClass.h" +#include "JavaThread.h" +#include "JavaTypes.h" +#include "JavaUpcalls.h" +#include "Jnjvm.h" + + +#include "Reader.h" + +#if 0 +using namespace vmkit; +#define dprintf(...) do { printf("ClasspathVMField: "); printf(__VA_ARGS__); } while(0) +#else +#define dprintf(...) +#endif + +using namespace j3; + +extern "C" { + +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field) { + jint res = 0; + + llvm_gcroot(Field, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + JavaField* field = JavaObjectVMField::getInternalField(Field); + + res = field->access; + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_getType( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field) { + + JavaObject* res = 0; + + llvm_gcroot(Field, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + + JnjvmClassLoader* loader = cls->classLoader; + UserCommonClass* fieldCl = field->getSignature()->assocClass(loader); + res = fieldCl->getClassDelegatee(vm); + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getInt( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + jint res = 0; + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + const Typedef* type = field->getSignature(); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + + if (prim->isInt()) { + if (stat) { + res = (sint32)field->getStaticInt32Field(); + } else { + res = (sint32)field->getInstanceInt32Field(obj); + } + } else if (prim->isChar()) { + if (stat) { + res = (uint32)field->getStaticInt16Field(); + } else { + res = (uint32)field->getInstanceInt16Field(obj); + } + } else if (prim->isByte()) { + if (stat) { + res = (sint32)field->getStaticInt8Field(); + } else { + res = (sint32)field->getInstanceInt8Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (sint32)field->getStaticInt16Field(); + } else { + res = (sint32)field->getInstanceInt16Field(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; + +} + +JNIEXPORT jlong JNICALL Java_java_lang_reflect_VMField_getLong( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + jlong res = 0; + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + + if (prim->isInt()) { + if (stat) { + res = (sint64)field->getStaticInt32Field(); + } else { + res = (sint64)field->getInstanceInt32Field(obj); + } + } else if (prim->isChar()) { + if (stat) { + res = (uint64)field->getStaticInt16Field(); + } else { + res = (uint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isByte()) { + if (stat) { + res = (sint64)field->getStaticInt8Field(); + } else { + res = (sint64)field->getInstanceInt8Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (sint64)field->getStaticInt16Field(); + } else { + res = (sint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isLong()) { + if (stat) { + res = (sint64)field->getStaticLongField(); + } else { + res = (sint64)field->getInstanceLongField(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT jboolean JNICALL Java_java_lang_reflect_VMField_getBoolean( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + jboolean res = 0; + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isBool()) { + if (stat) { + res = (uint8)field->getStaticInt8Field(); + } else { + res = (uint8)field->getInstanceInt8Field(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; + +} + +JNIEXPORT jfloat JNICALL Java_java_lang_reflect_VMField_getFloat( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + jfloat res = 0; + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isByte()) { + if (stat) { + res = (jfloat)field->getStaticInt8Field(); + } else { + res = (jfloat)field->getInstanceInt8Field(obj); + } + } else if (prim->isInt()) { + if (stat) { + res = (jfloat)field->getStaticInt32Field(); + } else { + res = (jfloat)field->getInstanceInt32Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (jfloat)field->getStaticInt16Field(); + } else { + res = (jfloat)field->getInstanceInt16Field(obj); + } + } else if (prim->isLong()) { + if (stat) { + res = (jfloat)field->getStaticLongField(); + } else { + res = (jfloat)field->getInstanceLongField(obj); + } + } else if (prim->isChar()) { + // Cast to uint32 because char is unsigned. + if (stat) { + res = (jfloat)(uint32)field->getStaticInt16Field(); + } else { + res = (jfloat)(uint32)field->getInstanceInt16Field(obj); + } + } else if (prim->isFloat()) { + if (stat) { + res = (jfloat)field->getStaticFloatField(); + } else { + res = (jfloat)field->getInstanceFloatField(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT jbyte JNICALL Java_java_lang_reflect_VMField_getByte( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + jbyte res = 0; + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isByte()) { + if (stat) { + res = (sint8)field->getStaticInt8Field(); + } else { + res = (sint8)field->getInstanceInt8Field(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT jchar JNICALL Java_java_lang_reflect_VMField_getChar( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + jchar res = 0; + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isChar()) { + if (stat) { + res = (uint16)field->getStaticInt16Field(); + } else { + res = (uint16)field->getInstanceInt16Field(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; + +} + +JNIEXPORT jshort JNICALL Java_java_lang_reflect_VMField_getShort( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + + jshort res = 0; + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isShort()) { + if (stat) { + res = (sint16)field->getStaticInt16Field(); + } else { + res = (sint16)field->getInstanceInt16Field(obj); + } + } else if (prim->isByte()) { + if (stat) { + res = (sint16)field->getStaticInt8Field(); + } else { + res = (sint16)field->getInstanceInt8Field(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT jdouble JNICALL Java_java_lang_reflect_VMField_getDouble( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + jdouble res = 0; + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isByte()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticInt8Field(); + } else { + res = (jdouble)(sint64)field->getInstanceInt8Field(obj); + } + } else if (prim->isInt()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticInt32Field(); + } else { + res = (jdouble)(sint64)field->getInstanceInt32Field(obj); + } + } else if (prim->isShort()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticInt16Field(); + } else { + res = (jdouble)(sint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isLong()) { + if (stat) { + res = (jdouble)(sint64)field->getStaticLongField(); + } else { + res = (jdouble)(sint64)field->getInstanceLongField(obj); + } + } else if (prim->isChar()) { + if (stat) { + res = (jdouble)(uint64)field->getStaticInt16Field(); + } else { + res = (jdouble)(uint64)field->getInstanceInt16Field(obj); + } + } else if (prim->isFloat()) { + if (stat) { + res = (jdouble)field->getStaticFloatField(); + } else { + res = (jdouble)field->getInstanceFloatField(obj); + } + } else if (prim->isDouble()) { + if (stat) { + res = (jdouble)field->getStaticDoubleField(); + } else { + res = (jdouble)field->getInstanceDoubleField(obj); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_get( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj) { + + + JavaObject* res = 0; + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isBool()) { + uint8 val = stat ? field->getStaticInt8Field() : + field->getInstanceInt8Field(obj); + res = vm->upcalls->boolClass->doNew(vm); + vm->upcalls->boolValue->setInstanceInt8Field(res, val); + } else if (prim->isByte()) { + sint8 val = stat ? field->getStaticInt8Field() : + field->getInstanceInt8Field(obj); + res = vm->upcalls->byteClass->doNew(vm); + vm->upcalls->byteValue->setInstanceInt8Field(res, val); + } else if (prim->isChar()) { + uint16 val = stat ? field->getStaticInt16Field() : + field->getInstanceInt16Field(obj); + res = vm->upcalls->charClass->doNew(vm); + vm->upcalls->charValue->setInstanceInt16Field(res, val); + } else if (prim->isShort()) { + sint16 val = stat ? field->getStaticInt16Field() : + field->getInstanceInt16Field(obj); + res = vm->upcalls->shortClass->doNew(vm); + vm->upcalls->shortValue->setInstanceInt16Field(res, val); + } else if (prim->isInt()) { + sint64 val = stat ? field->getStaticInt32Field() : + field->getInstanceInt32Field(obj); + res = vm->upcalls->intClass->doNew(vm); + vm->upcalls->intValue->setInstanceInt32Field(res, val); + } else if (prim->isLong()) { + sint64 val = stat ? field->getStaticLongField() : + field->getInstanceLongField(obj); + res = vm->upcalls->longClass->doNew(vm); + vm->upcalls->longValue->setInstanceLongField(res, val); + } else if (prim->isFloat()) { + float val = stat ? field->getStaticFloatField() : + field->getInstanceFloatField(obj); + res = vm->upcalls->floatClass->doNew(vm); + vm->upcalls->floatValue->setInstanceFloatField(res, val); + } else if (prim->isDouble()) { + double val = stat ? field->getStaticDoubleField() : + field->getInstanceDoubleField(obj); + res = vm->upcalls->doubleClass->doNew(vm); + vm->upcalls->doubleValue->setInstanceDoubleField(res, val); + } + } else { + if (stat) { + res = field->getStaticObjectField(); + } else { + res = field->getInstanceObjectField(obj); + } + } + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_set( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, JavaObject* val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(val, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + Jnjvm* vm = JavaThread::get()->getJVM(); + verifyNull(Field); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + jvalue buf; + bool stat = isStatic(field->access); + + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + JavaObject::decapsulePrimitive(val, vm, &buf, type); + + + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isBool()) { + if (stat) { + field->setStaticInt8Field(buf.z); + } else { + field->setInstanceInt8Field(obj, buf.z); + } + } else if (prim->isByte()) { + if (stat) { + field->setStaticInt8Field(buf.b); + } else { + field->setInstanceInt8Field(obj, buf.b); + } + } else if (prim->isChar()) { + if (stat) { + field->setStaticInt16Field(buf.c); + } else { + field->setInstanceInt16Field(obj, buf.c); + } + } else if (prim->isShort()) { + if (stat) { + field->setStaticInt16Field(buf.s); + } else { + field->setInstanceInt16Field(obj, buf.s); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field(buf.i); + } else { + field->setInstanceInt32Field(obj, buf.i); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField(buf.j); + } else { + field->setInstanceLongField(obj, buf.j); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField(buf.f); + } else { + field->setInstanceFloatField(obj, buf.f); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField(buf.d); + } else { + field->setInstanceDoubleField(obj, buf.d); + } + } + } else { + if (stat) { + field->setStaticObjectField(val); + } else { + field->setInstanceObjectField(obj, val); + } + } + + END_NATIVE_EXCEPTION +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setBoolean( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jboolean val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isBool()) { + if (stat) { + field->setStaticInt8Field((uint8)val); + } else { + field->setInstanceInt8Field(obj, (uint8)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION + +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setByte( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jbyte val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isByte()) { + if (stat) { + field->setStaticInt8Field((sint8)val); + } else { + field->setInstanceInt8Field(obj, (sint8)val); + } + } else if (prim->isShort()) { + if (stat) { + field->setStaticInt16Field((sint16)val); + } else { + field->setInstanceInt16Field(obj, (sint16)val); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((sint32)val); + } else { + field->setInstanceInt32Field(obj, (sint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + field->setInstanceLongField(obj, (sint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setChar( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jchar val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isChar()) { + if (stat) { + field->setStaticInt16Field((uint16)val); + } else { + field->setInstanceInt16Field(obj, (uint16)val); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((uint32)val); + } else { + field->setInstanceInt32Field(obj, (uint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((uint64)val); + } else { + field->setInstanceLongField(obj, (uint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)(uint32)val); + } else { + field->setInstanceFloatField(obj, (float)(uint32)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)(uint64)val); + } else { + field->setInstanceDoubleField(obj, (double)(uint64)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setShort( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jshort val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isShort()) { + if (stat) { + field->setStaticInt16Field((sint16)val); + } else { + field->setInstanceInt16Field(obj, (sint16)val); + } + } else if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((sint32)val); + } else { + field->setInstanceInt32Field(obj, (sint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setInt( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jint val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isInt()) { + if (stat) { + field->setStaticInt32Field((sint32)val); + } else { + field->setInstanceInt32Field(obj, (sint32)val); + } + } else if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + field->setInstanceLongField(obj, (sint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setLong( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jlong val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isLong()) { + if (stat) { + field->setStaticLongField((sint64)val); + } else { + field->setInstanceLongField(obj, (sint64)val); + } + } else if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setFloat( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jfloat val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isFloat()) { + if (stat) { + field->setStaticFloatField((float)val); + } else { + field->setInstanceFloatField(obj, (float)val); + } + } else if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION +} + +JNIEXPORT void JNICALL Java_java_lang_reflect_VMField_setDouble( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* Field, JavaObject* obj, jdouble val) { + + llvm_gcroot(Field, 0); + llvm_gcroot(obj, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Field); + + Jnjvm* vm = JavaThread::get()->getJVM(); + UserCommonClass* cl = (UserCommonClass*)JavaObjectVMField::getClass(Field); + JavaField* field = JavaObjectVMField::getInternalField(Field); + bool stat = isStatic(field->access); + + if (stat) { + cl->asClass()->initialiseClass(vm); + } else { + verifyNull(obj); + } + + const Typedef* type = field->getSignature(); + if (type->isPrimitive()) { + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; + if (prim->isDouble()) { + if (stat) { + field->setStaticDoubleField((double)val); + } else { + field->setInstanceDoubleField(obj, (double)val); + } + } else { + vm->illegalArgumentException("wrong type"); + } + } else { + vm->illegalArgumentException("wrong type"); + } + + END_NATIVE_EXCEPTION +} + +} Added: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc?rev=180305&view=auto ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc (added) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc Thu Apr 25 11:51:16 2013 @@ -0,0 +1,305 @@ +//===- ClasspathReflect.cpp - Internal representation of core system classes -// +// +// The VMKit project +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + +#include "types.h" + +#include "Classpath.h" +#include "ClasspathReflect.h" +#include "JavaArray.h" +#include "JavaClass.h" +#include "JavaObject.h" +#include "JavaTypes.h" +#include "JavaThread.h" +#include "JavaUpcalls.h" +#include "Jnjvm.h" +#include "JnjvmClassLoader.h" + +using namespace j3; + +extern "C" { + +JNIEXPORT jint JNICALL Java_java_lang_reflect_VMMethod_getModifiersInternal( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* Meth) { + + jint res = 0; + llvm_gcroot(Meth, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + res = meth->access; + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getReturnType( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* Meth) { + + JavaObject* res = 0; + llvm_gcroot(Meth, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Meth); + + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getReturnType(loader); + + END_NATIVE_EXCEPTION + + return res; +} + + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getParameterTypes( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* Meth) { + + JavaObject* res = 0; + llvm_gcroot(Meth, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Meth); + + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getParameterTypes(loader); + + END_NATIVE_EXCEPTION + + return res; +} + + +JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj, + ArrayObject* args) + __attribute__((noinline)); + +JavaObject* proceedVMMethod(JavaObjectVMMethod* Meth, JavaObject* obj, + ArrayObject* args) { + + JavaObject* res = 0; + JavaObject* exc = 0; + + llvm_gcroot(res, 0); + llvm_gcroot(Meth, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(args, 0); + llvm_gcroot(exc, 0); + + Jnjvm* vm = JavaThread::get()->getJVM(); + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* _cl = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + + sint32 nbArgs = args ? ArrayObject::getSize(args) : 0; + Signdef* sign = meth->getSignature(); + sint32 size = sign->nbArguments; + + vmkit::ThreadAllocator allocator; + jvalue* buf = size ? + (jvalue*)allocator.Allocate(size * sizeof(jvalue)) : NULL; + + if (nbArgs == size) { + //UserCommonClass* _cl = UserCommonClass::resolvedImplClass(vm, Cl, false); + UserClass* cl = (UserClass*)_cl; + + if (isVirtual(meth->access)) { + verifyNull(obj); + UserCommonClass* objCl = JavaObject::getClass(obj); + if (!(objCl->isSubclassOf(cl))) { + vm->illegalArgumentException(" is not a valid type"); + } + + if (isInterface(cl->access)) { + cl->initialiseClass(vm); + UserClass* methodCl = 0; + UserClass* lookup = objCl->isArray() ? objCl->super : objCl->asClass(); + meth = lookup->lookupMethod(meth->name, meth->type, false, true, + &methodCl); + } + } else { + cl->initialiseClass(vm); + } + + JavaObject** ptr = ArrayObject::getElements(args); + Typedef* const* arguments = sign->getArgumentsType(); + for (sint32 i = 0; i < size; ++i) { + JavaObject::decapsulePrimitive(ptr[i], vm, &buf[i], arguments[i]); + if (!arguments[i]->isPrimitive()) { + buf[i].l = reinterpret_cast(&ptr[i]); + } + } + + JavaThread* th = JavaThread::get(); + +#define RUN_METH(TYPE, VAR) \ + TRY { \ + if (isVirtual(meth->access)) { \ + if (isPublic(meth->access) && !isFinal(meth->access) && \ + !isFinal(meth->classDef->access)) { \ + VAR = meth->invoke##TYPE##VirtualBuf(vm, cl, obj, buf); \ + } else { \ + VAR = meth->invoke##TYPE##SpecialBuf(vm, cl, obj, buf); \ + } \ + } else { \ + VAR = meth->invoke##TYPE##StaticBuf(vm, cl, buf); \ + } \ + } CATCH { \ + exc = th->getJavaException(); \ + } END_CATCH; \ + if (exc) { \ + th->clearException(); \ + th->getJVM()->invocationTargetException(exc); \ + return NULL; \ + } + + Typedef* retType = sign->getReturnType(); + if (retType->isPrimitive()) { + PrimitiveTypedef* prim = (PrimitiveTypedef*)retType; + if (prim->isVoid()) { + res = 0; + uint32 val = 0; + RUN_METH(Int, val); + } else if (prim->isBool()) { + uint32 val = 0; + RUN_METH(Int, val); + res = vm->upcalls->boolClass->doNew(vm); + vm->upcalls->boolValue->setInstanceInt8Field(res, val); + } else if (prim->isByte()) { + uint32 val = 0; + RUN_METH(Int, val); + res = vm->upcalls->byteClass->doNew(vm); + vm->upcalls->byteValue->setInstanceInt8Field(res, val); + } else if (prim->isChar()) { + uint32 val = 0; + RUN_METH(Int, val); + res = vm->upcalls->charClass->doNew(vm); + vm->upcalls->charValue->setInstanceInt16Field(res, val); + } else if (prim->isShort()) { + uint32 val = 0; + RUN_METH(Int, val); + res = vm->upcalls->shortClass->doNew(vm); + vm->upcalls->shortValue->setInstanceInt16Field(res, val); + } else if (prim->isInt()) { + uint32 val = 0; + RUN_METH(Int, val); + res = vm->upcalls->intClass->doNew(vm); + vm->upcalls->intValue->setInstanceInt32Field(res, val); + } else if (prim->isLong()) { + sint64 val = 0; + RUN_METH(Long, val); + res = vm->upcalls->longClass->doNew(vm); + vm->upcalls->longValue->setInstanceLongField(res, val); + } else if (prim->isFloat()) { + float val = 0; + RUN_METH(Float, val); + res = vm->upcalls->floatClass->doNew(vm); + vm->upcalls->floatValue->setInstanceFloatField(res, val); + } else if (prim->isDouble()) { + double val = 0; + RUN_METH(Double, val); + res = vm->upcalls->doubleClass->doNew(vm); + vm->upcalls->doubleValue->setInstanceDoubleField(res, val); + } + } else { + RUN_METH(JavaObject, res); + } + } else { + vm->illegalArgumentException("wrong number of arguments"); + return NULL; + } + + return res; +} + +#undef RUN_METH + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_invoke( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* Meth, JavaObject* obj, ArrayObject* args) { + + JavaObject* res = 0; + llvm_gcroot(res, 0); + llvm_gcroot(Meth, 0); + llvm_gcroot(obj, 0); + llvm_gcroot(args, 0); + + BEGIN_NATIVE_EXCEPTION(0) + verifyNull(Meth); + res = proceedVMMethod(Meth, obj, args); + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT ArrayObject* JNICALL Java_java_lang_reflect_VMMethod_getExceptionTypes( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* Meth) { + + ArrayObject* res = 0; + llvm_gcroot(Meth, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + verifyNull(Meth); + + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + UserCommonClass* cls = (UserCommonClass*)JavaObjectVMMethod::getClass(Meth); + JnjvmClassLoader* loader = cls->classLoader; + res = meth->getExceptionTypes(loader); + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getSignature( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* Meth) { + + JavaObject* result = 0; + llvm_gcroot(Meth, 0); + llvm_gcroot(result, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + verifyNull(Meth); + JavaMethod* meth = JavaObjectVMMethod::getInternalMethod(Meth); + Jnjvm* vm = JavaThread::get()->getJVM(); + result = vm->internalUTF8ToStr(meth->type); + + END_NATIVE_EXCEPTION + + return result; +} + +} From peter.senna at gmail.com Thu Apr 25 09:53:39 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:53:39 -0000 Subject: [vmkit-commits] [vmkit] r180306 - Implementing stale references correction. Message-ID: <20130425165133.324032A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:51:31 2013 New Revision: 180306 URL: http://llvm.org/viewvc/llvm-project?rev=180306&view=rev Log: Implementing stale references correction. (cherry picked from commit 5e564f6f85134106aac57e3c1653cc645b2f0185) Added: vmkit/trunk/.autotools vmkit/trunk/.cproject vmkit/trunk/.project vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Modified: vmkit/trunk/include/vmkit/Locks.h vmkit/trunk/include/vmkit/ObjectLocks.h vmkit/trunk/include/vmkit/Thread.h vmkit/trunk/include/vmkit/VirtualMachine.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h vmkit/trunk/lib/j3/VMCore/JavaThread.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.h vmkit/trunk/lib/j3/VMCore/Jnjvm.h vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Added: vmkit/trunk/.autotools URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.autotools?rev=180306&view=auto ============================================================================== --- vmkit/trunk/.autotools (added) +++ vmkit/trunk/.autotools Thu Apr 25 11:51:31 2013 @@ -0,0 +1,42 @@ + + + + + Added: vmkit/trunk/.cproject URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.cproject?rev=180306&view=auto ============================================================================== --- vmkit/trunk/.cproject (added) +++ vmkit/trunk/.cproject Thu Apr 25 11:51:31 2013 @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: vmkit/trunk/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.project?rev=180306&view=auto ============================================================================== --- vmkit/trunk/.project (added) +++ vmkit/trunk/.project Thu Apr 25 11:51:31 2013 @@ -0,0 +1,73 @@ + + + vmkit_stale_ref + + + + + + org.eclipse.cdt.autotools.core.genmakebuilderV2 + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + false + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.eclipse.cdt.autotools.core.autotoolsNatureV2 + + Modified: vmkit/trunk/include/vmkit/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Locks.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Locks.h (original) +++ vmkit/trunk/include/vmkit/Locks.h Thu Apr 25 11:51:31 2013 @@ -64,11 +64,11 @@ public: /// unlock - Release the lock. /// - virtual void unlock() = 0; + virtual void unlock(vmkit::Thread* ownerThread = NULL) = 0; /// selfOwner - Is the current thread holding the lock? /// - bool selfOwner(); + bool selfOwner(vmkit::Thread* ownerThread = NULL); /// getOwner - Get the thread that is holding the lock. /// @@ -92,7 +92,7 @@ public: LockNormal() : Lock() {} virtual void lock() __attribute__ ((noinline)); - virtual void unlock(); + virtual void unlock(vmkit::Thread* ownerThread = NULL); }; @@ -121,7 +121,7 @@ public: LockRecursive() : Lock() { n = 0; } virtual void lock() __attribute__ ((noinline)); - virtual void unlock(); + virtual void unlock(vmkit::Thread* ownerThread = NULL); virtual int tryLock(); /// recursionCount - Get the number of times the lock has been locked. @@ -172,7 +172,7 @@ public: /// void release() { locked = 0; } - void unlock() { release(); } + void unlock(vmkit::Thread* ownerThread = NULL) { release(); } }; Modified: vmkit/trunk/include/vmkit/ObjectLocks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/ObjectLocks.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/ObjectLocks.h (original) +++ vmkit/trunk/include/vmkit/ObjectLocks.h Thu Apr 25 11:51:31 2013 @@ -60,8 +60,8 @@ public: } bool wait(gc* object, LockSystem& table, struct timeval* info, bool timed); - void notify(gc* object, LockSystem& table); - void notifyAll(gc* object, LockSystem& table); + void notify(gc* object, LockSystem& table, vmkit::Thread* ownerThread = NULL); + void notifyAll(gc* object, LockSystem& table, vmkit::Thread* ownerThread = NULL); }; @@ -75,18 +75,22 @@ private: gc* associatedObject; uint32_t index; FatLock* nextFreeLock; + bool associatedObjectDead; + public: FatLock(uint32_t index, gc* object); word_t getID(); int tryAcquire() { return internalLock.tryLock(); } - bool acquire(gc* object); + bool acquire(gc* object, LockSystem& table); void acquireAll(gc* object, word_t count); - void release(gc* object, LockSystem& table); + void release(gc* object, LockSystem& table, vmkit::Thread* ownerThread = NULL); vmkit::Thread* getOwner(); bool owner(); void setAssociatedObject(gc* obj); gc* getAssociatedObject() { return associatedObject; } gc** getAssociatedObjectPtr() { return &associatedObject; } + bool associatedObjectIsDead() const {return associatedObjectDead;} + void markAssociatedObjectAsDead() {associatedObjectDead = true;} friend class LockSystem; friend class LockingThread; @@ -187,12 +191,14 @@ public: static void acquire(gc* object, LockSystem& table); /// release - Release the lock. - static void release(gc* object, LockSystem& table); + static void release(gc* object, LockSystem& table, vmkit::Thread* ownerThread = NULL); /// owner - Returns true if the curren thread is the owner of this object's /// lock. static bool owner(gc* object, LockSystem& table); + static vmkit::Thread* getOwner(gc* object, LockSystem& table); + /// getFatLock - Get the fat lock is the lock is a fat lock, 0 otherwise. static FatLock* getFatLock(gc* object, LockSystem& table); }; Modified: vmkit/trunk/include/vmkit/Thread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Thread.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Thread.h (original) +++ vmkit/trunk/include/vmkit/Thread.h Thu Apr 25 11:51:31 2013 @@ -142,7 +142,9 @@ public: uint64_t getThreadID() { return (uint64_t)this; } - + + static Thread* getByID(uint64_t threadID) {return (Thread*)threadID;} + public: /// IsolateID - The Isolate ID of the thread's VM. @@ -293,6 +295,8 @@ public: return addr > stackOverflowCheck && addr <= stackOverflowCheck + System::GetPageSize(); } + + virtual void throwNullPointerException(word_t methodIP); }; class ExceptionBuffer { Modified: vmkit/trunk/include/vmkit/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/VirtualMachine.h (original) +++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:51:31 2013 @@ -203,6 +203,8 @@ public: /// CooperativeCollectionRV rendezvous; + virtual void resetReferenceIfStale(const void* source, void** ref) {} + //===----------------------------------------------------------------------===// // (3) Backtrace-related methods. //===----------------------------------------------------------------------===// Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:51:31 2013 @@ -57,7 +57,7 @@ public: vmkit::Collector::markAndTrace(obj, &obj->constructor, closure); if (obj->vmdata) { JavaObject** Obj = obj->vmdata->classLoader->getJavaClassLoaderPtr(); - if (*Obj) vmkit::Collector::markAndTraceRoot(Obj, closure); + if (*Obj) vmkit::Collector::markAndTraceRoot(obj, Obj, closure); } } Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Thu Apr 25 11:51:31 2013 @@ -189,3 +189,12 @@ void JavaThread::dump() const { cerr << *this << endl; } + +void JavaThread::throwNullPointerException(word_t methodIP) +{ + if (!this->isVmkitThread()) + return vmkit::Thread::throwNullPointerException(methodIP); + + MyVM->nullPointerException(); + UNREACHABLE(); +} Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 11:51:31 2013 @@ -221,6 +221,8 @@ private: public: friend std::ostream& operator << (std::ostream&, const JavaThread&); void dump() const __attribute__((noinline)); + + virtual void throwNullPointerException(word_t methodIP); }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:51:31 2013 @@ -350,6 +350,11 @@ public: /// mapping the initial thread. /// void loadBootstrap(); + + virtual void resetReferenceIfStale(const void* source, void** ref); + void resetReferenceIfStale(const JavaObject *source, class VMClassLoader** ref); + void resetReferenceIfStale(const JavaObject *source, class VMStaticInstance** ref); + void resetReferenceIfStale(const JavaObject *source, class JavaObject** ref); }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:51:31 2013 @@ -208,10 +208,15 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad #undef DEF_UTF8 } +JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : + allocator(Alloc), zombie(false) +{ +} + JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, VMClassLoader* vmdata, - Jnjvm* VM) : allocator(Alloc) { + Jnjvm* VM) : allocator(Alloc), zombie(false) { llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); bootstrapLoader = JCL.bootstrapLoader; Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:51:31 2013 @@ -92,7 +92,7 @@ private: void ensureCached(UserCommonClass* cl); protected: - JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : allocator(Alloc) {} + JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc); /// TheCompiler - The Java compiler for this class loader. /// @@ -324,6 +324,13 @@ public: /// word_t getRegisteredNative(const JavaMethod * meth); +protected: + bool zombie; + +public: + bool isZombie() const {return zombie;} + void markZombie(bool becomeZombie = true) {zombie = becomeZombie;} + friend class Class; friend class CommonClass; friend class StringList; Added: vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp?rev=180306&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp (added) +++ vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Thu Apr 25 11:51:31 2013 @@ -0,0 +1,106 @@ + +#include "VmkitGC.h" +#include "Jnjvm.h" +#include "VMStaticInstance.h" + +#define DEBUG_VERBOSE_STALE_REF 1 + +using namespace std; + +namespace j3 { + +void Jnjvm::resetReferenceIfStale(const void* source, void** ref) +{ + if (!ref || !(*ref)) return; + JavaObject** objRef = reinterpret_cast(ref); + + if (VMClassLoader::isVMClassLoader(*objRef)) { + return resetReferenceIfStale( + reinterpret_cast(source), + reinterpret_cast(ref)); + } else if (VMStaticInstance::isVMStaticInstance(*objRef)) { + return resetReferenceIfStale( + reinterpret_cast(source), + reinterpret_cast(ref)); + } else { + return resetReferenceIfStale( + reinterpret_cast(source), + objRef); + } +} + +void Jnjvm::resetReferenceIfStale(const JavaObject *source, JavaObject** ref) +{ +#if DEBUG_VERBOSE_STALE_REF + + if (source) { + CommonClass* ccl = JavaObject::getClass(source); + if (ccl->classLoader->isZombie()) + cerr << "WARNING: Source object is stale source=" << *source << endl; + } + +#endif + + CommonClass* ccl = JavaObject::getClass(*ref); + if (!ccl->classLoader->isZombie()) return; + +#if DEBUG_VERBOSE_STALE_REF + + cerr << "Resetting ref=" << ref << " obj=" << **ref; + if (source) cerr << " source=" << *source; + cerr << endl; + +#endif + + Jnjvm* vm = JavaThread::get()->getJVM(); + if (JavaThread* ownerThread = (JavaThread*)vmkit::ThinLock::getOwner(*ref, vm->lockSystem)) { + if (vmkit::FatLock* lock = vmkit::ThinLock::getFatLock(*ref, vm->lockSystem)) { + lock->markAssociatedObjectAsDead(); + } + + // Notify all threads waiting on this object + ownerThread->lockingThread.notifyAll(*ref, vm->lockSystem, ownerThread); + + // Release this object + while (vmkit::ThinLock::getOwner(*ref, vm->lockSystem) == ownerThread) + vmkit::ThinLock::release(*ref, vm->lockSystem, ownerThread); + } + + *ref = NULL; // Reset the reference +} + +void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMClassLoader** ref) +{ + // Don't touch fake Java objects that exist only as bridges between the + // Java object model and the C++ object model. + +#if DEBUG_VERBOSE_STALE_REF + + JnjvmClassLoader* loader = (**ref).getClassLoader(); + if (!loader->isZombie()) return; + + cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref; + if (source) cerr << " source=" << *source; + cerr << endl; + +#endif +} + +void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMStaticInstance** ref) +{ + // Don't touch fake Java objects that exist only as bridges between the + // Java object model and the C++ object model. + +#if DEBUG_VERBOSE_STALE_REF + + JnjvmClassLoader* loader = (**ref).getOwningClass()->classLoader; + if (!loader->isZombie()) return; + + cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref; + if (source) cerr << " source=" << *source; + cerr << endl; + +#endif +} + +} Modified: vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Thu Apr 25 11:51:31 2013 @@ -86,7 +86,7 @@ extern "C" void JavaObjectTracer(JavaObj extern "C" void RegularObjectTracer(JavaObject* obj, word_t closure) { Class* cl = JavaObject::getClass(obj)->asClass(); assert(cl && "Not a class in regular tracer"); - vmkit::Collector::markAndTraceRoot( + vmkit::Collector::markAndTraceRoot(obj, cl->classLoader->getJavaClassLoaderPtr(), closure); while (cl->super != 0) { @@ -106,7 +106,7 @@ extern "C" void RegularObjectTracer(Java extern "C" void ArrayObjectTracer(ArrayObject* obj, word_t closure) { CommonClass* cl = JavaObject::getClass(obj); assert(cl && "No class"); - vmkit::Collector::markAndTraceRoot( + vmkit::Collector::markAndTraceRoot(obj, cl->classLoader->getJavaClassLoaderPtr(), closure); @@ -123,7 +123,7 @@ extern "C" void ReferenceObjectTracer( JavaObjectReference* obj, word_t closure) { Class* cl = JavaObject::getClass(obj)->asClass(); assert(cl && "Not a class in reference tracer"); - vmkit::Collector::markAndTraceRoot( + vmkit::Collector::markAndTraceRoot(obj, cl->classLoader->getJavaClassLoaderPtr(), closure); bool found = false; @@ -159,24 +159,24 @@ void CommonClass::tracer(word_t closure) if (super != NULL && super->classLoader != NULL) { JavaObject** Obj = super->classLoader->getJavaClassLoaderPtr(); - if (*Obj != NULL) vmkit::Collector::markAndTraceRoot(Obj, closure); + if (*Obj != NULL) vmkit::Collector::markAndTraceRoot(getDelegatee(), Obj, closure); for (uint32 i = 0; i < nbInterfaces; ++i) { if (interfaces[i]->classLoader) { JavaObject** Obj = interfaces[i]->classLoader->getJavaClassLoaderPtr(); - if (*Obj != NULL) vmkit::Collector::markAndTraceRoot(Obj, closure); + if (*Obj != NULL) vmkit::Collector::markAndTraceRoot(getDelegatee(), Obj, closure); } } } if (classLoader != NULL) { - vmkit::Collector::markAndTraceRoot( + vmkit::Collector::markAndTraceRoot(getDelegatee(), classLoader->getJavaClassLoaderPtr(), closure); } for (uint32 i = 0; i < NR_ISOLATES; ++i) { if (delegatee[i] != NULL) { - vmkit::Collector::markAndTraceRoot(delegatee + i, closure); + vmkit::Collector::markAndTraceRoot(NULL, delegatee + i, closure); } } } @@ -191,7 +191,7 @@ void Class::tracer(word_t closure) { JavaField& field = staticFields[i]; if (field.isReference()) { JavaObject** ptr = field.getStaticObjectFieldPtr(); - vmkit::Collector::markAndTraceRoot(ptr, closure); + vmkit::Collector::markAndTraceRoot(delegatee[i], ptr, closure); } } } @@ -228,12 +228,12 @@ void JnjvmClassLoader::tracer(word_t clo while (end != NULL) { for (uint32 i = 0; i < end->length; ++i) { JavaString** obj = end->strings + i; - vmkit::Collector::markAndTraceRoot(obj, closure); + vmkit::Collector::markAndTraceRoot(getJavaClassLoader(), obj, closure); } end = end->prev; } - vmkit::Collector::markAndTraceRoot(&javaLoader, closure); + vmkit::Collector::markAndTraceRoot(NULL, &javaLoader, closure); } void JnjvmBootstrapLoader::tracer(word_t closure) { @@ -270,7 +270,7 @@ void Jnjvm::tracer(word_t closure) { // (2) Trace the application class loader. if (appClassLoader != NULL) { - vmkit::Collector::markAndTraceRoot( + vmkit::Collector::markAndTraceRoot(NULL, appClassLoader->getJavaClassLoaderPtr(), closure); } @@ -279,19 +279,19 @@ void Jnjvm::tracer(word_t closure) { while (start != NULL) { for (uint32 i = 0; i < start->length; ++i) { JavaObject** obj = start->globalReferences + i; - vmkit::Collector::markAndTraceRoot(obj, closure); + vmkit::Collector::markAndTraceRoot(NULL, obj, closure); } start = start->next; } // (4) Trace the finalization queue. for (uint32 i = 0; i < finalizerThread->CurrentFinalizedIndex; ++i) { - vmkit::Collector::markAndTraceRoot(finalizerThread->ToBeFinalized + i, closure); + vmkit::Collector::markAndTraceRoot(NULL, finalizerThread->ToBeFinalized + i, closure); } // (5) Trace the reference queue for (uint32 i = 0; i < referenceThread->ToEnqueueIndex; ++i) { - vmkit::Collector::markAndTraceRoot(referenceThread->ToEnqueue + i, closure); + vmkit::Collector::markAndTraceRoot(NULL, referenceThread->ToEnqueue + i, closure); } // (6) Trace the locks and their associated object. @@ -303,7 +303,7 @@ void Jnjvm::tracer(word_t closure) { for (; j < vmkit::LockSystem::IndexSize; j++) { if (array[j] == NULL) break; vmkit::FatLock* lock = array[j]; - vmkit::Collector::markAndTraceRoot(lock->getAssociatedObjectPtr(), closure); + vmkit::Collector::markAndTraceRoot(NULL, lock->getAssociatedObjectPtr(), closure); } for (j = j + 1; j < vmkit::LockSystem::IndexSize; j++) { assert(array[j] == NULL); @@ -315,15 +315,15 @@ void Jnjvm::tracer(word_t closure) { } void JavaThread::tracer(word_t closure) { - vmkit::Collector::markAndTraceRoot(&pendingException, closure); - vmkit::Collector::markAndTraceRoot(&javaThread, closure); - vmkit::Collector::markAndTraceRoot(&vmThread, closure); + vmkit::Collector::markAndTraceRoot(javaThread, &pendingException, closure); + vmkit::Collector::markAndTraceRoot(NULL, &javaThread, closure); + vmkit::Collector::markAndTraceRoot(javaThread, &vmThread, closure); JNILocalReferences* end = localJNIRefs; while (end != NULL) { for (uint32 i = 0; i < end->length; ++i) { JavaObject** obj = end->localReferences + i; - vmkit::Collector::markAndTraceRoot(obj, closure); + vmkit::Collector::markAndTraceRoot(javaThread, obj, closure); } end = end->prev; } Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:51:31 2013 @@ -149,7 +149,7 @@ void ThinLock::acquire(gc* object, LockS if (object->header() & FatMask) { FatLock* obj = table.getFatLockFromID(object->header()); if (obj != NULL) { - if (obj->acquire(object)) { + if (obj->acquire(object, table)) { assert((object->header() & FatMask) && "Inconsistent lock"); assert((table.getFatLockFromID(object->header()) == obj) && "Inconsistent lock"); assert(owner(object, table) && "Not owner after acquring fat lock!"); @@ -195,10 +195,11 @@ void ThinLock::acquire(gc* object, LockS } /// release - Release the lock. -void ThinLock::release(gc* object, LockSystem& table) { +void ThinLock::release(gc* object, LockSystem& table, vmkit::Thread* ownerThread) { llvm_gcroot(object, 0); - assert(owner(object, table) && "Not owner when entering release!"); - uint64 id = vmkit::Thread::get()->getThreadID(); + if (!ownerThread) ownerThread = vmkit::Thread::get(); + assert((getOwner(object, table) == ownerThread) && "Not owner when entering release!"); + uint64 id = ownerThread->getThreadID(); word_t oldValue = 0; word_t newValue = 0; word_t yieldedValue = 0; @@ -212,7 +213,7 @@ void ThinLock::release(gc* object, LockS } else if (object->header() & FatMask) { FatLock* obj = table.getFatLockFromID(object->header()); assert(obj && "Lock deallocated while held."); - obj->release(object, table); + obj->release(object, table, ownerThread); } else { assert(((object->header() & ThinCountMask) > 0) && "Inconsistent state"); uint32 count = (object->header() & ThinCountMask); @@ -225,7 +226,7 @@ void ThinLock::release(gc* object, LockS } -/// owner - Returns true if the curren thread is the owner of this object's +/// owner - Returns true if the current thread is the owner of this object's /// lock. bool ThinLock::owner(gc* object, LockSystem& table) { llvm_gcroot(object, 0); @@ -241,6 +242,18 @@ bool ThinLock::owner(gc* object, LockSys return false; } +vmkit::Thread* ThinLock::getOwner(gc* object, LockSystem& table) +{ + llvm_gcroot(object, 0); + if (object->header() & FatMask) { + FatLock* obj = table.getFatLockFromID(object->header()); + return (!obj) ? NULL : obj->getOwner(); + } else { + uint64_t threadID = object->header() & System::GetThreadIDMask(); + return vmkit::Thread::getByID(threadID); + } +} + /// getFatLock - Get the fat lock is the lock is a fat lock, 0 otherwise. FatLock* ThinLock::getFatLock(gc* object, LockSystem& table) { llvm_gcroot(object, 0); @@ -265,7 +278,9 @@ vmkit::Thread* FatLock::getOwner() { return internalLock.getOwner(); } -FatLock::FatLock(uint32_t i, gc* a) { +FatLock::FatLock(uint32_t i, gc* a) : + associatedObjectDead(false) +{ llvm_gcroot(a, 0); assert(a != NULL); firstThread = NULL; @@ -280,7 +295,7 @@ word_t FatLock::getID() { return (index << ThinLock::NonLockBits) | ThinLock::FatMask; } -void FatLock::release(gc* obj, LockSystem& table) { +void FatLock::release(gc* obj, LockSystem& table, vmkit::Thread* ownerThread) { llvm_gcroot(obj, 0); assert(associatedObject && "No associated object when releasing"); assert(associatedObject == obj && "Mismatch object in lock"); @@ -291,12 +306,12 @@ void FatLock::release(gc* obj, LockSyste table.deallocate(this); } #endif - internalLock.unlock(); + internalLock.unlock(ownerThread); } /// acquire - Acquires the internalLock. /// -bool FatLock::acquire(gc* obj) { +bool FatLock::acquire(gc* obj, LockSystem& table) { llvm_gcroot(obj, 0); spinLock.lock(); @@ -309,6 +324,28 @@ bool FatLock::acquire(gc* obj) { lockingThreads--; spinLock.unlock(); + if (this->associatedObjectIsDead()) { + internalLock.unlock(); +/* + vmkit::Thread* ownerThread = this->getOwner(); + + // Notify all threads waiting on this object + ownerThread->lockingThread.notifyAll(*ref, vm->lockSystem, ownerThread); + + // Release this object + while (vmkit::ThinLock::getOwner(*ref, vm->lockSystem) == ownerThread) + vmkit::ThinLock::release(*ref, vm->lockSystem, ownerThread); +*/ + + if (lockingThreads == 0) { + table.deallocate(this); + } + + word_t methodIP = System::GetCallerAddress(); + methodIP = System::GetIPFromCallerAddress(methodIP); + Thread::get()->throwNullPointerException(methodIP); + } + if (associatedObject != obj) { internalLock.unlock(); return false; @@ -492,9 +529,10 @@ bool LockingThread::wait( return false; } -void LockingThread::notify(gc* self, LockSystem& table) { +void LockingThread::notify(gc* self, LockSystem& table, vmkit::Thread* ownerThread) { llvm_gcroot(self, 0); - assert(vmkit::ThinLock::owner(self, table)); + if (!ownerThread) ownerThread = vmkit::Thread::get(); + assert(vmkit::ThinLock::getOwner(self, table) == ownerThread); FatLock* l = vmkit::ThinLock::getFatLock(self, table); if (l == NULL) return; @@ -528,12 +566,13 @@ void LockingThread::notify(gc* self, Loc } } while (cur != l->firstThread); - assert(vmkit::ThinLock::owner(self, table) && "Not owner after notify"); + assert((vmkit::ThinLock::getOwner(self, table) == ownerThread) && "Not owner after notify"); } -void LockingThread::notifyAll(gc* self, LockSystem& table) { +void LockingThread::notifyAll(gc* self, LockSystem& table, vmkit::Thread* ownerThread) { llvm_gcroot(self, 0); - assert(vmkit::ThinLock::owner(self, table)); + if (!ownerThread) ownerThread = vmkit::Thread::get(); + assert(vmkit::ThinLock::getOwner(self, table) == ownerThread); FatLock* l = vmkit::ThinLock::getFatLock(self, table); if (l == NULL) return; LockingThread* cur = l->firstThread; @@ -546,7 +585,7 @@ void LockingThread::notifyAll(gc* self, cur = temp; } while (cur != l->firstThread); l->firstThread = NULL; - assert(vmkit::ThinLock::owner(self, table) && "Not owner after notifyAll"); + assert((vmkit::ThinLock::getOwner(self, table) == ownerThread) && "Not owner after notifyAll"); } void FatLock::setAssociatedObject(gc* obj) { Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp Thu Apr 25 11:51:31 2013 @@ -66,16 +66,7 @@ extern "C" void ThrowStackOverflowError( } extern "C" void ThrowNullPointerException(word_t ip) { - vmkit::Thread* th = vmkit::Thread::get(); - vmkit::FrameInfo* FI = th->MyVM->IPToFrameInfo(ip); - if (FI->Metadata == NULL) { - fprintf(stderr, "Thread %p received a SIGSEGV: either the VM code or an external\n" - "native method is bogus. Aborting...\n", (void*)th); - abort(); - } else { - vmkit::Thread::get()->MyVM->nullPointerException(); - } - UNREACHABLE(); + vmkit::Thread::get()->throwNullPointerException(ip); } void sigsegvHandler(int n, siginfo_t *info, void *context) { Modified: vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp Thu Apr 25 11:51:31 2013 @@ -55,8 +55,9 @@ Lock::~Lock() { pthread_mutex_destroy((pthread_mutex_t*)&internalLock); } -bool Lock::selfOwner() { - return owner == vmkit::Thread::get(); +bool Lock::selfOwner(vmkit::Thread* ownerThread) { + if (!ownerThread) ownerThread = vmkit::Thread::get(); + return owner == ownerThread; } vmkit::Thread* Lock::getOwner() { @@ -71,8 +72,8 @@ void LockNormal::lock() { owner = th; } -void LockNormal::unlock() { - assert(selfOwner() && "Not owner when unlocking"); +void LockNormal::unlock(vmkit::Thread* ownerThread) { + assert(selfOwner(ownerThread) && "Not owner when unlocking"); owner = 0; pthread_mutex_unlock((pthread_mutex_t*)&internalLock); } @@ -98,8 +99,8 @@ int LockRecursive::tryLock() { return res; } -void LockRecursive::unlock() { - assert(selfOwner() && "Not owner when unlocking"); +void LockRecursive::unlock(vmkit::Thread* ownerThread) { + assert(selfOwner(ownerThread) && "Not owner when unlocking"); --n; if (n == 0) { owner = 0; Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 11:51:31 2013 @@ -398,3 +398,16 @@ void Thread::releaseThread(vmkit::Thread index = (index & ~TheStackManager.baseAddr) >> 20; TheStackManager.used[index] = 0; } + +void Thread::throwNullPointerException(word_t methodIP) +{ + vmkit::FrameInfo* FI = MyVM->IPToFrameInfo(methodIP); + if (FI->Metadata == NULL) { + fprintf(stderr, "Thread %p received a SIGSEGV: either the VM code or an external\n" + "native method is bogus. Aborting...\n", (void*)this); + abort(); + } + + MyVM->nullPointerException(); + UNREACHABLE(); +} Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original) +++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:51:31 2013 @@ -87,7 +87,7 @@ void Collector::markAndTrace(void* sourc abort(); } -void Collector::markAndTraceRoot(void* ptr, word_t closure) { +void Collector::markAndTraceRoot(void* source, void* ptr, word_t closure) { abort(); } Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h (original) +++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h Thu Apr 25 11:51:31 2013 @@ -83,7 +83,7 @@ public: static bool isLive(gc* ptr, word_t closure) __attribute__ ((always_inline)); static void scanObject(void** ptr, word_t closure) __attribute__ ((always_inline)); static void markAndTrace(void* source, void* ptr, word_t closure) __attribute__ ((always_inline)); - static void markAndTraceRoot(void* ptr, word_t closure) __attribute__ ((always_inline)); + static void markAndTraceRoot(void* source, void* ptr, word_t closure) __attribute__ ((always_inline)); static gc* retainForFinalize(gc* val, word_t closure) __attribute__ ((always_inline)); static gc* retainReferent(gc* val, word_t closure) __attribute__ ((always_inline)); static gc* getForwardedFinalizable(gc* val, word_t closure) __attribute__ ((always_inline)); Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180306&r1=180305&r2=180306&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:51:31 2013 @@ -114,6 +114,7 @@ void Collector::scanObject(void** ptr, w if ((*ptr) != NULL) { assert(((gc*)(*ptr))->getVirtualTable()); } + vmkit::Thread::get()->MyVM->resetReferenceIfStale(NULL, ptr); JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr); } @@ -123,14 +124,16 @@ void Collector::markAndTrace(void* sourc assert(((gc*)(*ptr_))->getVirtualTable()); } if ((*(void**)ptr) != NULL) assert(((gc*)(*(void**)ptr))->getVirtualTable()); + vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr); } -void Collector::markAndTraceRoot(void* ptr, word_t closure) { +void Collector::markAndTraceRoot(void* source, void* ptr, word_t closure) { void** ptr_ = (void**)ptr; if ((*ptr_) != NULL) { assert(((gc*)(*ptr_))->getVirtualTable()); } + vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true); } From peter.senna at gmail.com Thu Apr 25 09:53:48 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:53:48 -0000 Subject: [vmkit-commits] [vmkit] r180307 - Fixing references to classes Constructor, Field and Method Message-ID: <20130425165138.A84E32A6C02D@llvm.org> Author: peter.senna Date: Thu Apr 25 11:51:38 2013 New Revision: 180307 URL: http://llvm.org/viewvc/llvm-project?rev=180307&view=rev Log: Fixing references to classes Constructor, Field and Method (cherry picked from commit 7df9ff807ee23f9d2da0759687fc00b476898194) Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=180307&r1=180306&r2=180307&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Apr 25 11:51:38 2013 @@ -1101,9 +1101,9 @@ void Classpath::InitializeSystem(Jnjvm * } #include "Classpath.inc" -#include "ClasspathConstructor.inc" -#include "ClasspathField.inc" -#include "ClasspathMethod.inc" +#include "ClasspathVMConstructor.inc" +#include "ClasspathVMField.inc" +#include "ClasspathVMMethod.inc" #include "ClasspathVMClass.inc" #include "ClasspathVMClassLoader.inc" #include "ClasspathVMObject.inc" From peter.senna at gmail.com Thu Apr 25 09:54:27 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:54:27 -0000 Subject: [vmkit-commits] [vmkit] r180310 - Chasing bug in exception handling generated code. Message-ID: <20130425165256.C9C1F2A6C02D@llvm.org> Author: peter.senna Date: Thu Apr 25 11:52:56 2013 New Revision: 180310 URL: http://llvm.org/viewvc/llvm-project?rev=180310&view=rev Log: Chasing bug in exception handling generated code. (cherry picked from commit 8dc3b4f61293163e6eaa0f877c8acf9f7520c158) Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180310&r1=180309&r2=180310&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:52:56 2013 @@ -1099,6 +1099,10 @@ llvm::Function* JavaJIT::javaCompile() { } #endif + if (compilingMethod->name->compare("ijvm_tests_Runner_loop") == 0) { + llvmFunction->dump(); + } + nbHandlers = readExceptionTable(reader, codeLen); if (nbHandlers != 0) { jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "", currentBlock); @@ -1266,9 +1270,6 @@ llvm::Function* JavaJIT::javaCompile() { } } - if (compilingMethod->name->compare("ijvm_tests_Runner_loop") == 0) { - llvmFunction->dump(); - } return llvmFunction; } Modified: vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java?rev=180310&r1=180309&r2=180310&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java (original) +++ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java Thu Apr 25 11:52:56 2013 @@ -41,14 +41,14 @@ public class Runner System.out.println("Stopped runner thread: " + Thread.currentThread().getName()); } - void ijvm_tests_Runner_loop(long delay) throws Exception + void ijvm_tests_Runner_loop(long delay) throws InterruptedException { synchronized(obj) { iteration(delay); } } - void iteration(long delay) throws Exception + void iteration(long delay) throws InterruptedException { while (sleeping) obj.wait(); From peter.senna at gmail.com Thu Apr 25 09:54:32 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:54:32 -0000 Subject: [vmkit-commits] [vmkit] r180309 - Test file for field annotations Message-ID: <20130425165250.1A8F72A6C02C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:52:49 2013 New Revision: 180309 URL: http://llvm.org/viewvc/llvm-project?rev=180309&view=rev Log: Test file for field annotations (cherry picked from commit b54bb97f2836cf4183814bfb87e2b77e3f087e11) Added: vmkit/trunk/tests/AnnotationClassTest.java Added: vmkit/trunk/tests/AnnotationClassTest.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/AnnotationClassTest.java?rev=180309&view=auto ============================================================================== --- vmkit/trunk/tests/AnnotationClassTest.java (added) +++ vmkit/trunk/tests/AnnotationClassTest.java Thu Apr 25 11:52:49 2013 @@ -0,0 +1,35 @@ +import java.lang.Deprecated; +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +/** + * Created with IntelliJ IDEA. + * User: inti + * Date: 11/14/12 + * Time: 11:08 PM + * To change this template use File | Settings | File Templates. + */ +public class AnnotationClassTest { + static class Sample { + @Deprecated + public int x; + } + + public static void main(String[] args) throws Exception { + Field f = Sample.class.getField("x"); + Sample sample = new Sample(); + sample.x = 14; + + Annotation xx = f.getAnnotation(Deprecated.class); + //Annotation[] a = f.getDeclaredAnnotations(); + + check(f.getInt(sample) == 14); + f.setInt(sample, 17); + check(f.getInt(sample) == 17); + check(xx.annotationType().getCanonicalName().equals("java.lang.Deprecated")); + } + + private static void check(boolean b) throws Exception { + if (!b) throw new Exception("Test failed!!!"); + } +} From peter.senna at gmail.com Thu Apr 25 09:54:38 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:54:38 -0000 Subject: [vmkit-commits] [vmkit] r180308 - Correcting stale references problem. Testing... Message-ID: <20130425165245.D73342A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:52:43 2013 New Revision: 180308 URL: http://llvm.org/viewvc/llvm-project?rev=180308&view=rev Log: Correcting stale references problem. Testing... (cherry picked from commit e5d39d549b2f0b752968ff253044af9e4049a590) Added: vmkit/trunk/knopflerfish.patch vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp vmkit/trunk/osgi/ vmkit/trunk/osgi/.classpath vmkit/trunk/osgi/.project vmkit/trunk/osgi/META-INF/ vmkit/trunk/osgi/META-INF/MANIFEST.MF vmkit/trunk/osgi/build.properties vmkit/trunk/osgi/src/ vmkit/trunk/osgi/src/j3/ vmkit/trunk/osgi/src/j3/J3Mgr.java vmkit/trunk/osgi/src/j3/vm/ vmkit/trunk/osgi/src/j3/vm/OSGi.java vmkit/trunk/osgi/src/j3mgr/ vmkit/trunk/osgi/src/j3mgr/Activator.java vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java vmkit/trunk/tests/debug.txt vmkit/trunk/tests/ijvm.tests.A/ vmkit/trunk/tests/ijvm.tests.A/.classpath vmkit/trunk/tests/ijvm.tests.A/.project vmkit/trunk/tests/ijvm.tests.A/META-INF/ vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.A/build.properties vmkit/trunk/tests/ijvm.tests.A/src/ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java vmkit/trunk/tests/ijvm.tests.AImpl/ vmkit/trunk/tests/ijvm.tests.AImpl/.classpath vmkit/trunk/tests/ijvm.tests.AImpl/.project vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/ vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.AImpl/build.properties vmkit/trunk/tests/ijvm.tests.AImpl/src/ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java vmkit/trunk/tests/ijvm.tests.BImpl/ vmkit/trunk/tests/ijvm.tests.BImpl/.classpath vmkit/trunk/tests/ijvm.tests.BImpl/.project vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/ vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.BImpl/build.properties vmkit/trunk/tests/ijvm.tests.BImpl/src/ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java vmkit/trunk/tests/ijvm.tests.C/ vmkit/trunk/tests/ijvm.tests.C/.classpath vmkit/trunk/tests/ijvm.tests.C/.project vmkit/trunk/tests/ijvm.tests.C/META-INF/ vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.C/build.properties vmkit/trunk/tests/ijvm.tests.C/src/ vmkit/trunk/tests/ijvm.tests.C/src/ijvm/ vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/ vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java vmkit/trunk/tests/ijvm.tests.CImpl/ vmkit/trunk/tests/ijvm.tests.CImpl/.classpath vmkit/trunk/tests/ijvm.tests.CImpl/.project vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/ vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.CImpl/build.properties vmkit/trunk/tests/ijvm.tests.CImpl/src/ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java vmkit/trunk/tests/ijvm.tests.DImpl/ vmkit/trunk/tests/ijvm.tests.DImpl/.classpath vmkit/trunk/tests/ijvm.tests.DImpl/.project vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/ vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.DImpl/build.properties vmkit/trunk/tests/ijvm.tests.DImpl/src/ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java vmkit/trunk/tests/ijvm.tests.Runner/ vmkit/trunk/tests/ijvm.tests.Runner/.classpath vmkit/trunk/tests/ijvm.tests.Runner/.project vmkit/trunk/tests/ijvm.tests.Runner/META-INF/ vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.Runner/build.properties vmkit/trunk/tests/ijvm.tests.Runner/src/ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java vmkit/trunk/tests/minimal.xargs Modified: vmkit/trunk/README.TXT vmkit/trunk/include/vmkit/Locks.h vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/VMCore/Jnjvm.h vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Modified: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/README.TXT (original) +++ vmkit/trunk/README.TXT Thu Apr 25 11:52:43 2013 @@ -93,3 +93,16 @@ svn co http://llvm.org/svn/llvm-project/ ./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 + +============= +Knopflerfish: +============= + +* Apply patch: +cd knopflerfish +patch -p1 < ../ijvm/knopflerfish.patch +cd .. + +* Recompile Knopflerfish: +cd knopflerfish/osgi +ant default Modified: vmkit/trunk/include/vmkit/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Locks.h?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Locks.h (original) +++ vmkit/trunk/include/vmkit/Locks.h Thu Apr 25 11:52:43 2013 @@ -176,6 +176,28 @@ public: }; +class LockGuard +{ +protected: + Lock& lock; + +private: //Disabled constructors + LockGuard(); + LockGuard(const LockGuard&); + +public: + LockGuard(Lock& l) : + lock(l) + { + lock.lock(); + } + + virtual ~LockGuard() + { + lock.unlock(); + } +}; + } // end namespace vmkit #endif // VMKIT_LOCKS_H Added: vmkit/trunk/knopflerfish.patch URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/knopflerfish.patch?rev=180308&view=auto ============================================================================== --- vmkit/trunk/knopflerfish.patch (added) +++ vmkit/trunk/knopflerfish.patch Thu Apr 25 11:52:43 2013 @@ -0,0 +1,29 @@ +Index: knopflerfish/osgi/framework/src/j3/vm/OSGi.java +=================================================================== +--- knopflerfish/osgi/framework/src/j3/vm/OSGi.java 1970-01-01 01:00:00.000000000 +0100 ++++ knopflerfish/osgi/framework/src/j3/vm/OSGi.java 2012-10-27 00:08:43.000000000 +0200 +@@ -0,0 +1,6 @@ ++package j3.vm; ++ ++public class OSGi ++{ ++ public static native void associateBundleClass(long bundleID, Class classObject); ++} +Index: knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java +=================================================================== +--- knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java 2012-10-27 02:29:49.852807353 +0200 ++++ knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java 2012-10-27 02:36:22.287024825 +0200 +@@ -819,9 +819,12 @@ + } + Vector av = classPath.componentExists(path, onlyFirst); + if (av != null) { + try { +- return action.get(av, path, name, pkg, this); ++ Object cl = action.get(av, path, name, pkg, this); ++ if (cl instanceof Class) ++ j3.vm.OSGi.associateBundleClass(getBundle().getBundleId(), (Class)cl); ++ return cl; + } catch (IOException ioe) { + fwCtx.listeners.frameworkError(bpkgs.bg.bundle, ioe); + return null; + } Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:52:43 2013 @@ -1266,6 +1266,9 @@ llvm::Function* JavaJIT::javaCompile() { } } + if (compilingMethod->name->compare("ijvm_tests_Runner_loop") == 0) { + llvmFunction->dump(); + } return llvmFunction; } Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:52:43 2013 @@ -11,6 +11,7 @@ #define JNJVM_JAVA_VM_H #include +#include #include "types.h" @@ -351,10 +352,23 @@ public: /// void loadBootstrap(); +public: + void resetReferencesToBundle(int64_t bundleID); virtual void resetReferenceIfStale(const void* source, void** ref); + + int64_t getClassLoaderBundleID(JnjvmClassLoader* loader); + JnjvmClassLoader* getBundleClassLoader(int64_t bundleID); + void setBundleClassLoader(int64_t bundleID, JnjvmClassLoader* loader); + + typedef std::map bundleClassLoadersType; + +protected: void resetReferenceIfStale(const JavaObject *source, class VMClassLoader** ref); void resetReferenceIfStale(const JavaObject *source, class VMStaticInstance** ref); void resetReferenceIfStale(const JavaObject *source, class JavaObject** ref); + + vmkit::LockRecursive bundleClassLoadersLock; + bundleClassLoadersType bundleClassLoaders; }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:52:43 2013 @@ -240,6 +240,24 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit assert(loadClass && "Loader does not have a loadClass function"); } +int64_t JnjvmClassLoader::getAssociatedBundleID() +{ + return vm->getClassLoaderBundleID(this); +} + +void JnjvmClassLoader::setAssociatedBundleID(int64_t newID) +{ + int64_t oldBundleID = vm->getClassLoaderBundleID(this); + if (oldBundleID != -1) { + if (oldBundleID == newID) return; // Nothing to do + + // Remove old bundle ID + vm->setBundleClassLoader(oldBundleID, NULL); + } + + vm->setBundleClassLoader(newID, this); +} + void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) { // Set the new compiler. TheCompiler = Comp; Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:52:43 2013 @@ -331,6 +331,9 @@ public: bool isZombie() const {return zombie;} void markZombie(bool becomeZombie = true) {zombie = becomeZombie;} + int64_t getAssociatedBundleID(); + void setAssociatedBundleID(int64_t newID); + friend class Class; friend class CommonClass; friend class StringList; Added: vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp?rev=180308&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp (added) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp Thu Apr 25 11:52:43 2013 @@ -0,0 +1,67 @@ + +#include + +#include "VmkitGC.h" +#include "Jnjvm.h" +#include "ClasspathReflect.h" +#include "j3/jni.h" + +namespace j3 { + +JnjvmClassLoader* Jnjvm::getBundleClassLoader(int64_t bundleID) +{ + if (bundleID == -1) return NULL; + vmkit::LockGuard lg(bundleClassLoadersLock); + + bundleClassLoadersType::const_iterator i = bundleClassLoaders.find(bundleID); + return (i == bundleClassLoaders.end()) ? NULL : i->second; +} + +struct Jnjvm_getClassLoaderBundleID_finder { + JnjvmClassLoader* loader; + Jnjvm_getClassLoaderBundleID_finder(JnjvmClassLoader* l) : loader(l) {} + bool operator() (const Jnjvm::bundleClassLoadersType::value_type& pair) {return pair.second == loader;} +}; + +int64_t Jnjvm::getClassLoaderBundleID(JnjvmClassLoader* loader) +{ + if (loader == NULL) return -1; + vmkit::LockGuard lg(bundleClassLoadersLock); + + bundleClassLoadersType::const_iterator + first = bundleClassLoaders.begin(), + last = bundleClassLoaders.end(), + i = std::find_if(first, last, Jnjvm_getClassLoaderBundleID_finder(loader)); + + return (i == last) ? -1 : i->first; +} + +void Jnjvm::setBundleClassLoader(int64_t bundleID, JnjvmClassLoader* loader) +{ + if (bundleID == -1) return; + vmkit::LockGuard lg(bundleClassLoadersLock); + + if (!loader) + bundleClassLoaders.erase(bundleID); + else + bundleClassLoaders[bundleID] = loader; +} + +} + + +using namespace j3; + +extern "C" void Java_j3_vm_OSGi_associateBundleClass(jlong bundleID, JavaObjectClass* classObject) +{ + llvm_gcroot(classObject, 0); + + CommonClass* ccl = JavaObjectClass::getClass(classObject); + ccl->classLoader->setAssociatedBundleID(bundleID); +} + +extern "C" void Java_j3_vm_OSGi_resetReferencesToBundle(jlong bundleID) +{ + Jnjvm* vm = JavaThread::get()->getJVM(); + vm->resetReferencesToBundle(bundleID); +} Modified: vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Thu Apr 25 11:52:43 2013 @@ -9,6 +9,16 @@ using namespace std; namespace j3 { +void Jnjvm::resetReferencesToBundle(int64_t bundleID) +{ + JnjvmClassLoader* loader = this->getBundleClassLoader(bundleID); + assert(loader && "No class loader is associated with the bundle"); + + loader->markZombie(); + + vmkit::Collector::collect(); +} + void Jnjvm::resetReferenceIfStale(const void* source, void** ref) { if (!ref || !(*ref)) return; @@ -29,6 +39,40 @@ void Jnjvm::resetReferenceIfStale(const } } +void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMClassLoader** ref) +{ + // Don't touch fake Java objects that exist only as bridges between the + // Java object model and the C++ object model. + +#if DEBUG_VERBOSE_STALE_REF + + JnjvmClassLoader* loader = (**ref).getClassLoader(); + if (!loader->isZombie()) return; + + cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref; + if (source) cerr << " source=" << *source; + cerr << endl; + +#endif +} + +void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMStaticInstance** ref) +{ + // Don't touch fake Java objects that exist only as bridges between the + // Java object model and the C++ object model. + +#if DEBUG_VERBOSE_STALE_REF + + JnjvmClassLoader* loader = (**ref).getOwningClass()->classLoader; + if (!loader->isZombie()) return; + + cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref; + if (source) cerr << " source=" << *source; + cerr << endl; + +#endif +} + void Jnjvm::resetReferenceIfStale(const JavaObject *source, JavaObject** ref) { #if DEBUG_VERBOSE_STALE_REF @@ -69,38 +113,4 @@ void Jnjvm::resetReferenceIfStale(const *ref = NULL; // Reset the reference } -void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMClassLoader** ref) -{ - // Don't touch fake Java objects that exist only as bridges between the - // Java object model and the C++ object model. - -#if DEBUG_VERBOSE_STALE_REF - - JnjvmClassLoader* loader = (**ref).getClassLoader(); - if (!loader->isZombie()) return; - - cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref; - if (source) cerr << " source=" << *source; - cerr << endl; - -#endif -} - -void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMStaticInstance** ref) -{ - // Don't touch fake Java objects that exist only as bridges between the - // Java object model and the C++ object model. - -#if DEBUG_VERBOSE_STALE_REF - - JnjvmClassLoader* loader = (**ref).getOwningClass()->classLoader; - if (!loader->isZombie()) return; - - cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref; - if (source) cerr << " source=" << *source; - cerr << endl; - -#endif -} - } Modified: vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp?rev=180308&r1=180307&r2=180308&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Thu Apr 25 11:52:43 2013 @@ -187,8 +187,8 @@ void Class::tracer(word_t closure) { for (uint32 i = 0; i < NR_ISOLATES; ++i) { TaskClassMirror &M = IsolateInfo[i]; if (M.staticInstance != NULL) { - for (uint32 i = 0; i < nbStaticFields; ++i) { - JavaField& field = staticFields[i]; + for (uint32 j = 0; j < nbStaticFields; ++j) { + JavaField& field = staticFields[j]; if (field.isReference()) { JavaObject** ptr = field.getStaticObjectFieldPtr(); vmkit::Collector::markAndTraceRoot(delegatee[i], ptr, closure); Added: vmkit/trunk/osgi/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/.classpath (added) +++ vmkit/trunk/osgi/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/osgi/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/.project (added) +++ vmkit/trunk/osgi/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + j3mgr + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/osgi/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/osgi/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: J3 Virtual Machine Manager +Bundle-SymbolicName: j3mgr;singleton:=true +Bundle-Version: 1.0.0 +Bundle-Activator: j3mgr.Activator +Import-Package: org.osgi.framework;version="1.3.0", + org.osgi.service.packageadmin;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: j3 Added: vmkit/trunk/osgi/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/build.properties (added) +++ vmkit/trunk/osgi/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/osgi/src/j3/J3Mgr.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/J3Mgr.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3/J3Mgr.java (added) +++ vmkit/trunk/osgi/src/j3/J3Mgr.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,13 @@ +package j3; + +import org.osgi.framework.Bundle; + +public interface J3Mgr +{ + public void resetReferencesToBundle(Bundle bundle) throws Exception; + + // THE FOLLOWING METHODS ARE DEBUGGING HELPERS + // THEY SHOULD BE REMOVED IN PRODUCTION + + public void resetReferencesToBundle(String bundleName) throws Exception; +} Added: vmkit/trunk/osgi/src/j3/vm/OSGi.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/vm/OSGi.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3/vm/OSGi.java (added) +++ vmkit/trunk/osgi/src/j3/vm/OSGi.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ +package j3.vm; + +public class OSGi +{ + public static native void associateBundleClass(long bundleID, Class classObject); + public static native void resetReferencesToBundle(long bundleID); +} Added: vmkit/trunk/osgi/src/j3mgr/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/Activator.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3mgr/Activator.java (added) +++ vmkit/trunk/osgi/src/j3mgr/Activator.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,32 @@ +package j3mgr; + +import j3.J3Mgr; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +public class Activator + implements BundleActivator +{ + J3MgrImpl mgr; + + public void start(BundleContext bundleContext) throws Exception + { + System.out.println("J3MgrImpl exports and provides J3Mgr"); + + mgr = new J3MgrImpl(); + mgr.open(bundleContext); + + bundleContext.registerService(J3Mgr.class.getName(), mgr, null); + } + + public void stop(BundleContext bundleContext) throws Exception + { + System.out.println("J3MgrImpl no more provides J3Mgr"); + + if (mgr != null) { + mgr.close(); + mgr = null; + } + } +} Added: vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java (added) +++ vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,89 @@ +package j3mgr; + +import j3.J3Mgr; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.FrameworkListener; +import org.osgi.framework.ServiceReference; +import org.osgi.service.packageadmin.PackageAdmin; + +public class J3MgrImpl + implements J3Mgr, FrameworkListener +{ + BundleContext context; + long bundleToKill; + + public J3MgrImpl() + { + bundleToKill = -1; + } + + public void open(BundleContext bundleContext) + { + context = bundleContext; + + // We need to know when packages are refreshed + context.addFrameworkListener(this); + } + + public void close() + { + context.removeFrameworkListener(this); + context = null; + } + + public void resetReferencesToBundle(Bundle bundle) throws Exception + { + System.out.println("resetReferencesToBundle: #" + bundle.getBundleId() + " " + bundle.getSymbolicName()); + + bundleToKill = bundle.getBundleId(); + + System.out.println("Stopping bundle: " + bundle.getSymbolicName()); + bundle.stop(); + System.out.println("Uninstalling bundle: " + bundle.getSymbolicName()); + bundle.uninstall(); + + System.out.println("Refreshing framework..."); + refreshFramework(bundle); + } + + void refreshFramework(Bundle bundle) + { + ServiceReference pkgAdminRef = (ServiceReference)context.getServiceReference( + "org.osgi.service.packageadmin.PackageAdmin"); + PackageAdmin pkgAdmin = (PackageAdmin)context.getService(pkgAdminRef); + pkgAdmin.refreshPackages(new Bundle[] {bundle}); + } + + public void frameworkEvent(FrameworkEvent event) + { + if (event.getType() != FrameworkEvent.PACKAGES_REFRESHED) return; + + if (bundleToKill == -1) return; + + System.out.println("Resetting stale references to bundle #" + bundleToKill); + j3.vm.OSGi.resetReferencesToBundle(bundleToKill); + + bundleToKill = -1; + } + + // THE FOLLOWING METHODS ARE DEBUGGING HELPERS + // THEY SHOULD BE REMOVED IN PRODUCTION + + public void resetReferencesToBundle(String bundleName) throws Exception + { + resetReferencesToBundle(getBundle(bundleName)); + } + + Bundle getBundle(String symbolicName) + { + Bundle[] bundles = context.getBundles(); + for (int i=0; i < bundles.length; ++i) { + if (symbolicName.equals(bundles[i].getSymbolicName())) + return bundles[i]; + } + return null; + } +} Added: vmkit/trunk/tests/debug.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/debug.txt?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/debug.txt (added) +++ vmkit/trunk/tests/debug.txt Thu Apr 25 11:52:43 2013 @@ -0,0 +1,3 @@ +framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.AImpl + +framework meminfo -gc Added: vmkit/trunk/tests/ijvm.tests.A/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.A/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.A/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.A/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.A/.project (added) +++ vmkit/trunk/tests/ijvm.tests.A/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.A + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: A +Bundle-SymbolicName: ijvm.tests.A;singleton:=true +Bundle-Version: 1.0.0 +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: ijvm.tests.A Added: vmkit/trunk/tests/ijvm.tests.A/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.A/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.A/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java (added) +++ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,6 @@ +package ijvm.tests.A; + +public interface A +{ + public void performA(); +} Added: vmkit/trunk/tests/ijvm.tests.AImpl/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.AImpl/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.AImpl/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/.project (added) +++ vmkit/trunk/tests/ijvm.tests.AImpl/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.AImpl + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: A Implementation +Bundle-SymbolicName: ijvm.tests.AImpl +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.AImpl.Activator +Import-Package: ijvm.tests.A, + ijvm.tests.C, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 Added: vmkit/trunk/tests/ijvm.tests.AImpl/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.AImpl/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,12 @@ +package ijvm.tests.AImpl; + +import ijvm.tests.A.A; + +public class AImpl + implements A +{ + public void performA() + { + System.out.println("AImpl.performA"); + } +} Added: vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,82 @@ +package ijvm.tests.AImpl; + +import java.util.ArrayList; + +import ijvm.tests.A.A; +import ijvm.tests.C.C; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceListener; +import org.osgi.util.tracker.ServiceTracker; + +public class Activator + implements BundleActivator, ServiceListener +{ + private BundleContext context; + private ServiceTracker cST; + private ArrayList c; + private A a; + + public Activator() + { + c = new ArrayList(); + } + + public void start(BundleContext bundleContext) throws Exception + { + System.out.println("AImpl provides A"); + context = bundleContext; + + cST = new ServiceTracker(context, C.class.getName(), null); + cST.open(); + + C service = (C)cST.getService(); + if (service != null) + c.add(service); + + context.addServiceListener(this, "(objectclass=" + C.class.getName() + ")"); + + if (c != null) + System.out.println("AImpl got C @ startup"); + + a = new AImpl(); + context.registerService(A.class.getName(), a, null); + } + + public void stop(BundleContext bundleContext) throws Exception + { + System.out.println("AImpl no more provides A"); + + context.removeServiceListener(this); + context = null; + + System.out.println("AImpl lost C but keeps a stale reference to it"); + cST.close(); + cST = null; + // c = null; + + a = null; + } + + public void serviceChanged(ServiceEvent event) + { + Object service = context.getService(event.getServiceReference()); + + switch(event.getType()) { + case ServiceEvent.REGISTERED: + if (C.class.isInstance(service)) { + System.out.println("AImpl got C"); + c.add((C)service); + } + break; + + case ServiceEvent.UNREGISTERING: + if (C.class.isInstance(service)) { + System.out.println("AImpl lost C but keeps a stale reference to it"); + } + break; + } + } +} Added: vmkit/trunk/tests/ijvm.tests.BImpl/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.BImpl/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.BImpl/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/.project (added) +++ vmkit/trunk/tests/ijvm.tests.BImpl/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.BImpl + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: B Implementation +Bundle-SymbolicName: ijvm.tests.BImpl +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.BImpl.Activator +Import-Package: ijvm.tests.A, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: ijvm.tests.B Added: vmkit/trunk/tests/ijvm.tests.BImpl/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.BImpl/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java (added) +++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,6 @@ +package ijvm.tests.B; + +public interface B +{ + public void performB(); +} Added: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,83 @@ +package ijvm.tests.BImpl; + +import java.util.ArrayList; + +import ijvm.tests.A.A; +import ijvm.tests.B.B; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceListener; +import org.osgi.util.tracker.ServiceTracker; + +public class Activator + implements BundleActivator, ServiceListener +{ + private BundleContext context; + + private ServiceTracker aST; + private ArrayList a; + private BImpl b; + + public Activator() + { + a = new ArrayList(); + } + + public void start(BundleContext bundleContext) throws Exception + { + System.out.println("BImpl exports and provides B"); + context = bundleContext; + + aST = new ServiceTracker(context, A.class.getName(), null); + aST.open(); + + A service = (A)aST.getService(); + if (service != null) + a.add(service); + + context.addServiceListener(this, "(objectclass=" + A.class.getName() + ")"); + + if (a != null) + System.out.println("BImpl got A @ startup"); + + b = new BImpl(); + context.registerService(B.class.getName(), b, null); + } + + public void stop(BundleContext bundleContext) throws Exception + { + System.out.println("BImpl no more provides B"); + + context.removeServiceListener(this); + context = null; + + System.out.println("BImpl lost A but keeps a stale reference to it"); + aST.close(); + aST = null; + // a = null; + + b = null; + } + + public void serviceChanged(ServiceEvent event) + { + Object service = context.getService(event.getServiceReference()); + + switch(event.getType()) { + case ServiceEvent.REGISTERED: + if (A.class.isInstance(service)) { + System.out.println("BImpl got A"); + a.add((A)service); + } + break; + + case ServiceEvent.UNREGISTERING: + if (A.class.isInstance(service)) { + System.out.println("BImpl lost A but keeps a stale reference to it"); + } + break; + } + } +} Added: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,12 @@ +package ijvm.tests.BImpl; + +import ijvm.tests.B.B; + +public class BImpl + implements B +{ + public void performB() + { + System.out.println("BImpl.performB"); + } +} Added: vmkit/trunk/tests/ijvm.tests.C/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.C/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.C/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.C/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.C/.project (added) +++ vmkit/trunk/tests/ijvm.tests.C/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.C + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,8 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: C +Bundle-SymbolicName: ijvm.tests.C +Bundle-Version: 1.0.0 +Import-Package: org.osgi.framework;version="1.3.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: ijvm.tests.C Added: vmkit/trunk/tests/ijvm.tests.C/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.C/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.C/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java (added) +++ vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,6 @@ +package ijvm.tests.C; + +public interface C +{ + public void performC(); +} Added: vmkit/trunk/tests/ijvm.tests.CImpl/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.CImpl/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.CImpl/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/.project (added) +++ vmkit/trunk/tests/ijvm.tests.CImpl/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.CImpl + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: C Implementation +Bundle-SymbolicName: ijvm.tests.CImpl +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.CImpl.Activator +Import-Package: ijvm.tests.B, + ijvm.tests.C, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 Added: vmkit/trunk/tests/ijvm.tests.CImpl/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.CImpl/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,83 @@ +package ijvm.tests.CImpl; + +import java.util.ArrayList; + +import ijvm.tests.B.B; +import ijvm.tests.C.C; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceListener; +import org.osgi.util.tracker.ServiceTracker; + +public class Activator + implements BundleActivator, ServiceListener +{ + private BundleContext context; + + private ServiceTracker bST; + private ArrayList b; + private CImpl c; + + public Activator() + { + b = new ArrayList(); + } + + public void start(BundleContext bundleContext) throws Exception + { + System.out.println("CImpl exports and provides C"); + context = bundleContext; + + bST = new ServiceTracker(context, B.class.getName(), null); + bST.open(); + + B service = (B)bST.getService(); + if (service != null) + b.add(service); + + context.addServiceListener(this, "(objectclass=" + B.class.getName() + ")"); + + if (b != null) + System.out.println("CImpl got B @ startup"); + + c = new CImpl(); + context.registerService(C.class.getName(), c, null); + } + + public void stop(BundleContext bundleContext) throws Exception + { + System.out.println("CImpl no more provides C"); + + context.removeServiceListener(this); + context = null; + + System.out.println("CImpl lost B but keeps a stale reference to it"); + bST.close(); + bST = null; + // b = null; + + c = null; + } + + public void serviceChanged(ServiceEvent event) + { + Object service = context.getService(event.getServiceReference()); + + switch(event.getType()) { + case ServiceEvent.REGISTERED: + if (B.class.isInstance(service)) { + System.out.println("CImpl got B"); + b.add((B)service); + } + break; + + case ServiceEvent.UNREGISTERING: + if (B.class.isInstance(service)) { + System.out.println("CImpl lost B but keeps a stale reference to it"); + } + break; + } + } +} Added: vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,12 @@ +package ijvm.tests.CImpl; + +import ijvm.tests.C.C; + +public class CImpl + implements C +{ + public void performC() + { + System.out.println("CImpl.performC"); + } +} Added: vmkit/trunk/tests/ijvm.tests.DImpl/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.DImpl/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.DImpl/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/.project (added) +++ vmkit/trunk/tests/ijvm.tests.DImpl/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.DImpl + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: D Implementation +Bundle-SymbolicName: ijvm.tests.DImpl +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.DImpl.Activator +Import-Package: ijvm.tests.C, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: ijvm.tests.D Added: vmkit/trunk/tests/ijvm.tests.DImpl/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.DImpl/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java (added) +++ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,6 @@ +package ijvm.tests.D; + +public interface D +{ + public void performD(); +} Added: vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,83 @@ +package ijvm.tests.DImpl; + +import java.util.ArrayList; + +import ijvm.tests.C.C; +import ijvm.tests.D.D; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceListener; +import org.osgi.util.tracker.ServiceTracker; + +public class Activator + implements BundleActivator, ServiceListener +{ + private BundleContext context; + + private ServiceTracker cST; + private ArrayList c; + private DImpl d; + + public Activator() + { + c = new ArrayList(); + } + + public void start(BundleContext bundleContext) throws Exception + { + System.out.println("DImpl exports and provides D"); + context = bundleContext; + + cST = new ServiceTracker(context, C.class.getName(), null); + cST.open(); + + C service = (C)cST.getService(); + if (service != null) + c.add(service); + + context.addServiceListener(this, "(objectclass=" + C.class.getName() + ")"); + + if (c != null) + System.out.println("DImpl got C @ startup"); + + d = new DImpl(); + context.registerService(D.class.getName(), d, null); + } + + public void stop(BundleContext bundleContext) throws Exception + { + System.out.println("DImpl no more provides D"); + + context.removeServiceListener(this); + context = null; + + System.out.println("DImpl lost C but keeps a stale reference to it"); + cST.close(); + cST = null; + // c = null; + + d = null; + } + + public void serviceChanged(ServiceEvent event) + { + Object service = context.getService(event.getServiceReference()); + + switch(event.getType()) { + case ServiceEvent.REGISTERED: + if (C.class.isInstance(service)) { + System.out.println("DImpl got C"); + c.add((C)service); + } + break; + + case ServiceEvent.UNREGISTERING: + if (C.class.isInstance(service)) { + System.out.println("DImpl lost C but keeps a stale reference to it"); + } + break; + } + } +} Added: vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,12 @@ +package ijvm.tests.DImpl; + +import ijvm.tests.D.D; + +public class DImpl + implements D +{ + public void performD() + { + System.out.println("DImpl.performB"); + } +} Added: vmkit/trunk/tests/ijvm.tests.Runner/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/.classpath?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.Runner/.classpath Thu Apr 25 11:52:43 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.Runner/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/.project?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/.project (added) +++ vmkit/trunk/tests/ijvm.tests.Runner/.project Thu Apr 25 11:52:43 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.Runner + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013 @@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Runner +Bundle-SymbolicName: ijvm.tests.Runner +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.Runner.Activator +Import-Package: ijvm.tests.A, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 Added: vmkit/trunk/tests/ijvm.tests.Runner/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/build.properties?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.Runner/build.properties Thu Apr 25 11:52:43 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,68 @@ +package ijvm.tests.Runner; + +import ijvm.tests.A.A; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.util.tracker.ServiceTracker; + +public class Activator + implements BundleActivator, Runnable +{ + private BundleContext context; + private ServiceTracker aST; + private A a; + private Runner runner1, runner2; + private Thread runnerThread1, runnerThread2, cancellerThread; + + public void start(BundleContext bundleContext) throws Exception + { + System.out.println("Started runner bundle."); + context = bundleContext; + + aST = new ServiceTracker(context, A.class.getName(), null); + aST.open(); + + a = (A)aST.getService(); + if (a == null) { + aST.close(); + aST = null; + + throw new BundleException("Runner bundle could not get A @ startup"); + } + System.out.println("Runner bundle got A @ startup."); + + runnerThread1 = new Thread(runner1 = new Runner(a), "Runner 1"); + runnerThread2 = new Thread(runner2 = new Runner(a), "Runner 2"); + runnerThread1.start(); + runnerThread2.start(); + + cancellerThread = new Thread(this, "Runner Canceller"); + cancellerThread.start(); + } + + public void stop(BundleContext bundleContext) throws Exception + { + System.out.println("Stopped runner bundle."); + + context = null; + + System.out.println("Runner bundle lost A but keeps a stale reference to it"); + aST.close(); + aST = null; + // a = null; + +// runner.join(); + } + + public void run() + { + try { + Thread.sleep(5000); + runner1.cancel(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} Added: vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java (added) +++ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java Thu Apr 25 11:52:43 2013 @@ -0,0 +1,64 @@ +package ijvm.tests.Runner; + +public class Runner + implements Runnable +{ + private Object obj; + private static boolean sleeping; + private boolean cancelRunning; + + { + sleeping = false; + } + + public Runner(Object o) + { + cancelRunning = false; + obj = o; + } + + public void cancel() + { + cancelRunning = false; + } + + public void run() + { + System.out.println("Started runner thread: " + Thread.currentThread().getName()); + + try { + while (!cancelRunning) { + long delay = 2000 + (long)(Math.random() * 1000.0); + + ijvm_tests_Runner_loop(delay); + + Thread.sleep(200); + } + } catch (Exception e) { + e.printStackTrace(); + } + + System.out.println("Stopped runner thread: " + Thread.currentThread().getName()); + } + + void ijvm_tests_Runner_loop(long delay) throws Exception + { + synchronized(obj) { + iteration(delay); + } + } + + void iteration(long delay) throws Exception + { + while (sleeping) + obj.wait(); + sleeping = true; + + System.out.println(Thread.currentThread().getName() + ": sleeping for " + delay); + Thread.sleep(delay); + System.out.println(Thread.currentThread().getName() + ": woke up"); + + sleeping = false; + obj.notifyAll(); + } +} Added: vmkit/trunk/tests/minimal.xargs URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/minimal.xargs?rev=180308&view=auto ============================================================================== --- vmkit/trunk/tests/minimal.xargs (added) +++ vmkit/trunk/tests/minimal.xargs Thu Apr 25 11:52:43 2013 @@ -0,0 +1,33 @@ +-Dorg.knopflerfish.framework.main.verbosity=0 +-Dorg.knopflerfish.gosg.jars=file:jars/ +-Forg.knopflerfish.framework.debug.errors=true +-Forg.knopflerfish.framework.debug.packages=false +-Forg.knopflerfish.framework.debug.classloader=false +-Forg.osgi.framework.system.packages.extra= + +-Forg.knopflerfish.startlevel.use=true + +-init + +-install log/log_api-3.1.2.jar +-install console/console_api-3.0.3.jar +-istart cm/cm_api-3.0.4.jar +-istart log/log-3.1.2.jar +-istart console/console-3.0.3.jar +-istart consoletty/consoletty-3.0.1.jar +-istart frameworkcommands/frameworkcommands-3.1.0.jar +-istart logcommands/logcommands-3.1.1.jar +-istart useradmin/useradmin_api-3.0.2.jar + +-launch + +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/j3mgr_1.0.0.jar + +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.A_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.C_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.BImpl_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.CImpl_1.0.0.jar +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.DImpl_1.0.0.jar + +-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.Runner_1.0.0.jar From peter.senna at gmail.com Thu Apr 25 09:54:41 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:54:41 -0000 Subject: [vmkit-commits] [vmkit] r180311 - Enabling assertions with GNU Classpath 0.99. Message-ID: <20130425165301.788382A6C02D@llvm.org> Author: peter.senna Date: Thu Apr 25 11:53:01 2013 New Revision: 180311 URL: http://llvm.org/viewvc/llvm-project?rev=180311&view=rev Log: Enabling assertions with GNU Classpath 0.99. The first use of class VMConstructor is inside the JVM not in jited code. So, the is not ready. Solution??? The class is marked as ready by hand. The same for VMField and VMMethod (cherry picked from commit 24cbf4f6b2d9bfed272ae82a9d6480ba27b66d5f) Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180311&r1=180310&r2=180311&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 11:53:01 2013 @@ -50,6 +50,8 @@ JavaObjectConstructor* JavaObjectConstru llvm_gcroot(vmConsInstance, 0); Jnjvm* vm = JavaThread::get()->getJVM(); VMConsClass = vm->upcalls->newVMConstructor; + if (!VMConsClass->isReady()) + VMConsClass->setInitializationState(ready); vmConsInstance = VMConsClass->doNew(vm); JavaObject* const* Cl = cons->classDef->getDelegateePtr(); vm->upcalls->initVMConstructor->invokeIntSpecial(vm, VMConsClass, vmConsInstance, Cl, i); @@ -70,6 +72,8 @@ JavaObjectMethod* JavaObjectMethod::crea Jnjvm* vm = JavaThread::get()->getJVM(); UserClass* VMMeth = vm->upcalls->newVMMethod; + if (!VMMeth->isReady()) + VMMeth->setInitializationState(ready); vmMeth = (JavaObjectVMMethod*)VMMeth->doNew(vm); @@ -99,6 +103,8 @@ JavaObjectField* JavaObjectField::create Jnjvm* vm = JavaThread::get()->getJVM(); UserClass* VMFieldClass = vm->upcalls->newVMField; + if (!VMFieldClass->isReady()) + VMFieldClass->setInitializationState(ready); vmField = VMFieldClass->doNew(vm); name = vm->internalUTF8ToStr(field->name); JavaObject* const* Cl = field->classDef->getDelegateePtr(); From peter.senna at gmail.com Thu Apr 25 09:54:46 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:54:46 -0000 Subject: [vmkit-commits] [vmkit] r180312 - Fixed monitorExit() bug when synchronization object was set to null between monitorEnter() and monitorExit(). Message-ID: <20130425165310.32DC42A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:53:09 2013 New Revision: 180312 URL: http://llvm.org/viewvc/llvm-project?rev=180312&view=rev Log: Fixed monitorExit() bug when synchronization object was set to null between monitorEnter() and monitorExit(). (cherry picked from commit 0ff6ffaf2411c7e6e5034b97cfd728c5cad03784) Modified: vmkit/trunk/include/vmkit/UTF8.h vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.h vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp Modified: vmkit/trunk/include/vmkit/UTF8.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/UTF8.h?rev=180312&r1=180311&r2=180312&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/UTF8.h (original) +++ vmkit/trunk/include/vmkit/UTF8.h Thu Apr 25 11:53:09 2013 @@ -67,6 +67,7 @@ public: friend std::ostream& operator << (std::ostream&, const UTF8&); void dump() const __attribute__((noinline)); int compare(const char *) const; + std::string& toString(std::string& buffer) const; }; extern "C" const UTF8 TombstoneKey; Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180312&r1=180311&r2=180312&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:53:09 2013 @@ -12,6 +12,8 @@ #define JNJVM_COMPILE 0 #define JNJVM_EXECUTE 0 +#include +#include #include #include @@ -43,6 +45,7 @@ using namespace j3; using namespace llvm; +using namespace std; void JavaJIT::updateStackInfo(Opinfo& info) { if (stackSize()) { @@ -291,13 +294,13 @@ llvm::Value* JavaJIT::getMutatorThreadPt currentBlock); threadId = BinaryOperator::CreateAnd(threadId, intrinsics->constantThreadIDMask, "", currentBlock); - threadId = new IntToPtrInst(threadId, intrinsics->MutatorThreadType, "", currentBlock); + threadId = new IntToPtrInst(threadId, intrinsics->MutatorThreadType, "MutatorThreadPtr", currentBlock); return threadId; } llvm::Value* JavaJIT::getJavaThreadPtr(llvm::Value* mutatorThreadPtr) { - return new BitCastInst(mutatorThreadPtr, intrinsics->JavaThreadType, "", currentBlock); + return new BitCastInst(mutatorThreadPtr, intrinsics->JavaThreadType, "JavaThreadPtr", currentBlock); } llvm::Value* JavaJIT::getIsolateIDPtr(llvm::Value* mutatorThreadPtr) { @@ -305,7 +308,7 @@ llvm::Value* JavaJIT::getIsolateIDPtr(ll intrinsics->OffsetThreadInMutatorThreadConstant, intrinsics->OffsetIsolateIDInThreadConstant }; - return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "", currentBlock); + return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "isolateIDPtr", currentBlock); } llvm::Value* JavaJIT::getVMPtr(llvm::Value* mutatorThreadPtr) { @@ -313,7 +316,7 @@ llvm::Value* JavaJIT::getVMPtr(llvm::Val intrinsics->OffsetThreadInMutatorThreadConstant, intrinsics->OffsetVMInThreadConstant }; - return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "", currentBlock); + return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "VMPtr", currentBlock); } llvm::Value* JavaJIT::getDoYieldPtr(llvm::Value* mutatorThreadPtr) { @@ -321,21 +324,21 @@ llvm::Value* JavaJIT::getDoYieldPtr(llvm intrinsics->OffsetThreadInMutatorThreadConstant, intrinsics->OffsetDoYieldInThreadConstant }; - return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "", currentBlock); + return GetElementPtrInst::Create(mutatorThreadPtr, GEP, "doYieldPtr", currentBlock); } llvm::Value* JavaJIT::getJNIEnvPtr(llvm::Value* javaThreadPtr) { Value* GEP[2] = { intrinsics->constantZero, intrinsics->OffsetJNIInJavaThreadConstant }; - return GetElementPtrInst::Create(javaThreadPtr, GEP, "", currentBlock); + return GetElementPtrInst::Create(javaThreadPtr, GEP, "JNIPtr", currentBlock); } llvm::Value* JavaJIT::getJavaExceptionPtr(llvm::Value* javaThreadPtr) { Value* GEP[2] = { intrinsics->constantZero, intrinsics->OffsetJavaExceptionInJavaThreadConstant }; - return GetElementPtrInst::Create(javaThreadPtr, GEP, "", currentBlock); + return GetElementPtrInst::Create(javaThreadPtr, GEP, "pendingExceptionPtr", currentBlock); } static llvm::Function* GetNativeCallee(JavaLLVMCompiler* TheCompiler, @@ -343,9 +346,10 @@ static llvm::Function* GetNativeCallee(J LLVMSignatureInfo* LSI = TheCompiler->getSignatureInfo(compilingMethod->getSignature()); FunctionType* FTy = LSI->getNativeStubType(); + string methName; Function* callee = Function::Create(FTy, GlobalValue::ExternalLinkage, - "", + compilingMethod->getName(methName, true), TheCompiler->getLLVMModule()); std::vector args; Function::arg_iterator i = callee->arg_begin(); @@ -648,7 +652,7 @@ llvm::Value* JavaJIT::objectToHeader(Val obj = new PtrToIntInst(obj, intrinsics->pointerSizeType, "", currentBlock); Value* d = ConstantInt::get(intrinsics->pointerSizeType, gcHeader::hiddenHeaderSize()); obj = BinaryOperator::CreateSub(obj, d, "", currentBlock); - return new IntToPtrInst(obj, intrinsics->ObjectHeaderType, "", currentBlock); + return new IntToPtrInst(obj, intrinsics->ObjectHeaderType, "objectHeader", currentBlock); } void JavaJIT::monitorEnter(Value* obj) { @@ -689,6 +693,21 @@ void JavaJIT::monitorEnter(Value* obj) { } void JavaJIT::monitorExit(Value* obj) { + /* + obj should not be null if we are here. + If obj was null when monitorEnter() was run, then monitorEnter() should have + thrown an exception. If it was not null then, and it is null now, it must have + been reset by the GC (it became a stale reference) between monitorEnter() and + monitorExit(). In this case, just get out of the synchronize block silently. + */ + BasicBlock* nonNullObjBlock = createBasicBlock("monitorExit_nonNullObj"); + BasicBlock* EndBlock = createBasicBlock("monitorExit_End"); + + Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, obj, intrinsics->JavaObjectNullConstant, "isObjectNull"); + BranchInst::Create(EndBlock, nonNullObjBlock, test, currentBlock); + + currentBlock = nonNullObjBlock; + Value* lockPtr = objectToHeader(obj); Value* lock = new LoadInst(lockPtr, "", currentBlock); @@ -719,17 +738,16 @@ void JavaJIT::monitorExit(Value* obj) { Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, atomic, oldValMask, ""); - BasicBlock* OK = createBasicBlock("unsynchronize passed"); - BasicBlock* NotOK = createBasicBlock("unsynchronize did not pass"); + BasicBlock* LockFreeCASFailed = createBasicBlock("Lock-Free CAS Failed"); - BranchInst::Create(OK, NotOK, cmp, currentBlock); + BranchInst::Create(EndBlock, LockFreeCASFailed, cmp, currentBlock); // The atomic cas did not work. - currentBlock = NotOK; + currentBlock = LockFreeCASFailed; CallInst::Create(intrinsics->ReleaseObjectFunction, obj, "", currentBlock); - BranchInst::Create(OK, currentBlock); + BranchInst::Create(EndBlock, currentBlock); - currentBlock = OK; + currentBlock = EndBlock; } void JavaJIT::beginSynchronize() { @@ -965,13 +983,23 @@ Instruction* JavaJIT::inlineCompile(Basi return endNode; } +static char* setInstructionName(char *s, size_t maxlen, const char * format, ...) +{ + va_list args; + va_start(args, format); + vsnprintf(s, maxlen, format, args); + va_end(args); + return s; +} + llvm::Function* JavaJIT::javaCompile() { PRINT_DEBUG(JNJVM_COMPILE, 1, COLOR_NORMAL, "compiling %s.%s\n", UTF8Buffer(compilingClass->name).cString(), UTF8Buffer(compilingMethod->name).cString()); + string methName, methNameLink; DbgSubprogram = TheCompiler->getDebugFactory()->createFunction( - DIDescriptor(), "", "", DIFile(), 0, DIType(), false, false, 0); + DIDescriptor(), compilingMethod->getName(methName, false), compilingMethod->getName(methNameLink, true), DIFile(), 0, DIType(), false, false, 0); JavaAttribute* codeAtt = compilingMethod->lookupAttribute(JavaAttribute::codeAttribute); @@ -996,6 +1024,9 @@ llvm::Function* JavaJIT::javaCompile() { Function* func = llvmFunction; + const size_t instNameLen = 4096; + char instName[instNameLen]; + currentBlock = createBasicBlock("start"); endExceptionBlock = createBasicBlock("endExceptionBlock"); unifiedUnreachable = createBasicBlock("unifiedUnreachable"); @@ -1009,7 +1040,7 @@ llvm::Function* JavaJIT::javaCompile() { Instruction* returnValue = NULL; if (returnType == intrinsics->JavaObjectType && TheCompiler->useCooperativeGC()) { - returnValue = new AllocaInst(intrinsics->JavaObjectType, "", + returnValue = new AllocaInst(intrinsics->JavaObjectType, "returnValue", currentBlock); Instruction* cast = new BitCastInst(returnValue, intrinsics->ptrPtrType, "", currentBlock); @@ -1019,29 +1050,27 @@ llvm::Function* JavaJIT::javaCompile() { } for (int i = 0; i < maxLocals; i++) { - intLocals.push_back(new AllocaInst(Type::getInt32Ty(*llvmContext), "", currentBlock)); + intLocals.push_back(new AllocaInst(Type::getInt32Ty(*llvmContext), setInstructionName(instName, instNameLen, "int_%d", i), currentBlock)); new StoreInst(Constant::getNullValue(Type::getInt32Ty(*llvmContext)), intLocals.back(), false, currentBlock); - doubleLocals.push_back(new AllocaInst(Type::getDoubleTy(*llvmContext), "", currentBlock)); + doubleLocals.push_back(new AllocaInst(Type::getDoubleTy(*llvmContext), setInstructionName(instName, instNameLen, "double_%d", i), currentBlock)); new StoreInst(Constant::getNullValue(Type::getDoubleTy(*llvmContext)), doubleLocals.back(), false, currentBlock); - longLocals.push_back(new AllocaInst(Type::getInt64Ty(*llvmContext), "", currentBlock)); + longLocals.push_back(new AllocaInst(Type::getInt64Ty(*llvmContext), setInstructionName(instName, instNameLen, "long_%d", i), currentBlock)); new StoreInst(Constant::getNullValue(Type::getInt64Ty(*llvmContext)), longLocals.back(), false, currentBlock); - floatLocals.push_back(new AllocaInst(Type::getFloatTy(*llvmContext), "", currentBlock)); + floatLocals.push_back(new AllocaInst(Type::getFloatTy(*llvmContext), setInstructionName(instName, instNameLen, "float_%d", i), currentBlock)); new StoreInst(Constant::getNullValue(Type::getFloatTy(*llvmContext)), floatLocals.back(), false, currentBlock); - objectLocals.push_back(new AllocaInst(intrinsics->JavaObjectType, "", - currentBlock)); + objectLocals.push_back(new AllocaInst(intrinsics->JavaObjectType, setInstructionName(instName, instNameLen, "object_%d", i), currentBlock)); // The GCStrategy will already initialize the value. if (!TheCompiler->useCooperativeGC()) new StoreInst(Constant::getNullValue(intrinsics->JavaObjectType), objectLocals.back(), false, currentBlock); } for (int i = 0; i < maxStack; i++) { - objectStack.push_back(new AllocaInst(intrinsics->JavaObjectType, "", - currentBlock)); + objectStack.push_back(new AllocaInst(intrinsics->JavaObjectType, setInstructionName(instName, instNameLen, "stack_object_%d", i), currentBlock)); addHighLevelType(objectStack.back(), upcalls->OfObject); - intStack.push_back(new AllocaInst(Type::getInt32Ty(*llvmContext), "", currentBlock)); - doubleStack.push_back(new AllocaInst(Type::getDoubleTy(*llvmContext), "", currentBlock)); - longStack.push_back(new AllocaInst(Type::getInt64Ty(*llvmContext), "", currentBlock)); - floatStack.push_back(new AllocaInst(Type::getFloatTy(*llvmContext), "", currentBlock)); + intStack.push_back(new AllocaInst(Type::getInt32Ty(*llvmContext), setInstructionName(instName, instNameLen, "stack_int_%d", i), currentBlock)); + doubleStack.push_back(new AllocaInst(Type::getDoubleTy(*llvmContext), setInstructionName(instName, instNameLen, "stack_double_%d", i), currentBlock)); + longStack.push_back(new AllocaInst(Type::getInt64Ty(*llvmContext), setInstructionName(instName, instNameLen, "stack_long_%d", i), currentBlock)); + floatStack.push_back(new AllocaInst(Type::getFloatTy(*llvmContext), setInstructionName(instName, instNameLen, "stack_float_%d", i), currentBlock)); } uint32 index = 0; @@ -1099,14 +1128,10 @@ llvm::Function* JavaJIT::javaCompile() { } #endif - if (compilingMethod->name->compare("ijvm_tests_Runner_loop") == 0) { - llvmFunction->dump(); - } - nbHandlers = readExceptionTable(reader, codeLen); if (nbHandlers != 0) { jmpBuffer = new AllocaInst(ArrayType::get(Type::getInt8Ty(*llvmContext), sizeof(vmkit::ExceptionBuffer)), "", currentBlock); - jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ptrType, "", currentBlock); + jmpBuffer = new BitCastInst(jmpBuffer, intrinsics->ptrType, "exceptionSavePoint", currentBlock); } reader.cursor = start; @@ -1201,10 +1226,10 @@ llvm::Function* JavaJIT::javaCompile() { currentBlock->eraseFromParent(); } else { if (nbHandlers != 0) { - BasicBlock* ifNormal = createBasicBlock(""); - BasicBlock* ifException = createBasicBlock(""); + BasicBlock* ifNormal = createBasicBlock("No exception was thrown"); + BasicBlock* ifException = createBasicBlock("Rethrow Exception"); Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr())); - Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock); + Value* obj = new LoadInst(javaExceptionPtr, "pendingException", currentBlock); Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_NE, obj, intrinsics->JavaObjectNullConstant, ""); BranchInst::Create(ifException, ifNormal, test, currentBlock); @@ -1350,16 +1375,15 @@ void JavaJIT::JITVerifyNull(Value* obj) Instruction* VT = new LoadInst(VTPtr, "", true, currentBlock); VT->setDebugLoc(DebugLoc::get(currentBytecodeIndex, 1, DbgSubprogram)); } else { - Constant* zero = intrinsics->JavaObjectNullConstant; - Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, obj, zero, ""); + Value* test = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, obj, intrinsics->JavaObjectNullConstant, ""); - BasicBlock* exit = createBasicBlock("verifyNullExit"); - BasicBlock* cont = createBasicBlock("verifyNullCont"); + BasicBlock* nullObjBlock = createBasicBlock("object is null"); + BasicBlock* notNullObjBlock = createBasicBlock("object is not null"); - BranchInst::Create(exit, cont, test, currentBlock); - currentBlock = exit; + BranchInst::Create(nullObjBlock, notNullObjBlock, test, currentBlock); + currentBlock = nullObjBlock; throwRuntimeException(intrinsics->NullPointerExceptionFunction, 0, 0); - currentBlock = cont; + currentBlock = notNullObjBlock; } } } @@ -2320,8 +2344,8 @@ Instruction* JavaJIT::invoke(Value *F, s BasicBlock* ifException = NULL; if (jmpBuffer != NULL) { - BasicBlock* doCall = createBasicBlock(""); - ifException = createBasicBlock(""); + BasicBlock* doCall = createBasicBlock("Perform call"); + ifException = createBasicBlock("Exception thrown"); Instruction* check = CallInst::Create(intrinsics->SetjmpFunction, jmpBuffer, "", currentBlock); check = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, check, intrinsics->constantZero, ""); BranchInst::Create(doCall, ifException, check, currentBlock); @@ -2394,7 +2418,7 @@ void JavaJIT::throwRuntimeException(llvm } void JavaJIT::throwRuntimeException(llvm::Function* F, Value** args, uint32 nbArgs) { - Instruction* obj = CallInst::Create(F, ArrayRef(args, nbArgs), "", currentBlock); + Instruction* obj = CallInst::Create(F, ArrayRef(args, nbArgs), "exceptionObject", currentBlock); DebugLoc DL = CreateLocation(); obj->setDebugLoc(DL); throwException(obj, false); @@ -2524,9 +2548,9 @@ unsigned JavaJIT::readExceptionTable(Rea // Get the Java exception. Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr())); - Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock); + Value* obj = new LoadInst(javaExceptionPtr, "pendingException", currentBlock); - Value* objVT = CallInst::Create(intrinsics->GetVTFunction, obj, "", + Value* objVT = CallInst::Create(intrinsics->GetVTFunction, obj, "objectVT", currentBlock); uint32 depth = cur->catchClass->virtualVT->depth; @@ -2537,16 +2561,16 @@ unsigned JavaJIT::readExceptionTable(Rea Value* classArgs[2] = { objVT, VTVar }; cmp = CallInst::Create(intrinsics->IsSecondaryClassFunction, - classArgs, "", currentBlock); + classArgs, "isSecondaryClass", currentBlock); } else { Value* inDisplay = CallInst::Create(intrinsics->GetDisplayFunction, - objVT, "", currentBlock); + objVT, "objectDisplay", currentBlock); Value* displayArgs[2] = { inDisplay, depthCl }; Value* VTInDisplay = CallInst::Create(intrinsics->GetVTInDisplayFunction, - displayArgs, "", currentBlock); + displayArgs, "objectVTInDisplay", currentBlock); cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ, VTInDisplay, VTVar, ""); Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180312&r1=180311&r2=180312&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 11:53:09 2013 @@ -134,7 +134,7 @@ void JavaJIT::compileOpcodes(Reader& rea if (opinfo->handler) { // If it's a handler, put the exception object in the stack. Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr())); - Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock); + Value* obj = new LoadInst(javaExceptionPtr, "pendingException", currentBlock); new StoreInst(obj, objectStack[0], "", currentBlock); // And clear the exception. new StoreInst(intrinsics->JavaObjectNullConstant, javaExceptionPtr, currentBlock); @@ -2303,7 +2303,9 @@ void JavaJIT::compileOpcodes(Reader& rea case MONITOREXIT : { bool thisReference = isThisReference(currentStackIndex - 1); Value* obj = pop(); - if (!thisReference) JITVerifyNull(obj); + // NOTE: monitorExit() should NOT throw an exception if object is null. + // See monitorExit() implementation. + // if (!thisReference) JITVerifyNull(obj); monitorExit(obj); break; } Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180312&r1=180311&r2=180312&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:53:09 2013 @@ -1765,6 +1765,27 @@ void Class::broadcastClass() { JavaObject::notifyAll(delegatee); } +std::string& CommonClass::getName(std::string& nameBuffer, bool linkageName) const +{ + name->toString(nameBuffer); + + for (size_t i=0; i < name->size; ++i) { + if (name->elements[i] == '/') + nameBuffer[i] = linkageName ? '_' : '.'; + } + + return nameBuffer; +} + +std::string& JavaMethod::getName(std::string& nameBuffer, bool linkageName) const +{ + classDef->getName(nameBuffer, linkageName); + nameBuffer += linkageName ? '_' : '.'; + + string methName; + return nameBuffer += name->toString(methName); +} + std::ostream& j3::operator << (std::ostream& os, const JavaMethod& m) { return os << *m.classDef->name << '.' << *m.name << " (" << *m.type << ')'; Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180312&r1=180311&r2=180312&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 11:53:09 2013 @@ -234,6 +234,8 @@ public: const UTF8* getName() const { return name; } Class* getSuper() const { return super; } + std::string& getName(std::string& nameBuffer, bool linkageName = false) const; + /// isArray - Is the class an array class? /// bool isArray() const { @@ -1107,6 +1109,7 @@ public: JavaMethod_DECL_INVOKE(double, Double) JavaMethod_DECL_INVOKE(JavaObject*, JavaObject) + std::string& getName(std::string& nameBuffer, bool linkageName = false) const; friend std::ostream& operator << (std::ostream&, const JavaMethod&); void dump() const __attribute__((noinline)); Modified: vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp?rev=180312&r1=180311&r2=180312&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp Thu Apr 25 11:53:09 2013 @@ -52,6 +52,16 @@ int UTF8::compare(const char *s) const return diff; } +std::string& UTF8::toString(std::string& buffer) const +{ + buffer.resize(size); + + for (ssize_t i = 0; i < size; ++i) + buffer[i] = (std::string::value_type)(elements[i]); + + return buffer; +} + std::ostream& operator << (std::ostream& os, const UTF8& utf8) { for (ssize_t i = 0; i < utf8.size; ++i) From peter.senna at gmail.com Thu Apr 25 09:54:49 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:54:49 -0000 Subject: [vmkit-commits] [vmkit] r180313 - Support for annotations in Fields and Methods when GNUClasspath is used. It is not a finished work. Message-ID: <20130425165319.5D7382A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:53:18 2013 New Revision: 180313 URL: http://llvm.org/viewvc/llvm-project?rev=180313&view=rev Log: Support for annotations in Fields and Methods when GNUClasspath is used. It is not a finished work. Done: VMMethod.getAnnotation(Class) VMField.getAnnotation(Class) (cherry picked from commit f547cba473cd8029f18ad3afa05c01b23174e1ae) Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h vmkit/trunk/lib/j3/ClassLib/Reflect.inc vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.h vmkit/trunk/tests/AnnotationClassTest.java Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc Thu Apr 25 11:53:18 2013 @@ -435,6 +435,8 @@ jclass clazz, #endif JavaObject* Cl) { // TODO implement me + fprintf(stderr, "Java_java_lang_VMClass_getDeclaredAnnotations not implemented\n"); + abort(); ArrayObject* res = 0; llvm_gcroot(res, 0); Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Thu Apr 25 11:53:18 2013 @@ -20,6 +20,7 @@ #include "ClasspathReflect.h" #include "JavaClass.h" #include "JavaThread.h" +#include "JavaConstantPool.h" #include "JavaTypes.h" #include "JavaUpcalls.h" #include "Jnjvm.h" @@ -27,7 +28,7 @@ #include "Reader.h" -#if 0 +#if 1 using namespace vmkit; #define dprintf(...) do { printf("ClasspathVMField: "); printf(__VA_ARGS__); } while(0) #else @@ -38,6 +39,72 @@ using namespace j3; extern "C" { +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_getAnnotation( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* VMField, JavaObjectClass* annotationClass) { + JavaObject* res = 0; + JavaObject* newHashMap = 0; + llvm_gcroot(res, 0); + llvm_gcroot(newHashMap, 0); + llvm_gcroot(VMField, 0); + llvm_gcroot(annotationClass, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + Jnjvm* vm = JavaThread::get()->getJVM(); + Classpath* upcalls = vm->upcalls; + + dprintf("*************VMField_getAnnotation*************\n"); + if (annotationClass) { + /* Retrieving annotationClass classname */ + UserClass* clazz = JavaObjectClass::getClass(annotationClass)->asClass(); + dprintf("searched annotation : %s\n\n", UTF8Buffer(clazz->name).cString()); + + /* Retrieving VMField.class attributes list */ + UserClass* compilingClass = JavaObjectVMField::getClass(VMField); + JavaField* field = JavaObjectVMField::getInternalField(VMField); + Attribut* annotationsAtt = + field->lookupAttribut(Attribut::annotationsAttribut); + dprintf("JavaField : %s\n", UTF8Buffer(field->name).cString()); + + if (annotationsAtt) { + Reader reader(annotationsAtt, compilingClass->bytes); + AnnotationReader AR(reader, compilingClass); + uint16 numAnnotations = reader.readU2(); + + for (uint16 i = 0; i < numAnnotations; ++i) { + uint16 typeIndex = reader.readU2(); + const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex); + + // Remove the L and ; in the name annotation type (L.....;) + // for the comparison. + dprintf("Comparing with : %s\n", UTF8Buffer(annoType).cString()); + if (clazz->name->equals(annoType->elements+1, annoType->size-2)) { + newHashMap = AR.createAnnotationMapValues(); + break; + + } else { + AR.readAnnotationElementValues(); + } + } // end for + + if (newHashMap) { + dprintf("Annotation creation\n"); + res = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap); + } + + } + } else { + vm->nullPointerException(); + } + + END_NATIVE_EXCEPTION + dprintf("Annotation found\n"); + return res; +} + JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc Thu Apr 25 11:53:18 2013 @@ -25,6 +25,109 @@ using namespace j3; extern "C" { +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getDefaultValue( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* VMMeth) { + JavaObject* res = 0; + llvm_gcroot(VMMeth, 0); + llvm_gcroot(res, 0); + + BEGIN_NATIVE_EXCEPTION(0) + dprintf("*************VMMethod_getDefaultValue*************\n"); + Classpath* upcalls = JavaThread::get()->getJVM()->upcalls; + UserClass* cl = JavaObjectVMMethod::getClass(VMMeth); + dprintf("JavaClass:%s\n", UTF8Buffer(cl->name).cString()); + + // Annotation interface class. + const UTF8* name = upcalls->newAnnotation->name; + + if (cl->inheritName(name->elements, name->size)) { + // Find "default attribute" + JavaMethod* method = JavaObjectVMMethod::getInternalMethod(VMMeth); + Attribut* annotationsAtt = + method->lookupAttribut(Attribut::annotationDefaultAttribut); + dprintf("JavaMethod:%s\n", UTF8Buffer(method->name).cString()); + + if (annotationsAtt) { + Reader reader(annotationsAtt, cl->bytes); + AnnotationReader AR(reader, cl); + + res = AR.createElementValue(); + } + } + + END_NATIVE_EXCEPTION + + return res; +} + +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMMethod_getAnnotation( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMMethod* VMMeth, JavaObjectClass* annotationClass) { + JavaObject* res = 0; + JavaObject* newHashMap = 0; + llvm_gcroot(res, 0); + llvm_gcroot(newHashMap, 0); + llvm_gcroot(VMMeth, 0); + llvm_gcroot(annotationClass, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + Jnjvm* vm = JavaThread::get()->getJVM(); + Classpath* upcalls = vm->upcalls; + + dprintf("*************VMMethod_getAnnotation*************\n"); + if (annotationClass) { + /* Retrieving annotationClass classname */ + UserClass* clazz = JavaObjectClass::getClass(annotationClass)->asClass(); + dprintf("searched annotation:%s\n\n", UTF8Buffer(clazz->name).cString()); + + /* Retrieving VMMethod.class attributes list */ + UserClass* compilingClass = JavaObjectVMMethod::getClass(VMMeth); + JavaMethod* method = JavaObjectVMMethod::getInternalMethod(VMMeth); + Attribut* annotationsAtt = + method->lookupAttribut(Attribut::annotationsAttribut); + dprintf("JavaMethod:%s\n", UTF8Buffer(method->name).cString()); + + if (annotationsAtt) { + Reader reader(annotationsAtt, compilingClass->bytes); + AnnotationReader AR(reader, compilingClass); + uint16 numAnnotations = reader.readU2(); + + for (uint16 i = 0; i < numAnnotations; ++i) { + uint16 typeIndex = reader.readU2(); + const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex); + + // Remove the L and ; in the name annotation type (L.....;) + // for the comparison. + if (clazz->name->equals(annoType->elements+1, annoType->size-2)) { + newHashMap = AR.createAnnotationMapValues(); + break; + + } else { + AR.readAnnotationElementValues(); + } + } // end for + + if (newHashMap) { + dprintf("Annotation creation\n"); + res = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap); + } + + } + } else { + vm->nullPointerException(); + } + + END_NATIVE_EXCEPTION + + return res; +} + JNIEXPORT jint JNICALL Java_java_lang_reflect_VMMethod_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Apr 25 11:53:18 2013 @@ -73,6 +73,13 @@ Class* Classpath::newVMConstructor; ClassArray* Classpath::constructorArrayClass; ClassArray* Classpath::constructorArrayAnnotation; JavaField* Classpath::constructorSlot; +UserClass* Classpath::newHashMap; +JavaMethod* Classpath::initHashMap; +JavaMethod* Classpath::putHashMap; +JavaMethod* Classpath::createAnnotation; +UserClass* Classpath::newAnnotationHandler; +UserClass* Classpath::newAnnotation; +UserClassArray* Classpath::annotationArrayClass; JavaMethod* Classpath::initMethod; JavaMethod* Classpath::initVMMethod; JavaMethod* Classpath::initField; @@ -623,6 +630,33 @@ void Classpath::initialiseClasspath(Jnjv constructorSlot = UPCALL_FIELD(loader, "java/lang/reflect/Constructor", "slot", "I", ACC_VIRTUAL); + + + newHashMap = + UPCALL_CLASS(loader, "java/util/HashMap"); + + initHashMap = + UPCALL_METHOD(loader, "java/util/HashMap", "", + "()V", ACC_VIRTUAL); + putHashMap = + UPCALL_METHOD(loader, "java/util/HashMap", "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", + ACC_VIRTUAL); + + newAnnotationHandler = + UPCALL_CLASS(loader, "sun/reflect/annotation/AnnotationInvocationHandler"); + + createAnnotation = + UPCALL_METHOD(loader, "sun/reflect/annotation/AnnotationInvocationHandler", + "create", "(Ljava/lang/Class;Ljava/util/Map;)Ljava/lang/annotation/Annotation;", + ACC_STATIC); + + annotationArrayClass = + UPCALL_ARRAY_CLASS(loader, "java/lang/annotation/Annotation", 1); + + newAnnotation = + UPCALL_CLASS(loader, "java/lang/annotation/Annotation"); + initMethod = UPCALL_METHOD(loader, "java/lang/reflect/Method", "", Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h Thu Apr 25 11:53:18 2013 @@ -80,6 +80,13 @@ public: ISOLATE_STATIC JavaMethod* getCallingClassLoader; ISOLATE_STATIC JavaMethod* initConstructor; ISOLATE_STATIC JavaMethod* initVMConstructor; + ISOLATE_STATIC UserClass* newHashMap; + ISOLATE_STATIC JavaMethod* initHashMap; + ISOLATE_STATIC JavaMethod* putHashMap; + ISOLATE_STATIC JavaMethod* createAnnotation; + ISOLATE_STATIC UserClass* newAnnotationHandler; + ISOLATE_STATIC UserClass* newAnnotation; + ISOLATE_STATIC UserClassArray* annotationArrayClass; ISOLATE_STATIC UserClassArray* constructorArrayClass; ISOLATE_STATIC UserClassArray* constructorArrayAnnotation; ISOLATE_STATIC UserClass* newConstructor; Modified: vmkit/trunk/lib/j3/ClassLib/Reflect.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Reflect.inc?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/Reflect.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/Reflect.inc Thu Apr 25 11:53:18 2013 @@ -78,8 +78,17 @@ ArrayObject* JavaObjectClass::getDeclare UserClass* realCl = cl->asClass(); JnjvmClassLoader* classLoader = cl->classLoader; uint32 size = 0; + bool annot = false; + + // Check if the class is an annotation. + const UTF8* name = upcalls->newAnnotation->name; + if (realCl->inheritName(name->elements, name->size)) + annot = true; - for (uint32 i = 0; i < realCl->nbVirtualMethods + realCl->nbStaticMethods; + // Ugly hack : we don't want this method to return annotationType() + // method for annotations. For that, we start the counter to 1 instead + // of 0. + for (uint32 i = annot?1:0 ; i < realCl->nbVirtualMethods + realCl->nbStaticMethods; ++i) { JavaMethod* meth = &realCl->virtualMethods[i]; bool pub = isPublic(meth->access); @@ -94,7 +103,7 @@ ArrayObject* JavaObjectClass::getDeclare ret = (ArrayObject*)upcalls->methodArrayClass->doNew(size, vm); sint32 index = 0; - for (uint32 i = 0; i < realCl->nbVirtualMethods + realCl->nbStaticMethods; + for (uint32 i = annot?1:0; i < realCl->nbVirtualMethods + realCl->nbStaticMethods; ++i) { JavaMethod* meth = &realCl->virtualMethods[i]; bool pub = isPublic(meth->access); Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:53:18 2013 @@ -18,6 +18,7 @@ #include "JavaArray.h" #include "JavaClass.h" #include "JavaCompiler.h" +#include "JavaString.h" #include "JavaConstantPool.h" #include "JavaObject.h" #include "JavaThread.h" @@ -29,6 +30,15 @@ #include +#if 0 +using namespace vmkit; +#define dprintf(...) do { printf("JavaClass: "); printf(__VA_ARGS__); } while(0) +#define ddprintf(...) do { printf(__VA_ARGS__); } while(0) +#else +#define dprintf(...) +#define ddprintf(...) +#endif + using namespace j3; using namespace std; @@ -1678,6 +1688,15 @@ void AnnotationReader::readAnnotation() AnnotationNameIndex = typeIndex; } +void AnnotationReader::readAnnotationElementValues() { + uint16 numPairs = reader.readU2(); + + for (uint16 j = 0; j < numPairs; ++j) { + reader.readU2(); + readElementValue(); + } +} + void AnnotationReader::readElementValue() { uint8 tag = reader.readU1(); if ((tag == 'B') || (tag == 'C') || (tag == 'D') || (tag == 'F') || @@ -1699,6 +1718,135 @@ void AnnotationReader::readElementValue( } } +JavaObject* AnnotationReader::createElementValue() { + uint8 tag = reader.readU1(); + JavaObject* res = 0; + JavaObject* tmp = 0; + llvm_gcroot(res, 0); + llvm_gcroot(tmp, 0); + + Jnjvm* vm = JavaThread::get()->getJVM(); + Classpath* upcalls = JavaThread::get()->getJVM()->upcalls; + ddprintf("value:"); + + if (tag == 'B') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("B=%d", val); + res = upcalls->boolClass->doNew(vm); + upcalls->boolValue->setInstanceInt8Field(res, val); + + } else if (tag == 'C') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("C=%c", val); + res = upcalls->intClass->doNew(vm); + upcalls->intValue->setInstanceInt32Field(res, val); + + } else if (tag == 'D') { + double val = cl->ctpInfo->DoubleAt(reader.readU2()); + ddprintf("D=%f", val); + res = upcalls->doubleClass->doNew(vm); + upcalls->doubleValue->setInstanceDoubleField(res, val); + + } else if (tag == 'F') { + float val = cl->ctpInfo->FloatAt(reader.readU2()); + ddprintf("F=%f", val); + res = upcalls->floatClass->doNew(vm); + upcalls->floatValue->setInstanceFloatField(res, val); + + } else if (tag == 'J') { + sint64 val = cl->ctpInfo->LongAt(reader.readU2()); + ddprintf("J=%lld", val); + res = upcalls->longClass->doNew(vm); + upcalls->longValue->setInstanceLongField(res, val); + + } else if (tag == 'S') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("S=%d", val); + res = upcalls->shortClass->doNew(vm); + upcalls->shortValue->setInstanceInt16Field(res, val); + + } else if (tag == 'I') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("I=%d", val); + res = upcalls->intClass->doNew(vm); + upcalls->intValue->setInstanceInt32Field(res, val); + + } else if (tag == 'Z') { + bool val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("Z=%d", val); + res = upcalls->boolClass->doNew(vm); + upcalls->boolValue->setInstanceInt8Field(res, val); + + } else if (tag == 's') { + const UTF8* s = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("s=%s", PrintBuffer(s).cString()); + res = JavaString::internalToJava(s, JavaThread::get()->getJVM()); + + } else if (tag == 'e') { + // Element_value Enumeration not implemented + const UTF8* n = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("%s", PrintBuffer(n).cString()); + const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("%s", PrintBuffer(m).cString()); + fprintf(stderr, "Annotation not supported for %c type\n", tag); + abort(); + + } else if (tag == 'c') { + ddprintf("class="); + const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("%s", PrintBuffer(m).cString()); + + } else if (tag == '[') { + uint16 numValues = reader.readU2(); + UserClassArray* array = upcalls->annotationArrayClass; + res = array->doNew(numValues, vm); + + ddprintf("Tableau de %d elements\n", numValues); + for (uint32 i = 0; i < numValues; ++i) { + tmp = createElementValue(); + ArrayObject::setElement((ArrayObject *)res, tmp, i); + } + ddprintf("Fin du Tableau"); + } else { + // Element_value Annotation not implemented + fprintf(stderr, "Annotation not supported for %c type\n", tag); + abort(); + } + ddprintf("\n"); + + return res; +} + +JavaObject* AnnotationReader::createAnnotationMapValues() { + std::pair pair; + JavaObject* tmp = 0; + JavaString* str = 0; + JavaObject* newHashMap = 0; + llvm_gcroot(tmp, 0); + llvm_gcroot(str, 0); + llvm_gcroot(newHashMap, 0); + + Jnjvm * vm = JavaThread::get()->getJVM(); + Classpath* upcalls = vm->upcalls; + UserClass* HashMap = upcalls->newHashMap; + newHashMap = HashMap->doNew(vm); + upcalls->initHashMap->invokeIntSpecial(vm, HashMap, newHashMap); + + uint16 numPairs = reader.readU2(); + dprintf("numPairs:%d\n", numPairs); + for (uint16 j = 0; j < numPairs; ++j) { + uint16 nameIndex = reader.readU2(); + const UTF8* key = cl->ctpInfo->UTF8At(nameIndex); + dprintf("keyAn:%s|", PrintBuffer(key).cString()); + + tmp = createElementValue(); + str = JavaString::internalToJava(key, JavaThread::get()->getJVM()); + upcalls->putHashMap->invokeJavaObjectVirtual(vm, HashMap, newHashMap, &str, &tmp); + } + + return newHashMap; +} + uint16 JavaMethod::lookupLineNumber(vmkit::FrameInfo* info) { JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt == NULL) return 0; Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 11:53:18 2013 @@ -71,6 +71,19 @@ public: AnnotationNameIndex(0) {} void readAnnotation(); void readElementValue(); + + + void readAnnotationElementValues(); + + // createAnnotation - search for a specific annotation in annotation + // attributes. + // + JavaObject* createAnnotationMapValues(); + + // createElementValue - create the Java type associated withe the value + // of the current annotation key. + // + JavaObject* createElementValue(); }; /// Attribute - This class represents JVM attributes to Java class, methods and Modified: vmkit/trunk/tests/AnnotationClassTest.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/AnnotationClassTest.java?rev=180313&r1=180312&r2=180313&view=diff ============================================================================== --- vmkit/trunk/tests/AnnotationClassTest.java (original) +++ vmkit/trunk/tests/AnnotationClassTest.java Thu Apr 25 11:53:18 2013 @@ -1,6 +1,7 @@ import java.lang.Deprecated; import java.lang.annotation.Annotation; import java.lang.reflect.Field; +import java.lang.reflect.Method; /** * Created with IntelliJ IDEA. @@ -10,23 +11,34 @@ import java.lang.reflect.Field; * To change this template use File | Settings | File Templates. */ public class AnnotationClassTest { + static class Sample { @Deprecated + @MyAnnotation (property=5) public int x; + + @MyAnnotation (property=5) + public int y() { + return x*x; + } } public static void main(String[] args) throws Exception { Field f = Sample.class.getField("x"); + Method m = Sample.class.getMethod("y"); Sample sample = new Sample(); sample.x = 14; - Annotation xx = f.getAnnotation(Deprecated.class); - //Annotation[] a = f.getDeclaredAnnotations(); + MyAnnotation xx = (MyAnnotation)f.getAnnotation(MyAnnotation.class); + MyAnnotation yy = (MyAnnotation)f.getAnnotation(MyAnnotation.class); check(f.getInt(sample) == 14); f.setInt(sample, 17); check(f.getInt(sample) == 17); - check(xx.annotationType().getCanonicalName().equals("java.lang.Deprecated")); + check(xx != null); + check(yy != null); + //int s = yy.property(); + //check(s == 5); } private static void check(boolean b) throws Exception { From peter.senna at gmail.com Thu Apr 25 09:54:56 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:54:56 -0000 Subject: [vmkit-commits] [vmkit] r180314 - Removed VirtualTable usage when tracing objects in MMTk. Object tracing is now delegated to VirtualMachine. Message-ID: <20130425165326.D120D2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:53:26 2013 New Revision: 180314 URL: http://llvm.org/viewvc/llvm-project?rev=180314&view=rev Log: Removed VirtualTable usage when tracing objects in MMTk. Object tracing is now delegated to VirtualMachine. (cherry picked from commit 134bfd384358fa7270c7dc4d254ebba2992f447a) Modified: vmkit/trunk/include/vmkit/VirtualMachine.h vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp vmkit/trunk/lib/j3/VMCore/Jnjvm.h vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp Modified: vmkit/trunk/include/vmkit/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180314&r1=180313&r2=180314&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/VirtualMachine.h (original) +++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:53:26 2013 @@ -190,6 +190,10 @@ public: /// virtual void tracer(word_t closure) {} + /// traceObject - Method called during GC to trace live objects graph. + /// + virtual void traceObject(gc* object, word_t closure) = 0; + /// getObjectSize - Get the size of this object. Used by copying collectors. /// virtual size_t getObjectSize(gc* object) = 0; Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180314&r1=180313&r2=180314&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:53:26 2013 @@ -1382,6 +1382,14 @@ void Jnjvm::addFinalizationCandidate(gc* finalizerThread->addFinalizationCandidate(object); } +// This method is called during GC so no llvm_gcroot needed. +void Jnjvm::traceObject(gc* obj, word_t closure) { + assert(obj && "No object to trace"); + assert(obj->getVirtualTable() && "No virtual table"); + assert(obj->getVirtualTable()->tracer && "No tracer in VT"); + obj->tracer(closure); +} + size_t Jnjvm::getObjectSize(gc* object) { // TODO: because this is called during GC, there is no need to do // llvm_gcroot. For clarity, it may be useful to have a special type Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180314&r1=180313&r2=180314&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:53:26 2013 @@ -130,6 +130,7 @@ private: virtual void scanPhantomReferencesQueue(word_t closure); virtual void scanFinalizationQueue(word_t closure); virtual void addFinalizationCandidate(gc* obj); + virtual void traceObject(gc* obj, word_t closure); virtual size_t getObjectSize(gc* obj); virtual const char* getObjectTypeName(gc* obj); virtual void printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr); Modified: vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp?rev=180314&r1=180313&r2=180314&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp Thu Apr 25 11:53:26 2013 @@ -49,10 +49,7 @@ extern "C" void Java_org_j3_mmtk_Scannin extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) ALWAYS_INLINE; extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) { - assert(obj && "No object to trace"); - assert(obj->getVirtualTable() && "No virtual table"); - assert(obj->getVirtualTable()->tracer && "No tracer in VT"); - obj->tracer(reinterpret_cast(TC)); + vmkit::Thread::get()->MyVM->traceObject(obj, reinterpret_cast(TC)); } extern "C" void Java_org_j3_mmtk_Scanning_preCopyGCInstances__Lorg_mmtk_plan_TraceLocal_2 (MMTkObject* Scanning, MMTkObject* TL) { @@ -61,10 +58,7 @@ extern "C" void Java_org_j3_mmtk_Scannin extern "C" void Java_org_j3_mmtk_Scanning_scanObject__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 ( MMTkObject* Scanning, word_t TC, gc* obj) { - assert(obj && "No object to trace"); - assert(obj->getVirtualTable() && "No virtual table"); - assert(obj->getVirtualTable()->tracer && "No tracer in VT"); - obj->tracer(TC); + vmkit::Thread::get()->MyVM->traceObject(obj, TC); } extern "C" void Java_org_j3_mmtk_Scanning_precopyChildren__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2 ( From peter.senna at gmail.com Thu Apr 25 09:55:06 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:55:06 -0000 Subject: [vmkit-commits] [vmkit] r180315 - Updated with the latest changes in master (trunk). Message-ID: <20130425165334.4D3542A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:53:34 2013 New Revision: 180315 URL: http://llvm.org/viewvc/llvm-project?rev=180315&view=rev Log: Updated with the latest changes in master (trunk). (cherry picked from commit e6c19909a7a54242171f395e4e31d982a9d4248b) Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180315&r1=180314&r2=180315&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:53:34 2013 @@ -132,7 +132,7 @@ public: /// getIsolate - Returns the isolate that created this class loader. /// - Jnjvm* getIsolate() const { return vm; } + Jnjvm* getJVM() const { return vm; } /// getClasses - Returns the classes this class loader has loaded. /// Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180315&r1=180314&r2=180315&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original) +++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:53:34 2013 @@ -126,7 +126,7 @@ public final class Bindings { Selected.Collector plan = Selected.Collector.get(); allocator = plan.copyCheckAllocator(from, wholeSize, 0, allocator); Address to = plan.allocCopy(from, wholeSize, 0, 0, allocator); - memcpy(to.toObjectReference(), from, size); + memcpy(to, from.toAddress(), wholeSize); plan.postCopy(to.toObjectReference(), virtualTable, size, allocator); return to.toObjectReference(); } @@ -139,8 +139,13 @@ public final class Bindings { @Inline private static native void memcpy( + Address to, Address from, int size); + + @Inline + private static native void memcpy( ObjectReference to, ObjectReference from, int size); + @Inline private static void arrayWriteBarrier(ObjectReference ref, Address slot, ObjectReference value) { if (Selected.Constraints.get().needsObjectReferenceWriteBarrier()) { From peter.senna at gmail.com Thu Apr 25 09:55:53 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:55:53 -0000 Subject: [vmkit-commits] [vmkit] r180316 - Integrating support for stale references correction. Message-ID: <20130425165422.53E1B2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:54:20 2013 New Revision: 180316 URL: http://llvm.org/viewvc/llvm-project?rev=180316&view=rev Log: Integrating support for stale references correction. Adding support for debugging.(cherry picked from commit 0b10069b8453587862cac0d4ca897a3cdf017ab6) Added: vmkit/trunk/tests/benchmarks/ vmkit/trunk/tests/benchmarks/j3-stale-ref-corrected.csv vmkit/trunk/tests/benchmarks/j3-stale-ref.csv vmkit/trunk/tests/benchmarks/monitor_process.sh vmkit/trunk/tests/benchmarks/plot_benchmarks.plot vmkit/trunk/tests/benchmarks/rebase_time.sh vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/Token.java vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/TokenImpl.java vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.classpath vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.project vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/META-INF/ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/build.properties vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/tests/ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/tests/BundleMgmtStress/ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/tests/BundleMgmtStress/Activator.java Modified: vmkit/trunk/.cproject vmkit/trunk/.project vmkit/trunk/CREDITS.TXT vmkit/trunk/Makefile.common.in vmkit/trunk/README.TXT vmkit/trunk/include/vmkit/VirtualMachine.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.h vmkit/trunk/lib/j3/VMCore/Jnjvm.h vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp vmkit/trunk/llvm.patch vmkit/trunk/mmtk/java/build.xml.in vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp vmkit/trunk/osgi/src/j3/J3Mgr.java vmkit/trunk/osgi/src/j3/vm/OSGi.java vmkit/trunk/osgi/src/j3mgr/Activator.java vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java vmkit/trunk/tests/debug.txt vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java vmkit/trunk/tests/minimal.xargs vmkit/trunk/tools/precompiler/trainer/Makefile Modified: vmkit/trunk/.cproject URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.cproject?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/.cproject (original) +++ vmkit/trunk/.cproject Thu Apr 25 11:54:20 2013 @@ -45,7 +45,7 @@ - + @@ -58,7 +58,7 @@ - + Modified: vmkit/trunk/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.project?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/.project (original) +++ vmkit/trunk/.project Thu Apr 25 11:54:20 2013 @@ -1,6 +1,6 @@ - vmkit_stale_ref + vmkit2 Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:54:20 2013 @@ -38,3 +38,6 @@ D: Primary architect of JnJVM N: Koutheir Attouchi E: koutheir at gmail.com +W: http://koutheir.blogspot.com/ +D: Debug support for VMKit. +D: Correction of stale references for J3. Modified: vmkit/trunk/Makefile.common.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/Makefile.common.in (original) +++ vmkit/trunk/Makefile.common.in Thu Apr 25 11:54:20 2013 @@ -18,6 +18,7 @@ endif ENABLE_OPTIMIZED := 0 REQUIRES_FRAME_POINTER := 1 +JAVAC_TARGET := 1.5 ifeq ($(ENABLE_OPTIMIZED), 0) CFLAGS += -O0 Modified: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/README.TXT (original) +++ vmkit/trunk/README.TXT Thu Apr 25 11:54:20 2013 @@ -3,7 +3,7 @@ Requirements: ============= * Install required packages (Debian): -apt-get install ant libgconf2-dev libgtk2.0-dev +apt-get install ant libgconf2-dev libgtk2.0-dev sharutils * Install required packages (SUSE): zypper install ant gconf2-devel gtk2-devel @@ -15,9 +15,9 @@ apt-get install default-jre default-jdk GNU Classpath: ============== -wget http://ftp.gnu.org/gnu/classpath/classpath-0.97.2.tar.gz -tar zxvf classpath-0.97.2.tar.gz -ln -s classpath-0.97.2 classpath +wget http://ftp.gnu.org/gnu/classpath/classpath-0.99.tar.gz +tar zxf classpath-0.99.tar.gz +ln -s classpath-0.99 classpath cd classpath ./configure --disable-plugin --disable-examples --disable-Werror make -j12 @@ -33,8 +33,8 @@ ln -sf ../native/jni/java-util/.libs/lib * Go root cd classpath -make install -ldconfig +sudo make install +sudo ldconfig ===== LLVM: @@ -91,7 +91,7 @@ svn co http://llvm.org/svn/llvm-project/ * Make it (debug mode): -./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip +./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/usr/local/classpath/lib/classpath --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 ============= Modified: vmkit/trunk/include/vmkit/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/VirtualMachine.h (original) +++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:54:20 2013 @@ -10,6 +10,8 @@ #ifndef VMKIT_VIRTUALMACHINE_H #define VMKIT_VIRTUALMACHINE_H +#define RESET_STALE_REFERENCES 1 + #include "llvm/ADT/DenseMap.h" #include "vmkit/Allocator.h" @@ -194,6 +196,11 @@ public: /// virtual void traceObject(gc* object, word_t closure) = 0; + /// setType - Method called when allocating an object. The VirtualMachine has to + /// set the identity of the object (identity is determined by user). + /// + virtual void setType(gcHeader* header, void* type) = 0; + /// getObjectSize - Get the size of this object. Used by copying collectors. /// virtual size_t getObjectSize(gc* object) = 0; @@ -207,7 +214,9 @@ public: /// CooperativeCollectionRV rendezvous; +#if RESET_STALE_REFERENCES virtual void resetReferenceIfStale(const void* source, void** ref) {} +#endif //===----------------------------------------------------------------------===// // (3) Backtrace-related methods. Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 11:54:20 2013 @@ -115,11 +115,9 @@ JavaObjectField* JavaObjectField::create return ret; } -UserClass* JavaObjectConstructor::getClass(JavaObjectConstructor* self) -{ +UserClass* JavaObjectConstructor::getClass(JavaObjectConstructor* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); + return JavaObjectVMConstructor::getClass(self->vmCons); } } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Thu Apr 25 11:54:20 2013 @@ -65,8 +65,8 @@ JavaObjectVMField* VMField, JavaObjectCl /* Retrieving VMField.class attributes list */ UserClass* compilingClass = JavaObjectVMField::getClass(VMField); JavaField* field = JavaObjectVMField::getInternalField(VMField); - Attribut* annotationsAtt = - field->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* annotationsAtt = + field->lookupAttribute(JavaAttribute::annotationsAttribute); dprintf("JavaField : %s\n", UTF8Buffer(field->name).cString()); if (annotationsAtt) { Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc Thu Apr 25 11:54:20 2013 @@ -46,8 +46,8 @@ JavaObjectVMMethod* VMMeth) { if (cl->inheritName(name->elements, name->size)) { // Find "default attribute" JavaMethod* method = JavaObjectVMMethod::getInternalMethod(VMMeth); - Attribut* annotationsAtt = - method->lookupAttribut(Attribut::annotationDefaultAttribut); + JavaAttribute* annotationsAtt = + method->lookupAttribute(JavaAttribute::annotationDefaultAttribute); dprintf("JavaMethod:%s\n", UTF8Buffer(method->name).cString()); if (annotationsAtt) { @@ -89,8 +89,8 @@ JavaObjectVMMethod* VMMeth, JavaObjectCl /* Retrieving VMMethod.class attributes list */ UserClass* compilingClass = JavaObjectVMMethod::getClass(VMMeth); JavaMethod* method = JavaObjectVMMethod::getInternalMethod(VMMeth); - Attribut* annotationsAtt = - method->lookupAttribut(Attribut::annotationsAttribut); + JavaAttribute* annotationsAtt = + method->lookupAttribute(JavaAttribute::annotationsAttribute); dprintf("JavaMethod:%s\n", UTF8Buffer(method->name).cString()); if (annotationsAtt) { Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 11:54:20 2013 @@ -2301,10 +2301,10 @@ void JavaJIT::compileOpcodes(Reader& rea } case MONITOREXIT : { - bool thisReference = isThisReference(currentStackIndex - 1); - Value* obj = pop(); // NOTE: monitorExit() should NOT throw an exception if object is null. // See monitorExit() implementation. + //bool thisReference = isThisReference(currentStackIndex - 1); + Value* obj = pop(); // if (!thisReference) JITVerifyNull(obj); monitorExit(obj); break; Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:54:20 2013 @@ -343,6 +343,8 @@ JavaMethod* Class::lookupSpecialMethodDo JavaMethod* Class::lookupMethodDontThrow(const UTF8* name, const UTF8* type, bool isStatic, bool recurse, Class** methodCl) { + // This is a dirty hack because of a dirty usage pattern. See UPCALL_METHOD macro... + if (this == NULL) return NULL; JavaMethod* methods = 0; uint32 nb = 0; @@ -897,8 +899,10 @@ void Class::readClass() { magic = reader.readU4(); assert(magic == Jnjvm::Magic && "I've created a class but magic is no good!"); - /* uint16 minor = */ reader.readU2(); - /* uint16 major = */ reader.readU2(); + uint16 minor = reader.readU2(); + uint16 major = reader.readU2(); + this->isClassVersionSupported(major, minor); + uint32 ctpSize = reader.readU2(); ctpInfo = new(classLoader->allocator, ctpSize) JavaConstantPool(this, reader, ctpSize); @@ -919,6 +923,36 @@ void Class::readClass() { attributes = readAttributes(reader, nbAttributes); } +void Class::getMinimalJDKVersion(uint16 major, uint16 minor, unsigned int& JDKMajor, unsigned int& JDKMinor, unsigned int& JDKBuild) +{ + JDKMajor = 1; + JDKBuild = 0; + if (major == 45 && minor <= 3) { // Supported by Java 1.0.2 + JDKMinor = 0; + JDKBuild = 2; + } else if (major == 45 && minor <= 65535) { // Supported by Java 1.1 + JDKMinor = 1; + } else { // Supported by Java 1.x (x >= 2) + JDKMinor = major - 43; + if (minor == 0) --JDKMinor; + } +} + +bool Class::isClassVersionSupported(uint16 major, uint16 minor) +{ + const int supportedJavaMinorVersion = 5; // Java 1.5 + + unsigned int JDKMajor, JDKMinor, JDKBuild; + Class::getMinimalJDKVersion(major, minor, JDKMajor, JDKMinor, JDKBuild); + + bool res = (JDKMajor <= 1) && (JDKMinor <= supportedJavaMinorVersion); + if (!res) { + cerr << "WARNING: Class file '" << *name << "' requires Java version " << JDKMajor << '.' << JDKMinor << + ". This JVM only supports Java versions up to 1." << supportedJavaMinorVersion << '.' << endl; + } + return res; +} + void UserClass::resolveParents() { if (super != NULL) { super->resolveClass(); @@ -1917,7 +1951,7 @@ std::string& CommonClass::getName(std::s { name->toString(nameBuffer); - for (size_t i=0; i < name->size; ++i) { + for (int32_t i=0; i < name->size; ++i) { if (name->elements[i] == '/') nameBuffer[i] = linkageName ? '_' : '.'; } Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 11:54:20 2013 @@ -813,6 +813,8 @@ public: /// void makeVT(); + static void getMinimalJDKVersion(uint16 major, uint16 minor, unsigned int& JDKMajor, unsigned int& JDKMinor, unsigned int& JDKBuild); + bool isClassVersionSupported(uint16 major, uint16 minor); }; /// ClassArray - This class represents Java array classes. Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:54:20 2013 @@ -131,6 +131,7 @@ private: virtual void scanFinalizationQueue(word_t closure); virtual void addFinalizationCandidate(gc* obj); virtual void traceObject(gc* obj, word_t closure); + virtual void setType(gcHeader* header, void* type); virtual size_t getObjectSize(gc* obj); virtual const char* getObjectTypeName(gc* obj); virtual void printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr); @@ -353,9 +354,12 @@ public: /// void loadBootstrap(); +#if RESET_STALE_REFERENCES + public: void resetReferencesToBundle(int64_t bundleID); virtual void resetReferenceIfStale(const void* source, void** ref); + void dumpClassLoaderBundles(); int64_t getClassLoaderBundleID(JnjvmClassLoader* loader); JnjvmClassLoader* getBundleClassLoader(int64_t bundleID); @@ -368,8 +372,11 @@ protected: void resetReferenceIfStale(const JavaObject *source, class VMStaticInstance** ref); void resetReferenceIfStale(const JavaObject *source, class JavaObject** ref); + // Link between OSGi (bundle ID) and Java (class loaders). vmkit::LockRecursive bundleClassLoadersLock; bundleClassLoadersType bundleClassLoaders; + +#endif }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:54:20 2013 @@ -7,6 +7,9 @@ // //===----------------------------------------------------------------------===// +#define DEBUG_VERBOSE_CLASS_LOADER_UNLOADING 1 + +#include #include #include @@ -43,6 +46,7 @@ using namespace j3; +using namespace std; typedef void (*static_init_t)(JnjvmClassLoader*); @@ -209,14 +213,21 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad } JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : - allocator(Alloc), zombie(false) + allocator(Alloc) +#if RESET_STALE_REFERENCES + ,zombie(false) +#endif { } JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, VMClassLoader* vmdata, - Jnjvm* VM) : allocator(Alloc), zombie(false) { + Jnjvm* VM) : allocator(Alloc) +#if RESET_STALE_REFERENCES + , zombie(false) +#endif +{ llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); bootstrapLoader = JCL.bootstrapLoader; @@ -240,24 +251,6 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit assert(loadClass && "Loader does not have a loadClass function"); } -int64_t JnjvmClassLoader::getAssociatedBundleID() -{ - return vm->getClassLoaderBundleID(this); -} - -void JnjvmClassLoader::setAssociatedBundleID(int64_t newID) -{ - int64_t oldBundleID = vm->getClassLoaderBundleID(this); - if (oldBundleID != -1) { - if (oldBundleID == newID) return; // Nothing to do - - // Remove old bundle ID - vm->setBundleClassLoader(oldBundleID, NULL); - } - - vm->setBundleClassLoader(newID, this); -} - void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) { // Set the new compiler. TheCompiler = Comp; @@ -860,6 +853,16 @@ const UTF8* JnjvmClassLoader::readerCons JnjvmClassLoader::~JnjvmClassLoader() { +#if RESET_STALE_REFERENCES + +#if DEBUG_VERBOSE_CLASS_LOADER_UNLOADING + cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl; +#endif + + this->setAssociatedBundleID(-1); + +#endif + if (vm) { vm->removeFrameInfos(TheCompiler); } @@ -1111,3 +1114,25 @@ ArrayObject* JnjvmBootstrapLoader::getBo return res; } + +#if RESET_STALE_REFERENCES + +int64_t JnjvmClassLoader::getAssociatedBundleID() +{ + return vm->getClassLoaderBundleID(this); +} + +void JnjvmClassLoader::setAssociatedBundleID(int64_t newID) +{ + int64_t oldBundleID = vm->getClassLoaderBundleID(this); + if (oldBundleID != -1) { + if (oldBundleID == newID) return; // Nothing to do + + // Remove old bundle ID + vm->setBundleClassLoader(oldBundleID, NULL); + } + + vm->setBundleClassLoader(newID, this); +} + +#endif Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:54:20 2013 @@ -19,6 +19,7 @@ #include "vmkit/Allocator.h" +#include "vmkit/VirtualMachine.h" #include "JavaObject.h" #include "JnjvmConfig.h" @@ -324,16 +325,23 @@ public: /// word_t getRegisteredNative(const JavaMethod * meth); +#if RESET_STALE_REFERENCES + protected: + // A zombie class loader is one whose defining bundle was uninstalled, but it is + // still loaded because some references to it still exist in memory. bool zombie; public: bool isZombie() const {return zombie;} void markZombie(bool becomeZombie = true) {zombie = becomeZombie;} + // This bridges the OSGi world (bundles) to the Java world (class loaders). int64_t getAssociatedBundleID(); void setAssociatedBundleID(int64_t newID); +#endif + friend class Class; friend class CommonClass; friend class StringList; Modified: vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp Thu Apr 25 11:54:20 2013 @@ -1,13 +1,26 @@ #include +#include #include "VmkitGC.h" #include "Jnjvm.h" #include "ClasspathReflect.h" #include "j3/jni.h" + +using namespace std; + +#if RESET_STALE_REFERENCES + namespace j3 { +void Jnjvm::dumpClassLoaderBundles() +{ + for (bundleClassLoadersType::const_iterator i = bundleClassLoaders.begin(), e = bundleClassLoaders.end(); i != e; ++i) { + cerr << "classLoader=" << i->second << "\tbundleID=" << i->first << endl; + } +} + JnjvmClassLoader* Jnjvm::getBundleClassLoader(int64_t bundleID) { if (bundleID == -1) return NULL; @@ -36,6 +49,7 @@ int64_t Jnjvm::getClassLoaderBundleID(Jn return (i == last) ? -1 : i->first; } +// Link a bundle ID (OSGi world) to a class loader (Java world). void Jnjvm::setBundleClassLoader(int64_t bundleID, JnjvmClassLoader* loader) { if (bundleID == -1) return; @@ -49,19 +63,48 @@ void Jnjvm::setBundleClassLoader(int64_t } +#endif using namespace j3; +/* + This Java native method must be called by the framework in order to link bundles (given + by bundle identifiers) to objects (thus, class loaders). This allows the VM to perform + operations on bundles without actually having to know the precise structure of these. +*/ extern "C" void Java_j3_vm_OSGi_associateBundleClass(jlong bundleID, JavaObjectClass* classObject) { llvm_gcroot(classObject, 0); +#if RESET_STALE_REFERENCES + CommonClass* ccl = JavaObjectClass::getClass(classObject); ccl->classLoader->setAssociatedBundleID(bundleID); + +#endif } +/* + The VM manager bundle calls this method to reset all references to a given bundle. This enables + resetting stale references that would otherwise prohibit the bundle from being unloaded from + memory due to some stale references. +*/ extern "C" void Java_j3_vm_OSGi_resetReferencesToBundle(jlong bundleID) { +#if RESET_STALE_REFERENCES + Jnjvm* vm = JavaThread::get()->getJVM(); vm->resetReferencesToBundle(bundleID); + +#endif +} + +extern "C" void Java_j3_vm_OSGi_dumpClassLoaderBundles() +{ +#if RESET_STALE_REFERENCES + + Jnjvm* vm = JavaThread::get()->getJVM(); + vm->dumpClassLoaderBundles(); + +#endif } Modified: vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Thu Apr 25 11:54:20 2013 @@ -3,6 +3,8 @@ #include "Jnjvm.h" #include "VMStaticInstance.h" +#if RESET_STALE_REFERENCES + #define DEBUG_VERBOSE_STALE_REF 1 using namespace std; @@ -14,16 +16,20 @@ void Jnjvm::resetReferencesToBundle(int6 JnjvmClassLoader* loader = this->getBundleClassLoader(bundleID); assert(loader && "No class loader is associated with the bundle"); + // Mark this class loader as a zombie. Its references will be reset in the next + // garbage collection phase. loader->markZombie(); - vmkit::Collector::collect(); + vmkit::Collector::collect(); // Start a garbage collection now } void Jnjvm::resetReferenceIfStale(const void* source, void** ref) { - if (!ref || !(*ref)) return; + if (!ref || !(*ref)) return; // Invalid or null reference JavaObject** objRef = reinterpret_cast(ref); + // Check the type of Java object. Some Java objects are not real object, but + // are bridges between Java and the VM objects. if (VMClassLoader::isVMClassLoader(*objRef)) { return resetReferenceIfStale( reinterpret_cast(source), @@ -98,9 +104,8 @@ void Jnjvm::resetReferenceIfStale(const Jnjvm* vm = JavaThread::get()->getJVM(); if (JavaThread* ownerThread = (JavaThread*)vmkit::ThinLock::getOwner(*ref, vm->lockSystem)) { - if (vmkit::FatLock* lock = vmkit::ThinLock::getFatLock(*ref, vm->lockSystem)) { + if (vmkit::FatLock* lock = vmkit::ThinLock::getFatLock(*ref, vm->lockSystem)) lock->markAssociatedObjectAsDead(); - } // Notify all threads waiting on this object ownerThread->lockingThread.notifyAll(*ref, vm->lockSystem, ownerThread); @@ -114,3 +119,5 @@ void Jnjvm::resetReferenceIfStale(const } } + +#endif Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:54:20 2013 @@ -326,20 +326,9 @@ bool FatLock::acquire(gc* obj, LockSyste if (this->associatedObjectIsDead()) { internalLock.unlock(); -/* - vmkit::Thread* ownerThread = this->getOwner(); - // Notify all threads waiting on this object - ownerThread->lockingThread.notifyAll(*ref, vm->lockSystem, ownerThread); - - // Release this object - while (vmkit::ThinLock::getOwner(*ref, vm->lockSystem) == ownerThread) - vmkit::ThinLock::release(*ref, vm->lockSystem, ownerThread); -*/ - - if (lockingThreads == 0) { - table.deallocate(this); - } +// if (lockingThreads == 0) +// table.deallocate(this); word_t methodIP = System::GetCallerAddress(); methodIP = System::GetIPFromCallerAddress(methodIP); Modified: vmkit/trunk/llvm.patch URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/llvm.patch?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/llvm.patch (original) +++ vmkit/trunk/llvm.patch Thu Apr 25 11:54:20 2013 @@ -2,7 +2,7 @@ diff --git a/lib/CodeGen/AsmPrinter/AsmP index d74a703..1831bb6 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp -@@ -177,7 +177,7 @@ bool AsmPrinter::doInitialization(Module &M) { +@@ -173,7 +173,7 @@ bool AsmPrinter::doInitialization(Module &M) { for (GCModuleInfo::iterator I = MI->begin(), E = MI->end(); I != E; ++I) if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*I)) MP->beginAssembly(*this); @@ -11,7 +11,7 @@ index d74a703..1831bb6 100644 // Emit module-level inline asm if it exists. if (!M.getModuleInlineAsm().empty()) { OutStreamer.AddComment("Start of file scope inline assembly"); -@@ -186,7 +186,7 @@ bool AsmPrinter::doInitialization(Module &M) { +@@ -182,7 +182,7 @@ bool AsmPrinter::doInitialization(Module &M) { OutStreamer.AddComment("End of file scope inline assembly"); OutStreamer.AddBlankLine(); } @@ -20,7 +20,7 @@ index d74a703..1831bb6 100644 if (MAI->doesSupportDebugInformation()) DD = new DwarfDebug(this, &M); -@@ -928,6 +928,15 @@ bool AsmPrinter::doFinalization(Module &M) { +@@ -929,6 +929,15 @@ bool AsmPrinter::doFinalization(Module &M) { if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*--I)) MP->finishAssembly(*this); @@ -62,7 +62,7 @@ index 0f3efd8..d96a258 100644 nl(Out); } + if (const Function* F = dyn_cast(call->getCalledValue())) { -+ if (F->getName().compare("llvm.dbg.value") == 0) ++ if ((F->getName().compare("llvm.dbg.value") == 0) || (F->getName().compare("llvm.dbg.declare") == 0)) + break; //Generate nothing + } if (call->getNumArgOperands() > 1) { Modified: vmkit/trunk/mmtk/java/build.xml.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/build.xml.in?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/build.xml.in (original) +++ vmkit/trunk/mmtk/java/build.xml.in Thu Apr 25 11:54:20 2013 @@ -1,7 +1,7 @@ - + Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:54:20 2013 @@ -55,13 +55,40 @@ extern "C" void JnJVM_org_j3_bindings_Bi extern "C" void JnJVM_org_j3_bindings_Bindings_nonHeapWriteBarrier__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(gc** ptr, gc* value) ALWAYS_INLINE; -extern "C" void* JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2( - int sz, void* VT) ALWAYS_INLINE; +extern "C" void* JnJVM_org_j3_bindings_Bindings_prealloc__I(int sz) ALWAYS_INLINE; -extern "C" void* gcmalloc(uint32_t sz, void* VT) { +extern "C" void* JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I( + void* object, void* type, int sz) ALWAYS_INLINE; + +extern "C" void* prealloc(uint32_t size) { + gc* res = 0; + gcHeader* head = 0; + size = llvm::RoundUpToAlignment(size, sizeof(void*)); + head = (gcHeader*) JnJVM_org_j3_bindings_Bindings_prealloc__I(size); + res = head->toReference(); + return res; +} + +extern "C" void postalloc(gc* obj, void* type, uint32_t size) { + vmkit::Thread::get()->MyVM->setType(obj->toHeader(), type); + JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(obj, type, size); +} + +extern "C" void* gcmalloc(uint32_t sz, void* type) { + gc* res = 0; + llvm_gcroot(res, 0); sz += gcHeader::hiddenHeaderSize(); - sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); - return ((gcHeader*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT))->toReference(); + res = (gc*) prealloc(sz); + postalloc(res, type, sz); + return res; +} + +extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) { + gc* res = 0; + llvm_gcroot(res, 0); + res = (gc*)gcmalloc(sz, type); + vmkit::Thread::get()->MyVM->addFinalizationCandidate(res); + return res; } extern "C" void addFinalizationCandidate(gc* obj) __attribute__((always_inline)); @@ -71,13 +98,6 @@ extern "C" void addFinalizationCandidate vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj); } -extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT) { - gc* res = 0; - llvm_gcroot(res, 0); - res = (gc*)gcmalloc(sz, VT); - if (VT->hasDestructor()) addFinalizationCandidate(res); - return res; -} extern "C" void arrayWriteBarrier(void* ref, void** ptr, void* value) { JnJVM_org_j3_bindings_Bindings_arrayWriteBarrier__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2( @@ -114,7 +134,10 @@ void Collector::scanObject(void** ptr, w if ((*ptr) != NULL) { assert(((gc*)(*ptr))->getVirtualTable()); } +#if RESET_STALE_REFERENCES + // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(NULL, ptr); +#endif JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr); } @@ -124,7 +147,10 @@ void Collector::markAndTrace(void* sourc assert(((gc*)(*ptr_))->getVirtualTable()); } if ((*(void**)ptr) != NULL) assert(((gc*)(*(void**)ptr))->getVirtualTable()); +#if RESET_STALE_REFERENCES + // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); +#endif JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr); } @@ -133,7 +159,10 @@ void Collector::markAndTraceRoot(void* s if ((*ptr_) != NULL) { assert(((gc*)(*ptr_))->getVirtualTable()); } +#if RESET_STALE_REFERENCES + // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); +#endif JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true); } Modified: vmkit/trunk/osgi/src/j3/J3Mgr.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/J3Mgr.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/osgi/src/j3/J3Mgr.java (original) +++ vmkit/trunk/osgi/src/j3/J3Mgr.java Thu Apr 25 11:54:20 2013 @@ -9,5 +9,6 @@ public interface J3Mgr // THE FOLLOWING METHODS ARE DEBUGGING HELPERS // THEY SHOULD BE REMOVED IN PRODUCTION + public void dumpClassLoaderBundles(); public void resetReferencesToBundle(String bundleName) throws Exception; } Modified: vmkit/trunk/osgi/src/j3/vm/OSGi.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/vm/OSGi.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/osgi/src/j3/vm/OSGi.java (original) +++ vmkit/trunk/osgi/src/j3/vm/OSGi.java Thu Apr 25 11:54:20 2013 @@ -4,4 +4,5 @@ public class OSGi { public static native void associateBundleClass(long bundleID, Class classObject); public static native void resetReferencesToBundle(long bundleID); + public static native void dumpClassLoaderBundles(); } Modified: vmkit/trunk/osgi/src/j3mgr/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/Activator.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/osgi/src/j3mgr/Activator.java (original) +++ vmkit/trunk/osgi/src/j3mgr/Activator.java Thu Apr 25 11:54:20 2013 @@ -12,8 +12,6 @@ public class Activator public void start(BundleContext bundleContext) throws Exception { - System.out.println("J3MgrImpl exports and provides J3Mgr"); - mgr = new J3MgrImpl(); mgr.open(bundleContext); @@ -22,8 +20,6 @@ public class Activator public void stop(BundleContext bundleContext) throws Exception { - System.out.println("J3MgrImpl no more provides J3Mgr"); - if (mgr != null) { mgr.close(); mgr = null; Modified: vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java (original) +++ vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java Thu Apr 25 11:54:20 2013 @@ -1,5 +1,7 @@ package j3mgr; +import java.util.LinkedList; + import j3.J3Mgr; import org.osgi.framework.Bundle; @@ -13,17 +15,14 @@ public class J3MgrImpl implements J3Mgr, FrameworkListener { BundleContext context; - long bundleToKill; - - public J3MgrImpl() - { - bundleToKill = -1; - } + LinkedList bundlesToKill; public void open(BundleContext bundleContext) { context = bundleContext; + bundlesToKill = new LinkedList(); + // We need to know when packages are refreshed context.addFrameworkListener(this); } @@ -32,19 +31,21 @@ public class J3MgrImpl { context.removeFrameworkListener(this); context = null; + + bundlesToKill = null; } public void resetReferencesToBundle(Bundle bundle) throws Exception { System.out.println("resetReferencesToBundle: #" + bundle.getBundleId() + " " + bundle.getSymbolicName()); - bundleToKill = bundle.getBundleId(); - System.out.println("Stopping bundle: " + bundle.getSymbolicName()); bundle.stop(); System.out.println("Uninstalling bundle: " + bundle.getSymbolicName()); bundle.uninstall(); + bundlesToKill.addFirst(new Long(bundle.getBundleId())); + System.out.println("Refreshing framework..."); refreshFramework(bundle); } @@ -54,19 +55,17 @@ public class J3MgrImpl ServiceReference pkgAdminRef = (ServiceReference)context.getServiceReference( "org.osgi.service.packageadmin.PackageAdmin"); PackageAdmin pkgAdmin = (PackageAdmin)context.getService(pkgAdminRef); - pkgAdmin.refreshPackages(new Bundle[] {bundle}); + pkgAdmin.refreshPackages(null); } public void frameworkEvent(FrameworkEvent event) { if (event.getType() != FrameworkEvent.PACKAGES_REFRESHED) return; - if (bundleToKill == -1) return; - - System.out.println("Resetting stale references to bundle #" + bundleToKill); - j3.vm.OSGi.resetReferencesToBundle(bundleToKill); + long bundleID = bundlesToKill.removeLast().longValue(); - bundleToKill = -1; + System.out.println("Resetting stale references to bundle #" + bundleID); + j3.vm.OSGi.resetReferencesToBundle(bundleID); } // THE FOLLOWING METHODS ARE DEBUGGING HELPERS @@ -86,4 +85,9 @@ public class J3MgrImpl } return null; } + + public void dumpClassLoaderBundles() + { + j3.vm.OSGi.dumpClassLoaderBundles(); + } } Added: vmkit/trunk/tests/benchmarks/j3-stale-ref-corrected.csv URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/benchmarks/j3-stale-ref-corrected.csv?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/benchmarks/j3-stale-ref-corrected.csv (added) +++ vmkit/trunk/tests/benchmarks/j3-stale-ref-corrected.csv Thu Apr 25 11:54:20 2013 @@ -0,0 +1,269 @@ +PID,DATE,MEM_DATA,CPU_USAGE +14003,0,83693568,0 +14003,1,84475904,62.00 +14003,2,84520960,107.00 +14003,3,84959232,83.00 +14003,4,86032384,98.00 +14003,5,86032384,100.00 +14003,6,86032384,98.00 +14003,7,86032384,93.00 +14003,8,86032384,104.00 +14003,9,86036480,97.00 +14003,10,86032384,110.00 +14003,12,85966848,53.50 +14003,13,86036480,98.00 +14003,14,86032384,97.00 +14003,15,86032384,98.00 +14003,16,85966848,108.00 +14003,17,85966848,94.00 +14003,18,86032384,101.00 +14003,19,86036480,99.00 +14003,20,86032384,101.00 +14003,21,86036480,96.00 +14003,22,86032384,117.00 +14003,23,85966848,101.00 +14003,25,86036480,51.00 +14003,26,86032384,107.00 +14003,27,85966848,98.00 +14003,28,86036480,99.00 +14003,29,86032384,106.00 +14003,30,86032384,102.00 +14003,31,86032384,103.00 +14003,32,86032384,106.00 +14003,34,86032384,56.00 +14003,35,85966848,111.00 +14003,36,86032384,104.00 +14003,37,86032384,92.00 +14003,38,86032384,99.00 +14003,39,86036480,94.00 +14003,40,86036480,97.00 +14003,41,86032384,96.00 +14003,42,86032384,104.00 +14003,43,86036480,98.00 +14003,44,86032384,117.00 +14003,46,86032384,53.00 +14003,47,86032384,102.00 +14003,48,86036480,108.00 +14003,49,86036480,91.00 +14003,50,86032384,108.00 +14003,51,85966848,96.00 +14003,52,86032384,101.00 +14003,53,86032384,90.00 +14003,54,86036480,103.00 +14003,55,86032384,96.00 +14003,56,86036480,101.00 +14003,57,86032384,89.00 +14003,58,86032384,108.00 +14003,60,85970944,51.50 +14003,61,85987328,88.00 +14003,62,86024192,100.00 +14003,63,86118400,102.00 +14003,64,86093824,121.00 +14003,65,86192128,98.00 +14003,66,86220800,102.00 +14003,67,86253568,93.00 +14003,68,86290432,108.00 +14003,70,86323200,58.00 +14003,71,86360064,105.00 +14003,72,86401024,111.00 +14003,73,86429696,106.00 +14003,74,86466560,107.00 +14003,75,86503424,103.00 +14003,77,86536192,59.50 +14003,78,86568960,94.00 +14003,79,86597632,94.00 +14003,80,86638592,103.00 +14003,81,86667264,94.00 +14003,82,86700032,112.00 +14003,83,86667264,93.00 +14003,84,86761472,100.00 +14003,85,86724608,93.00 +14003,86,86822912,102.00 +14003,87,86851584,86.00 +14003,88,86892544,99.00 +14003,89,86913024,90.00 +14003,90,86953984,99.00 +14003,91,86982656,89.00 +14003,92,87015424,99.00 +14003,93,87040000,97.00 +14003,95,86482944,52.50 +14003,96,87044096,97.00 +14003,97,87138304,106.00 +14003,98,87179264,102.00 +14003,99,87199744,97.00 +14003,100,87236608,106.00 +14003,101,87269376,92.00 +14003,102,87293952,99.00 +14003,103,87330816,91.00 +14003,104,87298048,118.00 +14003,106,87400448,56.00 +14003,107,87429120,103.00 +14003,108,87465984,107.00 +14003,109,87490560,93.00 +14003,110,87527424,108.00 +14003,111,87564288,97.00 +14003,112,87597056,104.00 +14003,113,87625728,94.00 +14003,114,87592960,108.00 +14003,115,87687168,99.00 +14003,116,87719936,88.00 +14003,117,87748608,95.00 +14003,119,87789568,51.00 +14003,120,87818240,96.00 +14003,121,87842816,96.00 +14003,122,87879680,102.00 +14003,123,87912448,96.00 +14003,124,87937024,106.00 +14003,125,87969792,95.00 +14003,126,87408640,101.00 +14003,127,88035328,110.00 +14003,128,88072192,108.00 +14003,129,88104960,96.00 +14003,130,88129536,104.00 +14003,132,88162304,47.50 +14003,133,88190976,101.00 +14003,134,88162304,101.00 +14003,135,88260608,104.00 +14003,136,88297472,101.00 +14003,137,88322048,93.00 +14003,138,88358912,105.00 +14003,139,88391680,92.00 +14003,140,88358912,121.00 +14003,141,88449024,96.00 +14003,142,88420352,103.00 +14003,144,88506368,48.50 +14003,145,88477696,94.00 +14003,146,88510464,103.00 +14003,147,88539136,94.00 +14003,148,88637440,97.00 +14003,149,88686592,136.00 +14003,151,88727552,62.00 +14003,152,88748032,95.00 +14003,153,88780800,93.00 +14003,154,88809472,95.00 +14003,155,88776704,92.00 +14003,156,88276992,94.00 +14003,157,88838144,107.00 +14003,158,88866816,96.00 +14003,159,88956928,92.00 +14003,160,88993792,106.00 +14003,161,89022464,106.00 +14003,162,89055232,99.00 +14003,163,89018368,89.00 +14003,164,89108480,96.00 +14003,165,89141248,98.00 +14003,166,89112576,97.00 +14003,167,89141248,104.00 +14003,168,89239552,97.00 +14003,169,89264128,93.00 +14003,170,89235456,97.00 +14003,172,89329664,52.00 +14003,173,89358336,99.00 +14003,174,89391104,96.00 +14003,175,89427968,99.00 +14003,176,89460736,104.00 +14003,177,89485312,104.00 +14003,178,89518080,97.00 +14003,179,89550848,90.00 +14003,180,89579520,104.00 +14003,181,89612288,89.00 +14003,182,89645056,95.00 +14003,183,89673728,89.00 +14003,184,89706496,97.00 +14003,185,89726976,89.00 +14003,186,89694208,90.00 +14003,187,89784320,81.00 +14003,188,89817088,94.00 +14003,189,89845760,90.00 +14003,190,89878528,102.00 +14003,191,89907200,90.00 +14003,192,89939968,93.00 +14003,193,89964544,96.00 +14003,194,89997312,101.00 +14003,195,90025984,93.00 +14003,196,90062848,88.00 +14003,197,90091520,92.00 +14003,198,90124288,93.00 +14003,199,90144768,92.00 +14003,200,90112000,87.00 +14003,201,90202112,89.00 +14003,202,90230784,91.00 +14003,203,90259456,95.00 +14003,204,90296320,87.00 +14003,205,90324992,93.00 +14003,206,90357760,96.00 +14003,207,90378240,96.00 +14003,208,90345472,82.00 +14003,209,90435584,88.00 +14003,210,90464256,98.00 +14003,211,90497024,96.00 +14003,212,90517504,73.00 +14003,213,90542080,73.00 +14003,214,90574848,99.00 +14003,215,90599424,78.00 +14003,216,90558464,74.00 +14003,217,90652672,82.00 +14003,218,90669056,82.00 +14003,219,90693632,88.00 +14003,220,90718208,78.00 +14003,221,90755072,82.00 +14003,223,90771456,42.00 +14003,224,90796032,68.00 +14003,225,90824704,81.00 +14003,226,90849280,96.00 +14003,227,90873856,73.00 +14003,228,90898432,76.00 +14003,229,90865664,96.00 +14003,230,90959872,99.00 +14003,231,90927104,93.00 +14003,232,90955776,100.00 +14003,233,90988544,85.00 +14003,234,90488832,99.00 +14003,235,91107328,93.00 +14003,236,91136000,96.00 +14003,237,91168768,95.00 +14003,238,91201536,88.00 +14003,239,91234304,93.00 +14003,240,91254784,95.00 +14003,241,91222016,98.00 +14003,242,91250688,104.00 +14003,243,91283456,95.00 +14003,244,91312128,98.00 +14003,245,91410432,106.00 +14003,246,91439104,102.00 +14003,247,91471872,96.00 +14003,248,91500544,91.00 +14003,249,91459584,90.00 +14003,250,91553792,89.00 +14003,251,91586560,92.00 +14003,252,91615232,101.00 +14003,253,91652096,92.00 +14003,254,91680768,95.00 +14003,255,91713536,100.00 +14003,256,91742208,90.00 +14003,257,91774976,96.00 +14003,258,91795456,103.00 +14003,260,91828224,48.50 +14003,261,91791360,90.00 +14003,262,91889664,101.00 +14003,263,91914240,86.00 +14003,264,91942912,96.00 +14003,265,91971584,91.00 +14003,266,92004352,91.00 +14003,267,92037120,94.00 +14003,268,92069888,97.00 +14003,269,92098560,105.00 +14003,270,92131328,94.00 +14003,271,92160000,93.00 +14003,272,92184576,88.00 +14003,273,92213248,101.00 +14003,274,92254208,104.00 +14003,275,92282880,98.00 +14003,276,92315648,100.00 +14003,277,92336128,98.00 +14003,278,92368896,99.00 +14003,279,92332032,93.00 +14003,280,92434432,75.00 +14003,281,92405760,12.00 +14003,282,92798976,60.00 +14003,284,92798976,0 Added: vmkit/trunk/tests/benchmarks/j3-stale-ref.csv URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/benchmarks/j3-stale-ref.csv?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/benchmarks/j3-stale-ref.csv (added) +++ vmkit/trunk/tests/benchmarks/j3-stale-ref.csv Thu Apr 25 11:54:20 2013 @@ -0,0 +1,77 @@ +PID,DATE,MEM_DATA,CPU_USAGE +31700,0,82620416,0 +31700,1,82620416,0 +31700,2,83570688,84.00 +31700,3,83890176,83.00 +31700,4,87556096,91.00 +31700,5,92487680,88.00 +31700,6,98541568,104.00 +31700,7,103399424,86.00 +31700,8,109211648,89.00 +31700,9,114331648,87.00 +31700,10,119197696,89.00 +31700,11,125255680,84.00 +31700,12,130113536,87.00 +31700,13,135782400,84.00 +31700,14,140853248,84.00 +31700,15,145903616,85.00 +31700,16,150765568,95.00 +31700,17,156827648,92.00 +31700,18,161677312,92.00 +31700,19,166547456,87.00 +31700,20,172613632,109.00 +31700,21,178704384,110.00 +31700,22,183554048,95.00 +31700,24,188403712,53.00 +31700,25,193261568,90.00 +31700,26,199315456,92.00 +31700,27,204206080,102.00 +31700,28,209059840,104.00 +31700,29,215130112,96.00 +31700,30,220983296,98.00 +31700,31,226050048,109.00 +31700,32,232132608,126.00 +31700,34,239091712,54.50 +31700,35,245481472,126.00 +31700,37,252755968,71.00 +31700,38,261013504,136.00 +31700,40,268550144,75.50 +31700,41,277037056,149.00 +31700,43,285544448,81.50 +31700,45,294985728,86.00 +31700,47,305041408,97.00 +31700,49,314769408,95.00 +31700,51,325689344,98.00 +31700,54,336621568,76.33 +31700,57,348766208,81.66 +31700,60,362106880,92.00 +31700,62,375476224,130.50 +31700,65,388820992,88.33 +31700,69,402210816,74.75 +31700,72,416763904,93.00 +31700,75,432205824,105.33 +31700,78,447868928,107.00 +31700,82,464117760,82.25 +31700,86,480931840,90.25 +31700,90,498143232,90.25 +31700,94,515145728,96.50 +31700,98,534171648,99.75 +31700,103,552796160,85.40 +31700,108,573046784,86.60 +31700,113,594059264,95.60 +31700,118,614739968,103.80 +31700,125,640221184,86.85 +31700,132,666951680,93.71 +31700,139,691376128,91.57 +31700,146,719286272,100.57 +31700,154,748339200,93.50 +31700,162,776155136,94.00 +31700,171,804700160,86.44 +31700,179,835207168,99.00 +31700,188,864772096,92.55 +31700,197,896733184,93.77 +31700,206,927342592,93.00 +31700,217,963043328,94.18 +31700,231,1004720128,87.07 +31700,246,1048158208,87.60 +31700,263,1094676480,85.82 Added: vmkit/trunk/tests/benchmarks/monitor_process.sh URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/benchmarks/monitor_process.sh?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/benchmarks/monitor_process.sh (added) +++ vmkit/trunk/tests/benchmarks/monitor_process.sh Thu Apr 25 11:54:20 2013 @@ -0,0 +1,181 @@ +#/bin/bash + +# ps -ww -o etime:1,pid:1,time:1,%cpu,%mem,rss -C "$1" # |tr -s ' ' ',' + +float_scale=2 +page_size=$(getconf PAGESIZE) +clock_tick=$(getconf CLK_TCK) + +# Evaluate then output an equation into a float number with $float_scale precision. +function float_eval() +{ + local stat=0 + local result=0.0 + + if [[ $# -gt 0 ]]; then + result=$(echo "scale=$float_scale; $*"|bc -q 2>/dev/null) + stat=$? + + if [[ "$stat" -eq 0 && -z "$result" ]]; then stat=1; fi + fi + + echo -n $result + return $stat +} + +# Evaluate an equation into a condition. +function float_cond() +{ + local cond=0 + + if [[ $# -gt 0 ]]; then + cond=$(echo "$*"|bc -q 2>/dev/null) + + if [[ -z "$cond" ]]; then cond=0; fi + if [[ "$cond" != 0 && "$cond" != 1 ]]; then cond=0; fi + fi + + local stat=$(($cond == 0)) + return $stat +} + +# Outputs a PID given a process name. +# If multiple processes of the same program exist, only one PID will be output. +function get_pid_from_name() +{ + local process_name=$1 + + ps --no-headers -ww -o pid:1 -C "$process_name"|head -n 1 + return $? +} + +# Returns the memory data usage in bytes for a PID +function get_memory_data_usage() +{ + local pid=$1 + if [ -z "$pid" ]; then return 1; fi; + + local memory_data_pages=$(cat /proc/$pid/statm 2>/dev/null|cut -d ' ' -f 6) + if [ -z "$memory_data_pages" ]; then return 1; fi; + + float_eval "$memory_data_pages * $page_size" +} + +# Converts size from some size unit to bytes unit. +function get_size_in_bytes() +{ + local size=$1 + local number=$(echo "$size"|cut -d ' ' -f 1) + local unit=$(echo "$size"|cut -d ' ' -f 2) + local factor=1 + + case $unit in + B ) factor=1 ;; + kB ) factor=1024 ;; + mB ) factor=1048576 ;; + gB ) factor=1073741824 ;; + esac + + float_eval "$number * $factor" +} + +# Returns writable memory usage, given a PID. +function get_writable_memory_usage() +{ + local pid=$1 + if [ -z "$pid" ]; then return 1; fi; + + local sum=0 + local oldIFS=$IFS +IFS=' +' + for entry in $(cat /proc/$pid/smaps|tr -s ' '|grep '^Private_Dirty: [^0]'|cut -d ' ' -f '2,3'); do + sum=$(float_eval "$sum + $(get_size_in_bytes $entry)") + done + IFS=oldIFS + + echo $sum +} + +# Returns the CPU time (user+kernel) in seconds, given a PID. +function get_cpu_time() +{ + local pid=$1 + if [ -z "$pid" ]; then return 1; fi; + + local user_time=$(cat /proc/$pid/stat 2>/dev/null|cut -d ' ' -f 14) + if [ -z "$user_time" ]; then return 1; fi; + + local kernel_time=$(cat /proc/$pid/stat 2>/dev/null|cut -d ' ' -f 15) + if [ -z "$kernel_time" ]; then return 1; fi; + + float_eval "($user_time + $kernel_time) / $clock_tick" +} + +# Outputs the CPU average usage, given a PID. +function get_cpu_avg_usage() +{ + local pid=$1 + local avg_period=$2 + local _cpu_avg_usage=$3 + local _last_cpu_time=$4 + local last_cpu_time + + eval last_cpu_time='$'$_last_cpu_time'' + + if [ -z "$pid" ]; then return 1; fi; + + if [ -z "$last_cpu_time" ]; then + last_cpu_time=$(get_cpu_time $pid) + if [ -z "$last_cpu_time" ]; then return 1; fi; + fi; + + local cpu_time=$(get_cpu_time $pid) + if [ -z "$cpu_time" ]; then return 1; fi; + + local cpu_avg_usage=$(float_eval "100 * ( $cpu_time - $last_cpu_time ) / $avg_period") +# local cpu_avg_usage=$(float_eval "$cpu_time - $last_cpu_time"),$(float_eval "100 * ( $cpu_time - $last_cpu_time ) / $avg_period") + + eval $_cpu_avg_usage="'$cpu_avg_usage'" + eval $_last_cpu_time="'$cpu_time'" + return 0 +} + +period= +the_date= +the_last_date=$(date '+%s') +the_last_cpu_time= +the_cpu_avg_usage= + +sleep 1 + +echo "PID,DATE,MEM_DATA,CPU_USAGE" +#echo "DATE,PID,MEM_DATA,CPU_TIME,CPU_TIME_DIFF,CPU_USAGE" + +while true +do + pid=$(get_pid_from_name "$1") + + if [ ! -z "$pid" ]; then + the_date=$(date '+%s') + period=$(($the_date - $the_last_date)) + the_last_date=$the_date + + if [ "$period" -gt "0" ]; then + get_cpu_avg_usage $pid $period the_cpu_avg_usage the_last_cpu_time + +# echo "$(date '+%F %T'),$pid,$(get_writable_memory_usage $pid),$(get_cpu_time $pid),$the_cpu_avg_usage" +# echo "$(date -d "@$the_date" '+%F %T'),$pid,$(get_writable_memory_usage $pid),$the_cpu_avg_usage" + echo "$pid,$the_date,$(get_writable_memory_usage $pid),$the_cpu_avg_usage" + fi; + fi; +done + +# gnuplot +# set datafile separator "," +# set xdata time +# set timefmt "%Y-%m-%d %H:%M:%S" +# set format x "%M:%S" +# plot "jasmin_player.csv" using 1:3 title "Memory Usage" with lines +# plot "jasmin_player.csv" using 1:4 title "CPU Usage" with lines + Added: vmkit/trunk/tests/benchmarks/plot_benchmarks.plot URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/benchmarks/plot_benchmarks.plot?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/benchmarks/plot_benchmarks.plot (added) +++ vmkit/trunk/tests/benchmarks/plot_benchmarks.plot Thu Apr 25 11:54:20 2013 @@ -0,0 +1,34 @@ +#!/usr/bin/gnuplot -p + +set border 3 +set xtics axis nomirror +set ytics axis nomirror +set xlabel "Time" +set ylabel "Memory usage" +set xdata time +set timefmt "%s" +set format x "%M:%S" +set format y "%.1s %cB" +set datafile separator "," + +set term wxt 0 +plot \ + "j3-stale-ref.csv" \ + using 2:3 \ + title "Presence of stale references" \ + with lines linewidth "2pt" linecolor rgb "red", \ + "j3-stale-ref-corrected.csv" \ + using 2:3 \ + title "Stale references corrected" \ + with lines linewidth "3pt" linetype "dotted" linecolor rgb "blue" \ + +#set term wxt 1 +#plot \ +# "j3-stale-ref.csv" \ +# using 2:3 \ +# title "Presence of stale references" \ +# with lines linewidth "2pt" linecolor rgb "red", \ +# "j3-stale-ref-corrected.csv" \ +# using 2:3 \ +# title "Stale references corrected" \ +# with lines linewidth "3pt" linetype "dotted" linecolor rgb "blue" \ Added: vmkit/trunk/tests/benchmarks/rebase_time.sh URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/benchmarks/rebase_time.sh?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/benchmarks/rebase_time.sh (added) +++ vmkit/trunk/tests/benchmarks/rebase_time.sh Thu Apr 25 11:54:20 2013 @@ -0,0 +1,19 @@ +#!/bin/bash + +input=$1 +headline=$(head -n 1 "$input") +base_time=$(head -n 2 "$input"|tail -n 1|cut -d ',' -f 2) + +echo $headline + +oldIFS=$IFS +IFS=' +' +for entry in $(cat "$input"|grep '^[0-9]'); do + pid=$(echo $entry|cut -d ',' -f 1) + time=$(echo $entry|cut -d ',' -f 2) + data=$(echo $entry|cut -d ',' -f '3-') + + echo "$pid,$(($time - $base_time)),$data" +done +IFS=oldIFS Modified: vmkit/trunk/tests/debug.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/debug.txt?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/debug.txt (original) +++ vmkit/trunk/tests/debug.txt Thu Apr 25 11:54:20 2013 @@ -1,3 +1,12 @@ +/home/koutheir/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/j3 -jar framework.jar -xargs /home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/minimal.xargs + framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.AImpl +framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.Runner + framework meminfo -gc + +bundles +start 18 + +framework call j3.J3Mgr dumpClassLoaderBundles Modified: vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java (original) +++ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java Thu Apr 25 11:54:20 2013 @@ -3,4 +3,5 @@ package ijvm.tests.A; public interface A { public void performA(); + public Token getToken(); } Added: vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/Token.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/Token.java?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/Token.java (added) +++ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/Token.java Thu Apr 25 11:54:20 2013 @@ -0,0 +1,6 @@ +package ijvm.tests.A; + +public interface Token +{ + public int getValue(); +} Modified: vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java (original) +++ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java Thu Apr 25 11:54:20 2013 @@ -1,6 +1,7 @@ package ijvm.tests.AImpl; import ijvm.tests.A.A; +import ijvm.tests.A.Token; public class AImpl implements A @@ -9,4 +10,9 @@ public class AImpl { System.out.println("AImpl.performA"); } + + public Token getToken() + { + return new TokenImpl((int)(Math.random() * 100.0)); + } } Modified: vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java Thu Apr 25 11:54:20 2013 @@ -33,13 +33,14 @@ public class Activator cST.open(); C service = (C)cST.getService(); - if (service != null) + if (service != null) { + System.out.println("AImpl got C @ startup"); + c.add(service); + this.registerMyself(); + } context.addServiceListener(this, "(objectclass=" + C.class.getName() + ")"); - - if (c != null) - System.out.println("AImpl got C @ startup"); a = new AImpl(); context.registerService(A.class.getName(), a, null); @@ -69,6 +70,8 @@ public class Activator if (C.class.isInstance(service)) { System.out.println("AImpl got C"); c.add((C)service); + + this.registerMyself(); } break; @@ -79,4 +82,11 @@ public class Activator break; } } + + private void registerMyself() + { + C oneC = c.get(c.size() - 1); + + oneC.registerObject(this); + } } Added: vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/TokenImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/TokenImpl.java?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/TokenImpl.java (added) +++ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/TokenImpl.java Thu Apr 25 11:54:20 2013 @@ -0,0 +1,19 @@ +package ijvm.tests.AImpl; + +import ijvm.tests.A.Token; + +public class TokenImpl + implements Token +{ + int value; + + public TokenImpl(int value) + { + this.value = value; + } + + public int getValue() + { + return value; + } +} Modified: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java Thu Apr 25 11:54:20 2013 @@ -3,6 +3,7 @@ package ijvm.tests.BImpl; import java.util.ArrayList; import ijvm.tests.A.A; +import ijvm.tests.A.Token; import ijvm.tests.B.B; import org.osgi.framework.BundleActivator; @@ -18,11 +19,13 @@ public class Activator private ServiceTracker aST; private ArrayList a; + private ArrayList tokens; private BImpl b; public Activator() { a = new ArrayList(); + tokens = new ArrayList(); } public void start(BundleContext bundleContext) throws Exception @@ -34,13 +37,14 @@ public class Activator aST.open(); A service = (A)aST.getService(); - if (service != null) + if (service != null) { + System.out.println("BImpl got A @ startup"); + a.add(service); + this.useA(); + } context.addServiceListener(this, "(objectclass=" + A.class.getName() + ")"); - - if (a != null) - System.out.println("BImpl got A @ startup"); b = new BImpl(); context.registerService(B.class.getName(), b, null); @@ -70,6 +74,8 @@ public class Activator if (A.class.isInstance(service)) { System.out.println("BImpl got A"); a.add((A)service); + + this.useA(); } break; @@ -80,4 +86,15 @@ public class Activator break; } } + + private void useA() + { + A oneA = a.get(a.size() - 1); + Token token = oneA.getToken(); + token.getValue(); + + tokens.add(token); + + System.out.println("BImpl got Token from A"); + } } Added: vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.classpath?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.classpath (added) +++ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.classpath Thu Apr 25 11:54:20 2013 @@ -0,0 +1,7 @@ + + + + + + + Added: vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.project?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.project (added) +++ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/.project Thu Apr 25 11:54:20 2013 @@ -0,0 +1,28 @@ + + + ijvm.tests.BundleMgmtStress + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + Added: vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/META-INF/MANIFEST.MF?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/META-INF/MANIFEST.MF (added) +++ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/META-INF/MANIFEST.MF Thu Apr 25 11:54:20 2013 @@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: BundleMgmtStress +Bundle-SymbolicName: ijvm.tests.BundleMgmtStress +Bundle-Version: 1.0.0 +Bundle-Activator: ijvm.tests.BundleMgmtStress.Activator +Import-Package: j3, + org.osgi.framework;version="1.3.0", + org.osgi.util.tracker;version="1.0.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 Added: vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/build.properties?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/build.properties (added) +++ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/build.properties Thu Apr 25 11:54:20 2013 @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . Added: vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/tests/BundleMgmtStress/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/tests/BundleMgmtStress/Activator.java?rev=180316&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/tests/BundleMgmtStress/Activator.java (added) +++ vmkit/trunk/tests/ijvm.tests.BundleMgmtStress/src/ijvm/tests/BundleMgmtStress/Activator.java Thu Apr 25 11:54:20 2013 @@ -0,0 +1,90 @@ +package ijvm.tests.BundleMgmtStress; + +import j3.J3Mgr; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.util.tracker.ServiceTracker; + +public class Activator + implements BundleActivator, Runnable +{ + BundleContext context; + Thread worker; + boolean cancelWork; + long firstBundleID; + ServiceTracker j3mgrST; + J3Mgr j3mgr; + boolean correctStaleReferences; + + public void start(BundleContext bundleContext) throws Exception + { + context = bundleContext; + + j3mgrST = new ServiceTracker(context, J3Mgr.class.getName(), null); + j3mgrST.open(); + j3mgr = (J3Mgr)j3mgrST.getService(); + if (j3mgr == null) + throw new BundleException("J3 Management service must be started before this service."); + + correctStaleReferences = true; + firstBundleID = 13; + + cancelWork = false; + worker = new Thread(this, "Stresser"); + worker.start(); + } + + public void stop(BundleContext bundleContext) throws Exception + { + cancelWork = true; + + if (worker != null) { + worker.join(); + worker = null; + } + + context = null; + } + + public void run() + { + System.out.println("Bundle management stress running..."); + + try { + uninstallBundle(context.getBundle(firstBundleID)); + + while (!cancelWork) { + Bundle bundle = context.installBundle("file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar"); + bundle.start(); + Thread.sleep(20); + + System.out.println("Bundle started: " + bundle.getBundleId()); + + uninstallBundle(bundle); + } + } catch (Exception e) { + e.printStackTrace(); + } + + System.out.println("Bundle management stress done."); + } + + void uninstallBundle(Bundle bundle) + { + try { + if (correctStaleReferences) { + j3mgr.resetReferencesToBundle(bundle); + } else { + bundle.stop(); + bundle.uninstall(); + } + + System.gc(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} Modified: vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java (original) +++ vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java Thu Apr 25 11:54:20 2013 @@ -3,4 +3,5 @@ package ijvm.tests.C; public interface C { public void performC(); + public void registerObject(Object o); } Modified: vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java Thu Apr 25 11:54:20 2013 @@ -34,14 +34,14 @@ public class Activator bST.open(); B service = (B)bST.getService(); - if (service != null) + if (service != null) { + System.out.println("CImpl got B @ startup"); + b.add(service); + } context.addServiceListener(this, "(objectclass=" + B.class.getName() + ")"); - if (b != null) - System.out.println("CImpl got B @ startup"); - c = new CImpl(); context.registerService(C.class.getName(), c, null); } Modified: vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java (original) +++ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java Thu Apr 25 11:54:20 2013 @@ -1,12 +1,26 @@ package ijvm.tests.CImpl; +import java.util.ArrayList; + import ijvm.tests.C.C; public class CImpl implements C { + ArrayList registeredObjects; + + CImpl() + { + registeredObjects = new ArrayList(); + } + public void performC() { System.out.println("CImpl.performC"); } + + public void registerObject(Object o) + { + registeredObjects.add(o); + } } Modified: vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java Thu Apr 25 11:54:20 2013 @@ -34,14 +34,14 @@ public class Activator cST.open(); C service = (C)cST.getService(); - if (service != null) + if (service != null) { + System.out.println("DImpl got C @ startup"); + c.add(service); + } context.addServiceListener(this, "(objectclass=" + C.class.getName() + ")"); - if (c != null) - System.out.println("DImpl got C @ startup"); - d = new DImpl(); context.registerService(D.class.getName(), d, null); } Modified: vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java Thu Apr 25 11:54:20 2013 @@ -38,8 +38,8 @@ public class Activator runnerThread1.start(); runnerThread2.start(); - cancellerThread = new Thread(this, "Runner Canceller"); - cancellerThread.start(); +// cancellerThread = new Thread(this, "Runner Canceller"); +// cancellerThread.start(); } public void stop(BundleContext bundleContext) throws Exception @@ -53,7 +53,10 @@ public class Activator aST = null; // a = null; -// runner.join(); +// runner1.cancel(); +// runner2.cancel(); +// runnerThread1.join(); +// runnerThread2.join(); } public void run() Modified: vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java (original) +++ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java Thu Apr 25 11:54:20 2013 @@ -19,7 +19,8 @@ public class Runner public void cancel() { - cancelRunning = false; + System.out.println("Cancelling runner thread: " + Thread.currentThread().getName()); + cancelRunning = true; } public void run() @@ -30,7 +31,18 @@ public class Runner while (!cancelRunning) { long delay = 2000 + (long)(Math.random() * 1000.0); - ijvm_tests_Runner_loop(delay); + synchronized(obj) { + while (sleeping) + obj.wait(); + sleeping = true; + + System.out.println(Thread.currentThread().getName() + ": sleeping for " + delay); + Thread.sleep(delay); + System.out.println(Thread.currentThread().getName() + ": woke up"); + + sleeping = false; + obj.notifyAll(); + } Thread.sleep(200); } @@ -40,25 +52,4 @@ public class Runner System.out.println("Stopped runner thread: " + Thread.currentThread().getName()); } - - void ijvm_tests_Runner_loop(long delay) throws InterruptedException - { - synchronized(obj) { - iteration(delay); - } - } - - void iteration(long delay) throws InterruptedException - { - while (sleeping) - obj.wait(); - sleeping = true; - - System.out.println(Thread.currentThread().getName() + ": sleeping for " + delay); - Thread.sleep(delay); - System.out.println(Thread.currentThread().getName() + ": woke up"); - - sleeping = false; - obj.notifyAll(); - } } Modified: vmkit/trunk/tests/minimal.xargs URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/minimal.xargs?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tests/minimal.xargs (original) +++ vmkit/trunk/tests/minimal.xargs Thu Apr 25 11:54:20 2013 @@ -30,4 +30,6 @@ -istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.CImpl_1.0.0.jar -istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.DImpl_1.0.0.jar --istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.Runner_1.0.0.jar +-install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.Runner_1.0.0.jar + +-install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.BundleMgmtStress_1.0.0.jar Modified: vmkit/trunk/tools/precompiler/trainer/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=180316&r1=180315&r2=180316&view=diff ============================================================================== --- vmkit/trunk/tools/precompiler/trainer/Makefile (original) +++ vmkit/trunk/tools/precompiler/trainer/Makefile Thu Apr 25 11:54:20 2013 @@ -24,7 +24,7 @@ endif HelloWorld.class: HelloWorld.java $(Echo) "Compiling trainer" - $(Verb) javac $< -d . + $(Verb) javac -target $(JAVAC_TARGET) $< -d . generated.bc: $(PRECOMPILER) HelloWorld.class $(Echo) "Pre-compiling bootstrap code" From peter.senna at gmail.com Thu Apr 25 09:55:57 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:55:57 -0000 Subject: [vmkit-commits] [vmkit] r180317 - Test file Message-ID: <20130425165427.043822A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:54:26 2013 New Revision: 180317 URL: http://llvm.org/viewvc/llvm-project?rev=180317&view=rev Log: Test file (cherry picked from commit c782c8c5bc28cbd388f9d004f8ffdb7a65f74be7) Added: vmkit/trunk/tests/MyAnnotation.java Added: vmkit/trunk/tests/MyAnnotation.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/MyAnnotation.java?rev=180317&view=auto ============================================================================== --- vmkit/trunk/tests/MyAnnotation.java (added) +++ vmkit/trunk/tests/MyAnnotation.java Thu Apr 25 11:54:26 2013 @@ -0,0 +1,6 @@ +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + at Retention(RetentionPolicy.RUNTIME) +public @interface MyAnnotation { + int property(); +} From peter.senna at gmail.com Thu Apr 25 09:56:06 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:06 -0000 Subject: [vmkit-commits] [vmkit] r180318 - Removed gcmalloc from Bindings and splitted it into pre-post/alloc. Made VirtualTable generic for setting VM objets type. Now affecting type is delegated to VirtualMachine. Message-ID: <20130425165436.36AD72A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:54:35 2013 New Revision: 180318 URL: http://llvm.org/viewvc/llvm-project?rev=180318&view=rev Log: Removed gcmalloc from Bindings and splitted it into pre-post/alloc. Made VirtualTable generic for setting VM objets type. Now affecting type is delegated to VirtualMachine. (cherry picked from commit ce85ab001873eb33c5714f88688dd1e41db3c35c) Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180318&r1=180317&r2=180318&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:54:35 2013 @@ -1379,7 +1379,12 @@ void Jnjvm::scanFinalizationQueue(word_t void Jnjvm::addFinalizationCandidate(gc* object) { llvm_gcroot(object, 0); - finalizerThread->addFinalizationCandidate(object); + if (object->getVirtualTable()->hasDestructor()) + finalizerThread->addFinalizationCandidate(object); +} + +void Jnjvm::setType(gcHeader* header, void* type) { + header->toReference()->setVirtualTable((VirtualTable*)type); } // This method is called during GC so no llvm_gcroot needed. Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180318&r1=180317&r2=180318&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original) +++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:54:35 2013 @@ -19,31 +19,40 @@ static vmkit::SpinLock lock; std::set __InternalSet__; int Collector::verbose = 0; -extern "C" void* gcmalloc(uint32_t sz, void* _VT) { - gc* res = 0; +extern "C" void* prealloc(uint32_t sz) { + gc* res = 0; gcHeader* head = 0; - VirtualTable* VT = (VirtualTable*)_VT; - sz += gcHeader::hiddenHeaderSize(); + sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); - head = (gcHeader*)malloc(sz); + head = (gcHeader*) malloc(sz); memset((void*)head, 0, sz); res = head->toReference(); lock.acquire(); __InternalSet__.insert(res); lock.release(); - - res->setVirtualTable(VT); + return res; } -extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT) { - gc* res = (gc*)gcmalloc(sz, VT); - if (VT->hasDestructor()) - vmkit::Thread::get()->MyVM->addFinalizationCandidate(res); +extern "C" void postalloc(gc* obj, void* type, uint32_t size) { + vmkit::Thread::get()->MyVM->setType(obj->toHeader(), type); +} + +extern "C" void* gcmalloc(uint32_t sz, void* type) { + gc* res = 0; + sz += gcHeader::hiddenHeaderSize(); + res = (gc*) prealloc(sz); + postalloc(res, type, sz); return res; } +extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) { + gc* res = (gc*)gcmalloc(sz, type); + vmkit::Thread::get()->MyVM->addFinalizationCandidate(res); + return res; +} + extern "C" void addFinalizationCandidate(gc* obj) { vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj); } Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h?rev=180318&r1=180317&r2=180318&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h (original) +++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h Thu Apr 25 11:54:35 2013 @@ -52,8 +52,8 @@ class VirtualTable { static void emptyTracer(void*) {} }; -extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT); -extern "C" void* gcmalloc(uint32_t sz, void* VT); +extern "C" void* gcmallocUnresolved(uint32_t sz, void* type); +extern "C" void* gcmalloc(uint32_t sz, void* type); class gc : public gcRoot { public: Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180318&r1=180317&r2=180318&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original) +++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:54:35 2013 @@ -38,15 +38,20 @@ import org.vmutil.options.StringOption; public final class Bindings { - @Inline - private static Address gcmalloc(int size, ObjectReference virtualTable) { - Selected.Mutator mutator = Selected.Mutator.get(); - int allocator = mutator.checkAllocator(size, 0, 0); - Address res = mutator.alloc(size, 0, 0, allocator, 0); - setVT(res, virtualTable); - mutator.postAlloc(res.toObjectReference(), virtualTable, size, allocator); - return res; - } + @Inline + private static Address prealloc(int size) { + Selected.Mutator mutator = Selected.Mutator.get(); + int allocator = mutator.checkAllocator(size, 0, 0); + Address res = mutator.alloc(size, 0, 0, allocator, 0); + return res; + } + + @Inline + private static void postalloc(ObjectReference object, ObjectReference type, int size) { + Selected.Mutator mutator = Selected.Mutator.get(); + int allocator = mutator.checkAllocator(size, 0, 0); + mutator.postAlloc(object, type, size, allocator); + } @Inline private static boolean isLive(TraceLocal closure, ObjectReference obj) { @@ -132,9 +137,6 @@ public final class Bindings { } @Inline - private static native void setVT(Address addr , ObjectReference virtualTable); - - @Inline private static native int hiddenHeaderSize(); @Inline Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180318&r1=180317&r2=180318&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:54:35 2013 @@ -62,21 +62,12 @@ Java_org_j3_mmtk_ObjectModel_attemptAvai return (val == oldValue); } -extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2( - gcHeader* header, VirtualTable* VT) ALWAYS_INLINE; - -extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2( - gcHeader* header, VirtualTable* VT) { - header->toReference()->setVirtualTable(VT); -} - extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() ALWAYS_INLINE; extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() { return gcHeader::hiddenHeaderSize(); } - extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I( void* res, void* src, int size) ALWAYS_INLINE; From peter.senna at gmail.com Thu Apr 25 09:56:23 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:23 -0000 Subject: [vmkit-commits] [vmkit] r180319 - Stale references correction implemented. Message-ID: <20130425165443.6A16C2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:54:42 2013 New Revision: 180319 URL: http://llvm.org/viewvc/llvm-project?rev=180319&view=rev Log: Stale references correction implemented. (cherry picked from commit 20fa7e42c668e60a92f8a07cc58823b105032f39) Added: vmkit/trunk/make.log Modified: vmkit/trunk/README.TXT vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Modified: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180319&r1=180318&r2=180319&view=diff ============================================================================== --- vmkit/trunk/README.TXT (original) +++ vmkit/trunk/README.TXT Thu Apr 25 11:54:42 2013 @@ -3,7 +3,7 @@ Requirements: ============= * Install required packages (Debian): -apt-get install ant libgconf2-dev libgtk2.0-dev sharutils +apt-get install ant libgconf2-dev libgtk2.0-dev * Install required packages (SUSE): zypper install ant gconf2-devel gtk2-devel @@ -15,9 +15,9 @@ apt-get install default-jre default-jdk GNU Classpath: ============== -wget http://ftp.gnu.org/gnu/classpath/classpath-0.99.tar.gz -tar zxf classpath-0.99.tar.gz -ln -s classpath-0.99 classpath +wget http://ftp.gnu.org/gnu/classpath/classpath-0.97.2.tar.gz +tar zxf classpath-0.97.2.tar.gz +ln -s classpath-0.97.2 classpath cd classpath ./configure --disable-plugin --disable-examples --disable-Werror make -j12 @@ -33,8 +33,8 @@ ln -sf ../native/jni/java-util/.libs/lib * Go root cd classpath -sudo make install -sudo ldconfig +make install +ldconfig ===== LLVM: @@ -91,7 +91,7 @@ svn co http://llvm.org/svn/llvm-project/ * Make it (debug mode): -./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/usr/local/classpath/lib/classpath --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip +./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 ============= Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180319&r1=180318&r2=180319&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:54:42 2013 @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#define DEBUG_VERBOSE_CLASS_LOADER_UNLOADING 1 +#define DEBUG_VERBOSE_CASS_LOADER_UNLOADING 1 #include #include @@ -213,21 +213,14 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad } JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : - allocator(Alloc) -#if RESET_STALE_REFERENCES - ,zombie(false) -#endif + allocator(Alloc), zombie(false) { } JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, VMClassLoader* vmdata, - Jnjvm* VM) : allocator(Alloc) -#if RESET_STALE_REFERENCES - , zombie(false) -#endif -{ + Jnjvm* VM) : allocator(Alloc), zombie(false) { llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); bootstrapLoader = JCL.bootstrapLoader; @@ -251,6 +244,24 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit assert(loadClass && "Loader does not have a loadClass function"); } +int64_t JnjvmClassLoader::getAssociatedBundleID() +{ + return vm->getClassLoaderBundleID(this); +} + +void JnjvmClassLoader::setAssociatedBundleID(int64_t newID) +{ + int64_t oldBundleID = vm->getClassLoaderBundleID(this); + if (oldBundleID != -1) { + if (oldBundleID == newID) return; // Nothing to do + + // Remove old bundle ID + vm->setBundleClassLoader(oldBundleID, NULL); + } + + vm->setBundleClassLoader(newID, this); +} + void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) { // Set the new compiler. TheCompiler = Comp; @@ -853,14 +864,8 @@ const UTF8* JnjvmClassLoader::readerCons JnjvmClassLoader::~JnjvmClassLoader() { -#if RESET_STALE_REFERENCES - -#if DEBUG_VERBOSE_CLASS_LOADER_UNLOADING - cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl; -#endif - - this->setAssociatedBundleID(-1); - +#if DEBUG_VERBOSE_CASS_LOADER_UNLOADING + cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl; #endif if (vm) { @@ -1114,25 +1119,3 @@ ArrayObject* JnjvmBootstrapLoader::getBo return res; } - -#if RESET_STALE_REFERENCES - -int64_t JnjvmClassLoader::getAssociatedBundleID() -{ - return vm->getClassLoaderBundleID(this); -} - -void JnjvmClassLoader::setAssociatedBundleID(int64_t newID) -{ - int64_t oldBundleID = vm->getClassLoaderBundleID(this); - if (oldBundleID != -1) { - if (oldBundleID == newID) return; // Nothing to do - - // Remove old bundle ID - vm->setBundleClassLoader(oldBundleID, NULL); - } - - vm->setBundleClassLoader(newID, this); -} - -#endif Added: vmkit/trunk/make.log URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/make.log?rev=180319&view=auto ============================================================================== --- vmkit/trunk/make.log (added) +++ vmkit/trunk/make.log Thu Apr 25 11:54:42 2013 @@ -0,0 +1,1085 @@ +for dir in lib/vmkit/StaticGCPass lib/vmkit/StaticGCPrinter lib tools/vmjc mmtk tools/precompiler tools; do \ + (make -C $dir all ) || exit 1; \ + done +make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/.dir +llvm[1]: Compiling StaticGCPass.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit! _stale_re f/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d" StaticGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d.tmp"; exit 1; fi +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/.dir +llvm[1]: Linking Debug+Asserts Loadable Module StaticGCPass.so +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmki! t_stale_r ef/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.o \ + -lpthread -ldl -lm -lz +llvm[1]: Compiling StaticGCPass.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.ll" -MT "! /media/Da ta/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d" \ + StaticGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d.tmp"; exit 1; fi +llvm[1]: Compiling StaticGCPass.ll to StaticGCPass.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc +llvm[1]: Building Debug+Asserts Bytecode Archive libStaticGCPass.bca +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPass.bca +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPass.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc +make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass' +make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/.dir +llvm[1]: Compiling VmkitGCPrinter.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.o" -MT "/media/Data/Documents/Studies/MyWork/Ph! D/VMKit/v mkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d" VmkitGCPrinter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d.tmp"; exit 1; fi +llvm[1]: Linking Debug+Asserts Loadable Module StaticGCPrinter.so +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKi! t/vmkit_s tale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.o \ + -lpthread -ldl -lm -lz +llvm[1]: Compiling VmkitGCPrinter.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrin! ter.ll" - MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d" \ + VmkitGCPrinter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d.tmp"; exit 1; fi +llvm[1]: Compiling VmkitGCPrinter.ll to VmkitGCPrinter.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc +llvm[1]: Building Debug+Asserts Bytecode Archive libStaticGCPrinter.bca +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPrinter.bca +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPrinter.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc +make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter' +make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib' +\ + SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit; \ + DD=vmkit; \ + if [ ! -f $SD/Makefile ]; then \ + SD=vmkit; \ + DD=vmkit; \ + fi; \ + if ([ ! -f $DD/Makefile ] || \ + command test $DD/Makefile -ot \ + $SD/Makefile ); then \ + /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ + /bin/cp $SD/Makefile $DD/Makefile; \ + fi; \ + make -C $DD all +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit' +for dir in CommonThread MMTk Runtime Compiler JITGCPass; do \ + (make -C $dir all ) || exit 1; \ + done +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/.dir +llvm[3]: Compiling CollectionRV.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.ll" -MT "! /media/Da ta/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d" \ + CollectionRV.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling CollectionRV.ll to CollectionRV.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.bc +llvm[3]: Compiling CollectionRV.bc to CollectionRV.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.s +llvm[3]: Compiling CollectionRV.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.o +llvm[3]: Compiling ObjectLocks.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.ll" -MT "/m! edia/Data /Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d" \ + ObjectLocks.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling ObjectLocks.ll to ObjectLocks.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.bc +llvm[3]: Compiling ObjectLocks.bc to ObjectLocks.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.s +llvm[3]: Compiling ObjectLocks.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.o +llvm[3]: Compiling Sigsegv.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.ll" -MT "/media/Dat! a/Documen ts/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d" \ + Sigsegv.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling Sigsegv.ll to Sigsegv.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.bc +llvm[3]: Compiling Sigsegv.bc to Sigsegv.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.s +llvm[3]: Compiling Sigsegv.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.o +llvm[3]: Compiling ctlock.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.ll" -MT "/media/Data/! Documents /Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d" \ + ctlock.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling ctlock.ll to ctlock.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.bc +llvm[3]: Compiling ctlock.bc to ctlock.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.s +llvm[3]: Compiling ctlock.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.o +llvm[3]: Compiling ctthread.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.ll" -MT "/media/D! ata/Docum ents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d" \ + ctthread.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling ctthread.ll to ctthread.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.bc +llvm[3]: Compiling ctthread.bc to ctthread.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.s +llvm[3]: Compiling ctthread.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.o +llvm[3]: Building Debug+Asserts Archive Library libCommonThread.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread' +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/.dir +llvm[3]: Compiling VmkitGC.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.ll" -MT "/media/Data/Documents/Studies/MyWo! rk/PhD/VM Kit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d" \ + VmkitGC.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling VmkitGC.ll to VmkitGC.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.bc +llvm[3]: Compiling VmkitGC.bc to VmkitGC.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.s +llvm[3]: Compiling VmkitGC.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.o +llvm[3]: Building Debug+Asserts Archive Library libMMTk.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTk.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTk.a +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk' +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/.dir +llvm[3]: Compiling MethodInfo.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.ll" -MT "/media/Data/Documen! ts/Studie s/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d" \ + MethodInfo.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling MethodInfo.ll to MethodInfo.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.bc +llvm[3]: Compiling MethodInfo.bc to MethodInfo.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.s +llvm[3]: Compiling MethodInfo.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.o +llvm[3]: Compiling Object.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.ll" -MT "/media/Data/Documents/Studi! es/MyWork /PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d" \ + Object.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling Object.ll to Object.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.bc +llvm[3]: Compiling Object.bc to Object.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.s +llvm[3]: Compiling Object.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.o +llvm[3]: Compiling UTF8.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.ll" -MT "/media/Data/Documents/Studies/M! yWork/PhD /VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d" \ + UTF8.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling UTF8.ll to UTF8.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.bc +llvm[3]: Compiling UTF8.bc to UTF8.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.s +llvm[3]: Compiling UTF8.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.o +llvm[3]: Building Debug+Asserts Archive Library libVmkit.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime' +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler' +llvm[3]: Building LLVM runtime with /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/LLVMRuntime.ll +cat /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/LLVMRuntime.ll | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-as -o - | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=contents -o LLVMRuntime.inc +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/.dir +llvm[3]: Compiling Disassembler.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.ll" -MT "/media/Data/! Documents /Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d" \ + Disassembler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling Disassembler.ll to Disassembler.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.bc +llvm[3]: Compiling Disassembler.bc to Disassembler.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.s +llvm[3]: Compiling Disassembler.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.o +llvm[3]: Compiling EscapeAnalysis.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.ll" -MT "/media/D! ata/Docum ents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d" \ + EscapeAnalysis.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling EscapeAnalysis.ll to EscapeAnalysis.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.bc +llvm[3]: Compiling EscapeAnalysis.bc to EscapeAnalysis.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.s +llvm[3]: Compiling EscapeAnalysis.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.o +llvm[3]: Compiling InlineMalloc.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.ll" -MT "/media/Data/! Documents /Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d" \ + InlineMalloc.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling InlineMalloc.ll to InlineMalloc.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.bc +llvm[3]: Compiling InlineMalloc.bc to InlineMalloc.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.s +llvm[3]: Compiling InlineMalloc.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.o +llvm[3]: Compiling JIT.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.ll" -MT "/media/Data/Documents/Studies/! MyWork/Ph D/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d" \ + JIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JIT.ll to JIT.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.bc +llvm[3]: Compiling JIT.bc to JIT.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.s +llvm[3]: Compiling JIT.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.o +llvm[3]: Compiling VmkitGC.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.ll" -MT "/media/Data/Documents/! Studies/M yWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d" \ + VmkitGC.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling VmkitGC.ll to VmkitGC.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.bc +llvm[3]: Compiling VmkitGC.bc to VmkitGC.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.s +llvm[3]: Compiling VmkitGC.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.o +llvm[3]: Building Debug+Asserts Archive Library libVmkitCompiler.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler' +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/.dir +llvm[3]: Compiling JITGCPass.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/! vmkit/JIT GCPass/Debug+Asserts/JITGCPass.d" JITGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d.tmp"; exit 1; fi +llvm[3]: Linking Debug+Asserts Loadable Module JITGCPass.so +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/JITGCPass.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stal! e_ref/lib /vmkit/JITGCPass/Debug+Asserts/JITGCPass.o \ + -lpthread -ldl -lm -lz +llvm[3]: Compiling JITGCPass.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.ll" -MT "/media/Data/Doc! uments/St udies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d" \ + JITGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JITGCPass.ll to JITGCPass.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc +llvm[3]: Building Debug+Asserts Bytecode Archive libJITGCPass.bca +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJITGCPass.bca +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJITGCPass.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass' +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit' +\ + SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3; \ + DD=j3; \ + if [ ! -f $SD/Makefile ]; then \ + SD=j3; \ + DD=j3; \ + fi; \ + if ([ ! -f $DD/Makefile ] || \ + command test $DD/Makefile -ot \ + $SD/Makefile ); then \ + /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ + /bin/cp $SD/Makefile $DD/Makefile; \ + fi; \ + make -C $DD all +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3' +for dir in LLVMRuntime VMCore ClassLib Compiler; do \ + (make -C $dir all ) || exit 1; \ + done +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime' +llvm[3]: Building LLVM runtime with /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-default.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-mmtk-thread.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-single.ll +cat /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-default.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-mmtk-thread.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-single.ll | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-as -o - | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=contents -o LLVMRuntime.inc +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime' +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/.dir +llvm[3]: Compiling JavaArray.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d" \ + JavaArray.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaArray.ll to JavaArray.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.bc +llvm[3]: Compiling JavaArray.bc to JavaArray.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.s +llvm[3]: Compiling JavaArray.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.o +llvm[3]: Compiling JavaClass.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d" \ + JavaClass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d.tmp"; exit 1; fi +JavaClass.cpp:1772:21: warning: comparison of integers of different signs: 'size_t' (aka 'unsigned int') and 'const int32_t' (aka 'const int') [-Wsign-compare] + for (size_t i=0; i < name->size; ++i) { + ~ ^ ~~~~~~~~~~ +In file included from JavaClass.cpp:17: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +2 warnings generated. +llvm[3]: Compiling JavaClass.ll to JavaClass.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.bc +llvm[3]: Compiling JavaClass.bc to JavaClass.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.s +llvm[3]: Compiling JavaClass.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.o +llvm[3]: Compiling JavaConstantPool.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d" \ + JavaConstantPool.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaConstantPool.ll to JavaConstantPool.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.bc +llvm[3]: Compiling JavaConstantPool.bc to JavaConstantPool.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.s +llvm[3]: Compiling JavaConstantPool.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.o +llvm[3]: Compiling JavaMetaJIT.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d" \ + JavaMetaJIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaMetaJIT.ll to JavaMetaJIT.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.bc +llvm[3]: Compiling JavaMetaJIT.bc to JavaMetaJIT.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.s +llvm[3]: Compiling JavaMetaJIT.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.o +llvm[3]: Compiling JavaObject.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d" \ + JavaObject.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d.tmp"; exit 1; fi +In file included from JavaObject.cpp:21: +In file included from /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/VMStaticInstance.h:13: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:149:8: warning: private field 'running' is not used [-Wunused-private-field] + bool running; + ^ +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +2 warnings generated. +llvm[3]: Compiling JavaObject.ll to JavaObject.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.bc +llvm[3]: Compiling JavaObject.bc to JavaObject.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.s +llvm[3]: Compiling JavaObject.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.o +llvm[3]: Compiling JavaRuntimeJIT.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d" \ + JavaRuntimeJIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d.tmp"; exit 1; fi +In file included from JavaRuntimeJIT.cpp:12: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling JavaRuntimeJIT.ll to JavaRuntimeJIT.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.bc +llvm[3]: Compiling JavaRuntimeJIT.bc to JavaRuntimeJIT.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.s +llvm[3]: Compiling JavaRuntimeJIT.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.o +llvm[3]: Compiling JavaString.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d" \ + JavaString.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaString.ll to JavaString.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.bc +llvm[3]: Compiling JavaString.bc to JavaString.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.s +llvm[3]: Compiling JavaString.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.o +llvm[3]: Compiling JavaThread.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d" \ + JavaThread.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaThread.ll to JavaThread.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.bc +llvm[3]: Compiling JavaThread.bc to JavaThread.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.s +llvm[3]: Compiling JavaThread.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.o +llvm[3]: Compiling JavaTypes.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d" \ + JavaTypes.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaTypes.ll to JavaTypes.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.bc +llvm[3]: Compiling JavaTypes.bc to JavaTypes.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.s +llvm[3]: Compiling JavaTypes.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.o +llvm[3]: Compiling Jni.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d" \ + Jni.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d.tmp"; exit 1; fi +In file included from Jni.cpp:14: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling Jni.ll to Jni.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.bc +llvm[3]: Compiling Jni.bc to Jni.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.s +llvm[3]: Compiling Jni.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.o +llvm[3]: Compiling Jnjvm.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d" \ + Jnjvm.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d.tmp"; exit 1; fi +In file included from Jnjvm.cpp:24: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling Jnjvm.ll to Jnjvm.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.bc +llvm[3]: Compiling Jnjvm.bc to Jnjvm.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.s +llvm[3]: Compiling Jnjvm.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.o +llvm[3]: Compiling JnjvmClassLoader.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d" \ + JnjvmClassLoader.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d.tmp"; exit 1; fi +In file included from JnjvmClassLoader.cpp:30: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling JnjvmClassLoader.ll to JnjvmClassLoader.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.bc +llvm[3]: Compiling JnjvmClassLoader.bc to JnjvmClassLoader.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.s +llvm[3]: Compiling JnjvmClassLoader.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.o +llvm[3]: Compiling JnjvmIntOSGi.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d" \ + JnjvmIntOSGi.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d.tmp"; exit 1; fi +In file included from JnjvmIntOSGi.cpp:6: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling JnjvmIntOSGi.ll to JnjvmIntOSGi.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.bc +llvm[3]: Compiling JnjvmIntOSGi.bc to JnjvmIntOSGi.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.s +llvm[3]: Compiling JnjvmIntOSGi.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.o +llvm[3]: Compiling JnjvmStaleRef.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d" \ + JnjvmStaleRef.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d.tmp"; exit 1; fi +In file included from JnjvmStaleRef.cpp:4: +In file included from /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/VMStaticInstance.h:13: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling JnjvmStaleRef.ll to JnjvmStaleRef.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.bc +llvm[3]: Compiling JnjvmStaleRef.bc to JnjvmStaleRef.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.s +llvm[3]: Compiling JnjvmStaleRef.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.o +llvm[3]: Compiling Precompiled.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d" \ + Precompiled.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling Precompiled.ll to Precompiled.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.bc +llvm[3]: Compiling Precompiled.bc to Precompiled.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.s +llvm[3]: Compiling Precompiled.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.o +llvm[3]: Compiling Reader.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d" \ + Reader.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling Reader.ll to Reader.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.bc +llvm[3]: Compiling Reader.bc to Reader.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.s +llvm[3]: Compiling Reader.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.o +llvm[3]: Compiling ReferenceQueue.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d" \ + ReferenceQueue.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d.tmp"; exit 1; fi +In file included from ReferenceQueue.cpp:10: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling ReferenceQueue.ll to ReferenceQueue.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.bc +llvm[3]: Compiling ReferenceQueue.bc to ReferenceQueue.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.s +llvm[3]: Compiling ReferenceQueue.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.o +llvm[3]: Compiling VirtualTables.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d" \ + VirtualTables.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d.tmp"; exit 1; fi +In file included from VirtualTables.cpp:24: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling VirtualTables.ll to VirtualTables.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.bc +llvm[3]: Compiling VirtualTables.bc to VirtualTables.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.s +llvm[3]: Compiling VirtualTables.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.o +llvm[3]: Compiling Zip.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d" \ + Zip.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling Zip.ll to Zip.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.bc +llvm[3]: Compiling Zip.bc to Zip.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.s +llvm[3]: Compiling Zip.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.o +llvm[3]: Building Debug+Asserts Archive Library libJ3.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.o /med! ia/Data/D ocuments/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.o /media/Data/Documents/Studies/MyWork/Ph! D/VMKit/v mkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore' +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib' +for dir in GNUClasspath; do \ + (make -C $dir all ) || exit 1; \ + done +make[4]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/.dir +llvm[4]: Compiling ClasspathReflect.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/../../VMCore -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/.. -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_sta! le_ref/li b/j3/ClassLib/GNUClasspath/.. -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d" \ + ClasspathReflect.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d.tmp"; exit 1; fi +In file included from ClasspathReflect.cpp:10: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:76:9: warning: private field 'flag' is not used [-Wunused-private-field] + uint8 flag; + ^ +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:105:9: warning: private field 'flag' is not used [-Wunused-private-field] + uint8 flag; + ^ +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:130:9: warning: private field 'flag' is not used [-Wunused-private-field] + uint8 flag; + ^ +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +4 warnings generated. +llvm[4]: Compiling ClasspathReflect.ll to ClasspathReflect.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.bc +llvm[4]: Compiling ClasspathReflect.bc to ClasspathReflect.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.s +llvm[4]: Compiling ClasspathReflect.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.o +llvm[4]: Compiling JavaUpcalls.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/../../VMCore -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/.. -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_sta! le_ref/li b/j3/ClassLib/GNUClasspath/.. -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d" \ + JavaUpcalls.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d.tmp"; exit 1; fi +In file included from JavaUpcalls.cpp:10: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[4]: Compiling JavaUpcalls.ll to JavaUpcalls.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.bc +llvm[4]: Compiling JavaUpcalls.bc to JavaUpcalls.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.s +llvm[4]: Compiling JavaUpcalls.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.o +llvm[4]: Building Debug+Asserts Archive Library libClasspath.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a +make[4]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath' +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib' +make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/.dir +llvm[3]: Compiling J3Intrinsics.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d" \ + J3Intrinsics.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling J3Intrinsics.ll to J3Intrinsics.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.bc +llvm[3]: Compiling J3Intrinsics.bc to J3Intrinsics.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.s +llvm[3]: Compiling J3Intrinsics.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.o +llvm[3]: Compiling JavaAOTCompiler.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d" \ + JavaAOTCompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d.tmp"; exit 1; fi +In file included from JavaAOTCompiler.cpp:35: +In file included from /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/VMStaticInstance.h:13: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] + JavaObject* nextOnQueue; + ^ +1 warning generated. +llvm[3]: Compiling JavaAOTCompiler.ll to JavaAOTCompiler.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.bc +llvm[3]: Compiling JavaAOTCompiler.bc to JavaAOTCompiler.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.s +llvm[3]: Compiling JavaAOTCompiler.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.o +llvm[3]: Compiling JavaJIT.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d" \ + JavaJIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaJIT.ll to JavaJIT.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.bc +llvm[3]: Compiling JavaJIT.bc to JavaJIT.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.s +llvm[3]: Compiling JavaJIT.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.o +llvm[3]: Compiling JavaJITCompiler.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d" \ + JavaJITCompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaJITCompiler.ll to JavaJITCompiler.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.bc +llvm[3]: Compiling JavaJITCompiler.bc to JavaJITCompiler.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.s +llvm[3]: Compiling JavaJITCompiler.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.o +llvm[3]: Compiling JavaJITOpcodes.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d" \ + JavaJITOpcodes.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d.tmp"; exit 1; fi +JavaJITOpcodes.cpp:2304:14: warning: unused variable 'thisReference' [-Wunused-variable] + bool thisReference = isThisReference(currentStackIndex - 1); + ^ +In file included from JavaJITOpcodes.cpp:39: +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include/j3/OpcodeNames.def:13:20: warning: unused variable 'OpcodeNames' [-Wunused-variable] +static const char* OpcodeNames[256] = { + ^ +2 warnings generated. +llvm[3]: Compiling JavaJITOpcodes.ll to JavaJITOpcodes.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.bc +llvm[3]: Compiling JavaJITOpcodes.bc to JavaJITOpcodes.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.s +llvm[3]: Compiling JavaJITOpcodes.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.o +llvm[3]: Compiling JavaLLVMCompiler.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d" \ + JavaLLVMCompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling JavaLLVMCompiler.ll to JavaLLVMCompiler.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.bc +llvm[3]: Compiling JavaLLVMCompiler.bc to JavaLLVMCompiler.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.s +llvm[3]: Compiling JavaLLVMCompiler.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.o +llvm[3]: Compiling LLVMInfo.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d" \ + LLVMInfo.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling LLVMInfo.ll to LLVMInfo.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.bc +llvm[3]: Compiling LLVMInfo.bc to LLVMInfo.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.s +llvm[3]: Compiling LLVMInfo.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.o +llvm[3]: Compiling LowerConstantCalls.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d" \ + LowerConstantCalls.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d.tmp"; exit 1; fi +llvm[3]: Compiling LowerConstantCalls.ll to LowerConstantCalls.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.bc +llvm[3]: Compiling LowerConstantCalls.bc to LowerConstantCalls.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.s +llvm[3]: Compiling LowerConstantCalls.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.o +llvm[3]: Building Debug+Asserts Archive Library libJ3Compiler.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/De! bug+Asser ts/LowerConstantCalls_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a +make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler' +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3' +make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib' +make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/.dir +llvm[1]: Compiling vmjc.cpp for Debug+Asserts build +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d" vmjc.cpp! -o /medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d.tmp"; exit 1; fi +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/.dir +llvm[1]: Linking Debug+Asserts executable vmjc +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/Debug+Asserts/bin/vmjc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.o -lJ3 -lClasspath -lJ3 -lJ3Compiler -lVmkit -lVmkitCompiler -lMMTk -lCommonThread \ + -lLLVMBitWriter -lLLVMipo -lLLVMVectorize -lLLVMInstrumentation -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMJIT -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lpthread -ldl -lm -lz +llvm[1]: ======= Finished Linking Debug+Asserts Executable vmjc +make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' +make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk' +for dir in magic mmtk-j3 mmtk-alloc java inline; do \ + (make -C $dir all ) || exit 1; \ + done +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/.dir +llvm[2]: Compiling LowerJavaRT.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/Lo! werJavaRT .d" LowerJavaRT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d.tmp"; exit 1; fi +llvm[2]: Compiling LowerMagic.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/Lowe! rMagic.d" LowerMagic.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d.tmp"; exit 1; fi +llvm[2]: Linking Debug+Asserts Loadable Module MMTKMagic.so +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKMagic.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmt! k/magic/D ebug+Asserts/LowerJavaRT.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.o \ + -lpthread -ldl -lm -lz +llvm[2]: Compiling LowerJavaRT.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.ll" -MT "/media/Data/Documents/Studies/MyWork/P! hD/VMKit/ vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d" \ + LowerJavaRT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling LowerJavaRT.ll to LowerJavaRT.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc +llvm[2]: Compiling LowerMagic.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD! /VMKit/vm kit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d" \ + LowerMagic.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling LowerMagic.ll to LowerMagic.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc +llvm[2]: Building Debug+Asserts Bytecode Archive libMMTKMagic.bca +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKMagic.bca +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKMagic.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic' +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/.dir +llvm[2]: Compiling ActivePlan.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit! /vmkit_st ale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d" \ + ActivePlan.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling ActivePlan.ll to ActivePlan.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc +llvm[2]: Compiling Assert.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/mmtk/mmtk-j3/Debug+Asserts/Assert.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d" \ + Assert.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Assert.ll to Assert.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc +llvm[2]: Compiling Collection.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit! /vmkit_st ale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d" \ + Collection.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Collection.ll to Collection.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc +llvm[2]: Compiling FinalizableProcessor.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork! /PhD/VMKi t/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d" \ + FinalizableProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling FinalizableProcessor.ll to FinalizableProcessor.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc +llvm[2]: Compiling Lock.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit! _stale_re f/mmtk/mmtk-j3/Debug+Asserts/Lock.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d" \ + Lock.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Lock.ll to Lock.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc +llvm[2]: Compiling MMTk_Events.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKi! t/vmkit_s tale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d" \ + MMTk_Events.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling MMTk_Events.ll to MMTk_Events.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc +llvm[2]: Compiling Memory.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/mmtk/mmtk-j3/Debug+Asserts/Memory.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d" \ + Memory.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Memory.ll to Memory.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc +llvm[2]: Compiling ObjectModel.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKi! t/vmkit_s tale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d" \ + ObjectModel.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling ObjectModel.ll to ObjectModel.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc +llvm[2]: Compiling ReferenceProcessor.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/P! hD/VMKit/ vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d" \ + ReferenceProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling ReferenceProcessor.ll to ReferenceProcessor.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc +llvm[2]: Compiling RuntimeHelpers.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/V! MKit/vmki t_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d" \ + RuntimeHelpers.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling RuntimeHelpers.ll to RuntimeHelpers.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc +llvm[2]: Compiling Scanning.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/v! mkit_stal e_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d" \ + Scanning.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Scanning.ll to Scanning.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc +llvm[2]: Compiling Selected.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/v! mkit_stal e_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d" \ + Selected.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Selected.ll to Selected.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc +llvm[2]: Compiling Statistics.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit! /vmkit_st ale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d" \ + Statistics.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Statistics.ll to Statistics.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc +llvm[2]: Compiling Strings.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vm! kit_stale _ref/mmtk/mmtk-j3/Debug+Asserts/Strings.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d" \ + Strings.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Strings.ll to Strings.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc +llvm[2]: Compiling SynchronizedCounter.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/! PhD/VMKit /vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d" \ + SynchronizedCounter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling SynchronizedCounter.ll to SynchronizedCounter.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc +llvm[2]: Compiling TraceInterface.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/V! MKit/vmki t_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d" \ + TraceInterface.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling TraceInterface.ll to TraceInterface.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc +llvm[2]: Compiling VM.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_s! tale_ref/ mmtk/mmtk-j3/Debug+Asserts/VM.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d" \ + VM.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling VM.ll to VM.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc +llvm[2]: Building Debug+Asserts Bytecode Module MMTKRuntime.bc +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-link -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKRuntime.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc /! media/Dat a/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc +llvm[2]: Compiling ActivePlan.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActiveP! lan.o" -M T "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d" ActivePlan.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d.tmp"; exit 1; fi +llvm[2]: Compiling Assert.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.o" -! MT "/medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d" Assert.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d.tmp"; exit 1; fi +llvm[2]: Compiling Collection.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collect! ion.o" -M T "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d" Collection.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d.tmp"; exit 1; fi +llvm[2]: Compiling FinalizableProcessor.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asser! ts/Finali zableProcessor.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d" FinalizableProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d.tmp"; exit 1; fi +llvm[2]: Compiling Lock.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.o" -MT "! /media/Da ta/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d" Lock.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d.tmp"; exit 1; fi +llvm[2]: Compiling MMTk_Events.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_E! vents.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d" MMTk_Events.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d.tmp"; exit 1; fi +llvm[2]: Compiling Memory.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.o" -! MT "/medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d" Memory.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d.tmp"; exit 1; fi +llvm[2]: Compiling ObjectModel.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Object! Model.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d" ObjectModel.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d.tmp"; exit 1; fi +llvm[2]: Compiling ReferenceProcessor.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts! /Referenc eProcessor.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d" ReferenceProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d.tmp"; exit 1; fi +llvm[2]: Compiling RuntimeHelpers.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Run! timeHelpe rs.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d" RuntimeHelpers.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d.tmp"; exit 1; fi +llvm[2]: Compiling Scanning.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.! o" -MT "/ media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d" Scanning.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d.tmp"; exit 1; fi +llvm[2]: Compiling Selected.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.! o" -MT "/ media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d" Selected.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d.tmp"; exit 1; fi +llvm[2]: Compiling Statistics.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statist! ics.o" -M T "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d" Statistics.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d.tmp"; exit 1; fi +llvm[2]: Compiling Strings.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.o"! -MT "/me dia/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d" Strings.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d.tmp"; exit 1; fi +llvm[2]: Compiling SynchronizedCounter.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Assert! s/Synchro nizedCounter.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d" SynchronizedCounter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d.tmp"; exit 1; fi +llvm[2]: Compiling TraceInterface.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Tra! ceInterfa ce.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d" TraceInterface.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d.tmp"; exit 1; fi +llvm[2]: Compiling VM.cpp for Debug+Asserts build (PIC) +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.o" -MT "/med! ia/Data/D ocuments/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d" VM.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d.tmp"; exit 1; fi +llvm[2]: Linking Debug+Asserts Loadable Module MMTKRuntime.so +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_r! ef/Debug+ Asserts/lib/MMTKRuntime.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.o /media/Data/Documents/Studie! s/MyWork/ PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.o \ + -lpthread -ldl -lm -lz +llvm[2]: Building Debug+Asserts Bytecode Archive libMMTKRuntime.bca +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKRuntime.bca +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKRuntime.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.! bc /media /Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3' +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/.dir +llvm[2]: Compiling Selected.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/Ph! D/VMKit/v mkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d" \ + Selected.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling Selected.ll to Selected.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc +llvm[2]: Building Debug+Asserts Bytecode Module MMTKAlloc.bc +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-link -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc' +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java' +/usr/bin/ant -buildfile /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/build.xml +Buildfile: /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/build.xml + +main: + [mkdir] Created dir: /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/classes + [javac] Compiling 380 source files to /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/classes + [javac] Note: Some input files use or override a deprecated API. + [javac] Note: Recompile with -Xlint:deprecation for details. + [jar] Building jar: /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/mmtk-vmkit.jar + +BUILD SUCCESSFUL +Total time: 15 seconds +llvm[2]: Building Debug+Asserts mmtk-vmkit.jar all +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/JITGCPass.so -JITGCPass -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/vmjc -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKRuntime.so -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKMagic.so -LowerMagic /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/mmtk-vmkit.jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o mmtk-vmkit.bc -Dmmtk.properties=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/vmkit.properties -disable-stubs -assume-compiled +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKMagic.so -LowerJavaRT -f mmtk-vmkit.bc -o mmtk-vmkit-optimized.bc +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-link -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc mmtk-vmkit-optimized.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKRuntime.bc +WARNING: Linking two modules of different data layouts! +WARNING: Linking two modules of different target triples: mmtk-vmkit-optimized.bc: 'i686-pc-linux-gnu' and 'i386-pc-linux-gnu' +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-fp-elim -disable-cfi -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s +/bin/grep -v '\.loc[^0-9]\+[0-9]\+ 0' /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s.remove_invalid_dot_loc +/bin/mv -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s.remove_invalid_dot_loc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.o +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=gcmalloc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkMallocInline.inc +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=fieldWriteBarrier /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkFieldWriteInline.inc +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=arrayWriteBarrier /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkArrayWriteInline.inc +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkNonHeapWriteInline.inc +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java' +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/.dir +llvm[2]: Compiling InlineMethods.cpp for Debug+Asserts build (bytecode) +if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-unused-variable -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.ll" -MT "/media/Dat! a/Documen ts/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d" \ + InlineMethods.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.ll -S "-emit-llvm" ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d.tmp"; exit 1; fi +llvm[2]: Compiling InlineMethods.ll to InlineMethods.bc for Debug+Asserts build (bytecode) +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.bc +llvm[2]: Compiling InlineMethods.bc to InlineMethods.s for Debug+Asserts build +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.s +llvm[2]: Compiling InlineMethods.s for Debug+Asserts build +gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-unused-variable -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.o +llvm[2]: Building Debug+Asserts Archive Library libInlineMMTk.a +/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline' +make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk' +make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler' +nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > FrametablesSymbols.inc +nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > FrametablesExterns.inc +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/.dir +llvm[1]: Compiling Precompiler.cpp for Debug+Asserts build +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/! precompil er/Debug+Asserts/Precompiler.d" Precompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d.tmp"; exit 1; fi +llvm[1]: Linking Debug+Asserts executable precompiler +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VM! Kit/vmkit _stale_ref/Debug+Asserts/bin/precompiler /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.o -lClasspath -lJ3 -lJ3Compiler -lVmkit -lVmkitCompiler -lCommonThread -lFinalMMTk \ + -lLLVMBitWriter -lLLVMLinker -lLLVMArchive -lLLVMBitReader -lLLVMAsmParser -lLLVMipo -lLLVMVectorize -lLLVMInstrumentation -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMJIT -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lpthread -ldl -lm -lz +llvm[1]: ======= Finished Linking Debug+Asserts Executable precompiler +for dir in trainer; do \ + (make -C $dir all ) || exit 1; \ + done +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer' +llvm[2]: Compiling trainer +javac HelloWorld.java -d . +llvm[2]: Pre-compiling bootstrap code +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/precompiler -cp $PWD HelloWorld +Hello World +----------------- Info from the module ----------------- +Number of native classes : 583 +Number of Java classes : 0 +Number of external array classes : 0 +Number of virtual tables : 583 +Number of static instances : 389 +Number of constant pools : 389 +Number of strings : 0 +Number of native functions : 16 +----------------- Total size in .data ------------------ +63552B +llvm[2]: Building precompiled bootstrap code +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so generated.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.s +gcc -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.o +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a +/bin/cp generated.bc Precompiled.bc +llvm[2]: Pre-compiling classes +/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/precompiler -emit-class-bytes +llvm[2]: Building precompiled classes +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts +/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc classes.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.s +gcc -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.o +ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.o +ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a +/bin/cp classes.bc BootstrapClasses.bc +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer' +make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler' +make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools' +\ + SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3; \ + DD=j3; \ + if [ ! -f $SD/Makefile ]; then \ + SD=j3; \ + DD=j3; \ + fi; \ + if ([ ! -f $DD/Makefile ] || \ + command test $DD/Makefile -ot \ + $SD/Makefile ); then \ + /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ + /bin/cp $SD/Makefile $DD/Makefile; \ + fi; \ + make -C $DD all +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3' +nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a | grep __frametabl! e | sed ' s/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > FrametablesSymbols.inc +nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a | grep __frametabl! e | sed ' s/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > FrametablesExterns.inc +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/.dir +llvm[2]: Compiling Main.cpp for Debug+Asserts build +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d" Main.cpp -o /med! ia/Data/D ocuments/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d.tmp"; exit 1; fi +llvm[2]: Linking Debug+Asserts executable j3 +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit! _stale_re f/Debug+Asserts/bin/j3 /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.o -lClasspath -lJ3 -lJ3Compiler -lVmkit -lVmkitCompiler -lCommonThread -lFinalMMTk -lInlineMMTk -lPrecompiled -lBootstrapClasses \ + -lLLVMipo -lLLVMVectorize -lLLVMInstrumentation -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMJIT -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lpthread -ldl -lm -lz +llvm[2]: ======= Finished Linking Debug+Asserts Executable j3 +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3' +\ + SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc; \ + DD=vmjc; \ + if [ ! -f $SD/Makefile ]; then \ + SD=vmjc; \ + DD=vmjc; \ + fi; \ + if ([ ! -f $DD/Makefile ] || \ + command test $DD/Makefile -ot \ + $SD/Makefile ); then \ + /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ + /bin/cp $SD/Makefile $DD/Makefile; \ + fi; \ + make -C $DD all +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' +make[2]: Nothing to be done for `all'. +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' +\ + SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj; \ + DD=llcj; \ + if [ ! -f $SD/Makefile ]; then \ + SD=llcj; \ + DD=llcj; \ + fi; \ + if ([ ! -f $DD/Makefile ] || \ + command test $DD/Makefile -ot \ + $SD/Makefile ); then \ + /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ + /bin/cp $SD/Makefile $DD/Makefile; \ + fi; \ + make -C $DD all +make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj' +/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts > /dev/null +/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/.dir +llvm[2]: Compiling llcj.cpp for Debug+Asserts build +if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d" llcj.cpp! -o /medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.o ; \ + then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d.tmp"; exit 1; fi +llvm[2]: Linking Debug+Asserts executable llcj +g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/Debug+Asserts/bin/llcj /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.o \ + -lLLVMSupport -lpthread -ldl -lm -lz +llvm[2]: ======= Finished Linking Debug+Asserts Executable llcj +make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj' +make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools' From peter.senna at gmail.com Thu Apr 25 09:56:24 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:24 -0000 Subject: [vmkit-commits] [vmkit] r180321 - Added stale reference test: stale reference to object received from service call. Message-ID: <20130425165454.8A4822A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:54:54 2013 New Revision: 180321 URL: http://llvm.org/viewvc/llvm-project?rev=180321&view=rev Log: Added stale reference test: stale reference to object received from service call. (cherry picked from commit 7b1d7bbe137a4ad97347b96ef5f903bbee543b34) Modified: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java Modified: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java?rev=180321&r1=180320&r2=180321&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java Thu Apr 25 11:54:54 2013 @@ -37,15 +37,17 @@ public class Activator aST.open(); A service = (A)aST.getService(); - if (service != null) { + if (service != null) + a.add(service); + + context.addServiceListener(this, "(objectclass=" + A.class.getName() + ")"); + + if (a != null) { System.out.println("BImpl got A @ startup"); - a.add(service); this.useA(); } - context.addServiceListener(this, "(objectclass=" + A.class.getName() + ")"); - b = new BImpl(); context.registerService(B.class.getName(), b, null); } From peter.senna at gmail.com Thu Apr 25 09:56:25 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:25 -0000 Subject: [vmkit-commits] [vmkit] r180320 - Fix threading bug in GNU ClassPath and OpenJDK interface code.(cherry picked from commit 2824ee4edcf84fb4f17c7cd7e96ebe0220c2cc0e) Message-ID: <20130425165449.6BEB51BE99C@llvm.org> Author: peter.senna Date: Thu Apr 25 11:54:48 2013 New Revision: 180320 URL: http://llvm.org/viewvc/llvm-project?rev=180320&view=rev Log: Fix threading bug in GNU ClassPath and OpenJDK interface code.(cherry picked from commit 2824ee4edcf84fb4f17c7cd7e96ebe0220c2cc0e) Removed: vmkit/trunk/make.log Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc?rev=180320&r1=180319&r2=180320&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 11:54:48 2013 @@ -56,13 +56,6 @@ void start(JavaThread* thread) { javaThread = thread->javaThread; assert(javaThread && "Didn't fix the javaThread of a j3 thread"); - // If the thread is not a daemon, it is added to the list of threads to - // wait until exit. - bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); - - if (!isDaemon) { - vm->threadSystem.enter(); - } assert(vmThread->getVirtualTable()); assert(javaThread->getVirtualTable()); @@ -70,6 +63,7 @@ void start(JavaThread* thread) { vm->upcalls->runVMThread->invokeIntSpecial(vm, vmthClass, vmThread); // Remove the thread from the list. + bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); if (!isDaemon) { vm->threadSystem.leave(); } @@ -95,6 +89,15 @@ JavaObject* vmThread, sint64 stackSize) JavaThread* th = new JavaThread(vm); if (!th) vm->outOfMemoryError(); + + // If the thread is not a daemon, it is added to the list of threads to + // wait until exit. + bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); + + if (!isDaemon) { + vm->threadSystem.enter(); + } + th->start((void (*)(vmkit::Thread*))start); // Now that the thread has been created, initialise its object fields. th->initialise(javaThread, vmThread); Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180320&r1=180319&r2=180320&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 11:54:48 2013 @@ -535,14 +535,6 @@ void start(JavaThread* thread) { javaThread = thread->javaThread; assert(javaThread && "Didn't fix the javaThread of a j3 thread"); - // If the thread is not a daemon, it is added to the list of threads to - // wait until exit. - bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); - - if (!isDaemon) { - vm->threadSystem.enter(); - } - assert(javaThread->getVirtualTable()); // Get the class for this Thread @@ -592,6 +584,7 @@ void start(JavaThread* thread) { JavaObject::release(javaThread); // Remove the thread from the list. + bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); if (!isDaemon) { vm->threadSystem.leave(); } @@ -626,6 +619,14 @@ JVM_StartThread(JNIEnv *env, jobject _th // Set the eetop field vm->upcalls->eetop->setInstanceLongField(thread, (long)newTh); + // If the thread is not a daemon, it is added to the list of threads to + // wait until exit. + bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); + + if (!isDaemon) { + vm->threadSystem.enter(); + } + newTh->start((void (*)(vmkit::Thread*))start); newTh->initialise(thread, sleepObject); Removed: vmkit/trunk/make.log URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/make.log?rev=180319&view=auto ============================================================================== --- vmkit/trunk/make.log (original) +++ vmkit/trunk/make.log (removed) @@ -1,1085 +0,0 @@ -for dir in lib/vmkit/StaticGCPass lib/vmkit/StaticGCPrinter lib tools/vmjc mmtk tools/precompiler tools; do \ - (make -C $dir all ) || exit 1; \ - done -make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/.dir -llvm[1]: Compiling StaticGCPass.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit! _stale_re f/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d" StaticGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.d.tmp"; exit 1; fi -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/.dir -llvm[1]: Linking Debug+Asserts Loadable Module StaticGCPass.so -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmki! t_stale_r ef/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.o \ - -lpthread -ldl -lm -lz -llvm[1]: Compiling StaticGCPass.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.ll" -MT "! /media/Da ta/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d" \ - StaticGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc.d.tmp"; exit 1; fi -llvm[1]: Compiling StaticGCPass.ll to StaticGCPass.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc -llvm[1]: Building Debug+Asserts Bytecode Archive libStaticGCPass.bca -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPass.bca -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPass.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass/Debug+Asserts/StaticGCPass.bc -make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPass' -make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/.dir -llvm[1]: Compiling VmkitGCPrinter.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.o" -MT "/media/Data/Documents/Studies/MyWork/Ph! D/VMKit/v mkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d" VmkitGCPrinter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.d.tmp"; exit 1; fi -llvm[1]: Linking Debug+Asserts Loadable Module StaticGCPrinter.so -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKi! t/vmkit_s tale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.o \ - -lpthread -ldl -lm -lz -llvm[1]: Compiling VmkitGCPrinter.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrin! ter.ll" - MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d" \ - VmkitGCPrinter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc.d.tmp"; exit 1; fi -llvm[1]: Compiling VmkitGCPrinter.ll to VmkitGCPrinter.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc -llvm[1]: Building Debug+Asserts Bytecode Archive libStaticGCPrinter.bca -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPrinter.bca -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libStaticGCPrinter.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter/Debug+Asserts/VmkitGCPrinter.bc -make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/StaticGCPrinter' -make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib' -\ - SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit; \ - DD=vmkit; \ - if [ ! -f $SD/Makefile ]; then \ - SD=vmkit; \ - DD=vmkit; \ - fi; \ - if ([ ! -f $DD/Makefile ] || \ - command test $DD/Makefile -ot \ - $SD/Makefile ); then \ - /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ - /bin/cp $SD/Makefile $DD/Makefile; \ - fi; \ - make -C $DD all -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit' -for dir in CommonThread MMTk Runtime Compiler JITGCPass; do \ - (make -C $dir all ) || exit 1; \ - done -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/.dir -llvm[3]: Compiling CollectionRV.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.ll" -MT "! /media/Da ta/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d" \ - CollectionRV.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling CollectionRV.ll to CollectionRV.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.bc -llvm[3]: Compiling CollectionRV.bc to CollectionRV.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.s -llvm[3]: Compiling CollectionRV.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.o -llvm[3]: Compiling ObjectLocks.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.ll" -MT "/m! edia/Data /Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d" \ - ObjectLocks.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling ObjectLocks.ll to ObjectLocks.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.bc -llvm[3]: Compiling ObjectLocks.bc to ObjectLocks.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.s -llvm[3]: Compiling ObjectLocks.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.o -llvm[3]: Compiling Sigsegv.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.ll" -MT "/media/Dat! a/Documen ts/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d" \ - Sigsegv.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling Sigsegv.ll to Sigsegv.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.bc -llvm[3]: Compiling Sigsegv.bc to Sigsegv.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.s -llvm[3]: Compiling Sigsegv.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.o -llvm[3]: Compiling ctlock.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.ll" -MT "/media/Data/! Documents /Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d" \ - ctlock.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling ctlock.ll to ctlock.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.bc -llvm[3]: Compiling ctlock.bc to ctlock.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.s -llvm[3]: Compiling ctlock.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.o -llvm[3]: Compiling ctthread.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.ll" -MT "/media/D! ata/Docum ents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d" \ - ctthread.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling ctthread.ll to ctthread.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.bc -llvm[3]: Compiling ctthread.bc to ctthread.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.s -llvm[3]: Compiling ctthread.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.o -llvm[3]: Building Debug+Asserts Archive Library libCommonThread.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/CollectionRV_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ObjectLocks_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/Sigsegv_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctlock_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread/Debug+Asserts/ctthread_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/CommonThread' -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/.dir -llvm[3]: Compiling VmkitGC.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.ll" -MT "/media/Data/Documents/Studies/MyWo! rk/PhD/VM Kit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d" \ - VmkitGC.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling VmkitGC.ll to VmkitGC.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.bc -llvm[3]: Compiling VmkitGC.bc to VmkitGC.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.s -llvm[3]: Compiling VmkitGC.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.o -llvm[3]: Building Debug+Asserts Archive Library libMMTk.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTk.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk/Debug+Asserts/VmkitGC_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTk.a -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk' -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/.dir -llvm[3]: Compiling MethodInfo.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.ll" -MT "/media/Data/Documen! ts/Studie s/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d" \ - MethodInfo.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling MethodInfo.ll to MethodInfo.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.bc -llvm[3]: Compiling MethodInfo.bc to MethodInfo.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.s -llvm[3]: Compiling MethodInfo.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.o -llvm[3]: Compiling Object.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.ll" -MT "/media/Data/Documents/Studi! es/MyWork /PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d" \ - Object.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling Object.ll to Object.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.bc -llvm[3]: Compiling Object.bc to Object.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.s -llvm[3]: Compiling Object.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.o -llvm[3]: Compiling UTF8.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.ll" -MT "/media/Data/Documents/Studies/M! yWork/PhD /VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d" \ - UTF8.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling UTF8.ll to UTF8.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.bc -llvm[3]: Compiling UTF8.bc to UTF8.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.s -llvm[3]: Compiling UTF8.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.o -llvm[3]: Building Debug+Asserts Archive Library libVmkit.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/MethodInfo_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/Object_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime/Debug+Asserts/UTF8_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Runtime' -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler' -llvm[3]: Building LLVM runtime with /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/LLVMRuntime.ll -cat /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/LLVMRuntime.ll | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-as -o - | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=contents -o LLVMRuntime.inc -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/.dir -llvm[3]: Compiling Disassembler.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.ll" -MT "/media/Data/! Documents /Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d" \ - Disassembler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling Disassembler.ll to Disassembler.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.bc -llvm[3]: Compiling Disassembler.bc to Disassembler.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.s -llvm[3]: Compiling Disassembler.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.o -llvm[3]: Compiling EscapeAnalysis.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.ll" -MT "/media/D! ata/Docum ents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d" \ - EscapeAnalysis.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling EscapeAnalysis.ll to EscapeAnalysis.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.bc -llvm[3]: Compiling EscapeAnalysis.bc to EscapeAnalysis.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.s -llvm[3]: Compiling EscapeAnalysis.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.o -llvm[3]: Compiling InlineMalloc.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.ll" -MT "/media/Data/! Documents /Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d" \ - InlineMalloc.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling InlineMalloc.ll to InlineMalloc.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.bc -llvm[3]: Compiling InlineMalloc.bc to InlineMalloc.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.s -llvm[3]: Compiling InlineMalloc.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.o -llvm[3]: Compiling JIT.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.ll" -MT "/media/Data/Documents/Studies/! MyWork/Ph D/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d" \ - JIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JIT.ll to JIT.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.bc -llvm[3]: Compiling JIT.bc to JIT.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.s -llvm[3]: Compiling JIT.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.o -llvm[3]: Compiling VmkitGC.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.ll" -MT "/media/Data/Documents/! Studies/M yWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d" \ - VmkitGC.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling VmkitGC.ll to VmkitGC.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.bc -llvm[3]: Compiling VmkitGC.bc to VmkitGC.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.s -llvm[3]: Compiling VmkitGC.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.o -llvm[3]: Building Debug+Asserts Archive Library libVmkitCompiler.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/Disassembler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/EscapeAnalysis_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/InlineMalloc_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/JIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler/Debug+Asserts/VmkitGC_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/Compiler' -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/.dir -llvm[3]: Compiling JITGCPass.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/! vmkit/JIT GCPass/Debug+Asserts/JITGCPass.d" JITGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.d.tmp"; exit 1; fi -llvm[3]: Linking Debug+Asserts Loadable Module JITGCPass.so -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/JITGCPass.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stal! e_ref/lib /vmkit/JITGCPass/Debug+Asserts/JITGCPass.o \ - -lpthread -ldl -lm -lz -llvm[3]: Compiling JITGCPass.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.ll" -MT "/media/Data/Doc! uments/St udies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d" \ - JITGCPass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JITGCPass.ll to JITGCPass.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc -llvm[3]: Building Debug+Asserts Bytecode Archive libJITGCPass.bca -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJITGCPass.bca -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJITGCPass.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass/Debug+Asserts/JITGCPass.bc -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/JITGCPass' -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit' -\ - SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3; \ - DD=j3; \ - if [ ! -f $SD/Makefile ]; then \ - SD=j3; \ - DD=j3; \ - fi; \ - if ([ ! -f $DD/Makefile ] || \ - command test $DD/Makefile -ot \ - $SD/Makefile ); then \ - /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ - /bin/cp $SD/Makefile $DD/Makefile; \ - fi; \ - make -C $DD all -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3' -for dir in LLVMRuntime VMCore ClassLib Compiler; do \ - (make -C $dir all ) || exit 1; \ - done -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime' -llvm[3]: Building LLVM runtime with /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-default.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-mmtk-thread.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-single.ll -cat /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-default.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-mmtk-thread.ll /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime/runtime-single.ll | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-as -o - | /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=contents -o LLVMRuntime.inc -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/LLVMRuntime' -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/.dir -llvm[3]: Compiling JavaArray.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d" \ - JavaArray.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaArray.ll to JavaArray.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.bc -llvm[3]: Compiling JavaArray.bc to JavaArray.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.s -llvm[3]: Compiling JavaArray.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.o -llvm[3]: Compiling JavaClass.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d" \ - JavaClass.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.bc.d.tmp"; exit 1; fi -JavaClass.cpp:1772:21: warning: comparison of integers of different signs: 'size_t' (aka 'unsigned int') and 'const int32_t' (aka 'const int') [-Wsign-compare] - for (size_t i=0; i < name->size; ++i) { - ~ ^ ~~~~~~~~~~ -In file included from JavaClass.cpp:17: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -2 warnings generated. -llvm[3]: Compiling JavaClass.ll to JavaClass.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.bc -llvm[3]: Compiling JavaClass.bc to JavaClass.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.s -llvm[3]: Compiling JavaClass.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.o -llvm[3]: Compiling JavaConstantPool.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d" \ - JavaConstantPool.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaConstantPool.ll to JavaConstantPool.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.bc -llvm[3]: Compiling JavaConstantPool.bc to JavaConstantPool.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.s -llvm[3]: Compiling JavaConstantPool.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.o -llvm[3]: Compiling JavaMetaJIT.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d" \ - JavaMetaJIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaMetaJIT.ll to JavaMetaJIT.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.bc -llvm[3]: Compiling JavaMetaJIT.bc to JavaMetaJIT.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.s -llvm[3]: Compiling JavaMetaJIT.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.o -llvm[3]: Compiling JavaObject.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d" \ - JavaObject.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.bc.d.tmp"; exit 1; fi -In file included from JavaObject.cpp:21: -In file included from /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/VMStaticInstance.h:13: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:149:8: warning: private field 'running' is not used [-Wunused-private-field] - bool running; - ^ -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -2 warnings generated. -llvm[3]: Compiling JavaObject.ll to JavaObject.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.bc -llvm[3]: Compiling JavaObject.bc to JavaObject.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.s -llvm[3]: Compiling JavaObject.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.o -llvm[3]: Compiling JavaRuntimeJIT.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d" \ - JavaRuntimeJIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.bc.d.tmp"; exit 1; fi -In file included from JavaRuntimeJIT.cpp:12: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling JavaRuntimeJIT.ll to JavaRuntimeJIT.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.bc -llvm[3]: Compiling JavaRuntimeJIT.bc to JavaRuntimeJIT.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.s -llvm[3]: Compiling JavaRuntimeJIT.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.o -llvm[3]: Compiling JavaString.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d" \ - JavaString.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaString.ll to JavaString.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.bc -llvm[3]: Compiling JavaString.bc to JavaString.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.s -llvm[3]: Compiling JavaString.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.o -llvm[3]: Compiling JavaThread.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d" \ - JavaThread.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaThread.ll to JavaThread.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.bc -llvm[3]: Compiling JavaThread.bc to JavaThread.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.s -llvm[3]: Compiling JavaThread.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.o -llvm[3]: Compiling JavaTypes.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d" \ - JavaTypes.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaTypes.ll to JavaTypes.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.bc -llvm[3]: Compiling JavaTypes.bc to JavaTypes.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.s -llvm[3]: Compiling JavaTypes.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.o -llvm[3]: Compiling Jni.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d" \ - Jni.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.bc.d.tmp"; exit 1; fi -In file included from Jni.cpp:14: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling Jni.ll to Jni.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.bc -llvm[3]: Compiling Jni.bc to Jni.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.s -llvm[3]: Compiling Jni.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.o -llvm[3]: Compiling Jnjvm.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d" \ - Jnjvm.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.bc.d.tmp"; exit 1; fi -In file included from Jnjvm.cpp:24: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling Jnjvm.ll to Jnjvm.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.bc -llvm[3]: Compiling Jnjvm.bc to Jnjvm.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.s -llvm[3]: Compiling Jnjvm.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.o -llvm[3]: Compiling JnjvmClassLoader.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d" \ - JnjvmClassLoader.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.bc.d.tmp"; exit 1; fi -In file included from JnjvmClassLoader.cpp:30: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling JnjvmClassLoader.ll to JnjvmClassLoader.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.bc -llvm[3]: Compiling JnjvmClassLoader.bc to JnjvmClassLoader.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.s -llvm[3]: Compiling JnjvmClassLoader.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.o -llvm[3]: Compiling JnjvmIntOSGi.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d" \ - JnjvmIntOSGi.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.bc.d.tmp"; exit 1; fi -In file included from JnjvmIntOSGi.cpp:6: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling JnjvmIntOSGi.ll to JnjvmIntOSGi.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.bc -llvm[3]: Compiling JnjvmIntOSGi.bc to JnjvmIntOSGi.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.s -llvm[3]: Compiling JnjvmIntOSGi.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.o -llvm[3]: Compiling JnjvmStaleRef.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d" \ - JnjvmStaleRef.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.bc.d.tmp"; exit 1; fi -In file included from JnjvmStaleRef.cpp:4: -In file included from /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/VMStaticInstance.h:13: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling JnjvmStaleRef.ll to JnjvmStaleRef.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.bc -llvm[3]: Compiling JnjvmStaleRef.bc to JnjvmStaleRef.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.s -llvm[3]: Compiling JnjvmStaleRef.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.o -llvm[3]: Compiling Precompiled.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d" \ - Precompiled.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling Precompiled.ll to Precompiled.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.bc -llvm[3]: Compiling Precompiled.bc to Precompiled.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.s -llvm[3]: Compiling Precompiled.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.o -llvm[3]: Compiling Reader.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d" \ - Reader.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling Reader.ll to Reader.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.bc -llvm[3]: Compiling Reader.bc to Reader.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.s -llvm[3]: Compiling Reader.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.o -llvm[3]: Compiling ReferenceQueue.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d" \ - ReferenceQueue.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.bc.d.tmp"; exit 1; fi -In file included from ReferenceQueue.cpp:10: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling ReferenceQueue.ll to ReferenceQueue.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.bc -llvm[3]: Compiling ReferenceQueue.bc to ReferenceQueue.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.s -llvm[3]: Compiling ReferenceQueue.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.o -llvm[3]: Compiling VirtualTables.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d" \ - VirtualTables.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.bc.d.tmp"; exit 1; fi -In file included from VirtualTables.cpp:24: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling VirtualTables.ll to VirtualTables.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.bc -llvm[3]: Compiling VirtualTables.bc to VirtualTables.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.s -llvm[3]: Compiling VirtualTables.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.o -llvm[3]: Compiling Zip.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref! /lib/j3/V MCore/../../../include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/../ClassLib -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d" \ - Zip.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling Zip.ll to Zip.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.bc -llvm[3]: Compiling Zip.bc to Zip.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.s -llvm[3]: Compiling Zip.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.o -llvm[3]: Building Debug+Asserts Archive Library libJ3.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaArray_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaClass_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaConstantPool_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaMetaJIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaObject_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaRuntimeJIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaString_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaThread_gc.o /med! ia/Data/D ocuments/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JavaTypes_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jni_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Jnjvm_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmClassLoader_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmIntOSGi_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/JnjvmStaleRef_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Precompiled_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Reader_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/ReferenceQueue_gc.o /media/Data/Documents/Studies/MyWork/Ph! D/VMKit/v mkit_stale_ref/lib/j3/VMCore/Debug+Asserts/VirtualTables_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore/Debug+Asserts/Zip_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/VMCore' -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib' -for dir in GNUClasspath; do \ - (make -C $dir all ) || exit 1; \ - done -make[4]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/.dir -llvm[4]: Compiling ClasspathReflect.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/../../VMCore -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/.. -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_sta! le_ref/li b/j3/ClassLib/GNUClasspath/.. -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d" \ - ClasspathReflect.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.bc.d.tmp"; exit 1; fi -In file included from ClasspathReflect.cpp:10: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:76:9: warning: private field 'flag' is not used [-Wunused-private-field] - uint8 flag; - ^ -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:105:9: warning: private field 'flag' is not used [-Wunused-private-field] - uint8 flag; - ^ -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:130:9: warning: private field 'flag' is not used [-Wunused-private-field] - uint8 flag; - ^ -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -4 warnings generated. -llvm[4]: Compiling ClasspathReflect.ll to ClasspathReflect.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.bc -llvm[4]: Compiling ClasspathReflect.bc to ClasspathReflect.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.s -llvm[4]: Compiling ClasspathReflect.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.o -llvm[4]: Compiling JavaUpcalls.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/../../VMCore -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include/j3 -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/.. -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_sta! le_ref/li b/j3/ClassLib/GNUClasspath/.. -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d" \ - JavaUpcalls.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.bc.d.tmp"; exit 1; fi -In file included from JavaUpcalls.cpp:10: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[4]: Compiling JavaUpcalls.ll to JavaUpcalls.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.bc -llvm[4]: Compiling JavaUpcalls.bc to JavaUpcalls.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.s -llvm[4]: Compiling JavaUpcalls.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.o -llvm[4]: Building Debug+Asserts Archive Library libClasspath.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/ClasspathReflect_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath/Debug+Asserts/JavaUpcalls_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a -make[4]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib/GNUClasspath' -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/ClassLib' -make[3]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/.dir -llvm[3]: Compiling J3Intrinsics.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d" \ - J3Intrinsics.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling J3Intrinsics.ll to J3Intrinsics.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.bc -llvm[3]: Compiling J3Intrinsics.bc to J3Intrinsics.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.s -llvm[3]: Compiling J3Intrinsics.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.o -llvm[3]: Compiling JavaAOTCompiler.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d" \ - JavaAOTCompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.bc.d.tmp"; exit 1; fi -In file included from JavaAOTCompiler.cpp:35: -In file included from /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/VMStaticInstance.h:13: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath/ClasspathReflect.h:206:15: warning: private field 'nextOnQueue' is not used [-Wunused-private-field] - JavaObject* nextOnQueue; - ^ -1 warning generated. -llvm[3]: Compiling JavaAOTCompiler.ll to JavaAOTCompiler.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.bc -llvm[3]: Compiling JavaAOTCompiler.bc to JavaAOTCompiler.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.s -llvm[3]: Compiling JavaAOTCompiler.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.o -llvm[3]: Compiling JavaJIT.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d" \ - JavaJIT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaJIT.ll to JavaJIT.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.bc -llvm[3]: Compiling JavaJIT.bc to JavaJIT.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.s -llvm[3]: Compiling JavaJIT.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.o -llvm[3]: Compiling JavaJITCompiler.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d" \ - JavaJITCompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaJITCompiler.ll to JavaJITCompiler.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.bc -llvm[3]: Compiling JavaJITCompiler.bc to JavaJITCompiler.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.s -llvm[3]: Compiling JavaJITCompiler.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.o -llvm[3]: Compiling JavaJITOpcodes.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d" \ - JavaJITOpcodes.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.bc.d.tmp"; exit 1; fi -JavaJITOpcodes.cpp:2304:14: warning: unused variable 'thisReference' [-Wunused-variable] - bool thisReference = isThisReference(currentStackIndex - 1); - ^ -In file included from JavaJITOpcodes.cpp:39: -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include/j3/OpcodeNames.def:13:20: warning: unused variable 'OpcodeNames' [-Wunused-variable] -static const char* OpcodeNames[256] = { - ^ -2 warnings generated. -llvm[3]: Compiling JavaJITOpcodes.ll to JavaJITOpcodes.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.bc -llvm[3]: Compiling JavaJITOpcodes.bc to JavaJITOpcodes.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.s -llvm[3]: Compiling JavaJITOpcodes.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.o -llvm[3]: Compiling JavaLLVMCompiler.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d" \ - JavaLLVMCompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling JavaLLVMCompiler.ll to JavaLLVMCompiler.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.bc -llvm[3]: Compiling JavaLLVMCompiler.bc to JavaLLVMCompiler.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.s -llvm[3]: Compiling JavaLLVMCompiler.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.o -llvm[3]: Compiling LLVMInfo.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d" \ - LLVMInfo.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling LLVMInfo.ll to LLVMInfo.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.bc -llvm[3]: Compiling LLVMInfo.bc to LLVMInfo.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.s -llvm[3]: Compiling LLVMInfo.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.o -llvm[3]: Compiling LowerConstantCalls.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../LLVMRuntime -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/GNUClasspath -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/../ClassLib/ -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_! stale_ref /lib/j3/Compiler/../VMCore -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d" \ - LowerConstantCalls.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.bc.d.tmp"; exit 1; fi -llvm[3]: Compiling LowerConstantCalls.ll to LowerConstantCalls.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.bc -llvm[3]: Compiling LowerConstantCalls.bc to LowerConstantCalls.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.s -llvm[3]: Compiling LowerConstantCalls.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LowerConstantCalls_gc.o -llvm[3]: Building Debug+Asserts Archive Library libJ3Compiler.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/J3Intrinsics_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaAOTCompiler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJIT_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITCompiler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaJITOpcodes_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/JavaLLVMCompiler_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/Debug+Asserts/LLVMInfo_gc.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler/De! bug+Asser ts/LowerConstantCalls_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a -make[3]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3/Compiler' -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/j3' -make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib' -make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/.dir -llvm[1]: Compiling vmjc.cpp for Debug+Asserts build -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d" vmjc.cpp! -o /medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.d.tmp"; exit 1; fi -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/.dir -llvm[1]: Linking Debug+Asserts executable vmjc -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/Debug+Asserts/bin/vmjc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc/Debug+Asserts/vmjc.o -lJ3 -lClasspath -lJ3 -lJ3Compiler -lVmkit -lVmkitCompiler -lMMTk -lCommonThread \ - -lLLVMBitWriter -lLLVMipo -lLLVMVectorize -lLLVMInstrumentation -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMJIT -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lpthread -ldl -lm -lz -llvm[1]: ======= Finished Linking Debug+Asserts Executable vmjc -make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' -make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk' -for dir in magic mmtk-j3 mmtk-alloc java inline; do \ - (make -C $dir all ) || exit 1; \ - done -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/.dir -llvm[2]: Compiling LowerJavaRT.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/Lo! werJavaRT .d" LowerJavaRT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.d.tmp"; exit 1; fi -llvm[2]: Compiling LowerMagic.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/Lowe! rMagic.d" LowerMagic.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.d.tmp"; exit 1; fi -llvm[2]: Linking Debug+Asserts Loadable Module MMTKMagic.so -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKMagic.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmt! k/magic/D ebug+Asserts/LowerJavaRT.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.o \ - -lpthread -ldl -lm -lz -llvm[2]: Compiling LowerJavaRT.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.ll" -MT "/media/Data/Documents/Studies/MyWork/P! hD/VMKit/ vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d" \ - LowerJavaRT.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling LowerJavaRT.ll to LowerJavaRT.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc -llvm[2]: Compiling LowerMagic.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD! /VMKit/vm kit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d" \ - LowerMagic.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling LowerMagic.ll to LowerMagic.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc -llvm[2]: Building Debug+Asserts Bytecode Archive libMMTKMagic.bca -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKMagic.bca -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKMagic.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerJavaRT.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic/Debug+Asserts/LowerMagic.bc -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/magic' -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/.dir -llvm[2]: Compiling ActivePlan.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit! /vmkit_st ale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d" \ - ActivePlan.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling ActivePlan.ll to ActivePlan.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc -llvm[2]: Compiling Assert.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/mmtk/mmtk-j3/Debug+Asserts/Assert.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d" \ - Assert.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Assert.ll to Assert.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc -llvm[2]: Compiling Collection.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit! /vmkit_st ale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d" \ - Collection.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Collection.ll to Collection.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc -llvm[2]: Compiling FinalizableProcessor.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork! /PhD/VMKi t/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d" \ - FinalizableProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling FinalizableProcessor.ll to FinalizableProcessor.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc -llvm[2]: Compiling Lock.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit! _stale_re f/mmtk/mmtk-j3/Debug+Asserts/Lock.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d" \ - Lock.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Lock.ll to Lock.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc -llvm[2]: Compiling MMTk_Events.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKi! t/vmkit_s tale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d" \ - MMTk_Events.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling MMTk_Events.ll to MMTk_Events.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc -llvm[2]: Compiling Memory.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/mmtk/mmtk-j3/Debug+Asserts/Memory.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d" \ - Memory.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Memory.ll to Memory.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc -llvm[2]: Compiling ObjectModel.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKi! t/vmkit_s tale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d" \ - ObjectModel.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling ObjectModel.ll to ObjectModel.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc -llvm[2]: Compiling ReferenceProcessor.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/P! hD/VMKit/ vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d" \ - ReferenceProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling ReferenceProcessor.ll to ReferenceProcessor.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc -llvm[2]: Compiling RuntimeHelpers.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/V! MKit/vmki t_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d" \ - RuntimeHelpers.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling RuntimeHelpers.ll to RuntimeHelpers.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc -llvm[2]: Compiling Scanning.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/v! mkit_stal e_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d" \ - Scanning.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Scanning.ll to Scanning.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc -llvm[2]: Compiling Selected.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/v! mkit_stal e_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d" \ - Selected.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Selected.ll to Selected.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc -llvm[2]: Compiling Statistics.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit! /vmkit_st ale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d" \ - Statistics.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Statistics.ll to Statistics.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc -llvm[2]: Compiling Strings.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vm! kit_stale _ref/mmtk/mmtk-j3/Debug+Asserts/Strings.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d" \ - Strings.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Strings.ll to Strings.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc -llvm[2]: Compiling SynchronizedCounter.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/! PhD/VMKit /vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d" \ - SynchronizedCounter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling SynchronizedCounter.ll to SynchronizedCounter.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc -llvm[2]: Compiling TraceInterface.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/V! MKit/vmki t_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d" \ - TraceInterface.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling TraceInterface.ll to TraceInterface.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc -llvm[2]: Compiling VM.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_s! tale_ref/ mmtk/mmtk-j3/Debug+Asserts/VM.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d" \ - VM.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling VM.ll to VM.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc -llvm[2]: Building Debug+Asserts Bytecode Module MMTKRuntime.bc -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-link -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKRuntime.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.bc /! media/Dat a/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc -llvm[2]: Compiling ActivePlan.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActiveP! lan.o" -M T "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d" ActivePlan.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.d.tmp"; exit 1; fi -llvm[2]: Compiling Assert.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.o" -! MT "/medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d" Assert.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.d.tmp"; exit 1; fi -llvm[2]: Compiling Collection.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collect! ion.o" -M T "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d" Collection.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.d.tmp"; exit 1; fi -llvm[2]: Compiling FinalizableProcessor.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asser! ts/Finali zableProcessor.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d" FinalizableProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.d.tmp"; exit 1; fi -llvm[2]: Compiling Lock.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.o" -MT "! /media/Da ta/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d" Lock.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.d.tmp"; exit 1; fi -llvm[2]: Compiling MMTk_Events.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_E! vents.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d" MMTk_Events.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.d.tmp"; exit 1; fi -llvm[2]: Compiling Memory.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.o" -! MT "/medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d" Memory.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.d.tmp"; exit 1; fi -llvm[2]: Compiling ObjectModel.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Object! Model.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d" ObjectModel.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.d.tmp"; exit 1; fi -llvm[2]: Compiling ReferenceProcessor.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts! /Referenc eProcessor.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d" ReferenceProcessor.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.d.tmp"; exit 1; fi -llvm[2]: Compiling RuntimeHelpers.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Run! timeHelpe rs.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d" RuntimeHelpers.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.d.tmp"; exit 1; fi -llvm[2]: Compiling Scanning.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.! o" -MT "/ media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d" Scanning.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.d.tmp"; exit 1; fi -llvm[2]: Compiling Selected.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.! o" -MT "/ media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d" Selected.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.d.tmp"; exit 1; fi -llvm[2]: Compiling Statistics.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statist! ics.o" -M T "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d" Statistics.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.d.tmp"; exit 1; fi -llvm[2]: Compiling Strings.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.o"! -MT "/me dia/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d" Strings.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.d.tmp"; exit 1; fi -llvm[2]: Compiling SynchronizedCounter.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Assert! s/Synchro nizedCounter.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d" SynchronizedCounter.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.d.tmp"; exit 1; fi -llvm[2]: Compiling TraceInterface.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Tra! ceInterfa ce.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d" TraceInterface.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.d.tmp"; exit 1; fi -llvm[2]: Compiling VM.cpp for Debug+Asserts build (PIC) -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.o" -MT "/med! ia/Data/D ocuments/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d" VM.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.d.tmp"; exit 1; fi -llvm[2]: Linking Debug+Asserts Loadable Module MMTKRuntime.so -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN' -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -shared -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_r! ef/Debug+ Asserts/lib/MMTKRuntime.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.o /media/Data/Documents/Studie! s/MyWork/ PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.o \ - -lpthread -ldl -lm -lz -llvm[2]: Building Debug+Asserts Bytecode Archive libMMTKRuntime.bca -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKRuntime.bca -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-ar rcsf /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libMMTKRuntime.bca /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ActivePlan.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Assert.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Collection.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/FinalizableProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Lock.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/MMTk_Events.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Memory.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ObjectModel.! bc /media /Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/ReferenceProcessor.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/RuntimeHelpers.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Scanning.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Selected.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Statistics.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/Strings.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/SynchronizedCounter.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/TraceInterface.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3/Debug+Asserts/VM.bc -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-j3' -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/.dir -llvm[2]: Compiling Selected.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/../../lib/j3/VMCore -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/Ph! D/VMKit/v mkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.ll" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d" \ - Selected.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling Selected.ll to Selected.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.ll -std-compile-opts -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc -llvm[2]: Building Debug+Asserts Bytecode Module MMTKAlloc.bc -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-link -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc/Debug+Asserts/Selected.bc -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/mmtk-alloc' -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java' -/usr/bin/ant -buildfile /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/build.xml -Buildfile: /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/build.xml - -main: - [mkdir] Created dir: /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/classes - [javac] Compiling 380 source files to /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/classes - [javac] Note: Some input files use or override a deprecated API. - [javac] Note: Recompile with -Xlint:deprecation for details. - [jar] Building jar: /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/mmtk-vmkit.jar - -BUILD SUCCESSFUL -Total time: 15 seconds -llvm[2]: Building Debug+Asserts mmtk-vmkit.jar all -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/JITGCPass.so -JITGCPass -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/vmjc -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKRuntime.so -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKMagic.so -LowerMagic /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/mmtk-vmkit.jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o mmtk-vmkit.bc -Dmmtk.properties=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/vmkit.properties -disable-stubs -assume-compiled -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKMagic.so -LowerJavaRT -f mmtk-vmkit.bc -o mmtk-vmkit-optimized.bc -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llvm-link -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKAlloc.bc mmtk-vmkit-optimized.bc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/MMTKRuntime.bc -WARNING: Linking two modules of different data layouts! -WARNING: Linking two modules of different target triples: mmtk-vmkit-optimized.bc: 'i686-pc-linux-gnu' and 'i386-pc-linux-gnu' -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-fp-elim -disable-cfi -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s -/bin/grep -v '\.loc[^0-9]\+[0-9]\+ 0' /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s.remove_invalid_dot_loc -/bin/mv -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s.remove_invalid_dot_loc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.o -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java/Debug+Asserts/FinalMMTk.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=gcmalloc /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkMallocInline.inc -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=fieldWriteBarrier /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkFieldWriteInline.inc -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=arrayWriteBarrier /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkArrayWriteInline.inc -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/FinalMMTk.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/MMTkNonHeapWriteInline.inc -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/java' -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/.dir -llvm[2]: Compiling InlineMethods.cpp for Debug+Asserts build (bytecode) -if /home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/clang++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-unused-variable -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.ll" -MT "/media/Dat! a/Documen ts/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d" \ - InlineMethods.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.ll -S "-emit-llvm" ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.bc.d.tmp"; exit 1; fi -llvm[2]: Compiling InlineMethods.ll to InlineMethods.bc for Debug+Asserts build (bytecode) -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/opt /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods.ll -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPass.so -inline -StaticGCPass -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.bc -llvm[2]: Compiling InlineMethods.bc to InlineMethods.s for Debug+Asserts build -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -O=0 -asm-verbose -disable-cfi -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.s -llvm[2]: Compiling InlineMethods.s for Debug+Asserts build -gcc -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fPIC -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-unused-variable -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.o -llvm[2]: Building Debug+Asserts Archive Library libInlineMMTk.a -/bin/rm -f /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline/Debug+Asserts/InlineMethods_gc.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk/inline' -make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/mmtk' -make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler' -nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > FrametablesSymbols.inc -nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > FrametablesExterns.inc -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/.dir -llvm[1]: Compiling Precompiler.cpp for Debug+Asserts build -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/! precompil er/Debug+Asserts/Precompiler.d" Precompiler.cpp -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.d.tmp"; exit 1; fi -llvm[1]: Linking Debug+Asserts executable precompiler -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VM! Kit/vmkit _stale_ref/Debug+Asserts/bin/precompiler /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/Debug+Asserts/Precompiler.o -lClasspath -lJ3 -lJ3Compiler -lVmkit -lVmkitCompiler -lCommonThread -lFinalMMTk \ - -lLLVMBitWriter -lLLVMLinker -lLLVMArchive -lLLVMBitReader -lLLVMAsmParser -lLLVMipo -lLLVMVectorize -lLLVMInstrumentation -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMJIT -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lpthread -ldl -lm -lz -llvm[1]: ======= Finished Linking Debug+Asserts Executable precompiler -for dir in trainer; do \ - (make -C $dir all ) || exit 1; \ - done -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer' -llvm[2]: Compiling trainer -javac HelloWorld.java -d . -llvm[2]: Pre-compiling bootstrap code -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/precompiler -cp $PWD HelloWorld -Hello World ------------------ Info from the module ----------------- -Number of native classes : 583 -Number of Java classes : 0 -Number of external array classes : 0 -Number of virtual tables : 583 -Number of static instances : 389 -Number of constant pools : 389 -Number of strings : 0 -Number of native functions : 16 ------------------ Total size in .data ------------------ -63552B -llvm[2]: Building precompiled bootstrap code -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim -load=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/StaticGCPrinter.so generated.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.s -gcc -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.o -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/Precompiled.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a -/bin/cp generated.bc Precompiled.bc -llvm[2]: Pre-compiling classes -/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/precompiler -emit-class-bytes -llvm[2]: Building precompiled classes -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts -/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/bin/llc classes.bc -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.s -gcc -c /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.s -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.o -ar cru >/dev/null 2>/dev/null /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer/Debug+Asserts/BootstrapClasses.o -ranlib /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a -/bin/cp classes.bc BootstrapClasses.bc -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler/trainer' -make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/precompiler' -make[1]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools' -\ - SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3; \ - DD=j3; \ - if [ ! -f $SD/Makefile ]; then \ - SD=j3; \ - DD=j3; \ - fi; \ - if ([ ! -f $DD/Makefile ] || \ - command test $DD/Makefile -ot \ - $SD/Makefile ); then \ - /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ - /bin/cp $SD/Makefile $DD/Makefile; \ - fi; \ - make -C $DD all -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3' -nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a | grep __frametabl! e | sed ' s/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > FrametablesSymbols.inc -nm /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libClasspath.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libJ3Compiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkit.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libVmkitCompiler.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libCommonThread.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libFinalMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libInlineMMTk.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libPrecompiled.a /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib/libBootstrapClasses.a | grep __frametabl! e | sed ' s/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > FrametablesExterns.inc -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/.dir -llvm[2]: Compiling Main.cpp for Debug+Asserts build -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d" Main.cpp -o /med! ia/Data/D ocuments/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.d.tmp"; exit 1; fi -llvm[2]: Linking Debug+Asserts executable j3 -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit! _stale_re f/Debug+Asserts/bin/j3 /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3/Debug+Asserts/Main.o -lClasspath -lJ3 -lJ3Compiler -lVmkit -lVmkitCompiler -lCommonThread -lFinalMMTk -lInlineMMTk -lPrecompiled -lBootstrapClasses \ - -lLLVMipo -lLLVMVectorize -lLLVMInstrumentation -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMJIT -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lpthread -ldl -lm -lz -llvm[2]: ======= Finished Linking Debug+Asserts Executable j3 -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/j3' -\ - SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc; \ - DD=vmjc; \ - if [ ! -f $SD/Makefile ]; then \ - SD=vmjc; \ - DD=vmjc; \ - fi; \ - if ([ ! -f $DD/Makefile ] || \ - command test $DD/Makefile -ot \ - $SD/Makefile ); then \ - /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ - /bin/cp $SD/Makefile $DD/Makefile; \ - fi; \ - make -C $DD all -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' -make[2]: Nothing to be done for `all'. -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/vmjc' -\ - SD=/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj; \ - DD=llcj; \ - if [ ! -f $SD/Makefile ]; then \ - SD=llcj; \ - DD=llcj; \ - fi; \ - if ([ ! -f $DD/Makefile ] || \ - command test $DD/Makefile -ot \ - $SD/Makefile ); then \ - /home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs $DD; \ - /bin/cp $SD/Makefile $DD/Makefile; \ - fi; \ - make -C $DD all -make[2]: Entering directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj' -/home/koutheir/PhD/VMKit/llvm/autoconf/mkinstalldirs /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts > /dev/null -/bin/date > /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/.dir -llvm[2]: Compiling llcj.cpp for Debug+Asserts build -if g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d.tmp" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.o" -MT "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d" llcj.cpp! -o /medi a/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.o ; \ - then /bin/mv -f "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d.tmp" "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d"; else /bin/rm "/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.d.tmp"; exit 1; fi -llvm[2]: Linking Debug+Asserts executable llcj -g++ -I/home/koutheir/PhD/VMKit/llvm/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/include -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -Wcast-qual -I/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/lib/vmkit/MMTk -fno-exceptions -Wno-variadic-macros -fno-omit-frame-pointer -fno-strict-aliasing -Wno-deprecated -ansi -fno-rtti -O0 -g -Wl,-R -Wl,'$ORIGIN/../lib' -Wl,-R -Wl,/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin -Wl,-export-dynamic -L/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/lib -L/home/koutheir/PhD/VMKit/llvm/Debug+Asserts/lib -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -o /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmk! it_stale_ ref/Debug+Asserts/bin/llcj /media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj/Debug+Asserts/llcj.o \ - -lLLVMSupport -lpthread -ldl -lm -lz -llvm[2]: ======= Finished Linking Debug+Asserts Executable llcj -make[2]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools/llcj' -make[1]: Leaving directory `/media/Data/Documents/Studies/MyWork/PhD/VMKit/vmkit_stale_ref/tools' From peter.senna at gmail.com Thu Apr 25 09:56:32 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:32 -0000 Subject: [vmkit-commits] [vmkit] r180322 - Added stale reference test: stale reference to object injected in another bundle via a service call. Message-ID: <20130425165459.F04362A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:54:59 2013 New Revision: 180322 URL: http://llvm.org/viewvc/llvm-project?rev=180322&view=rev Log: Added stale reference test: stale reference to object injected in another bundle via a service call. (cherry picked from commit 0b2d7c257a321609dc82b8aa3a7ae8f66629504f) Modified: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java Modified: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java?rev=180322&r1=180321&r2=180322&view=diff ============================================================================== --- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java Thu Apr 25 11:54:59 2013 @@ -37,17 +37,15 @@ public class Activator aST.open(); A service = (A)aST.getService(); - if (service != null) - a.add(service); - - context.addServiceListener(this, "(objectclass=" + A.class.getName() + ")"); - - if (a != null) { + if (service != null) { System.out.println("BImpl got A @ startup"); + a.add(service); this.useA(); } + context.addServiceListener(this, "(objectclass=" + A.class.getName() + ")"); + b = new BImpl(); context.registerService(B.class.getName(), b, null); } From peter.senna at gmail.com Thu Apr 25 09:56:36 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:36 -0000 Subject: [vmkit-commits] [vmkit] r180323 - Documenting changes in code. Message-ID: <20130425165505.10C4E2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:04 2013 New Revision: 180323 URL: http://llvm.org/viewvc/llvm-project?rev=180323&view=rev Log: Documenting changes in code. (cherry picked from commit 2ac6b379b88ce4ac40aa8765a4da622b8b08c83b) Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp vmkit/trunk/tests/debug.txt vmkit/trunk/tests/minimal.xargs Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180323&r1=180322&r2=180323&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:55:04 2013 @@ -55,40 +55,13 @@ extern "C" void JnJVM_org_j3_bindings_Bi extern "C" void JnJVM_org_j3_bindings_Bindings_nonHeapWriteBarrier__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(gc** ptr, gc* value) ALWAYS_INLINE; -extern "C" void* JnJVM_org_j3_bindings_Bindings_prealloc__I(int sz) ALWAYS_INLINE; +extern "C" void* JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2( + int sz, void* VT) ALWAYS_INLINE; -extern "C" void* JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I( - void* object, void* type, int sz) ALWAYS_INLINE; - -extern "C" void* prealloc(uint32_t size) { - gc* res = 0; - gcHeader* head = 0; - size = llvm::RoundUpToAlignment(size, sizeof(void*)); - head = (gcHeader*) JnJVM_org_j3_bindings_Bindings_prealloc__I(size); - res = head->toReference(); - return res; -} - -extern "C" void postalloc(gc* obj, void* type, uint32_t size) { - vmkit::Thread::get()->MyVM->setType(obj->toHeader(), type); - JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(obj, type, size); -} - -extern "C" void* gcmalloc(uint32_t sz, void* type) { - gc* res = 0; - llvm_gcroot(res, 0); +extern "C" void* gcmalloc(uint32_t sz, void* VT) { sz += gcHeader::hiddenHeaderSize(); - res = (gc*) prealloc(sz); - postalloc(res, type, sz); - return res; -} - -extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) { - gc* res = 0; - llvm_gcroot(res, 0); - res = (gc*)gcmalloc(sz, type); - vmkit::Thread::get()->MyVM->addFinalizationCandidate(res); - return res; + sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); + return ((gcHeader*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT))->toReference(); } extern "C" void addFinalizationCandidate(gc* obj) __attribute__((always_inline)); @@ -98,6 +71,13 @@ extern "C" void addFinalizationCandidate vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj); } +extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT) { + gc* res = 0; + llvm_gcroot(res, 0); + res = (gc*)gcmalloc(sz, VT); + if (VT->hasDestructor()) addFinalizationCandidate(res); + return res; +} extern "C" void arrayWriteBarrier(void* ref, void** ptr, void* value) { JnJVM_org_j3_bindings_Bindings_arrayWriteBarrier__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2( @@ -134,10 +114,10 @@ void Collector::scanObject(void** ptr, w if ((*ptr) != NULL) { assert(((gc*)(*ptr))->getVirtualTable()); } -#if RESET_STALE_REFERENCES + // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(NULL, ptr); -#endif + JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr); } @@ -147,10 +127,10 @@ void Collector::markAndTrace(void* sourc assert(((gc*)(*ptr_))->getVirtualTable()); } if ((*(void**)ptr) != NULL) assert(((gc*)(*(void**)ptr))->getVirtualTable()); -#if RESET_STALE_REFERENCES + // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); -#endif + JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr); } @@ -159,10 +139,10 @@ void Collector::markAndTraceRoot(void* s if ((*ptr_) != NULL) { assert(((gc*)(*ptr_))->getVirtualTable()); } -#if RESET_STALE_REFERENCES + // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); -#endif + JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true); } Modified: vmkit/trunk/tests/debug.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/debug.txt?rev=180323&r1=180322&r2=180323&view=diff ============================================================================== --- vmkit/trunk/tests/debug.txt (original) +++ vmkit/trunk/tests/debug.txt Thu Apr 25 11:55:04 2013 @@ -1,12 +1,25 @@ -/home/koutheir/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/j3 -jar framework.jar -xargs /home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/minimal.xargs - framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.AImpl framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.Runner framework meminfo -gc -bundles +enter framework + +stop 13 +uninstall 13 +install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar start 18 -framework call j3.J3Mgr dumpClassLoaderBundles +stop 18 +uninstall 18 +install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar +start 19 + +stop 19 +uninstall 19 +install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar +start 20 + + +/home/koutheir/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/j3 -jar framework.jar -xargs /home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/minimal.xargs Modified: vmkit/trunk/tests/minimal.xargs URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/minimal.xargs?rev=180323&r1=180322&r2=180323&view=diff ============================================================================== --- vmkit/trunk/tests/minimal.xargs (original) +++ vmkit/trunk/tests/minimal.xargs Thu Apr 25 11:55:04 2013 @@ -31,5 +31,3 @@ -istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.DImpl_1.0.0.jar -install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.Runner_1.0.0.jar - --install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.BundleMgmtStress_1.0.0.jar From peter.senna at gmail.com Thu Apr 25 09:56:40 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:40 -0000 Subject: [vmkit-commits] [vmkit] r180324 - Added management stress test to show the memory leak due to stale references. Message-ID: <20130425165510.DA7EA2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:10 2013 New Revision: 180324 URL: http://llvm.org/viewvc/llvm-project?rev=180324&view=rev Log: Added management stress test to show the memory leak due to stale references. (cherry picked from commit 8446b1c2c9c01da79f91a5a287d5c9f111481dfb) Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp vmkit/trunk/tests/debug.txt vmkit/trunk/tests/minimal.xargs Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180324&r1=180323&r2=180324&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:55:10 2013 @@ -868,6 +868,8 @@ JnjvmClassLoader::~JnjvmClassLoader() { cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl; #endif + this->setAssociatedBundleID(-1); + if (vm) { vm->removeFrameInfos(TheCompiler); } Modified: vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp?rev=180324&r1=180323&r2=180324&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp Thu Apr 25 11:55:10 2013 @@ -7,11 +7,8 @@ #include "ClasspathReflect.h" #include "j3/jni.h" - using namespace std; -#if RESET_STALE_REFERENCES - namespace j3 { void Jnjvm::dumpClassLoaderBundles() @@ -63,7 +60,6 @@ void Jnjvm::setBundleClassLoader(int64_t } -#endif using namespace j3; @@ -76,12 +72,8 @@ extern "C" void Java_j3_vm_OSGi_associat { llvm_gcroot(classObject, 0); -#if RESET_STALE_REFERENCES - CommonClass* ccl = JavaObjectClass::getClass(classObject); ccl->classLoader->setAssociatedBundleID(bundleID); - -#endif } /* @@ -91,20 +83,12 @@ extern "C" void Java_j3_vm_OSGi_associat */ extern "C" void Java_j3_vm_OSGi_resetReferencesToBundle(jlong bundleID) { -#if RESET_STALE_REFERENCES - Jnjvm* vm = JavaThread::get()->getJVM(); vm->resetReferencesToBundle(bundleID); - -#endif } extern "C" void Java_j3_vm_OSGi_dumpClassLoaderBundles() { -#if RESET_STALE_REFERENCES - Jnjvm* vm = JavaThread::get()->getJVM(); vm->dumpClassLoaderBundles(); - -#endif } Modified: vmkit/trunk/tests/debug.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/debug.txt?rev=180324&r1=180323&r2=180324&view=diff ============================================================================== --- vmkit/trunk/tests/debug.txt (original) +++ vmkit/trunk/tests/debug.txt Thu Apr 25 11:55:10 2013 @@ -1,25 +1,12 @@ +/home/koutheir/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/j3 -jar framework.jar -xargs /home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/minimal.xargs + framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.AImpl framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.Runner framework meminfo -gc -enter framework - -stop 13 -uninstall 13 -install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar +bundles start 18 -stop 18 -uninstall 18 -install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar -start 19 - -stop 19 -uninstall 19 -install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar -start 20 - - -/home/koutheir/PhD/VMKit/vmkit_stale_ref/Debug+Asserts/bin/j3 -jar framework.jar -xargs /home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/minimal.xargs +framework call j3.J3Mgr dumpClassLoaderBundles Modified: vmkit/trunk/tests/minimal.xargs URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/minimal.xargs?rev=180324&r1=180323&r2=180324&view=diff ============================================================================== --- vmkit/trunk/tests/minimal.xargs (original) +++ vmkit/trunk/tests/minimal.xargs Thu Apr 25 11:55:10 2013 @@ -31,3 +31,5 @@ -istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.DImpl_1.0.0.jar -install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.Runner_1.0.0.jar + +-install file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.BundleMgmtStress_1.0.0.jar From peter.senna at gmail.com Thu Apr 25 09:56:50 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:50 -0000 Subject: [vmkit-commits] [vmkit] r180325 - Added class file version check. Message-ID: <20130425165515.591562A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:15 2013 New Revision: 180325 URL: http://llvm.org/viewvc/llvm-project?rev=180325&view=rev Log: Added class file version check. (cherry picked from commit 9ad83d15513986e3aea71c755bc77f9618cd2784) Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180325&r1=180324&r2=180325&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:55:15 2013 @@ -18,7 +18,6 @@ #include "JavaArray.h" #include "JavaClass.h" #include "JavaCompiler.h" -#include "JavaString.h" #include "JavaConstantPool.h" #include "JavaObject.h" #include "JavaThread.h" @@ -30,15 +29,6 @@ #include -#if 0 -using namespace vmkit; -#define dprintf(...) do { printf("JavaClass: "); printf(__VA_ARGS__); } while(0) -#define ddprintf(...) do { printf(__VA_ARGS__); } while(0) -#else -#define dprintf(...) -#define ddprintf(...) -#endif - using namespace j3; using namespace std; @@ -343,8 +333,6 @@ JavaMethod* Class::lookupSpecialMethodDo JavaMethod* Class::lookupMethodDontThrow(const UTF8* name, const UTF8* type, bool isStatic, bool recurse, Class** methodCl) { - // This is a dirty hack because of a dirty usage pattern. See UPCALL_METHOD macro... - if (this == NULL) return NULL; JavaMethod* methods = 0; uint32 nb = 0; @@ -901,7 +889,8 @@ void Class::readClass() { uint16 minor = reader.readU2(); uint16 major = reader.readU2(); - this->isClassVersionSupported(major, minor); + if (major > (uint16)0x31) // 0x31 for Java 1.5 + cerr << "WARNING: Class file '" << *name << "' requires a Java version that is unsupported by this JVM." << endl; uint32 ctpSize = reader.readU2(); ctpInfo = new(classLoader->allocator, ctpSize) JavaConstantPool(this, reader, @@ -923,36 +912,6 @@ void Class::readClass() { attributes = readAttributes(reader, nbAttributes); } -void Class::getMinimalJDKVersion(uint16 major, uint16 minor, unsigned int& JDKMajor, unsigned int& JDKMinor, unsigned int& JDKBuild) -{ - JDKMajor = 1; - JDKBuild = 0; - if (major == 45 && minor <= 3) { // Supported by Java 1.0.2 - JDKMinor = 0; - JDKBuild = 2; - } else if (major == 45 && minor <= 65535) { // Supported by Java 1.1 - JDKMinor = 1; - } else { // Supported by Java 1.x (x >= 2) - JDKMinor = major - 43; - if (minor == 0) --JDKMinor; - } -} - -bool Class::isClassVersionSupported(uint16 major, uint16 minor) -{ - const int supportedJavaMinorVersion = 5; // Java 1.5 - - unsigned int JDKMajor, JDKMinor, JDKBuild; - Class::getMinimalJDKVersion(major, minor, JDKMajor, JDKMinor, JDKBuild); - - bool res = (JDKMajor <= 1) && (JDKMinor <= supportedJavaMinorVersion); - if (!res) { - cerr << "WARNING: Class file '" << *name << "' requires Java version " << JDKMajor << '.' << JDKMinor << - ". This JVM only supports Java versions up to 1." << supportedJavaMinorVersion << '.' << endl; - } - return res; -} - void UserClass::resolveParents() { if (super != NULL) { super->resolveClass(); @@ -1722,15 +1681,6 @@ void AnnotationReader::readAnnotation() AnnotationNameIndex = typeIndex; } -void AnnotationReader::readAnnotationElementValues() { - uint16 numPairs = reader.readU2(); - - for (uint16 j = 0; j < numPairs; ++j) { - reader.readU2(); - readElementValue(); - } -} - void AnnotationReader::readElementValue() { uint8 tag = reader.readU1(); if ((tag == 'B') || (tag == 'C') || (tag == 'D') || (tag == 'F') || @@ -1752,135 +1702,6 @@ void AnnotationReader::readElementValue( } } -JavaObject* AnnotationReader::createElementValue() { - uint8 tag = reader.readU1(); - JavaObject* res = 0; - JavaObject* tmp = 0; - llvm_gcroot(res, 0); - llvm_gcroot(tmp, 0); - - Jnjvm* vm = JavaThread::get()->getJVM(); - Classpath* upcalls = JavaThread::get()->getJVM()->upcalls; - ddprintf("value:"); - - if (tag == 'B') { - uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); - ddprintf("B=%d", val); - res = upcalls->boolClass->doNew(vm); - upcalls->boolValue->setInstanceInt8Field(res, val); - - } else if (tag == 'C') { - uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); - ddprintf("C=%c", val); - res = upcalls->intClass->doNew(vm); - upcalls->intValue->setInstanceInt32Field(res, val); - - } else if (tag == 'D') { - double val = cl->ctpInfo->DoubleAt(reader.readU2()); - ddprintf("D=%f", val); - res = upcalls->doubleClass->doNew(vm); - upcalls->doubleValue->setInstanceDoubleField(res, val); - - } else if (tag == 'F') { - float val = cl->ctpInfo->FloatAt(reader.readU2()); - ddprintf("F=%f", val); - res = upcalls->floatClass->doNew(vm); - upcalls->floatValue->setInstanceFloatField(res, val); - - } else if (tag == 'J') { - sint64 val = cl->ctpInfo->LongAt(reader.readU2()); - ddprintf("J=%lld", val); - res = upcalls->longClass->doNew(vm); - upcalls->longValue->setInstanceLongField(res, val); - - } else if (tag == 'S') { - uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); - ddprintf("S=%d", val); - res = upcalls->shortClass->doNew(vm); - upcalls->shortValue->setInstanceInt16Field(res, val); - - } else if (tag == 'I') { - uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); - ddprintf("I=%d", val); - res = upcalls->intClass->doNew(vm); - upcalls->intValue->setInstanceInt32Field(res, val); - - } else if (tag == 'Z') { - bool val = cl->ctpInfo->IntegerAt(reader.readU2()); - ddprintf("Z=%d", val); - res = upcalls->boolClass->doNew(vm); - upcalls->boolValue->setInstanceInt8Field(res, val); - - } else if (tag == 's') { - const UTF8* s = cl->ctpInfo->UTF8At(reader.readU2()); - ddprintf("s=%s", PrintBuffer(s).cString()); - res = JavaString::internalToJava(s, JavaThread::get()->getJVM()); - - } else if (tag == 'e') { - // Element_value Enumeration not implemented - const UTF8* n = cl->ctpInfo->UTF8At(reader.readU2()); - ddprintf("%s", PrintBuffer(n).cString()); - const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2()); - ddprintf("%s", PrintBuffer(m).cString()); - fprintf(stderr, "Annotation not supported for %c type\n", tag); - abort(); - - } else if (tag == 'c') { - ddprintf("class="); - const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2()); - ddprintf("%s", PrintBuffer(m).cString()); - - } else if (tag == '[') { - uint16 numValues = reader.readU2(); - UserClassArray* array = upcalls->annotationArrayClass; - res = array->doNew(numValues, vm); - - ddprintf("Tableau de %d elements\n", numValues); - for (uint32 i = 0; i < numValues; ++i) { - tmp = createElementValue(); - ArrayObject::setElement((ArrayObject *)res, tmp, i); - } - ddprintf("Fin du Tableau"); - } else { - // Element_value Annotation not implemented - fprintf(stderr, "Annotation not supported for %c type\n", tag); - abort(); - } - ddprintf("\n"); - - return res; -} - -JavaObject* AnnotationReader::createAnnotationMapValues() { - std::pair pair; - JavaObject* tmp = 0; - JavaString* str = 0; - JavaObject* newHashMap = 0; - llvm_gcroot(tmp, 0); - llvm_gcroot(str, 0); - llvm_gcroot(newHashMap, 0); - - Jnjvm * vm = JavaThread::get()->getJVM(); - Classpath* upcalls = vm->upcalls; - UserClass* HashMap = upcalls->newHashMap; - newHashMap = HashMap->doNew(vm); - upcalls->initHashMap->invokeIntSpecial(vm, HashMap, newHashMap); - - uint16 numPairs = reader.readU2(); - dprintf("numPairs:%d\n", numPairs); - for (uint16 j = 0; j < numPairs; ++j) { - uint16 nameIndex = reader.readU2(); - const UTF8* key = cl->ctpInfo->UTF8At(nameIndex); - dprintf("keyAn:%s|", PrintBuffer(key).cString()); - - tmp = createElementValue(); - str = JavaString::internalToJava(key, JavaThread::get()->getJVM()); - upcalls->putHashMap->invokeJavaObjectVirtual(vm, HashMap, newHashMap, &str, &tmp); - } - - return newHashMap; -} - uint16 JavaMethod::lookupLineNumber(vmkit::FrameInfo* info) { JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt == NULL) return 0; @@ -1951,7 +1772,7 @@ std::string& CommonClass::getName(std::s { name->toString(nameBuffer); - for (int32_t i=0; i < name->size; ++i) { + for (size_t i=0; i < name->size; ++i) { if (name->elements[i] == '/') nameBuffer[i] = linkageName ? '_' : '.'; } From peter.senna at gmail.com Thu Apr 25 09:56:57 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:56:57 -0000 Subject: [vmkit-commits] [vmkit] r180326 - Enable conditional compilation of stale references correction. Message-ID: <20130425165521.A12902A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:21 2013 New Revision: 180326 URL: http://llvm.org/viewvc/llvm-project?rev=180326&view=rev Log: Enable conditional compilation of stale references correction. (cherry picked from commit 8909861d78d66d118fc172508da67320b3ad2666) Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180326&r1=180325&r2=180326&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:55:21 2013 @@ -889,8 +889,7 @@ void Class::readClass() { uint16 minor = reader.readU2(); uint16 major = reader.readU2(); - if (major > (uint16)0x31) // 0x31 for Java 1.5 - cerr << "WARNING: Class file '" << *name << "' requires a Java version that is unsupported by this JVM." << endl; + this->isClassVersionSupported(major, minor); uint32 ctpSize = reader.readU2(); ctpInfo = new(classLoader->allocator, ctpSize) JavaConstantPool(this, reader, @@ -912,6 +911,36 @@ void Class::readClass() { attributes = readAttributes(reader, nbAttributes); } +void Class::getMinimalJDKVersion(uint16 major, uint16 minor, unsigned int& JDKMajor, unsigned int& JDKMinor, unsigned int& JDKBuild) +{ + JDKMajor = 1; + JDKBuild = 0; + if (major == 45 && minor <= 3) { // Supported by Java 1.0.2 + JDKMinor = 0; + JDKBuild = 2; + } else if (major == 45 && minor <= 65535) { // Supported by Java 1.1 + JDKMinor = 1; + } else { // Supported by Java 1.x (x >= 2) + JDKMinor = major - 43; + if (minor == 0) --JDKMinor; + } +} + +bool Class::isClassVersionSupported(uint16 major, uint16 minor) +{ + const int supportedJavaMinorVersion = 5; // Java 1.5 + + unsigned int JDKMajor, JDKMinor, JDKBuild; + Class::getMinimalJDKVersion(major, minor, JDKMajor, JDKMinor, JDKBuild); + + bool res = (JDKMajor <= 1) && (JDKMinor <= supportedJavaMinorVersion); + if (!res) { + cerr << "WARNING: Class file '" << *name << "' requires Java version " << JDKMajor << '.' << JDKMinor << + ". This JVM only supports Java versions up to 1." << supportedJavaMinorVersion << '.' << endl; + } + return res; +} + void UserClass::resolveParents() { if (super != NULL) { super->resolveClass(); @@ -1772,7 +1801,7 @@ std::string& CommonClass::getName(std::s { name->toString(nameBuffer); - for (size_t i=0; i < name->size; ++i) { + for (int32_t i=0; i < name->size; ++i) { if (name->elements[i] == '/') nameBuffer[i] = linkageName ? '_' : '.'; } Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180326&r1=180325&r2=180326&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:55:21 2013 @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#define DEBUG_VERBOSE_CASS_LOADER_UNLOADING 1 +#define DEBUG_VERBOSE_CLASS_LOADER_UNLOADING 1 #include #include @@ -213,14 +213,21 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad } JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : - allocator(Alloc), zombie(false) + allocator(Alloc) +#if RESET_STALE_REFERENCES + ,zombie(false) +#endif { } JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, VMClassLoader* vmdata, - Jnjvm* VM) : allocator(Alloc), zombie(false) { + Jnjvm* VM) : allocator(Alloc) +#if RESET_STALE_REFERENCES + , zombie(false) +#endif +{ llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); bootstrapLoader = JCL.bootstrapLoader; @@ -244,24 +251,6 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit assert(loadClass && "Loader does not have a loadClass function"); } -int64_t JnjvmClassLoader::getAssociatedBundleID() -{ - return vm->getClassLoaderBundleID(this); -} - -void JnjvmClassLoader::setAssociatedBundleID(int64_t newID) -{ - int64_t oldBundleID = vm->getClassLoaderBundleID(this); - if (oldBundleID != -1) { - if (oldBundleID == newID) return; // Nothing to do - - // Remove old bundle ID - vm->setBundleClassLoader(oldBundleID, NULL); - } - - vm->setBundleClassLoader(newID, this); -} - void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) { // Set the new compiler. TheCompiler = Comp; @@ -864,11 +853,15 @@ const UTF8* JnjvmClassLoader::readerCons JnjvmClassLoader::~JnjvmClassLoader() { -#if DEBUG_VERBOSE_CASS_LOADER_UNLOADING - cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl; +#if RESET_STALE_REFERENCES + +#if DEBUG_VERBOSE_CLASS_LOADER_UNLOADING + cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl; #endif - this->setAssociatedBundleID(-1); + this->setAssociatedBundleID(-1); + +#endif if (vm) { vm->removeFrameInfos(TheCompiler); @@ -1121,3 +1114,25 @@ ArrayObject* JnjvmBootstrapLoader::getBo return res; } + +#if RESET_STALE_REFERENCES + +int64_t JnjvmClassLoader::getAssociatedBundleID() +{ + return vm->getClassLoaderBundleID(this); +} + +void JnjvmClassLoader::setAssociatedBundleID(int64_t newID) +{ + int64_t oldBundleID = vm->getClassLoaderBundleID(this); + if (oldBundleID != -1) { + if (oldBundleID == newID) return; // Nothing to do + + // Remove old bundle ID + vm->setBundleClassLoader(oldBundleID, NULL); + } + + vm->setBundleClassLoader(newID, this); +} + +#endif Modified: vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp?rev=180326&r1=180325&r2=180326&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp Thu Apr 25 11:55:21 2013 @@ -7,8 +7,11 @@ #include "ClasspathReflect.h" #include "j3/jni.h" + using namespace std; +#if RESET_STALE_REFERENCES + namespace j3 { void Jnjvm::dumpClassLoaderBundles() @@ -60,6 +63,7 @@ void Jnjvm::setBundleClassLoader(int64_t } +#endif using namespace j3; @@ -72,8 +76,12 @@ extern "C" void Java_j3_vm_OSGi_associat { llvm_gcroot(classObject, 0); +#if RESET_STALE_REFERENCES + CommonClass* ccl = JavaObjectClass::getClass(classObject); ccl->classLoader->setAssociatedBundleID(bundleID); + +#endif } /* @@ -83,12 +91,20 @@ extern "C" void Java_j3_vm_OSGi_associat */ extern "C" void Java_j3_vm_OSGi_resetReferencesToBundle(jlong bundleID) { +#if RESET_STALE_REFERENCES + Jnjvm* vm = JavaThread::get()->getJVM(); vm->resetReferencesToBundle(bundleID); + +#endif } extern "C" void Java_j3_vm_OSGi_dumpClassLoaderBundles() { +#if RESET_STALE_REFERENCES + Jnjvm* vm = JavaThread::get()->getJVM(); vm->dumpClassLoaderBundles(); + +#endif } Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180326&r1=180325&r2=180326&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:55:21 2013 @@ -114,10 +114,10 @@ void Collector::scanObject(void** ptr, w if ((*ptr) != NULL) { assert(((gc*)(*ptr))->getVirtualTable()); } - +#if RESET_STALE_REFERENCES // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(NULL, ptr); - +#endif JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr); } @@ -127,10 +127,10 @@ void Collector::markAndTrace(void* sourc assert(((gc*)(*ptr_))->getVirtualTable()); } if ((*(void**)ptr) != NULL) assert(((gc*)(*(void**)ptr))->getVirtualTable()); - +#if RESET_STALE_REFERENCES // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); - +#endif JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr); } @@ -139,10 +139,10 @@ void Collector::markAndTraceRoot(void* s if ((*ptr_) != NULL) { assert(((gc*)(*ptr_))->getVirtualTable()); } - +#if RESET_STALE_REFERENCES // Allow the VM to reset references if needed vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_); - +#endif JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true); } From peter.senna at gmail.com Thu Apr 25 09:57:02 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:57:02 -0000 Subject: [vmkit-commits] [vmkit] r180327 - Merging master changes into this branch. Preparing to merge this branch into the master. Message-ID: <20130425165531.24DAB2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:30 2013 New Revision: 180327 URL: http://llvm.org/viewvc/llvm-project?rev=180327&view=rev Log: Merging master changes into this branch. Preparing to merge this branch into the master. (cherry picked from commit b9620707e867f01da30232d16b3343014a9d055e) Modified: vmkit/trunk/README.TXT vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp vmkit/trunk/tools/precompiler/trainer/Makefile Modified: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180327&r1=180326&r2=180327&view=diff ============================================================================== --- vmkit/trunk/README.TXT (original) +++ vmkit/trunk/README.TXT Thu Apr 25 11:55:30 2013 @@ -3,7 +3,7 @@ Requirements: ============= * Install required packages (Debian): -apt-get install ant libgconf2-dev libgtk2.0-dev +apt-get install ant libgconf2-dev libgtk2.0-dev sharutils * Install required packages (SUSE): zypper install ant gconf2-devel gtk2-devel @@ -15,9 +15,9 @@ apt-get install default-jre default-jdk GNU Classpath: ============== -wget http://ftp.gnu.org/gnu/classpath/classpath-0.97.2.tar.gz -tar zxf classpath-0.97.2.tar.gz -ln -s classpath-0.97.2 classpath +wget http://ftp.gnu.org/gnu/classpath/classpath-0.99.tar.gz +tar zxf classpath-0.99.tar.gz +ln -s classpath-0.99 classpath cd classpath ./configure --disable-plugin --disable-examples --disable-Werror make -j12 @@ -33,8 +33,8 @@ ln -sf ../native/jni/java-util/.libs/lib * Go root cd classpath -make install -ldconfig +sudo make install +sudo ldconfig ===== LLVM: @@ -91,7 +91,7 @@ svn co http://llvm.org/svn/llvm-project/ * Make it (debug mode): -./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip +./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/usr/local/classpath/lib/classpath --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 ============= Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180327&r1=180326&r2=180327&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:55:30 2013 @@ -71,70 +71,131 @@ public: static int getModifiers(JavaObjectClass* Cl); }; +class JavaObjectVMField : public JavaObject { +private: + JavaObjectClass* declaringClass; + JavaObject* name; + uint32 slot; + // others +public: + static void staticTracer(JavaObjectVMField* obj, word_t closure) { + vmkit::Collector::markAndTrace(obj, &obj->name, closure); + vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + } + + static JavaField* getInternalField(JavaObjectVMField* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return &(cls->asClass()->virtualFields[self->slot]); + } + + static UserClass* getClass(JavaObjectVMField* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); + } +}; + class JavaObjectField : public JavaObject { private: uint8 flag; - JavaObjectClass* declaringClass; - JavaObject* name; - uint32 slot; + JavaObject* p; + JavaObjectVMField* vmField; public: static void staticTracer(JavaObjectField* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->name, closure); - vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + vmkit::Collector::markAndTrace(obj, &obj->p, closure); + vmkit::Collector::markAndTrace(obj, &obj->vmField, closure); } static JavaField* getInternalField(JavaObjectField* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return &(cls->asClass()->virtualFields[self->slot]); + return JavaObjectVMField::getInternalField(self->vmField); } static UserClass* getClass(JavaObjectField* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); + return JavaObjectVMField::getClass(self->vmField); } static JavaObjectField* createFromInternalField(JavaField* field, int i); }; +class JavaObjectVMMethod : public JavaObject { +public: + JavaObjectClass* declaringClass; + JavaString* name; + uint32 slot; +public: + static void staticTracer(JavaObjectVMMethod* obj, word_t closure) { + vmkit::Collector::markAndTrace(obj, &obj->name, closure); + vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + } + + static JavaMethod* getInternalMethod(JavaObjectVMMethod* self); + + static UserClass* getClass(JavaObjectVMMethod* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); + } +}; + class JavaObjectMethod : public JavaObject { private: uint8 flag; - JavaObjectClass* declaringClass; - JavaObject* name; - uint32 slot; + JavaObject* p; + JavaObjectVMMethod* vmMethod; public: static void staticTracer(JavaObjectMethod* obj, word_t closure) { - vmkit::Collector::markAndTrace(obj, &obj->name, closure); - vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); + vmkit::Collector::markAndTrace(obj, &obj->p, closure); + vmkit::Collector::markAndTrace(obj, &obj->vmMethod, closure); } static JavaMethod* getInternalMethod(JavaObjectMethod* self); static UserClass* getClass(JavaObjectMethod* self) { llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); + return JavaObjectVMMethod::getClass(self->vmMethod); } static JavaObjectMethod* createFromInternalMethod(JavaMethod* meth, int i); }; -class JavaObjectConstructor : public JavaObject { + +class JavaObjectVMConstructor : public JavaObject { private: - uint8 flag; JavaObjectClass* declaringClass; uint32 slot; public: - static void staticTracer(JavaObjectConstructor* obj, word_t closure) { + static void staticTracer(JavaObjectVMConstructor* obj, word_t closure) { vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure); } + + static JavaMethod* getInternalMethod(JavaObjectVMConstructor* self); + + static UserClass* getClass(JavaObjectVMConstructor* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); + } +}; + +class JavaObjectConstructor : public JavaObject { +private: + uint8 flag; + JavaObject* p; + JavaObjectVMConstructor* vmCons; + +public: + static void staticTracer(JavaObjectConstructor* obj, word_t closure) { + vmkit::Collector::markAndTrace(obj, &obj->p, closure); + vmkit::Collector::markAndTrace(obj, &obj->vmCons, closure); + } static JavaMethod* getInternalMethod(JavaObjectConstructor* self); @@ -157,7 +218,6 @@ public: static void setVmdata(JavaObjectVMThread* vmthread, JavaThread* internal_thread) { llvm_gcroot(vmthread, 0); - assert(internal_thread && "Invalid internal thread"); vmthread->vmdata = internal_thread; } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc?rev=180327&r1=180326&r2=180327&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 11:55:30 2013 @@ -56,6 +56,13 @@ void start(JavaThread* thread) { javaThread = thread->javaThread; assert(javaThread && "Didn't fix the javaThread of a j3 thread"); + // If the thread is not a daemon, it is added to the list of threads to + // wait until exit. + bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); + + if (!isDaemon) { + vm->threadSystem.enter(); + } assert(vmThread->getVirtualTable()); assert(javaThread->getVirtualTable()); @@ -63,7 +70,6 @@ void start(JavaThread* thread) { vm->upcalls->runVMThread->invokeIntSpecial(vm, vmthClass, vmThread); // Remove the thread from the list. - bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); if (!isDaemon) { vm->threadSystem.leave(); } @@ -89,15 +95,6 @@ JavaObject* vmThread, sint64 stackSize) JavaThread* th = new JavaThread(vm); if (!th) vm->outOfMemoryError(); - - // If the thread is not a daemon, it is added to the list of threads to - // wait until exit. - bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); - - if (!isDaemon) { - vm->threadSystem.enter(); - } - th->start((void (*)(vmkit::Thread*))start); // Now that the thread has been created, initialise its object fields. th->initialise(javaThread, vmThread); Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180327&r1=180326&r2=180327&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 11:55:30 2013 @@ -535,6 +535,14 @@ void start(JavaThread* thread) { javaThread = thread->javaThread; assert(javaThread && "Didn't fix the javaThread of a j3 thread"); + // If the thread is not a daemon, it is added to the list of threads to + // wait until exit. + bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); + + if (!isDaemon) { + vm->threadSystem.enter(); + } + assert(javaThread->getVirtualTable()); // Get the class for this Thread @@ -584,7 +592,6 @@ void start(JavaThread* thread) { JavaObject::release(javaThread); // Remove the thread from the list. - bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); if (!isDaemon) { vm->threadSystem.leave(); } @@ -619,14 +626,6 @@ JVM_StartThread(JNIEnv *env, jobject _th // Set the eetop field vm->upcalls->eetop->setInstanceLongField(thread, (long)newTh); - // If the thread is not a daemon, it is added to the list of threads to - // wait until exit. - bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread); - - if (!isDaemon) { - vm->threadSystem.enter(); - } - newTh->start((void (*)(vmkit::Thread*))start); newTh->initialise(thread, sleepObject); Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180327&r1=180326&r2=180327&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:55:30 2013 @@ -18,6 +18,7 @@ #include "JavaArray.h" #include "JavaClass.h" #include "JavaCompiler.h" +#include "JavaString.h" #include "JavaConstantPool.h" #include "JavaObject.h" #include "JavaThread.h" @@ -29,6 +30,15 @@ #include +#if 0 +using namespace vmkit; +#define dprintf(...) do { printf("JavaClass: "); printf(__VA_ARGS__); } while(0) +#define ddprintf(...) do { printf(__VA_ARGS__); } while(0) +#else +#define dprintf(...) +#define ddprintf(...) +#endif + using namespace j3; using namespace std; @@ -333,6 +343,8 @@ JavaMethod* Class::lookupSpecialMethodDo JavaMethod* Class::lookupMethodDontThrow(const UTF8* name, const UTF8* type, bool isStatic, bool recurse, Class** methodCl) { + // This is a dirty hack because of a dirty usage pattern. See UPCALL_METHOD macro... + if (this == NULL) return NULL; JavaMethod* methods = 0; uint32 nb = 0; @@ -1710,6 +1722,15 @@ void AnnotationReader::readAnnotation() AnnotationNameIndex = typeIndex; } +void AnnotationReader::readAnnotationElementValues() { + uint16 numPairs = reader.readU2(); + + for (uint16 j = 0; j < numPairs; ++j) { + reader.readU2(); + readElementValue(); + } +} + void AnnotationReader::readElementValue() { uint8 tag = reader.readU1(); if ((tag == 'B') || (tag == 'C') || (tag == 'D') || (tag == 'F') || @@ -1731,6 +1752,135 @@ void AnnotationReader::readElementValue( } } +JavaObject* AnnotationReader::createElementValue() { + uint8 tag = reader.readU1(); + JavaObject* res = 0; + JavaObject* tmp = 0; + llvm_gcroot(res, 0); + llvm_gcroot(tmp, 0); + + Jnjvm* vm = JavaThread::get()->getJVM(); + Classpath* upcalls = JavaThread::get()->getJVM()->upcalls; + ddprintf("value:"); + + if (tag == 'B') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("B=%d", val); + res = upcalls->boolClass->doNew(vm); + upcalls->boolValue->setInstanceInt8Field(res, val); + + } else if (tag == 'C') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("C=%c", val); + res = upcalls->intClass->doNew(vm); + upcalls->intValue->setInstanceInt32Field(res, val); + + } else if (tag == 'D') { + double val = cl->ctpInfo->DoubleAt(reader.readU2()); + ddprintf("D=%f", val); + res = upcalls->doubleClass->doNew(vm); + upcalls->doubleValue->setInstanceDoubleField(res, val); + + } else if (tag == 'F') { + float val = cl->ctpInfo->FloatAt(reader.readU2()); + ddprintf("F=%f", val); + res = upcalls->floatClass->doNew(vm); + upcalls->floatValue->setInstanceFloatField(res, val); + + } else if (tag == 'J') { + sint64 val = cl->ctpInfo->LongAt(reader.readU2()); + ddprintf("J=%lld", val); + res = upcalls->longClass->doNew(vm); + upcalls->longValue->setInstanceLongField(res, val); + + } else if (tag == 'S') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("S=%d", val); + res = upcalls->shortClass->doNew(vm); + upcalls->shortValue->setInstanceInt16Field(res, val); + + } else if (tag == 'I') { + uint32 val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("I=%d", val); + res = upcalls->intClass->doNew(vm); + upcalls->intValue->setInstanceInt32Field(res, val); + + } else if (tag == 'Z') { + bool val = cl->ctpInfo->IntegerAt(reader.readU2()); + ddprintf("Z=%d", val); + res = upcalls->boolClass->doNew(vm); + upcalls->boolValue->setInstanceInt8Field(res, val); + + } else if (tag == 's') { + const UTF8* s = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("s=%s", PrintBuffer(s).cString()); + res = JavaString::internalToJava(s, JavaThread::get()->getJVM()); + + } else if (tag == 'e') { + // Element_value Enumeration not implemented + const UTF8* n = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("%s", PrintBuffer(n).cString()); + const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("%s", PrintBuffer(m).cString()); + fprintf(stderr, "Annotation not supported for %c type\n", tag); + abort(); + + } else if (tag == 'c') { + ddprintf("class="); + const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2()); + ddprintf("%s", PrintBuffer(m).cString()); + + } else if (tag == '[') { + uint16 numValues = reader.readU2(); + UserClassArray* array = upcalls->annotationArrayClass; + res = array->doNew(numValues, vm); + + ddprintf("Tableau de %d elements\n", numValues); + for (uint32 i = 0; i < numValues; ++i) { + tmp = createElementValue(); + ArrayObject::setElement((ArrayObject *)res, tmp, i); + } + ddprintf("Fin du Tableau"); + } else { + // Element_value Annotation not implemented + fprintf(stderr, "Annotation not supported for %c type\n", tag); + abort(); + } + ddprintf("\n"); + + return res; +} + +JavaObject* AnnotationReader::createAnnotationMapValues() { + std::pair pair; + JavaObject* tmp = 0; + JavaString* str = 0; + JavaObject* newHashMap = 0; + llvm_gcroot(tmp, 0); + llvm_gcroot(str, 0); + llvm_gcroot(newHashMap, 0); + + Jnjvm * vm = JavaThread::get()->getJVM(); + Classpath* upcalls = vm->upcalls; + UserClass* HashMap = upcalls->newHashMap; + newHashMap = HashMap->doNew(vm); + upcalls->initHashMap->invokeIntSpecial(vm, HashMap, newHashMap); + + uint16 numPairs = reader.readU2(); + dprintf("numPairs:%d\n", numPairs); + for (uint16 j = 0; j < numPairs; ++j) { + uint16 nameIndex = reader.readU2(); + const UTF8* key = cl->ctpInfo->UTF8At(nameIndex); + dprintf("keyAn:%s|", PrintBuffer(key).cString()); + + tmp = createElementValue(); + str = JavaString::internalToJava(key, JavaThread::get()->getJVM()); + upcalls->putHashMap->invokeJavaObjectVirtual(vm, HashMap, newHashMap, &str, &tmp); + } + + return newHashMap; +} + uint16 JavaMethod::lookupLineNumber(vmkit::FrameInfo* info) { JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); if (codeAtt == NULL) return 0; Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180327&r1=180326&r2=180327&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:55:30 2013 @@ -55,13 +55,40 @@ extern "C" void JnJVM_org_j3_bindings_Bi extern "C" void JnJVM_org_j3_bindings_Bindings_nonHeapWriteBarrier__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(gc** ptr, gc* value) ALWAYS_INLINE; -extern "C" void* JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2( - int sz, void* VT) ALWAYS_INLINE; +extern "C" void* JnJVM_org_j3_bindings_Bindings_prealloc__I(int sz) ALWAYS_INLINE; -extern "C" void* gcmalloc(uint32_t sz, void* VT) { +extern "C" void* JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I( + void* object, void* type, int sz) ALWAYS_INLINE; + +extern "C" void* prealloc(uint32_t size) { + gc* res = 0; + gcHeader* head = 0; + size = llvm::RoundUpToAlignment(size, sizeof(void*)); + head = (gcHeader*) JnJVM_org_j3_bindings_Bindings_prealloc__I(size); + res = head->toReference(); + return res; +} + +extern "C" void postalloc(gc* obj, void* type, uint32_t size) { + vmkit::Thread::get()->MyVM->setType(obj->toHeader(), type); + JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(obj, type, size); +} + +extern "C" void* gcmalloc(uint32_t sz, void* type) { + gc* res = 0; + llvm_gcroot(res, 0); sz += gcHeader::hiddenHeaderSize(); - sz = llvm::RoundUpToAlignment(sz, sizeof(void*)); - return ((gcHeader*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT))->toReference(); + res = (gc*) prealloc(sz); + postalloc(res, type, sz); + return res; +} + +extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) { + gc* res = 0; + llvm_gcroot(res, 0); + res = (gc*)gcmalloc(sz, type); + vmkit::Thread::get()->MyVM->addFinalizationCandidate(res); + return res; } extern "C" void addFinalizationCandidate(gc* obj) __attribute__((always_inline)); @@ -71,13 +98,6 @@ extern "C" void addFinalizationCandidate vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj); } -extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT) { - gc* res = 0; - llvm_gcroot(res, 0); - res = (gc*)gcmalloc(sz, VT); - if (VT->hasDestructor()) addFinalizationCandidate(res); - return res; -} extern "C" void arrayWriteBarrier(void* ref, void** ptr, void* value) { JnJVM_org_j3_bindings_Bindings_arrayWriteBarrier__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2( Modified: vmkit/trunk/tools/precompiler/trainer/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=180327&r1=180326&r2=180327&view=diff ============================================================================== --- vmkit/trunk/tools/precompiler/trainer/Makefile (original) +++ vmkit/trunk/tools/precompiler/trainer/Makefile Thu Apr 25 11:55:30 2013 @@ -19,7 +19,7 @@ include $(LEVEL)/Makefile.common PRECOMPILER := $(ToolDir)/precompiler$(EXEEXT) ifndef VERBOSE -# J3.Flags := > /dev/null + J3.Flags := > /dev/null endif HelloWorld.class: HelloWorld.java From peter.senna at gmail.com Thu Apr 25 09:57:10 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:57:10 -0000 Subject: [vmkit-commits] [vmkit] r180329 - Extended RecursiveLock class to allow unlocking a lock by a thread that Message-ID: <20130425165540.542FD2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:40 2013 New Revision: 180329 URL: http://llvm.org/viewvc/llvm-project?rev=180329&view=rev Log: Extended RecursiveLock class to allow unlocking a lock by a thread that does not own it.(cherry picked from commit 4c93deb096a677b8101a7745ba54e9982da4c3a2) Modified: vmkit/trunk/include/vmkit/Locks.h vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp Modified: vmkit/trunk/include/vmkit/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Locks.h?rev=180329&r1=180328&r2=180329&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Locks.h (original) +++ vmkit/trunk/include/vmkit/Locks.h Thu Apr 25 11:55:40 2013 @@ -131,7 +131,7 @@ public: /// unlockAll - Unlock the lock, releasing it the number of times it is held. /// Return the number of times the lock has been locked. /// - int unlockAll(); + int unlockAll(vmkit::Thread* ownerThread = NULL); /// lockAll - Acquire the lock count times. /// Modified: vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp?rev=180329&r1=180328&r2=180329&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctlock.cpp Thu Apr 25 11:55:40 2013 @@ -108,8 +108,8 @@ void LockRecursive::unlock(vmkit::Thread } } -int LockRecursive::unlockAll() { - assert(selfOwner() && "Not owner when unlocking all"); +int LockRecursive::unlockAll(vmkit::Thread* ownerThread) { + assert(selfOwner(ownerThread) && "Not owner when unlocking all"); int res = n; n = 0; owner = 0; From peter.senna at gmail.com Thu Apr 25 09:57:10 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:57:10 -0000 Subject: [vmkit-commits] [vmkit] r180328 - use by default the enable optimized defined by llvm to avoid mismatch between the llvm build and the vmkit2 build Message-ID: <20130425165534.DCACE2A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:34 2013 New Revision: 180328 URL: http://llvm.org/viewvc/llvm-project?rev=180328&view=rev Log: use by default the enable optimized defined by llvm to avoid mismatch between the llvm build and the vmkit2 build (cherry picked from commit 5eedf7ebb27019b29ad8535d291f4dba4dbf4dbe) Modified: vmkit/trunk/Makefile.common.in Modified: vmkit/trunk/Makefile.common.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180328&r1=180327&r2=180328&view=diff ============================================================================== --- vmkit/trunk/Makefile.common.in (original) +++ vmkit/trunk/Makefile.common.in Thu Apr 25 11:55:34 2013 @@ -15,12 +15,12 @@ LLVMCC_EMITIR_FLAG = "-emit-llvm" ifeq ($(BUILD_FRAMETABLE), 1) BUILT_SOURCES = FrametablesSymbols.inc FrametablesExterns.inc endif - -ENABLE_OPTIMIZED := 0 + +#ENABLE_OPTIMIZED := 0 REQUIRES_FRAME_POINTER := 1 JAVAC_TARGET := 1.5 -ifeq ($(ENABLE_OPTIMIZED), 0) +ifneq ($(ENABLE_OPTIMIZED), 1) CFLAGS += -O0 CXXFLAGS += -O0 From peter.senna at gmail.com Thu Apr 25 09:57:14 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:57:14 -0000 Subject: [vmkit-commits] [vmkit] r180330 - Comment fixed.(cherry picked from commit 7f8dbfcbc460ad10c7a09918b8d0a21b48b6193c) Message-ID: <20130425165544.3DC512A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:55:44 2013 New Revision: 180330 URL: http://llvm.org/viewvc/llvm-project?rev=180330&view=rev Log: Comment fixed.(cherry picked from commit 7f8dbfcbc460ad10c7a09918b8d0a21b48b6193c) Modified: vmkit/trunk/include/vmkit/ObjectLocks.h Modified: vmkit/trunk/include/vmkit/ObjectLocks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/ObjectLocks.h?rev=180330&r1=180329&r2=180330&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/ObjectLocks.h (original) +++ vmkit/trunk/include/vmkit/ObjectLocks.h Thu Apr 25 11:55:44 2013 @@ -193,7 +193,7 @@ public: /// release - Release the lock. static void release(gc* object, LockSystem& table, vmkit::Thread* ownerThread = NULL); - /// owner - Returns true if the curren thread is the owner of this object's + /// owner - Returns true if the current thread is the owner of this object's /// lock. static bool owner(gc* object, LockSystem& table); From peter.senna at gmail.com Thu Apr 25 09:57:37 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:57:37 -0000 Subject: [vmkit-commits] [vmkit] r180331 - move all incinerator related files in the incinerator directory (should be there). Update README.TXT. Move llvm.patches in a patch subdirectory. Message-ID: <20130425165607.F04812A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:56:07 2013 New Revision: 180331 URL: http://llvm.org/viewvc/llvm-project?rev=180331&view=rev Log: move all incinerator related files in the incinerator directory (should be there). Update README.TXT. Move llvm.patches in a patch subdirectory. (cherry picked from commit c3cef6f1e121c3a192fdf9d3630ea0e0881eb5cc) Added: vmkit/trunk/incinerator/ vmkit/trunk/incinerator/README.TXT - copied, changed from r180330, vmkit/trunk/README.TXT vmkit/trunk/incinerator/knopflerfish.patch - copied, changed from r180330, vmkit/trunk/knopflerfish.patch vmkit/trunk/incinerator/osgi/ vmkit/trunk/incinerator/osgi/.classpath - copied, changed from r180330, vmkit/trunk/osgi/.classpath vmkit/trunk/incinerator/osgi/.project - copied, changed from r180330, vmkit/trunk/osgi/.project vmkit/trunk/incinerator/osgi/META-INF/ vmkit/trunk/incinerator/osgi/META-INF/MANIFEST.MF - copied, changed from r180330, vmkit/trunk/osgi/META-INF/MANIFEST.MF vmkit/trunk/incinerator/osgi/build.properties - copied, changed from r180330, vmkit/trunk/osgi/build.properties vmkit/trunk/incinerator/osgi/src/ vmkit/trunk/incinerator/osgi/src/j3/ vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java - copied, changed from r180330, vmkit/trunk/osgi/src/j3/J3Mgr.java vmkit/trunk/incinerator/osgi/src/j3/vm/ vmkit/trunk/incinerator/osgi/src/j3/vm/OSGi.java - copied, changed from r180330, vmkit/trunk/osgi/src/j3/vm/OSGi.java vmkit/trunk/incinerator/osgi/src/j3mgr/ vmkit/trunk/incinerator/osgi/src/j3mgr/Activator.java - copied, changed from r180330, vmkit/trunk/osgi/src/j3mgr/Activator.java vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java - copied, changed from r180330, vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java vmkit/trunk/patches/ vmkit/trunk/patches/llvm.patch - copied, changed from r180330, vmkit/trunk/llvm.patch Removed: vmkit/trunk/knopflerfish.patch vmkit/trunk/llvm.patch vmkit/trunk/osgi/.classpath vmkit/trunk/osgi/.project vmkit/trunk/osgi/META-INF/MANIFEST.MF vmkit/trunk/osgi/build.properties vmkit/trunk/osgi/src/j3/J3Mgr.java vmkit/trunk/osgi/src/j3/vm/OSGi.java vmkit/trunk/osgi/src/j3mgr/Activator.java vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java Modified: vmkit/trunk/README.TXT Modified: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180331&r1=180330&r2=180331&view=diff ============================================================================== --- vmkit/trunk/README.TXT (original) +++ vmkit/trunk/README.TXT Thu Apr 25 11:56:07 2013 @@ -59,21 +59,21 @@ cd ../projects svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt cd .. -* Patch it: +* Patch it if you want to have a better debug support: cd llvm -patch -p1 < ../ijvm/llvm.patch +patch -p1 < ../vmkit2/patches/llvm.patch * Make it (release mode): ./configure --enable-optimized --enable-assertions --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen -make -j12 ENABLE_OPTIMIZED=1 BUILD_EXAMPLES=0 ENABLE_DOCS=0 -ln -s Release+Asserts Debug+Asserts +make -j12 BUILD_EXAMPLES=0 ENABLE_DOCS=0 * You can also make it in debug mode, but this is is not necessary to debug compiled programs: ./configure --disable-optimized --enable-assertions --enable-debug-runtime --enable-debug-symbols --enable-keep-symbols --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen -make -j12 ENABLE_OPTIMIZED=0 BUILD_EXAMPLES=0 ENABLE_DOCS=0 + +make -j12 BUILD_EXAMPLES=0 ENABLE_DOCS=0 ====== VMKit: @@ -81,28 +81,16 @@ VMKit: * Get it (git): -git clone git://scm.gforge.inria.fr/vmkit2/vmkit2.git -b ijvm ijvm -or: -git clone git+ssh://YOUR_USER_NAME.gforge.inria.fr//gitroot/vmkit2/vmkit2.git -b ijvm ijvm +git clone git://scm.gforge.inria.fr/vmkit2/vmkit2.git -* You can also get it via svn: +* or -svn co http://llvm.org/svn/llvm-project/vmkit/trunk vmkit +git clone git+ssh://YOUR_USER_NAME at gforge.inria.fr//gitroot/vmkit2/vmkit2.git * Make it (debug mode): -./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/usr/local/classpath/lib/classpath --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip -make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 +./configure --with-llvmsrc=@PATH_TO_LLVM@ --with-llvmobj=@PATH_TO_LLVM@ --with-gnu-classpath-libs=@PATH_TO_GNUCLASSPATH@ --with-gnu-classpath-glibj=@PATH_TO_GNUCLASSPATH@/lib/glibj.zip -============= -Knopflerfish: -============= - -* Apply patch: -cd knopflerfish -patch -p1 < ../ijvm/knopflerfish.patch -cd .. +* Buil it: +make -j12 -* Recompile Knopflerfish: -cd knopflerfish/osgi -ant default Copied: vmkit/trunk/incinerator/README.TXT (from r180330, vmkit/trunk/README.TXT) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/README.TXT?p2=vmkit/trunk/incinerator/README.TXT&p1=vmkit/trunk/README.TXT&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/knopflerfish.patch (from r180330, vmkit/trunk/knopflerfish.patch) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/knopflerfish.patch?p2=vmkit/trunk/incinerator/knopflerfish.patch&p1=vmkit/trunk/knopflerfish.patch&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/.classpath (from r180330, vmkit/trunk/osgi/.classpath) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/.classpath?p2=vmkit/trunk/incinerator/osgi/.classpath&p1=vmkit/trunk/osgi/.classpath&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/.project (from r180330, vmkit/trunk/osgi/.project) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/.project?p2=vmkit/trunk/incinerator/osgi/.project&p1=vmkit/trunk/osgi/.project&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/META-INF/MANIFEST.MF (from r180330, vmkit/trunk/osgi/META-INF/MANIFEST.MF) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/META-INF/MANIFEST.MF?p2=vmkit/trunk/incinerator/osgi/META-INF/MANIFEST.MF&p1=vmkit/trunk/osgi/META-INF/MANIFEST.MF&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/build.properties (from r180330, vmkit/trunk/osgi/build.properties) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/build.properties?p2=vmkit/trunk/incinerator/osgi/build.properties&p1=vmkit/trunk/osgi/build.properties&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java (from r180330, vmkit/trunk/osgi/src/j3/J3Mgr.java) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java?p2=vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java&p1=vmkit/trunk/osgi/src/j3/J3Mgr.java&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/src/j3/vm/OSGi.java (from r180330, vmkit/trunk/osgi/src/j3/vm/OSGi.java) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/src/j3/vm/OSGi.java?p2=vmkit/trunk/incinerator/osgi/src/j3/vm/OSGi.java&p1=vmkit/trunk/osgi/src/j3/vm/OSGi.java&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/src/j3mgr/Activator.java (from r180330, vmkit/trunk/osgi/src/j3mgr/Activator.java) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/src/j3mgr/Activator.java?p2=vmkit/trunk/incinerator/osgi/src/j3mgr/Activator.java&p1=vmkit/trunk/osgi/src/j3mgr/Activator.java&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Copied: vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java (from r180330, vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java?p2=vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java&p1=vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) Removed: vmkit/trunk/knopflerfish.patch URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/knopflerfish.patch?rev=180330&view=auto ============================================================================== --- vmkit/trunk/knopflerfish.patch (original) +++ vmkit/trunk/knopflerfish.patch (removed) @@ -1,29 +0,0 @@ -Index: knopflerfish/osgi/framework/src/j3/vm/OSGi.java -=================================================================== ---- knopflerfish/osgi/framework/src/j3/vm/OSGi.java 1970-01-01 01:00:00.000000000 +0100 -+++ knopflerfish/osgi/framework/src/j3/vm/OSGi.java 2012-10-27 00:08:43.000000000 +0200 -@@ -0,0 +1,6 @@ -+package j3.vm; -+ -+public class OSGi -+{ -+ public static native void associateBundleClass(long bundleID, Class classObject); -+} -Index: knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java -=================================================================== ---- knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java 2012-10-27 02:29:49.852807353 +0200 -+++ knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java 2012-10-27 02:36:22.287024825 +0200 -@@ -819,9 +819,12 @@ - } - Vector av = classPath.componentExists(path, onlyFirst); - if (av != null) { - try { -- return action.get(av, path, name, pkg, this); -+ Object cl = action.get(av, path, name, pkg, this); -+ if (cl instanceof Class) -+ j3.vm.OSGi.associateBundleClass(getBundle().getBundleId(), (Class)cl); -+ return cl; - } catch (IOException ioe) { - fwCtx.listeners.frameworkError(bpkgs.bg.bundle, ioe); - return null; - } Removed: vmkit/trunk/llvm.patch URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/llvm.patch?rev=180330&view=auto ============================================================================== --- vmkit/trunk/llvm.patch (original) +++ vmkit/trunk/llvm.patch (removed) @@ -1,70 +0,0 @@ -diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp -index d74a703..1831bb6 100644 ---- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp -+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp -@@ -173,7 +173,7 @@ bool AsmPrinter::doInitialization(Module &M) { - for (GCModuleInfo::iterator I = MI->begin(), E = MI->end(); I != E; ++I) - if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*I)) - MP->beginAssembly(*this); -- -+/* - // Emit module-level inline asm if it exists. - if (!M.getModuleInlineAsm().empty()) { - OutStreamer.AddComment("Start of file scope inline assembly"); -@@ -182,7 +182,7 @@ bool AsmPrinter::doInitialization(Module &M) { - OutStreamer.AddComment("End of file scope inline assembly"); - OutStreamer.AddBlankLine(); - } -- -+*/ - if (MAI->doesSupportDebugInformation()) - DD = new DwarfDebug(this, &M); - -@@ -929,6 +929,15 @@ bool AsmPrinter::doFinalization(Module &M) { - if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*--I)) - MP->finishAssembly(*this); - -+ // Emit module-level inline asm if it exists. -+ if (!M.getModuleInlineAsm().empty()) { -+ OutStreamer.AddComment("Start of file scope inline assembly"); -+ OutStreamer.AddBlankLine(); -+ EmitInlineAsm(M.getModuleInlineAsm()+"\n"); -+ OutStreamer.AddComment("End of file scope inline assembly"); -+ OutStreamer.AddBlankLine(); -+ } -+ - // If we don't have any trampolines, then we don't require stack memory - // to be executable. Some targets have a directive to declare this. - Function *InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline"); -diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp -index 0f3efd8..d96a258 100644 ---- a/lib/Target/CppBackend/CPPBackend.cpp -+++ b/lib/Target/CppBackend/CPPBackend.cpp -@@ -375,6 +375,7 @@ std::string CppWriter::getCppName(Type* Ty) { - case Type::DoubleTyID: return "Type::getDoubleTy(mod->getContext())"; - case Type::LabelTyID: return "Type::getLabelTy(mod->getContext())"; - case Type::X86_MMXTyID: return "Type::getX86_MMXTy(mod->getContext())"; -+ case Type::MetadataTyID: return "Type::getMetadataTy(mod->getContext())"; - default: - error("Invalid primitive type"); - break; -@@ -445,6 +446,8 @@ std::string CppWriter::getCppName(const Value* val) { - } else { - name = getTypePrefix(val->getType()); - } -+ } else if (dyn_cast(val)) { -+ name = std::string("metadata_"); - } else { - name = getTypePrefix(val->getType()); - } -@@ -1411,6 +1414,10 @@ void CppWriter::printInstruction(const Instruction *I, - << (ila->hasSideEffects() ? "true" : "false") << ");"; - nl(Out); - } -+ if (const Function* F = dyn_cast(call->getCalledValue())) { -+ if ((F->getName().compare("llvm.dbg.value") == 0) || (F->getName().compare("llvm.dbg.declare") == 0)) -+ break; //Generate nothing -+ } - if (call->getNumArgOperands() > 1) { - Out << "std::vector " << iName << "_params;"; - nl(Out); Removed: vmkit/trunk/osgi/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/.classpath?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/.classpath (original) +++ vmkit/trunk/osgi/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/osgi/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/.project?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/.project (original) +++ vmkit/trunk/osgi/.project (removed) @@ -1,28 +0,0 @@ - - - j3mgr - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - Removed: vmkit/trunk/osgi/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/META-INF/MANIFEST.MF?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/osgi/META-INF/MANIFEST.MF (removed) @@ -1,10 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: J3 Virtual Machine Manager -Bundle-SymbolicName: j3mgr;singleton:=true -Bundle-Version: 1.0.0 -Bundle-Activator: j3mgr.Activator -Import-Package: org.osgi.framework;version="1.3.0", - org.osgi.service.packageadmin;version="1.0.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Export-Package: j3 Removed: vmkit/trunk/osgi/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/build.properties?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/build.properties (original) +++ vmkit/trunk/osgi/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/osgi/src/j3/J3Mgr.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/J3Mgr.java?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3/J3Mgr.java (original) +++ vmkit/trunk/osgi/src/j3/J3Mgr.java (removed) @@ -1,14 +0,0 @@ -package j3; - -import org.osgi.framework.Bundle; - -public interface J3Mgr -{ - public void resetReferencesToBundle(Bundle bundle) throws Exception; - - // THE FOLLOWING METHODS ARE DEBUGGING HELPERS - // THEY SHOULD BE REMOVED IN PRODUCTION - - public void dumpClassLoaderBundles(); - public void resetReferencesToBundle(String bundleName) throws Exception; -} Removed: vmkit/trunk/osgi/src/j3/vm/OSGi.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/vm/OSGi.java?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3/vm/OSGi.java (original) +++ vmkit/trunk/osgi/src/j3/vm/OSGi.java (removed) @@ -1,8 +0,0 @@ -package j3.vm; - -public class OSGi -{ - public static native void associateBundleClass(long bundleID, Class classObject); - public static native void resetReferencesToBundle(long bundleID); - public static native void dumpClassLoaderBundles(); -} Removed: vmkit/trunk/osgi/src/j3mgr/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/Activator.java?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3mgr/Activator.java (original) +++ vmkit/trunk/osgi/src/j3mgr/Activator.java (removed) @@ -1,28 +0,0 @@ -package j3mgr; - -import j3.J3Mgr; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - -public class Activator - implements BundleActivator -{ - J3MgrImpl mgr; - - public void start(BundleContext bundleContext) throws Exception - { - mgr = new J3MgrImpl(); - mgr.open(bundleContext); - - bundleContext.registerService(J3Mgr.class.getName(), mgr, null); - } - - public void stop(BundleContext bundleContext) throws Exception - { - if (mgr != null) { - mgr.close(); - mgr = null; - } - } -} Removed: vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java?rev=180330&view=auto ============================================================================== --- vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java (original) +++ vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java (removed) @@ -1,93 +0,0 @@ -package j3mgr; - -import java.util.LinkedList; - -import j3.J3Mgr; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkEvent; -import org.osgi.framework.FrameworkListener; -import org.osgi.framework.ServiceReference; -import org.osgi.service.packageadmin.PackageAdmin; - -public class J3MgrImpl - implements J3Mgr, FrameworkListener -{ - BundleContext context; - LinkedList bundlesToKill; - - public void open(BundleContext bundleContext) - { - context = bundleContext; - - bundlesToKill = new LinkedList(); - - // We need to know when packages are refreshed - context.addFrameworkListener(this); - } - - public void close() - { - context.removeFrameworkListener(this); - context = null; - - bundlesToKill = null; - } - - public void resetReferencesToBundle(Bundle bundle) throws Exception - { - System.out.println("resetReferencesToBundle: #" + bundle.getBundleId() + " " + bundle.getSymbolicName()); - - System.out.println("Stopping bundle: " + bundle.getSymbolicName()); - bundle.stop(); - System.out.println("Uninstalling bundle: " + bundle.getSymbolicName()); - bundle.uninstall(); - - bundlesToKill.addFirst(new Long(bundle.getBundleId())); - - System.out.println("Refreshing framework..."); - refreshFramework(bundle); - } - - void refreshFramework(Bundle bundle) - { - ServiceReference pkgAdminRef = (ServiceReference)context.getServiceReference( - "org.osgi.service.packageadmin.PackageAdmin"); - PackageAdmin pkgAdmin = (PackageAdmin)context.getService(pkgAdminRef); - pkgAdmin.refreshPackages(null); - } - - public void frameworkEvent(FrameworkEvent event) - { - if (event.getType() != FrameworkEvent.PACKAGES_REFRESHED) return; - - long bundleID = bundlesToKill.removeLast().longValue(); - - System.out.println("Resetting stale references to bundle #" + bundleID); - j3.vm.OSGi.resetReferencesToBundle(bundleID); - } - - // THE FOLLOWING METHODS ARE DEBUGGING HELPERS - // THEY SHOULD BE REMOVED IN PRODUCTION - - public void resetReferencesToBundle(String bundleName) throws Exception - { - resetReferencesToBundle(getBundle(bundleName)); - } - - Bundle getBundle(String symbolicName) - { - Bundle[] bundles = context.getBundles(); - for (int i=0; i < bundles.length; ++i) { - if (symbolicName.equals(bundles[i].getSymbolicName())) - return bundles[i]; - } - return null; - } - - public void dumpClassLoaderBundles() - { - j3.vm.OSGi.dumpClassLoaderBundles(); - } -} Copied: vmkit/trunk/patches/llvm.patch (from r180330, vmkit/trunk/llvm.patch) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/patches/llvm.patch?p2=vmkit/trunk/patches/llvm.patch&p1=vmkit/trunk/llvm.patch&r1=180330&r2=180331&rev=180331&view=diff ============================================================================== (empty) From peter.senna at gmail.com Thu Apr 25 09:59:54 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 16:59:54 -0000 Subject: [vmkit-commits] [vmkit] r180292 - Revert "Working on stale references and isolate termination." Message-ID: <20130425164934.45F082A6C029@llvm.org> Author: peter.senna Date: Thu Apr 25 11:49:31 2013 New Revision: 180292 URL: http://llvm.org/viewvc/llvm-project?rev=180292&view=rev Log: Revert "Working on stale references and isolate termination." This reverts commit 8b33b069777ced12f4883ae362d296ebb122c84c. (cherry picked from commit 759d3e1ef3241b0d4d5dd6387f75f0f8f4f78fb0) Removed: vmkit/trunk/.autotools vmkit/trunk/.cproject vmkit/trunk/.project vmkit/trunk/README.TXT vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp vmkit/trunk/tests/debug.txt vmkit/trunk/tests/i-jvm-log.txt vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath vmkit/trunk/tests/ijvm.tests.StaticClient/.project vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath vmkit/trunk/tests/ijvm.tests.StaticExposer/.project vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java vmkit/trunk/tests/ijvm.tests.loopClient/.classpath vmkit/trunk/tests/ijvm.tests.loopClient/.project vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.loopClient/build.properties vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java vmkit/trunk/tests/ijvm.tests.looper/.classpath vmkit/trunk/tests/ijvm.tests.looper/.project vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.looper/build.properties vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java vmkit/trunk/tests/ijvm.tests.tier/.classpath vmkit/trunk/tests/ijvm.tests.tier/.project vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.tier/build.properties vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath vmkit/trunk/tests/ijvm.tests.tierImpl/.project vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java vmkit/trunk/tests/minimal.xargs vmkit/trunk/tests/sun-jvm-log.txt Modified: vmkit/trunk/CREDITS.TXT vmkit/trunk/Makefile.common.in vmkit/trunk/Makefile.rules vmkit/trunk/include/j3/J3Intrinsics.h vmkit/trunk/include/j3/JavaAOTCompiler.h vmkit/trunk/include/j3/JavaCompiler.h vmkit/trunk/include/j3/JavaJITCompiler.h vmkit/trunk/include/j3/JavaLLVMCompiler.h vmkit/trunk/include/j3/LLVMInfo.h vmkit/trunk/include/vmkit/CollectionRV.h vmkit/trunk/include/vmkit/JIT.h vmkit/trunk/include/vmkit/Locks.h vmkit/trunk/include/vmkit/MethodInfo.h vmkit/trunk/include/vmkit/ObjectLocks.h vmkit/trunk/include/vmkit/System.h vmkit/trunk/include/vmkit/Thread.h vmkit/trunk/include/vmkit/UTF8.h vmkit/trunk/include/vmkit/VirtualMachine.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp vmkit/trunk/lib/j3/Compiler/JavaJIT.h vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp vmkit/trunk/lib/j3/LLVMRuntime/Makefile vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll vmkit/trunk/lib/j3/VMCore/JavaArray.h vmkit/trunk/lib/j3/VMCore/JavaClass.cpp vmkit/trunk/lib/j3/VMCore/JavaClass.h vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp vmkit/trunk/lib/j3/VMCore/JavaObject.cpp vmkit/trunk/lib/j3/VMCore/JavaObject.h vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.cpp vmkit/trunk/lib/j3/VMCore/JavaThread.h vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp vmkit/trunk/lib/j3/VMCore/Jnjvm.h vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h vmkit/trunk/lib/j3/VMCore/Reader.h vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp vmkit/trunk/lib/vmkit/Compiler/JIT.cpp vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp vmkit/trunk/lib/vmkit/Runtime/Object.cpp vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp vmkit/trunk/mmtk/java/build.xml.in vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp vmkit/trunk/mmtk/mmtk-j3/Collection.cpp vmkit/trunk/tools/precompiler/trainer/Makefile vmkit/trunk/tools/vmjc/vmjc.cpp Removed: vmkit/trunk/.autotools URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.autotools?rev=180291&view=auto ============================================================================== --- vmkit/trunk/.autotools (original) +++ vmkit/trunk/.autotools (removed) @@ -1,42 +0,0 @@ - - - - - Removed: vmkit/trunk/.cproject URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.cproject?rev=180291&view=auto ============================================================================== --- vmkit/trunk/.cproject (original) +++ vmkit/trunk/.cproject (removed) @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Removed: vmkit/trunk/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/.project (original) +++ vmkit/trunk/.project (removed) @@ -1,73 +0,0 @@ - - - ijvm - - - - - - org.eclipse.cdt.autotools.core.genmakebuilderV2 - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - ?name? - - - - org.eclipse.cdt.make.core.append_environment - true - - - org.eclipse.cdt.make.core.buildArguments - -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 - - - org.eclipse.cdt.make.core.buildCommand - make - - - org.eclipse.cdt.make.core.contents - org.eclipse.cdt.make.core.activeConfigSettings - - - org.eclipse.cdt.make.core.enableAutoBuild - false - - - org.eclipse.cdt.make.core.enableCleanBuild - true - - - org.eclipse.cdt.make.core.enableFullBuild - true - - - org.eclipse.cdt.make.core.stopOnError - true - - - org.eclipse.cdt.make.core.useDefaultBuildCmd - false - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - org.eclipse.cdt.autotools.core.autotoolsNatureV2 - - Modified: vmkit/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/CREDITS.TXT?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/CREDITS.TXT (original) +++ vmkit/trunk/CREDITS.TXT Thu Apr 25 11:49:31 2013 @@ -35,6 +35,3 @@ N: Gael Thomas E: gael.thomas at lip6.fr W: http://lip6.fr/Gael.Thomas/ D: Primary architect of JnJVM - -N: Koutheir Attouchi -E: koutheir at gmail.com Modified: vmkit/trunk/Makefile.common.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/Makefile.common.in (original) +++ vmkit/trunk/Makefile.common.in Thu Apr 25 11:49:31 2013 @@ -16,47 +16,6 @@ ifeq ($(BUILD_FRAMETABLE), 1) BUILT_SOURCES = FrametablesSymbols.inc FrametablesExterns.inc endif -ENABLE_OPTIMIZED := 0 -REQUIRES_FRAME_POINTER := 1 - -ifeq ($(ENABLE_OPTIMIZED), 0) - CFLAGS += -O0 - CXXFLAGS += -O0 - - LLC_CPP_FLAGS := -O=0 - LLC_ASM_FLAGS := -O=0 -asm-verbose - LLC_GLIBJ_FLAGS := - - OPT_BC_WITH_GC_FLAGS := -inline - OPT_MMTK_FLAGS := - OPT_VMJC_FLAGS := -std-compile-opts - - VMJC_MMTK_FLAGS := - VMJC_GLIBJ_FLAGS := -jit-emit-debug -std-compile-opts - - PRECOMPILER_FLAGS := - - KEEP_SYMBOLS := 1 - DEBUG_RUNTIME := 1 - DEBUG_SYMBOLS := 1 -else - CFLAGS += -O2 -g0 - CXXFLAGS += -O2 -g0 - - LLC_CPP_FLAGS := - LLC_ASM_FLAGS := -O=2 -disable-debug-info-print - LLC_GLIBJ_FLAGS := -disable-debug-info-print - - OPT_BC_WITH_GC_FLAGS := -std-compile-opts -strip-debug - OPT_MMTK_FLAGS := -std-compile-opts -strip-debug - OPT_VMJC_FLAGS := -std-compile-opts -strip-debug - - PRECOMPILER_FLAGS := -O3 - - VMJC_MMTK_FLAGS := -std-compile-opts - VMJC_GLIBJ_FLAGS := -std-compile-opts -endif - # Include LLVM's Master Makefile. include $(LLVM_OBJ_ROOT)/Makefile.common Modified: vmkit/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/Makefile.rules (original) +++ vmkit/trunk/Makefile.rules Thu Apr 25 11:49:31 2013 @@ -15,7 +15,7 @@ ifdef VMKIT_RUNTIME LLVMRuntime.inc : $(LLVMAS) $(LLC) $(VMKIT_RUNTIME) $(Echo) "Building LLVM runtime with $(VMKIT_RUNTIME)" - $(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=contents -o $@ + $(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) -march=cpp -cppgen=contents -o $@ all-local:: LLVMRuntime.inc @@ -37,18 +37,18 @@ glibj.zip.s : $(LOPT) $(LLC) $(VMJC) glibj.zip.bc : $(Echo) "Compiling glibj.zip to llvm" $(Verb) if test -d $(GLIBJ); then \ - $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ)/glibj.zip -o glibj.zip.bc; \ + $(VMJC) -f -std-compile-opts $(GLIBJ)/glibj.zip -o glibj.zip.bc; \ else \ - $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ) -o glibj.zip.bc; \ + $(VMJC) -f -std-compile-opts $(GLIBJ) -o glibj.zip.bc; \ fi glibj-optimized.zip.bc : glibj.zip.bc $(Echo) "Optimizing glibj.zip" - $(Verb) $(LOPT) $(OPT_VMJC_FLAGS) -f glibj.zip.bc -o glibj-optimized.zip.bc + $(Verb) $(LOPT) -std-compile-opts -f glibj.zip.bc -o glibj-optimized.zip.bc glibj.zip.s : glibj-optimized.zip.bc $(Echo) "Compiling glibj.zip.bc to native" - $(Verb) $(LLC) $(LLC_GLIBJ_FLAGS) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s + $(Verb) $(LLC) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s $(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG) @@ -74,22 +74,20 @@ ifeq ($(COMPILE_MMTK), 1) all:: $(Verb) $(ANT) -buildfile $(PROJ_OBJ_ROOT)/mmtk/java/build.xml $(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@) - $(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc - $(Verb) $(VMJC) $(VMJC_MMTK_FLAGS) -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled - $(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) $(OPT_MMTK_FLAGS) -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc + $(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) -std-compile-opts -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc + $(Verb) $(VMJC) -std-compile-opts -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled + $(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -std-compile-opts -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc $(Verb) $(LLVMLINK) -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc - $(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -StaticGCPass -o $(LibDir)/FinalMMTk.bc + $(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $(LibDir)/FinalMMTk.bc $(Verb) $(MKDIR) $(ObjDir) - $(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-fp-elim -disable-cfi -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s - $(Verb) $(GREP) -v '\.loc[^0-9]\+[0-9]\+ 0' $(ObjDir)/FinalMMTk.s > $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc - $(Verb) $(MV) -f $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc $(ObjDir)/FinalMMTk.s + $(Verb) $(LLC) -disable-fp-elim -disable-cfi -disable-debug-info-print -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s $(Verb) $(LLVMCC) -c $(ObjDir)/FinalMMTk.s -o $(ObjDir)/FinalMMTk.o $(Verb) $(Archive) $(LibDir)/libFinalMMTk.a $(ObjDir)/FinalMMTk.o $(Verb) $(Ranlib) $(LibDir)/libFinalMMTk.a - $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkMallocInline.inc - $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc - $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc - $(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc + $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=gcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkMallocInline.inc + $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc + $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc + $(Verb) $(LLC) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc endif clean-local:: @@ -110,11 +108,11 @@ AModule := $(LibDir)/lib$(MODU $(ObjectsBCWithGC): $(ObjDir)/%_gc.bc: $(ObjDir)/%.ll $(LOPT) $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)" - $(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) $(OPT_BC_WITH_GC_FLAGS) -StaticGCPass -o $@ + $(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $@ $(ObjectsSWithGC): $(ObjDir)/%_gc.s: $(ObjDir)/%_gc.bc $(LLC) $(Echo) "Compiling $*.bc to $*.s for $(BuildMode) build" - $(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@ + $(Verb) $(LLC) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@ $(ObjectsWithGC): $(ObjDir)/%_gc.o: $(ObjDir)/%_gc.s $(ObjDir)/.dir $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG) Removed: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180291&view=auto ============================================================================== --- vmkit/trunk/README.TXT (original) +++ vmkit/trunk/README.TXT (removed) @@ -1,102 +0,0 @@ -http://llvm.org/docs/GettingStarted.html#checkout - -=================== -Prepare the system: -=================== -apt-get install libgconf2-dev libgtk2.0-dev - -# To use OpenJDK: -# apt-get install default-jre default-jdk - -============== -GNU Classpath: -============== -wget http://ftp.gnu.org/gnu/classpath/classpath-0.97.2.tar.gz -tar zxvf classpath-0.97.2.tar.gz -ln -s classpath-0.97.2 classpath -cd classpath -./configure --disable-plugin --disable-examples --disable-Werror -make -j12 -cd lib -ln -sf ../native/jni/gtk-peer/.libs/libgtkpeer.so -ln -sf ../native/jni/gconf-peer/.libs/libgconfpeer.so -ln -sf ../native/jni/java-io/.libs/libjavaio.so -ln -sf ../native/jni/java-lang/.libs/libjavalangreflect.so -ln -sf ../native/jni/java-lang/.libs/libjavalang.so -ln -sf ../native/jni/java-net/.libs/libjavanet.so -ln -sf ../native/jni/java-nio/.libs/libjavanio.so -ln -sf ../native/jni/java-util/.libs/libjavautil.so - -# Go root -# make install - -===== -LLVM: -===== - -Notice: - -LLVM revision 158308 is known to work. - -Get it (git): - -git clone http://llvm.org/git/llvm.git -cd llvm/tools -git clone http://llvm.org/git/clang.git -cd clang -git config branch.master.rebase true -cd ../.. -git config branch.master.rebase true - -Get it (svn): - -svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm -cd llvm/tools -svn co http://llvm.org/svn/llvm-project/cfe/trunk clang -cd ../projects -svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt -cd .. - -Patch it: - -cd llvm -patch -p0 < ../llvm.patch - -Make it (release mode): - -./configure --enable-optimized --enable-assertions --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen -make -j12 ENABLE_OPTIMIZED=1 BUILD_EXAMPLES=0 ENABLE_DOCS=0 -ln -s Release+Asserts Debug+Asserts - -Enable debug compilation: - -nano Makefile.config -# Comment out: -# ENABLE_OPTIMIZED=1 -# Uncomment: -# DEBUG_RUNTIME = 1 -# DEBUG_SYMBOLS = 1 -# Insert: -# KEEP_SYMBOLS=1 - -Make it (debug mode): - -./configure --disable-optimized --enable-assertions --enable-debug-runtime --enable-debug-symbols --enable-keep-symbols --enable-jit --enable-threads --enable-pthreads --enable-pic --enable-targets=x86,cpp --disable-docs --disable-doxygen -make -j12 ENABLE_OPTIMIZED=0 BUILD_EXAMPLES=0 ENABLE_DOCS=0 - -====== -VMKit: -====== - -Get it (svn): - -svn co http://llvm.org/svn/llvm-project/vmkit/trunk vmkit - -Get it (git): - -git clone git+ssh://koutheir at scm.gforge.inria.fr//gitroot/vmkit2/vmkit2.git - -Make it (debug mode): - -./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip -make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1 Modified: vmkit/trunk/include/j3/J3Intrinsics.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/j3/J3Intrinsics.h (original) +++ vmkit/trunk/include/j3/J3Intrinsics.h Thu Apr 25 11:49:31 2013 @@ -31,7 +31,6 @@ public: llvm::Type* JavaArrayObjectType; llvm::Type* VTType; - llvm::Type* ObjectHeaderType; llvm::Type* JavaObjectType; llvm::Type* JavaArrayType; llvm::Type* JavaCommonClassType; @@ -105,7 +104,7 @@ public: llvm::Constant* JavaArraySizeOffsetConstant; llvm::Constant* JavaArrayElementsOffsetConstant; - llvm::Constant* HeaderObjectLockOffsetConstant; + llvm::Constant* JavaObjectLockOffsetConstant; llvm::Constant* JavaObjectVTOffsetConstant; llvm::Constant* OffsetAccessInCommonClassConstant; Modified: vmkit/trunk/include/j3/JavaAOTCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaAOTCompiler.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaAOTCompiler.h (original) +++ vmkit/trunk/include/j3/JavaAOTCompiler.h Thu Apr 25 11:49:31 2013 @@ -17,7 +17,7 @@ namespace j3 { class ArrayObject; -class JavaAttribute; +class Attribut; class ClassBytes; class JnjvmBootstrapLoader; @@ -26,7 +26,7 @@ using vmkit::UTF8; class JavaAOTCompiler : public JavaLLVMCompiler { public: - JavaAOTCompiler(const std::string &ModuleID, bool compilingMMTk=false); + JavaAOTCompiler(const std::string &ModuleID); virtual bool isStaticCompiling() { return true; @@ -36,8 +36,8 @@ public: return true; } - virtual JavaCompiler* Create(const std::string& ModuleID, bool compilingMMTk=false) { - return new JavaAOTCompiler(ModuleID, compilingMMTk); + virtual JavaCompiler* Create(const std::string& ModuleID) { + return new JavaAOTCompiler(ModuleID); } virtual void* materializeFunction(JavaMethod* meth, Class* customizeFor) { @@ -64,7 +64,7 @@ public: virtual llvm::Constant* getClassBytes(const UTF8* name, ClassBytes* bytes); virtual llvm::Constant* getJavaClass(CommonClass* cl); virtual llvm::Constant* getJavaClassPtr(CommonClass* cl); - virtual llvm::Constant* getStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE); + virtual llvm::Constant* getStaticInstance(Class* cl); virtual llvm::Constant* getVirtualTable(JavaVirtualTable*); virtual llvm::Constant* getMethodInClass(JavaMethod* meth); @@ -83,17 +83,16 @@ public: private: //--------------- Static compiler specific functions -----------------------// - llvm::Constant* CreateConstantFromTaskClassMirrorArray(Class* cl); llvm::Constant* CreateConstantFromVT(JavaVirtualTable* VT); llvm::Constant* CreateConstantFromUTF8(const UTF8* val); llvm::Constant* CreateConstantFromCommonClass(CommonClass* cl); llvm::Constant* CreateConstantFromClass(Class* cl); llvm::Constant* CreateConstantFromClassPrimitive(ClassPrimitive* cl); llvm::Constant* CreateConstantFromClassArray(ClassArray* cl); - llvm::Constant* CreateConstantFromAttribute(JavaAttribute& attribute); + llvm::Constant* CreateConstantFromAttribut(Attribut& attribut); llvm::Constant* CreateConstantFromJavaField(JavaField& field); llvm::Constant* CreateConstantFromJavaMethod(JavaMethod& method); - llvm::Constant* CreateConstantFromStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE); + llvm::Constant* CreateConstantFromStaticInstance(Class* cl); llvm::Constant* CreateConstantFromJavaString(JavaString* str); llvm::Constant* CreateConstantForBaseObject(CommonClass* cl); llvm::Constant* CreateConstantFromJavaObject(JavaObject* obj); @@ -117,7 +116,7 @@ private: std::map arrayClasses; std::map javaClasses; std::map virtualTables; - std::map taskClassMirrors; + std::map staticInstances; std::map resolvedConstantPools; std::map strings; std::map nativeFunctions; @@ -152,7 +151,7 @@ private: virtual_table_iterator; typedef std::map::iterator - task_class_mirror_iterator; + static_instance_iterator; typedef std::map::iterator resolved_constant_pool_iterator; Modified: vmkit/trunk/include/j3/JavaCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaCompiler.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaCompiler.h (original) +++ vmkit/trunk/include/j3/JavaCompiler.h Thu Apr 25 11:49:31 2013 @@ -36,7 +36,7 @@ public: vmkit::BumpPtrAllocator allocator; - virtual JavaCompiler* Create(const std::string&, bool compilingMMTk=false) { + virtual JavaCompiler* Create(const std::string&) { return this; } Modified: vmkit/trunk/include/j3/JavaJITCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaJITCompiler.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaJITCompiler.h (original) +++ vmkit/trunk/include/j3/JavaJITCompiler.h Thu Apr 25 11:49:31 2013 @@ -41,7 +41,7 @@ public: llvm::ExecutionEngine* executionEngine; llvm::GCModuleInfo* GCInfo; - JavaJITCompiler(const std::string &ModuleID, bool compilingMMTk=false); + JavaJITCompiler(const std::string &ModuleID); ~JavaJITCompiler(); virtual bool isStaticCompiling() { @@ -64,7 +64,7 @@ public: virtual llvm::Constant* getNativeClass(CommonClass* cl); virtual llvm::Constant* getJavaClass(CommonClass* cl); virtual llvm::Constant* getJavaClassPtr(CommonClass* cl); - virtual llvm::Constant* getStaticInstance(Class* cl, isolate_id_t isolateID = CURRENT_ISOLATE); + virtual llvm::Constant* getStaticInstance(Class* cl); virtual llvm::Constant* getVirtualTable(JavaVirtualTable*); virtual llvm::Constant* getMethodInClass(JavaMethod* meth); @@ -79,7 +79,7 @@ public: bool stat, llvm::BasicBlock* insert) = 0; virtual word_t getPointerOrStub(JavaMethod& meth, int type) = 0; - static JavaJITCompiler* CreateCompiler(const std::string& ModuleID, bool compilingMMTk=false); + static JavaJITCompiler* CreateCompiler(const std::string& ModuleID); }; class JavaJ3LazyJITCompiler : public JavaJITCompiler { @@ -89,11 +89,11 @@ public: bool stat, llvm::BasicBlock* insert); virtual word_t getPointerOrStub(JavaMethod& meth, int side); - virtual JavaCompiler* Create(const std::string& ModuleID, bool compilingMMTk=false) { - return new JavaJ3LazyJITCompiler(ModuleID, compilingMMTk); + virtual JavaCompiler* Create(const std::string& ModuleID) { + return new JavaJ3LazyJITCompiler(ModuleID); } - JavaJ3LazyJITCompiler(const std::string& ModuleID, bool compilingMMTk=false); + JavaJ3LazyJITCompiler(const std::string& ModuleID); }; } // end namespace j3 Modified: vmkit/trunk/include/j3/JavaLLVMCompiler.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaLLVMCompiler.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/j3/JavaLLVMCompiler.h (original) +++ vmkit/trunk/include/j3/JavaLLVMCompiler.h Thu Apr 25 11:49:31 2013 @@ -51,7 +51,7 @@ protected: llvm::Module* TheModule; llvm::DIBuilder* DebugFactory; J3Intrinsics JavaIntrinsics; - const llvm::DataLayout* TheDataLayout; + const llvm::TargetData* TheTargetData; private: bool enabledException; Modified: vmkit/trunk/include/j3/LLVMInfo.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/LLVMInfo.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/j3/LLVMInfo.h (original) +++ vmkit/trunk/include/j3/LLVMInfo.h Thu Apr 25 11:49:31 2013 @@ -86,7 +86,7 @@ private: llvm::Constant* offsetConstant; llvm::FunctionType* functionType; std::map customizedVersions; - + public: llvm::Function* getMethod(Class* customizeFor); llvm::Constant* getOffset(); @@ -107,10 +107,6 @@ public: void setCustomizedVersion(Class* customizeFor, llvm::Function* F); - typedef std::map customizedVersionsType; - typedef customizedVersionsType::iterator customizedVersionsIterator; - customizedVersionsType* getCustomizedVersions() {return &customizedVersions;} - friend class JavaAOTCompiler; }; Modified: vmkit/trunk/include/vmkit/CollectionRV.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/CollectionRV.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/CollectionRV.h (original) +++ vmkit/trunk/include/vmkit/CollectionRV.h Thu Apr 25 11:49:31 2013 @@ -62,7 +62,7 @@ public: virtual void synchronize() = 0; virtual void join() = 0; - virtual void joinAfterUncooperative(void* SP) = 0; + virtual void joinAfterUncooperative(word_t SP) = 0; virtual void joinBeforeUncooperative() = 0; virtual void addThread(Thread* th) = 0; @@ -74,7 +74,7 @@ public: void synchronize(); void join(); - void joinAfterUncooperative(void* SP); + void joinAfterUncooperative(word_t SP); void joinBeforeUncooperative(); void addThread(Thread* th); Modified: vmkit/trunk/include/vmkit/JIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/JIT.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/JIT.h (original) +++ vmkit/trunk/include/vmkit/JIT.h Thu Apr 25 11:49:31 2013 @@ -154,7 +154,6 @@ public: llvm::Constant* constantFloatMinusZero; llvm::Constant* constantDoubleMinusZero; llvm::Constant* constantPtrNull; - llvm::Constant* constantPtr32Null; llvm::Constant* constantPtrLogSize; llvm::Constant* constantThreadIDMask; llvm::Constant* constantStackOverflowMask; Modified: vmkit/trunk/include/vmkit/Locks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Locks.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Locks.h (original) +++ vmkit/trunk/include/vmkit/Locks.h Thu Apr 25 11:49:31 2013 @@ -175,19 +175,6 @@ public: void unlock() { release(); } }; -class LockGuard -{ -protected: - Lock& lock; - -private: //Disable these consructors - LockGuard(); - LockGuard(const LockGuard&); - -public: - inline LockGuard(Lock& l) : lock(l) {lock.lock();} - virtual ~LockGuard() {lock.unlock();} -}; } // end namespace vmkit Modified: vmkit/trunk/include/vmkit/MethodInfo.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/MethodInfo.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/MethodInfo.h (original) +++ vmkit/trunk/include/vmkit/MethodInfo.h Thu Apr 25 11:49:31 2013 @@ -19,7 +19,7 @@ namespace vmkit { class FrameInfo { public: void* Metadata; - void* ReturnAddress; + word_t ReturnAddress; uint16_t SourceIndex; uint16_t FrameSize; uint16_t NumLiveOffsets; @@ -28,9 +28,9 @@ public: class MethodInfoHelper { public: - static void print(void* ip, void* callFrame); + static void print(word_t ip, word_t addr); - static void scan(word_t closure, FrameInfo* FI, void* ip, void* callFrame); + static void scan(word_t closure, FrameInfo* FI, word_t ip, word_t addr); static uint32_t FrameInfoSize(uint32_t NumOffsets) { uint32_t FrameInfoSize = sizeof(FrameInfo) + (NumOffsets - 1) * sizeof(int16_t); Modified: vmkit/trunk/include/vmkit/ObjectLocks.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/ObjectLocks.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/ObjectLocks.h (original) +++ vmkit/trunk/include/vmkit/ObjectLocks.h Thu Apr 25 11:49:31 2013 @@ -59,7 +59,7 @@ public: state = StateRunning; } - bool wait(gc* object, LockSystem& table, struct timeval* info, bool& timed); + bool wait(gc* object, LockSystem& table, struct timeval* info, bool timed); void notify(gc* object, LockSystem& table); void notifyAll(gc* object, LockSystem& table); }; Modified: vmkit/trunk/include/vmkit/System.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/System.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/System.h (original) +++ vmkit/trunk/include/vmkit/System.h Thu Apr 25 11:49:31 2013 @@ -95,7 +95,7 @@ const word_t kVmkitThreadMask = 0xF00000 const word_t kGCMemorySize = 0x30000000; -#define TRY { vmkit::ExceptionBuffer __buffer__; if (!SETJMP(__buffer__.getSetJmpBuffer())) +#define TRY { vmkit::ExceptionBuffer __buffer__; if (!SETJMP(__buffer__.buffer)) #define CATCH else #define IGNORE else { vmkit::Thread::get()->clearException(); }} #define END_CATCH } @@ -124,8 +124,8 @@ public: return ptr; } - static size_t GetAlternativeStackSize() { - static size_t size = PageAlignUp(SIGSTKSZ); + static word_t GetAlternativeStackSize() { + static word_t size = PageAlignUp(SIGSTKSZ); return size; } @@ -144,11 +144,31 @@ public: return kThreadStart; } - static size_t GetPageSize() { - static size_t pagesize = getpagesize(); + static uint32_t GetPageSize() { + static uint32_t pagesize = getpagesize(); return pagesize; } + static word_t GetCallerAddress() { +#if defined(ARCH_X86) || defined(ARCH_X64) + return (word_t)__builtin_frame_address(0); +#else + return ((word_t*)__builtin_frame_address(0))[0]; +#endif + } + + static word_t GetCallerOfAddress(word_t addr) { + return ((word_t*)addr)[0]; + } + + static word_t GetIPFromCallerAddress(word_t addr) { +#if defined(MACOS_OS) && defined(ARCH_PPC) + return ((word_t*)addr)[2]; +#else + return ((word_t*)addr)[1]; +#endif + } + static int SetJmp(jmp_buf buffer) { #if defined(MACOS_OS) return _setjmp(buffer); Modified: vmkit/trunk/include/vmkit/Thread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Thread.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/Thread.h (original) +++ vmkit/trunk/include/vmkit/Thread.h Thu Apr 25 11:49:31 2013 @@ -19,114 +19,11 @@ #include "vmkit/System.h" -typedef uint32_t isolate_id_t; -#define CURRENT_ISOLATE ((isolate_id_t)(-1)) -#define IsValidIsolateID(iid) ((iid) != CURRENT_ISOLATE) namespace vmkit { class FrameInfo; class VirtualMachine; -class Thread; - - -class KnownFrame { -public: - void* currentFP; - void* currentIP; - KnownFrame* previousFrame; -}; - - -enum StackWalkerState { - StackWalkerInvalid = 0, - StackWalkerValid, - StackWalkerValidMetadata -}; - -/// StackWalker - This class walks the stack of threads, returning a FrameInfo -/// object at each iteration. -/// -class StackWalker -{ -protected: - void* callFrame; - KnownFrame* frame; - vmkit::Thread* thread; - bool onlyReportMetadataEnabledFrames; - -public: - StackWalker(vmkit::Thread* th, bool only_report_metadata_enabled_frames = false); - StackWalker(const StackWalker& obj, bool reset = false); - - StackWalker& operator = (const StackWalker& obj); - bool operator == (const StackWalker& obj) const {return (thread == obj.thread) && (callFrame == obj.callFrame);} - bool operator != (const StackWalker& obj) const {return !((*this) == obj);} - void operator++(); - void operator--(); - void* operator*(); - FrameInfo* get(); - const FrameInfo* get() const {return const_cast(this)->get();} - void reset() __attribute__ ((noinline)); - - void* getCallFrame() const {return callFrame;} - void* getCallerCallFrame() const; - void* getReturnAddress() const {return getReturnAddressFromCallFrame(callFrame);} - KnownFrame* getKnownFrame() {return frame;} - vmkit::Thread* getScannedThread() const {return thread;} - StackWalkerState getState() const; - bool isValid() const {return getState() >= StackWalkerValid;} - bool hasMetaData() const {return getState() == StackWalkerValidMetadata;} - - void* updateReturnAddress(void* newAddr); - void* updateCallerFrameAddress(void* newAddr); - - bool isReportingOnlyMetadataEnabledFrames() const {return onlyReportMetadataEnabledFrames;} - void reportOnlyMetadataEnabledFrames(bool only_report_metadata_enabled_frames) {onlyReportMetadataEnabledFrames = only_report_metadata_enabled_frames;} - - void dump() const; - - static void* getCallerCallFrameAddress(void* callFrame); - static void** getReturnAddressPtrFromCallFrame(void* callFrame); - static void* getReturnAddressFromCallFrame(void* callFrame); - -#if defined(ARCH_X86) || defined(ARCH_X64) -#define StackWalker_getCallFrameAddress() ((void*)(__builtin_frame_address(0))) -#else -#define StackWalker_getCallFrameAddress() (*(void**)__builtin_frame_address(0)) -#endif - -}; - - -class ExceptionBuffer { -protected: - /* - WARNING: - - Do not change the fields order or type, unless you update LLVM data types. - - Do not declare anything as virtual (to avoid generating a Virtual Table). - */ - void* handlerMethod; - uint32_t handlerIsolateID; - ExceptionBuffer* previousBuffer; - jmp_buf buffer; - -public: - ExceptionBuffer(); - ~ExceptionBuffer() {removeFromThreadExceptionList();} - - void addToThreadExceptionList(void* returnAddr); - void removeFromThreadExceptionList(); - - void* getHandlerMethod() const {return handlerMethod;} - isolate_id_t getHandlerIsolateID() const {return handlerIsolateID;} - - ExceptionBuffer* getPrevious() {return previousBuffer;} - void setPrevious(ExceptionBuffer* newValue) {previousBuffer = newValue;} - - jmp_buf& getSetJmpBuffer() {return buffer;} -}; - /// CircularBase - This class represents a circular list. Classes that extend /// this class automatically place their instances in a circular list. @@ -202,6 +99,14 @@ public: }; +class KnownFrame { +public: + word_t currentFP; + word_t currentIP; + KnownFrame* previousFrame; +}; + + class ExceptionBuffer; /// Thread - This class is the base of custom virtual machines' Thread classes. @@ -212,7 +117,6 @@ public: Thread() { lastExceptionBuffer = 0; lastKnownFrame = 0; - runningDeadIsolate = false; } /// yield - Yield the processor to another thread. @@ -239,18 +143,17 @@ public: return (uint64_t)this; } -protected: +public: /// IsolateID - The Isolate ID of the thread's VM. - isolate_id_t isolateID; + size_t IsolateID; -public: /// MyVM - The VM attached to this Thread. VirtualMachine* MyVM; /// baseSP - The base stack pointer. /// - void* baseSP; + word_t baseSP; /// doYield - Flag to tell the thread to yield for GC reasons. /// @@ -267,7 +170,7 @@ public: /// get - Get the thread specific data of the current thread. /// static Thread* get() { - return (Thread*)((word_t)StackWalker_getCallFrameAddress() & System::GetThreadIDMask()); + return (Thread*)(System::GetCallerAddress() & System::GetThreadIDMask()); } private: @@ -276,13 +179,13 @@ private: /// interrupted, lastSP is not null and contains the value of the /// stack pointer before entering native. /// - void* lastSP; + word_t lastSP; /// internalThreadID - The implementation specific thread id. /// void* internalThreadID; - /// internalThreadStart - The implementation specific thread starter + /// internalThreadStart - The implementation sepcific thread starter /// function. /// static void internalThreadStart(vmkit::Thread* th); @@ -293,32 +196,22 @@ private: public: - isolate_id_t getIsolateID() const; - void setIsolateID(isolate_id_t newIsolateID); - static isolate_id_t getValidIsolateID(isolate_id_t isolateID); - - bool runsDeadIsolate() const; - void markRunningDeadIsolate(); - void setDeadIsolateID(); - - bool isCurrentThread(); - /// tracer - Does nothing. Used for child classes which may defined /// a tracer. /// virtual void tracer(word_t closure) {} void scanStack(word_t closure); - void* getLastSP() { return lastSP; } - void setLastSP(void* V) { lastSP = V; } + word_t getLastSP() { return lastSP; } + void setLastSP(word_t V) { lastSP = V; } void joinRVBeforeEnter(); - void joinRVAfterLeave(void* savedSP); + void joinRVAfterLeave(word_t savedSP); void enterUncooperativeCode(uint16_t level = 0) __attribute__ ((noinline)); - void enterUncooperativeCode(void* SP); + void enterUncooperativeCode(word_t SP); void leaveUncooperativeCode(); - void* waitOnSP(); + word_t waitOnSP(); /// clearException - Clear any pending exception of the current thread. @@ -326,7 +219,7 @@ public: internalClearException(); } - bool isVmkitThread() const { + bool isVmkitThread() { if (!baseAddr) return false; else return (((word_t)this) & System::GetVmkitThreadMask()) == baseAddr; } @@ -343,7 +236,7 @@ public: /// stackOverflow - Returns if there is a stack overflow in Java land. /// bool stackOverflow() { - return ((word_t)StackWalker_getCallFrameAddress() & StackOverflowMask) == 0; + return (System::GetCallerAddress() & StackOverflowMask) == 0; } /// operator new - Allocate the Thread object as well as the stack for this @@ -366,7 +259,7 @@ public: /// getFrameContext - Fill the buffer with frames currently on the stack. /// - void getFrameContext(void** buffer); + void getFrameContext(word_t* buffer); /// getFrameContextLength - Get the length of the frame context. /// @@ -387,27 +280,62 @@ public: void startUnknownFrame(KnownFrame& F) __attribute__ ((noinline)); void endUnknownFrame(); - void* GetAlternativeStackEnd() { - return (void*)((intptr_t)this + System::GetPageSize()); + word_t GetAlternativeStackEnd() { + return (word_t)this + System::GetPageSize(); + } + + word_t GetAlternativeStackStart() { + return GetAlternativeStackEnd() + System::GetAlternativeStackSize(); + } + + bool IsStackOverflowAddr(word_t addr) { + word_t stackOverflowCheck = GetAlternativeStackStart(); + return addr > stackOverflowCheck && + addr <= stackOverflowCheck + System::GetPageSize(); + } +}; + +class ExceptionBuffer { +public: + ExceptionBuffer() { + init(); + } + + void init() { + Thread* th = Thread::get(); + previousBuffer = th->lastExceptionBuffer; + th->lastExceptionBuffer = this; } - void* GetAlternativeStackStart() { - return (void*)((intptr_t)GetAlternativeStackEnd() + System::GetAlternativeStackSize()); + ~ExceptionBuffer() { + remove(); } - bool IsStackOverflowAddr(void* addr) { - void* stackOverflowCheck = GetAlternativeStackStart(); - return (addr > stackOverflowCheck) && - addr <= (void*)((intptr_t)stackOverflowCheck + System::GetPageSize()); + void remove() { + Thread* th = Thread::get(); + assert(th->lastExceptionBuffer == this && "Wrong exception buffer"); + th->lastExceptionBuffer = previousBuffer; } - virtual void throwNullPointerException(void* methodIP) const; - virtual void throwDeadIsolateException() const {} + jmp_buf buffer; + ExceptionBuffer* previousBuffer; +}; + +/// StackWalker - This class walks the stack of threads, returning a FrameInfo +/// object at each iteration. +/// +class StackWalker { +public: + word_t addr; + word_t ip; + KnownFrame* frame; + vmkit::Thread* thread; - virtual void runAfterLeavingGarbageCollectorRendezVous() {} + StackWalker(vmkit::Thread* th) __attribute__ ((noinline)); + void operator++(); + word_t operator*(); + FrameInfo* get(); -protected: - bool runningDeadIsolate; }; Modified: vmkit/trunk/include/vmkit/UTF8.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/UTF8.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/UTF8.h (original) +++ vmkit/trunk/include/vmkit/UTF8.h Thu Apr 25 11:49:31 2013 @@ -2,8 +2,6 @@ #define _UTF8_INTERNAL_H_ #include -#include -#include #include "vmkit/Allocator.h" #include "vmkit/VmkitDenseMap.h" #include "vmkit/VmkitDenseSet.h" @@ -24,7 +22,7 @@ private: public: /// size - The (constant) size of the UTF8. - int32_t size; + ssize_t size; /// elements - Elements of this UTF8. /// The size should be set to zero, but this is invalid C99. @@ -63,11 +61,6 @@ public: UTF8(sint32 n) { size = n; } - - std::string toString() const; - friend std::ostream& operator << (std::ostream& out, const UTF8& utf8) {return out << utf8.toString();} - void dump() const __attribute__((noinline)); - int compare(const char *) const; }; extern "C" const UTF8 TombstoneKey; Modified: vmkit/trunk/include/vmkit/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/VirtualMachine.h (original) +++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:49:31 2013 @@ -32,7 +32,7 @@ public: /// used when walking the stack so that VMKit knows which applicative method /// is executing on the stack. /// - llvm::DenseMap Functions; + llvm::DenseMap Functions; /// FunctionMapLock - Spin lock to protect the Functions map. /// @@ -40,12 +40,12 @@ public: /// IPToFrameInfo - Map a code start instruction instruction to the FrameInfo. /// - FrameInfo* IPToFrameInfo(void* ip); + FrameInfo* IPToFrameInfo(word_t ip); /// addFrameInfo - A new instruction pointer in the function map. /// - void addFrameInfo(void* ip, FrameInfo* meth); - void addFrameInfoNoLock(void* ip, FrameInfo* meth) { + void addFrameInfo(word_t ip, FrameInfo* meth); + void addFrameInfoNoLock(word_t ip, FrameInfo* meth) { Functions[ip] = meth; } /// removeFrameInfos - Remove all FrameInfo owned by the given owner. @@ -160,7 +160,6 @@ public: /// endCollection - Code after running a GC. /// virtual void endCollection() {} - virtual void endCollectionBeforeUnblockingThreads() {} /// scanWeakReferencesQueue - Scan all weak references. Called by the GC /// before scanning the finalization queue. @@ -200,8 +199,6 @@ public: /// virtual const char* getObjectTypeName(gc* object) { return "An object"; } - virtual bool resetDeadIsolateReference(void* source, void** objectRef) {return false;} - /// rendezvous - The rendezvous implementation for garbage collection. /// CooperativeCollectionRV rendezvous; @@ -211,15 +208,14 @@ public: //===----------------------------------------------------------------------===// FunctionMap FunctionsCache; - FrameInfo* IPToFrameInfo(void* ip) { + FrameInfo* IPToFrameInfo(word_t ip) { return FunctionsCache.IPToFrameInfo(ip); } void removeFrameInfos(void* owner) { FunctionsCache.removeFrameInfos(owner); } - virtual void printMethod(FrameInfo* FI, void* ip, void* callFrame) = 0; - virtual void printCallStack(const StackWalker& walker) = 0; + virtual void printMethod(FrameInfo* FI, word_t ip, word_t addr) = 0; //===----------------------------------------------------------------------===// // (4) Launch-related methods. @@ -235,7 +231,6 @@ public: virtual void nullPointerException() = 0; virtual void stackOverflowError() = 0; - virtual void deadIsolateException(void* methodIP, bool immediate = true) = 0; }; } // end namespace vmkit Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.cpp Thu Apr 25 11:49:31 2013 @@ -76,12 +76,4 @@ JavaObjectField* JavaObjectField::create return ret; } - -UserClass* JavaObjectConstructor::getClass(JavaObjectConstructor* self) -{ - llvm_gcroot(self, 0); - UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); - return cls->asClass(); -} - } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:49:31 2013 @@ -138,7 +138,11 @@ public: static JavaMethod* getInternalMethod(JavaObjectConstructor* self); - static UserClass* getClass(JavaObjectConstructor* self); + static UserClass* getClass(JavaObjectConstructor* self) { + llvm_gcroot(self, 0); + UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); + return cls->asClass(); + } static JavaObjectConstructor* createFromInternalConstructor(JavaMethod* cons, int i); }; @@ -157,18 +161,9 @@ public: static void setVmdata(JavaObjectVMThread* vmthread, JavaThread* internal_thread) { llvm_gcroot(vmthread, 0); - assert(internal_thread && "Invalid internal thread"); vmthread->vmdata = internal_thread; } - friend std::ostream& operator << (std::ostream& os, JavaObjectVMThread& threadObj) - { - for (int retries = 10; (!threadObj.vmdata) && (retries >= 0); --retries) - usleep(100); - if (!threadObj.vmdata) - return os; - return os << *threadObj.vmdata; - } }; Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMObject.inc Thu Apr 25 11:49:31 2013 @@ -12,8 +12,6 @@ #include "Classpath.h" #include "Jnjvm.h" -#include - using namespace j3; extern "C" { @@ -59,31 +57,6 @@ JavaObject* obj) { return res; } -void printStackTrace(JavaObject *obj, const char *methName, int skip = 3, int level_deep = 1) -{ - j3::JavaThread *thread = j3::JavaThread::get(); - - std::ostringstream log; - log << '[' << *thread << "] " << methName << " obj=" << obj << " class=" << *JavaObject::getClass(obj)->name; - - const UTF8* clName = JavaObject::getClass(obj)->name; - if (!clName->compare("java/lang/VMThread") || !clName->compare("java/lang/Thread")) - log << '(' << *static_cast(obj) << ')'; - - log << std::endl; - std::cerr << log.str(); - - j3::Jnjvm *vm = thread->getJVM(); - vmkit::StackWalker Walker(thread); - for (vmkit::FrameInfo* FI = NULL; (level_deep > 0) && ((FI = Walker.get()) != NULL); ++Walker) { - if (!FI->Metadata) continue; - if (skip > 0) {--skip; continue;} - - vm->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); - --level_deep; - } -} - JNIEXPORT void JNICALL Java_java_lang_VMObject_notifyAll( #ifdef NATIVE_JNI JNIEnv *env, @@ -95,7 +68,6 @@ JavaObject* obj) { BEGIN_NATIVE_EXCEPTION(0) -// printStackTrace(obj, "notifyAll", 3, 0); JavaObject::notifyAll(obj); END_NATIVE_EXCEPTION @@ -112,13 +84,9 @@ JavaObject* obj, jlong ms, jint ns) { llvm_gcroot(obj, 0); BEGIN_NATIVE_EXCEPTION(0) -/* - printStackTrace(obj, "wait", 3, 1); - bool notified = JavaObject::wait(obj, ms, ns); - if (notified) - printStackTrace(obj, "wait_notified", 3, 1); -*/ + JavaObject::wait(obj, ms, ns); + END_NATIVE_EXCEPTION } @@ -133,7 +101,6 @@ JavaObject* obj) { BEGIN_NATIVE_EXCEPTION(0) -// printStackTrace(obj, "notify", 3, 0); JavaObject::notify(obj); END_NATIVE_EXCEPTION Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 11:49:31 2013 @@ -95,9 +95,9 @@ JavaObject* vmThread, sint64 stackSize) JavaThread* th = new JavaThread(vm); if (!th) vm->outOfMemoryError(); + th->start((void (*)(vmkit::Thread*))start); // Now that the thread has been created, initialise its object fields. th->initialise(javaThread, vmThread); - th->start((void (*)(vmkit::Thread*))start); END_NATIVE_EXCEPTION } Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThrowable.inc Thu Apr 25 11:49:31 2013 @@ -50,7 +50,7 @@ JavaObject* internalFillInStackTrace(Jav vmkit::StackWalker Walker(th); uint32_t i = 0; - while (void* ip = *Walker) { + while (intptr_t ip = *Walker) { ArrayPtr::setElement(result, ip, i); ++i; ++Walker; @@ -83,7 +83,7 @@ JavaObject* throwable) { } -JavaObject* consStackElement(vmkit::FrameInfo* FI, void* ip) { +JavaObject* consStackElement(vmkit::FrameInfo* FI, intptr_t ip) { JavaString* methodName = 0; JavaString* className = 0; @@ -100,7 +100,7 @@ JavaObject* consStackElement(vmkit::Fram Class* cl = meth->classDef; className = JavaString::internalToJava(cl->name, vm); - JavaAttribute* sourceAtt = cl->lookupAttribute(JavaAttribute::sourceFileAttribute); + Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut); // We don't have the bytes if the class was vmjc'ed. if (sourceAtt && cl->getBytes()) { Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp Thu Apr 25 11:49:31 2013 @@ -219,7 +219,7 @@ JavaObjectField* JavaObjectField::create return ret; } -static inline JavaString** getSignatureString(JavaAttribute* sigAtt, Class* cl) { +static inline JavaString** getSignatureString(Attribut* sigAtt, Class* cl) { if (!sigAtt) return 0; Reader reader(sigAtt, cl->bytes); @@ -230,26 +230,26 @@ static inline JavaString** getSignatureS } JavaString** JavaObjectClass::getSignature(Class *cl) { - JavaAttribute* sigAtt = cl->lookupAttribute(JavaAttribute::signatureAttribute); + Attribut* sigAtt = cl->lookupAttribut(Attribut::signatureAttribut); return getSignatureString(sigAtt, cl); } JavaString** JavaObjectField::getSignature(JavaField* field) { - JavaAttribute* sigAtt = field->lookupAttribute(JavaAttribute::signatureAttribute); + Attribut* sigAtt = field->lookupAttribut(Attribut::signatureAttribut); return getSignatureString(sigAtt, field->classDef); } JavaString** JavaObjectMethod::getSignature(JavaMethod* meth) { - JavaAttribute* sigAtt = meth->lookupAttribute(JavaAttribute::signatureAttribute); + Attribut* sigAtt = meth->lookupAttribut(Attribut::signatureAttribut); return getSignatureString(sigAtt, meth->classDef); } JavaString** JavaObjectConstructor::getSignature(JavaMethod* cons) { - JavaAttribute* sigAtt = cons->lookupAttribute(JavaAttribute::signatureAttribute); + Attribut* sigAtt = cons->lookupAttribut(Attribut::signatureAttribut); return getSignatureString(sigAtt, cons->classDef); } -static inline ArraySInt8* getAttrBytes(JavaAttribute* annotationsAtt, Class* cl) { +static inline ArraySInt8* getAttrBytes(Attribut* annotationsAtt, Class* cl) { ArraySInt8* ret = 0; llvm_gcroot(ret, 0); @@ -270,47 +270,47 @@ static inline ArraySInt8* getAttrBytes(J } ArraySInt8* JavaObjectClass::getAnnotations(Class *cl) { - JavaAttribute* attr = - cl->lookupAttribute(JavaAttribute::annotationsAttribute); + Attribut* attr = + cl->lookupAttribut(Attribut::annotationsAttribut); return getAttrBytes(attr, cl); } ArraySInt8* JavaObjectField::getAnnotations(JavaField *field) { - JavaAttribute* attr = - field->lookupAttribute(JavaAttribute::annotationsAttribute); + Attribut* attr = + field->lookupAttribut(Attribut::annotationsAttribut); return getAttrBytes(attr, field->classDef); } ArraySInt8* JavaObjectMethod::getAnnotations(JavaMethod *meth) { - JavaAttribute* attr = - meth->lookupAttribute(JavaAttribute::annotationsAttribute); + Attribut* attr = + meth->lookupAttribut(Attribut::annotationsAttribut); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectMethod::getParamAnnotations(JavaMethod *meth) { - JavaAttribute* attr = - meth->lookupAttribute(JavaAttribute::paramAnnotationsAttribute); + Attribut* attr = + meth->lookupAttribut(Attribut::paramAnnotationsAttribut); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectMethod::getAnnotationDefault(JavaMethod *meth) { - JavaAttribute* attr = - meth->lookupAttribute(JavaAttribute::annotationDefaultAttribute); + Attribut* attr = + meth->lookupAttribut(Attribut::annotationDefaultAttribut); return getAttrBytes(attr, meth->classDef); } ArraySInt8* JavaObjectConstructor::getAnnotations(JavaMethod *cons) { - JavaAttribute* attr = - cons->lookupAttribute(JavaAttribute::annotationsAttribute); + Attribut* attr = + cons->lookupAttribut(Attribut::annotationsAttribut); return getAttrBytes(attr, cons->classDef); } ArraySInt8* JavaObjectConstructor::getParamAnnotations(JavaMethod *cons) { - JavaAttribute* attr = - cons->lookupAttribute(JavaAttribute::paramAnnotationsAttribute); + Attribut* attr = + cons->lookupAttribut(Attribut::paramAnnotationsAttribut); return getAttrBytes(attr, cons->classDef); } Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 11:49:31 2013 @@ -86,7 +86,7 @@ JavaObject* consStackElement(vmkit::Fram Class* cl = meth->classDef; className = JavaString::internalToJava(cl->name, vm); - Attribute* sourceAtt = cl->lookupAttribut(Attribute::sourceFileAttribut); + Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut); if (sourceAtt) { Reader reader(sourceAtt, cl->bytes); @@ -2910,7 +2910,7 @@ JVM_GetEnclosingMethodInfo(JNIEnv* env, // Primitives arrays, interfaces... if (!cl) RETURN_FROM_JNI(0); - Attribute* emAtt = cl->lookupAttribut(Attribute::enclosingMethodAttribut); + Attribut* emAtt = cl->lookupAttribut(Attribut::enclosingMethodAttribut); if (emAtt) { Reader reader(emAtt, cl->bytes); Modified: vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h (original) +++ vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h Thu Apr 25 11:49:31 2013 @@ -75,7 +75,6 @@ public: return OwningClass->getStaticInstance(); } - Class* getOwningClass() {return OwningClass;} }; } Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 11:49:31 2013 @@ -40,10 +40,6 @@ void J3Intrinsics::init(llvm::Module* mo VTType = PointerType::getUnqual(ArrayType::get( PointerType::getUnqual(FunctionType::get(Type::getInt32Ty(Context), true)), 0)); - JavaVTType = PointerType::getUnqual(module->getTypeByName("JavaVT")); - - ExceptionBufferType = PointerType::getUnqual(module->getTypeByName("ExceptionBuffer")); - ResolvedConstantPoolType = ptrPtrType; @@ -96,8 +92,8 @@ void J3Intrinsics::init(llvm::Module* mo PointerType::getUnqual(module->getTypeByName("JavaMethod")); UTF8Type = PointerType::getUnqual(module->getTypeByName("UTF8")); - AttributeType = - PointerType::getUnqual(module->getTypeByName("Attribute")); + AttributType = + PointerType::getUnqual(module->getTypeByName("Attribut")); JavaThreadType = PointerType::getUnqual(module->getTypeByName("JavaThread")); MutatorThreadType = @@ -154,11 +150,9 @@ void J3Intrinsics::init(llvm::Module* mo OffsetObjectSizeInClassConstant = constantOne; OffsetVTInClassConstant = ConstantInt::get(Type::getInt32Ty(Context), 7); OffsetTaskClassMirrorInClassConstant = constantThree; - OffsetStaticInstanceInTaskClassMirrorConstant = constantTwo; + OffsetStaticInstanceInTaskClassMirrorConstant = constantThree; OffsetStatusInTaskClassMirrorConstant = constantZero; OffsetInitializedInTaskClassMirrorConstant = constantOne; - OffsetCommonClassInClassConstant = constantZero; - OffsetCommonClassInJavaVirtualTableConstant = constantFour; OffsetIsolateIDInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 1); OffsetVMInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 2); @@ -172,8 +166,7 @@ void J3Intrinsics::init(llvm::Module* mo InterfaceLookupFunction = module->getFunction("j3InterfaceLookup"); MultiCallNewFunction = module->getFunction("j3MultiCallNew"); ForceLoadedCheckFunction = module->getFunction("forceLoadedCheck"); - InitialisationCheckFunction = module->getFunction("j3InitialisationCheck"); - InitialisationCheckForJavaObjectFunction = module->getFunction("j3InitialisationCheckForJavaObject"); + InitialisationCheckFunction = module->getFunction("initialisationCheck"); ForceInitialisationCheckFunction = module->getFunction("forceInitialisationCheck"); InitialiseClassFunction = module->getFunction("j3RuntimeInitialiseClass"); @@ -191,15 +184,12 @@ void J3Intrinsics::init(llvm::Module* mo GetObjectSizeFromClassFunction = module->getFunction("getObjectSizeFromClass"); - SetIsolateFunction = module->getFunction("j3SetIsolate"); - GetCachedValueFunction = module->getFunction("j3GetCachedValue"); - GetClassDelegateePtrFunction = module->getFunction("j3GetClassDelegateePtr"); - GetClassDelegateeFunction = module->getFunction("j3GetClassDelegatee"); + GetClassDelegateeFunction = module->getFunction("getClassDelegatee"); RuntimeDelegateeFunction = module->getFunction("j3RuntimeDelegatee"); IsSubclassOfFunction = module->getFunction("isSubclassOf"); IsSecondaryClassFunction = module->getFunction("isSecondaryClass"); GetDepthFunction = module->getFunction("getDepth"); - GetStaticInstanceFunction = module->getFunction("j3GetStaticInstance"); + GetStaticInstanceFunction = module->getFunction("getStaticInstance"); GetDisplayFunction = module->getFunction("getDisplay"); GetVTInDisplayFunction = module->getFunction("getVTInDisplay"); AquireObjectFunction = module->getFunction("j3JavaObjectAquire"); @@ -248,11 +238,5 @@ void J3Intrinsics::init(llvm::Module* mo GetLockFunction = module->getFunction("getLock"); ThrowExceptionFromJITFunction = module->getFunction("j3ThrowExceptionFromJIT"); - - CurrentIsolateID = ConstantInt::get(Type::getInt32Ty(Context), CURRENT_ISOLATE); - - OffsetHandlerMethodInExceptionBufferConstant = constantZero; - OffsetHandlerIsolateIDInExceptionBufferConstant = constantOne; - OffsetSetJmpBufferInExceptionBufferConstant = constantThree; } Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:49:31 2013 @@ -36,8 +36,6 @@ #include "Zip.h" #include -#include -#include using namespace j3; using namespace llvm; @@ -183,41 +181,24 @@ Constant* JavaAOTCompiler::getResolvedCo if (I == End) { Module& Mod = *getLLVMModule(); - std::string pool_name(UTF8Buffer(ctp->classDef->name).toCompileName("_ResolvedConstantPool_")->cString()); - ArrayType* ATy = ArrayType::get(JavaIntrinsics.ptrType, ctp->ctpSize); - ArrayType* AStringTy = ArrayType::get(JavaIntrinsics.ptrType, NR_ISOLATES); - std::vector Vals(ctp->ctpSize, JavaIntrinsics.constantPtrNull); + std::vector Vals; for (uint32 i = 0; i < ctp->ctpSize; ++i) { if (ctp->typeAt(i) == JavaConstantPool::ConstantUTF8) { - Vals[i] = ConstantExpr::getBitCast(getUTF8(ctp->UTF8At(i)), JavaIntrinsics.ptrType); + Vals.push_back(ConstantExpr::getBitCast(getUTF8(ctp->UTF8At(i)), JavaIntrinsics.ptrType)); } else if (ctp->typeAt(i) == JavaConstantPool::ConstantClass && (ctp->isClassLoaded(i) != NULL)) { - Vals[i] = ConstantExpr::getBitCast( - getNativeClass(ctp->isClassLoaded(i)), JavaIntrinsics.ptrType); - } else if (ctp->typeAt(i) == JavaConstantPool::ConstantString) { - std::stringstream array_name; - array_name << pool_name << "String_" << i << '_'; - - std::vector Strings(NR_ISOLATES, JavaIntrinsics.constantPtrNull); - /* - for (isolate_id_t isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) - if (void *p = ctp->getCachedValue(i, isolateID)) - Strings[isolateID] = CreateConstantFromJavaString(*reinterpret_cast(p)); - */ - - GlobalVariable* stringArray = new GlobalVariable( - Mod, AStringTy, false, GlobalValue::InternalLinkage, - ConstantArray::get(AStringTy, Strings), array_name.str()); - - Vals[i] = ConstantExpr::getBitCast(stringArray, JavaIntrinsics.ptrType); + Vals.push_back(ConstantExpr::getBitCast( + getNativeClass(ctp->isClassLoaded(i)), JavaIntrinsics.ptrType)); + } else { + Vals.push_back(Constant::getNullValue(JavaIntrinsics.ptrType)); } } Constant* Array = ConstantArray::get(ATy, Vals); GlobalVariable* varGV = new GlobalVariable(Mod, Array->getType(), false, GlobalValue::InternalLinkage, - Array, pool_name); + Array, ""); Array = ConstantExpr::getBitCast(varGV, JavaIntrinsics.ResolvedConstantPoolType); @@ -464,7 +445,7 @@ Constant* JavaAOTCompiler::getFinalObjec } } -Constant* JavaAOTCompiler::CreateConstantFromStaticInstance(Class* cl, isolate_id_t isolateID) { +Constant* JavaAOTCompiler::CreateConstantFromStaticInstance(Class* cl) { LLVMClassInfo* LCI = getClassInfo(cl); Type* Ty = LCI->getStaticType(); StructType* STy = dyn_cast(Ty->getContainedType(0)); @@ -477,47 +458,47 @@ Constant* JavaAOTCompiler::CreateConstan LLVMAssessorInfo& LAI = getTypedefInfo(type); Type* Ty = LAI.llvmType; - JavaAttribute* attribute = field.lookupAttribute(JavaAttribute::constantAttribute); + Attribut* attribut = field.lookupAttribut(Attribut::constantAttribut); - if (attribute == NULL) { - if ((cl->getStaticInstance(isolateID) != NULL) && !useCooperativeGC()) { + if (attribut == NULL) { + if ((cl->getStaticInstance() != NULL) && !useCooperativeGC()) { if (type->isPrimitive()) { const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; if (prim->isBool() || prim->isByte()) { ConstantInt* CI = ConstantInt::get( Type::getInt8Ty(getLLVMContext()), - field.getStaticInt8Field(isolateID)); + field.getStaticInt8Field()); Elts.push_back(CI); } else if (prim->isShort() || prim->isChar()) { ConstantInt* CI = ConstantInt::get( Type::getInt16Ty(getLLVMContext()), - field.getStaticInt16Field(isolateID)); + field.getStaticInt16Field()); Elts.push_back(CI); } else if (prim->isInt()) { ConstantInt* CI = ConstantInt::get( Type::getInt32Ty(getLLVMContext()), - field.getStaticInt32Field(isolateID)); + field.getStaticInt32Field()); Elts.push_back(CI); } else if (prim->isLong()) { ConstantInt* CI = ConstantInt::get( Type::getInt64Ty(getLLVMContext()), - field.getStaticLongField(isolateID)); + field.getStaticLongField()); Elts.push_back(CI); } else if (prim->isFloat()) { Constant* CF = ConstantFP::get( Type::getFloatTy(getLLVMContext()), - field.getStaticFloatField(isolateID)); + field.getStaticFloatField()); Elts.push_back(CF); } else if (prim->isDouble()) { Constant* CF = ConstantFP::get( Type::getDoubleTy(getLLVMContext()), - field.getStaticDoubleField(isolateID)); + field.getStaticDoubleField()); Elts.push_back(CF); } else { abort(); } } else { - JavaObject* val = field.getStaticObjectField(isolateID); + JavaObject* val = field.getStaticObjectField(); if (val) { JnjvmClassLoader* JCL = cl->classLoader; CommonClass* FieldCl = field.getSignature()->assocClass(JCL); @@ -531,7 +512,7 @@ Constant* JavaAOTCompiler::CreateConstan Elts.push_back(Constant::getNullValue(Ty)); } } else { - Reader reader(attribute, cl->bytes); + Reader reader(attribut, cl->bytes); JavaConstantPool * ctpInfo = cl->ctpInfo; uint16 idx = reader.readU2(); if (type->isPrimitive()) { @@ -564,20 +545,34 @@ Constant* JavaAOTCompiler::CreateConstan return ConstantStruct::get(STy, Elts); } -Constant* JavaAOTCompiler::getStaticInstance(Class* classDef, isolate_id_t isolateID) { - ConstantArray *TCMArray = dyn_cast(CreateConstantFromTaskClassMirrorArray(classDef)); - if (!compilingMMTk) { - // Thanks for calling me, but you should call j3GetStaticInstance() to get the static instance - // pointer at runtime. - return NULL; - } - - isolateID = JavaThread::getValidIsolateID(isolateID); - ConstantStruct *TCM = dyn_cast(TCMArray->getAggregateElement(isolateID)); - - Constant *isolateStaticInstance = TCM->getAggregateElement( - JavaIntrinsics.OffsetStaticInstanceInTaskClassMirrorConstant); - return isolateStaticInstance; +Constant* JavaAOTCompiler::getStaticInstance(Class* classDef) { + static_instance_iterator End = staticInstances.end(); + static_instance_iterator I = staticInstances.find(classDef); + if (I == End) { + + LLVMClassInfo* LCI = getClassInfo(classDef); + Type* Ty = LCI->getStaticType(); + Ty = Ty->getContainedType(0); + std::string name(UTF8Buffer(classDef->name).toCompileName()->cString()); + name += "_static"; + Module& Mod = *getLLVMModule(); + GlobalVariable* varGV = + new GlobalVariable(Mod, Ty, false, GlobalValue::ExternalLinkage, + 0, name); + + Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV, + JavaIntrinsics.ptrType); + staticInstances.insert(std::make_pair(classDef, res)); + + if (isCompiling(classDef)) { + Constant* C = CreateConstantFromStaticInstance(classDef); + varGV->setInitializer(C); + } + + return res; + } else { + return I->second; + } } Constant* JavaAOTCompiler::getVirtualTable(JavaVirtualTable* VT) { @@ -814,21 +809,21 @@ Constant* JavaAOTCompiler::CreateConstan } -Constant* JavaAOTCompiler::CreateConstantFromAttribute(JavaAttribute& attribute) { +Constant* JavaAOTCompiler::CreateConstantFromAttribut(Attribut& attribut) { StructType* STy = - dyn_cast(JavaIntrinsics.AttributeType->getContainedType(0)); + dyn_cast(JavaIntrinsics.AttributType->getContainedType(0)); std::vector Elmts; // name - Elmts.push_back(getUTF8(attribute.name)); + Elmts.push_back(getUTF8(attribut.name)); // start - Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribute.start)); + Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribut.start)); // nbb - Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribute.nbb)); + Elmts.push_back(ConstantInt::get(Type::getInt32Ty(getLLVMContext()), attribut.nbb)); return ConstantStruct::get(STy, Elmts); } @@ -918,29 +913,29 @@ Constant* JavaAOTCompiler::CreateConstan // type FieldElts.push_back(getUTF8(field.type)); - // attributes - if (field.nbAttributes) { - llvm::Type* AttrTy = JavaIntrinsics.AttributeType->getContainedType(0); - ArrayType* ATy = ArrayType::get(AttrTy, field.nbAttributes); - for (uint32 i = 0; i < field.nbAttributes; ++i) { - TempElts.push_back(CreateConstantFromAttribute(field.attributes[i])); + // attributs + if (field.nbAttributs) { + llvm::Type* AttrTy = JavaIntrinsics.AttributType->getContainedType(0); + ArrayType* ATy = ArrayType::get(AttrTy, field.nbAttributs); + for (uint32 i = 0; i < field.nbAttributs; ++i) { + TempElts.push_back(CreateConstantFromAttribut(field.attributs[i])); } - Constant* attributes = ConstantArray::get(ATy, TempElts); + Constant* attributs = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributes = new GlobalVariable(*getLLVMModule(), ATy, true, + attributs = new GlobalVariable(*getLLVMModule(), ATy, true, GlobalValue::InternalLinkage, - attributes, ""); - attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, - JavaIntrinsics.AttributeType); + attributs, ""); + attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, + JavaIntrinsics.AttributType); - FieldElts.push_back(attributes); + FieldElts.push_back(attributs); } else { - FieldElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); + FieldElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); } - // nbAttributes - FieldElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), field.nbAttributes)); + // nbAttributs + FieldElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), field.nbAttributs)); // classDef FieldElts.push_back(getNativeClass(field.classDef)); @@ -968,29 +963,29 @@ Constant* JavaAOTCompiler::CreateConstan // access MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.access)); - // attributes - if (method.nbAttributes) { - llvm::Type* AttrTy = JavaIntrinsics.AttributeType->getContainedType(0); - ArrayType* ATy = ArrayType::get(AttrTy, method.nbAttributes); - for (uint32 i = 0; i < method.nbAttributes; ++i) { - TempElts.push_back(CreateConstantFromAttribute(method.attributes[i])); + // attributs + if (method.nbAttributs) { + llvm::Type* AttrTy = JavaIntrinsics.AttributType->getContainedType(0); + ArrayType* ATy = ArrayType::get(AttrTy, method.nbAttributs); + for (uint32 i = 0; i < method.nbAttributs; ++i) { + TempElts.push_back(CreateConstantFromAttribut(method.attributs[i])); } - Constant* attributes = ConstantArray::get(ATy, TempElts); + Constant* attributs = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributes = new GlobalVariable(Mod, ATy, true, + attributs = new GlobalVariable(Mod, ATy, true, GlobalValue::InternalLinkage, - attributes, ""); - attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, - JavaIntrinsics.AttributeType); + attributs, ""); + attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, + JavaIntrinsics.AttributType); - MethodElts.push_back(attributes); + MethodElts.push_back(attributs); } else { - MethodElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); + MethodElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); } - // nbAttributes - MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.nbAttributes)); + // nbAttributs + MethodElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), method.nbAttributs)); // classDef MethodElts.push_back(getNativeClass(method.classDef)); @@ -1144,61 +1139,13 @@ Constant* JavaAOTCompiler::CreateConstan ConstantStruct::get(STy, elements), "UTF8Map"); } -Constant* JavaAOTCompiler::CreateConstantFromTaskClassMirrorArray(Class* cl) -{ - task_class_mirror_iterator I = taskClassMirrors.find(cl); - if (I != taskClassMirrors.end()) - return I->second; // TCM Constant already created - - StructType* STy = dyn_cast(JavaIntrinsics.JavaClassType->getContainedType(0)); - ArrayType* ATy = dyn_cast(STy->getContainedType(3)); - StructType* TCMTy = dyn_cast(ATy->getContainedType(0)); - assert(TCMTy && "Malformed type"); - - Module& Mod = *getLLVMModule(); - LLVMClassInfo* LCI = getClassInfo(cl); - StructType* StaticInstanceTy = dyn_cast(LCI->getStaticType()->getContainedType(0)); - assert(StaticInstanceTy && "Malformed type"); - - std::string var_name(UTF8Buffer(cl->name).toCompileName("_StaticInstance_")->cString()); - size_t var_name_len = var_name.size(); - char var_name_ext[32]; - - Constant** TCMEntries = new Constant*[NR_ISOLATES]; - memset(TCMEntries, 0, NR_ISOLATES * sizeof(Constant*)); - - for (isolate_id_t isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) { - var_name.resize(var_name_len); - snprintf(var_name_ext, sizeof(var_name_ext)/sizeof(*var_name_ext), "%d", isolateID); - var_name += var_name_ext; - - GlobalVariable* staticInstance = new GlobalVariable(Mod, StaticInstanceTy, false, GlobalValue::ExternalLinkage, 0, var_name); - if (isCompiling(cl)) { - Constant* staticInstanceInit = CreateConstantFromStaticInstance(cl, isolateID); - staticInstance->setInitializer(staticInstanceInit); - } - - Constant *TCMEntry[] = { - ConstantInt::get(Type::getInt8Ty(getLLVMContext()), cl->getInitializationState(isolateID)), - ConstantInt::get(Type::getInt1Ty(getLLVMContext()), cl->isReady(isolateID) ? 1 : 0), - ConstantExpr::getBitCast(staticInstance, JavaIntrinsics.ptrType) - }; - TCMEntries[isolateID] = ConstantStruct::get(TCMTy, TCMEntry); - } - - Constant* tcm = ConstantArray::get(ATy, ArrayRef(TCMEntries, NR_ISOLATES)); - taskClassMirrors.insert(std::make_pair(cl, tcm)); - - delete [] TCMEntries; - return tcm; -} - Constant* JavaAOTCompiler::CreateConstantFromClass(Class* cl) { StructType* STy = dyn_cast(JavaIntrinsics.JavaClassType->getContainedType(0)); Module& Mod = *getLLVMModule(); - std::vector ClassElts, TempElts; + std::vector ClassElts; + std::vector TempElts; // common class ClassElts.push_back(CreateConstantFromCommonClass(cl)); @@ -1212,11 +1159,21 @@ Constant* JavaAOTCompiler::CreateConstan cl->alignment)); // IsolateInfo - ClassElts.push_back(CreateConstantFromTaskClassMirrorArray(cl)); - ArrayType* ATy = dyn_cast(STy->getContainedType(3)); assert(ATy && "Malformed type"); + StructType* TCMTy = dyn_cast(ATy->getContainedType(0)); + assert(TCMTy && "Malformed type"); + + TempElts.push_back(ConstantInt::get(Type::getInt8Ty(getLLVMContext()), + cl->getInitializationState())); + TempElts.push_back(ConstantInt::get(Type::getInt1Ty(getLLVMContext()), + cl->isReady() ? 1 : 0)); + TempElts.push_back(getStaticInstance(cl)); + Constant* CStr[1] = { ConstantStruct::get(TCMTy, TempElts) }; + TempElts.clear(); + ClassElts.push_back(ConstantArray::get(ATy, CStr)); + if (cl->nbVirtualFields + cl->nbStaticFields) { ATy = ArrayType::get(JavaIntrinsics.JavaFieldType->getContainedType(0), cl->nbVirtualFields + cl->nbStaticFields); @@ -1336,29 +1293,29 @@ Constant* JavaAOTCompiler::CreateConstan ctpInfo, ""); ClassElts.push_back(varGV); - // attributes - if (cl->nbAttributes) { - ATy = ArrayType::get(JavaIntrinsics.AttributeType->getContainedType(0), - cl->nbAttributes); + // attributs + if (cl->nbAttributs) { + ATy = ArrayType::get(JavaIntrinsics.AttributType->getContainedType(0), + cl->nbAttributs); - for (uint32 i = 0; i < cl->nbAttributes; ++i) { - TempElts.push_back(CreateConstantFromAttribute(cl->attributes[i])); + for (uint32 i = 0; i < cl->nbAttributs; ++i) { + TempElts.push_back(CreateConstantFromAttribut(cl->attributs[i])); } - Constant* attributes = ConstantArray::get(ATy, TempElts); + Constant* attributs = ConstantArray::get(ATy, TempElts); TempElts.clear(); - attributes = new GlobalVariable(*getLLVMModule(), ATy, true, + attributs = new GlobalVariable(*getLLVMModule(), ATy, true, GlobalValue::InternalLinkage, - attributes, ""); - attributes = ConstantExpr::getCast(Instruction::BitCast, attributes, - JavaIntrinsics.AttributeType); - ClassElts.push_back(attributes); + attributs, ""); + attributs = ConstantExpr::getCast(Instruction::BitCast, attributs, + JavaIntrinsics.AttributType); + ClassElts.push_back(attributs); } else { - ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributeType)); + ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.AttributType)); } - // nbAttributes - ClassElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), cl->nbAttributes)); + // nbAttributs + ClassElts.push_back(ConstantInt::get(Type::getInt16Ty(getLLVMContext()), cl->nbAttributs)); // innerClasses if (cl->nbInnerClasses) { @@ -1841,8 +1798,8 @@ Constant* JavaAOTCompiler::CreateConstan return Array; } -JavaAOTCompiler::JavaAOTCompiler(const std::string& ModuleID, bool compilingMMTk) : - JavaLLVMCompiler(ModuleID, compilingMMTk) { +JavaAOTCompiler::JavaAOTCompiler(const std::string& ModuleID) : + JavaLLVMCompiler(ModuleID) { std::string Error; const Target* TheTarget(TargetRegistry::lookupTarget( @@ -1926,8 +1883,8 @@ void JavaAOTCompiler::printStats() { (unsigned long long int) arrayClasses.size()); fprintf(stdout, "Number of virtual tables : %llu\n", (unsigned long long int) virtualTables.size()); - fprintf(stdout, "Number of Task Class Mirrors : %llu\n", - (unsigned long long int) taskClassMirrors.size()); + fprintf(stdout, "Number of static instances : %llu\n", + (unsigned long long int) staticInstances.size()); fprintf(stdout, "Number of constant pools : %llu\n", (unsigned long long int) resolvedConstantPools.size()); fprintf(stdout, "Number of strings : %llu\n", @@ -2151,7 +2108,7 @@ void mainCompilerStart(JavaThread* th) { JavaJITCompiler* Comp = NULL; if (!M->clinits->empty()) { - Comp = JavaJITCompiler::CreateCompiler("JIT", M->isCompilingMMTk()); + Comp = JavaJITCompiler::CreateCompiler("JIT"); Comp->EmitFunctionName = true; if (!M->useCooperativeGC()) { Comp->disableCooperativeGC(); Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:49:31 2013 @@ -23,7 +23,6 @@ #include #include "vmkit/JIT.h" -#include "vmkit/GC.h" #include "debug.h" #include "JavaArray.h" @@ -644,23 +643,22 @@ llvm::Function* JavaJIT::nativeCompile(w return llvmFunction; } -llvm::Value* JavaJIT::objectToHeader(Value* obj) { - obj = new PtrToIntInst(obj, intrinsics->pointerSizeType, "", currentBlock); - Value* d = ConstantInt::get(intrinsics->pointerSizeType, gcHeader::hiddenHeaderSize()); - obj = BinaryOperator::CreateSub(obj, d, "", currentBlock); - return new IntToPtrInst(obj, intrinsics->ObjectHeaderType, "", currentBlock); -} - void JavaJIT::monitorEnter(Value* obj) { - Value* lockPtr = objectToHeader(obj); - + std::vector gep; + gep.push_back(intrinsics->constantZero); + gep.push_back(intrinsics->JavaObjectLockOffsetConstant); + Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock); + Value* lock = new LoadInst(lockPtr, "", currentBlock); - + lock = new PtrToIntInst(lock, intrinsics->pointerSizeType, "", currentBlock); Value* NonLockBitsMask = ConstantInt::get(intrinsics->pointerSizeType, vmkit::ThinLock::NonLockBitsMask); lock = BinaryOperator::CreateAnd(lock, NonLockBitsMask, "", currentBlock); + lockPtr = new BitCastInst(lockPtr, + PointerType::getUnqual(intrinsics->pointerSizeType), + "", currentBlock); Value* threadId = getMutatorThreadPtr(); threadId = new PtrToIntInst(threadId, intrinsics->pointerSizeType, "", currentBlock); @@ -689,10 +687,14 @@ void JavaJIT::monitorEnter(Value* obj) { } void JavaJIT::monitorExit(Value* obj) { - Value* lockPtr = objectToHeader(obj); - + std::vector gep; + gep.push_back(intrinsics->constantZero); + gep.push_back(intrinsics->JavaObjectLockOffsetConstant); + Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock); + lockPtr = new BitCastInst(lockPtr, + PointerType::getUnqual(intrinsics->pointerSizeType), + "", currentBlock); Value* lock = new LoadInst(lockPtr, "", currentBlock); - Value* NonLockBitsMask = ConstantInt::get( intrinsics->pointerSizeType, vmkit::ThinLock::NonLockBitsMask); @@ -1257,11 +1259,10 @@ llvm::Function* JavaJIT::javaCompile() { const UTF8* name = compilingClass->ctpInfo->UTF8At(AR.AnnotationNameIndex); if (name->equals(TheCompiler->InlinePragma)) { - llvmFunction->removeFnAttr( - Attributes::get(*llvmContext, Attributes::NoInline)); - llvmFunction->addFnAttr(Attributes::AlwaysInline); + llvmFunction->removeFnAttr(Attribute::NoInline); + llvmFunction->addFnAttr(Attribute::AlwaysInline); } else if (name->equals(TheCompiler->NoInlinePragma)) { - llvmFunction->addFnAttr(Attributes::NoInline); + llvmFunction->addFnAttr(Attribute::NoInline); } } } @@ -1341,7 +1342,7 @@ void JavaJIT::loadConstant(uint16 index) void JavaJIT::JITVerifyNull(Value* obj) { if (TheCompiler->hasExceptionsEnabled()) { if (nbHandlers == 0 && vmkit::System::SupportsHardwareNullCheck()) { - Value* indexes[2] = { intrinsics->constantZero, intrinsics->JavaObjectVTOffsetConstant }; + Value* indexes[2] = { intrinsics->constantZero, intrinsics->constantZero }; Value* VTPtr = GetElementPtrInst::Create(obj, indexes, "", currentBlock); Instruction* VT = new LoadInst(VTPtr, "", true, currentBlock); VT->setDebugLoc(DebugLoc::get(currentBytecodeIndex, 1, DbgSubprogram)); @@ -1827,7 +1828,7 @@ void JavaJIT::invokeNew(uint16 index) { Class* cl = 0; Value* Cl = getResolvedClass(index, true, true, &cl); - + Value* VT = 0; Value* Size = 0; Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJIT.h (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJIT.h Thu Apr 25 11:49:31 2013 @@ -20,8 +20,9 @@ #include "llvm/Metadata.h" #include "llvm/Type.h" #include "llvm/Value.h" +#include "llvm/DIBuilder.h" +#include "llvm/DebugInfo.h" #include "llvm/Support/DebugLoc.h" -#include "llvm/Analysis/DebugInfo.h" #include "types.h" @@ -79,8 +80,7 @@ public: JavaJIT(JavaLLVMCompiler* C, JavaMethod* meth, llvm::Function* func, - Class* customized, - bool CompilingMMTk = false) { + Class* customized) { compilingMethod = meth; compilingClass = meth->classDef; upcalls = compilingClass->classLoader->bootstrapLoader->upcalls; @@ -100,7 +100,6 @@ public: overridesThis = false; nbHandlers = 0; jmpBuffer = NULL; - compilingMMTk = CompilingMMTk; } /// javaCompile - Compile the Java method. @@ -116,8 +115,6 @@ public: uint32_t nbHandlers; private: - bool compilingMMTk; - /// Whether the method overrides 'this'. bool overridesThis; @@ -180,6 +177,9 @@ private: /// getMutatorThreadPtr - Emit code to get a pointer to the current MutatorThread. llvm::Value* getMutatorThreadPtr(); + /// getIsolateIDPtr - Emit code to get a pointer to IsolateID. + llvm::Value* getIsolateIDPtr(llvm::Value* mutatorThreadPtr); + /// getVMPtr - Emit code to get a pointer to MyVM. llvm::Value* getVMPtr(llvm::Value* mutatorThreadPtr); @@ -551,11 +551,6 @@ private: llvm::Instruction* invoke(llvm::Value *F, const char* Name, llvm::BasicBlock *InsertAtEnd); - llvm::Value* getClassDelegateePtr(CommonClass* cl); - llvm::Value* setCurrentIsolateForCompilingMethod(llvm::Value* currentIsolateID, bool alwaysSet); - void restoreCurrentIsolateForCompilingMethod(llvm::Value* oldIsolateID, bool alwaysRestore); - bool shouldMethodChangeCurrentIsolate(); - //===--------------------- Yield point support ---------------------------===// void checkYieldPoint(); Modified: vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp Thu Apr 25 11:49:31 2013 @@ -13,7 +13,7 @@ #include "llvm/Instructions.h" #include "llvm/LLVMContext.h" #include "llvm/Module.h" -#include "llvm/Analysis/DebugInfo.h" +#include "llvm/DebugInfo.h" #include "llvm/CodeGen/GCStrategy.h" #include #include "llvm/CodeGen/MachineFunction.h" @@ -24,7 +24,6 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/DataLayout.h" #include <../lib/ExecutionEngine/JIT/JIT.h> -#include <../lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h> #include "VmkitGC.h" #include "vmkit/VirtualMachine.h" @@ -63,9 +62,7 @@ Constant* JavaJITCompiler::getNativeClas } Constant* JavaJITCompiler::getResolvedConstantPool(JavaConstantPool* ctp) { - assert(false && "Must not be here."); - - void* ptr = NULL; // = ctp->ctpRes; + void* ptr = ctp->ctpRes; assert(ptr && "No constant pool found"); ConstantInt* CI = ConstantInt::get(Type::getInt64Ty(getLLVMContext()), uint64_t(ptr)); @@ -117,17 +114,11 @@ Constant* JavaJITCompiler::getFinalObjec return NULL; } -Constant* JavaJITCompiler::getStaticInstance(Class* classDef, isolate_id_t isolateID) { - if (!compilingMMTk) { - // Thanks for calling me, but you should call j3GetStaticInstance() to get the static instance - // pointer at runtime. - return NULL; - } - - void* obj = classDef->getStaticInstance(isolateID); +Constant* JavaJITCompiler::getStaticInstance(Class* classDef) { + void* obj = classDef->getStaticInstance(); if (!obj) { classDef->acquire(); - obj = classDef->getStaticInstance(isolateID); + obj = classDef->getStaticInstance(); if (!obj) { // Allocate now so that compiled code can reference it. obj = classDef->allocateStaticInstance(JavaThread::get()->getJVM()); @@ -161,8 +152,8 @@ Constant* JavaJITCompiler::getNativeFunc return ConstantExpr::getIntToPtr(CI, valPtrType); } -JavaJITCompiler::JavaJITCompiler(const std::string &ModuleID, bool compilingMMTk) : - JavaLLVMCompiler(ModuleID, compilingMMTk), listener(this) { +JavaJITCompiler::JavaJITCompiler(const std::string &ModuleID) : + JavaLLVMCompiler(ModuleID), listener(this) { EmitFunctionName = false; GCInfo = NULL; @@ -170,8 +161,6 @@ JavaJITCompiler::JavaJITCompiler(const s EngineBuilder engine(TheModule); TargetOptions options; options.NoFramePointerElim = true; - options.JITEmitDebugInfo = true; -// engine.setUseMCJIT(true); engine.setTargetOptions(options); engine.setEngineKind(EngineKind::JIT); executionEngine = engine.create(); @@ -411,11 +400,11 @@ Value* JavaJ3LazyJITCompiler::addCallbac // Set the stub in the constant pool. JavaConstantPool* ctpInfo = cl->ctpInfo; word_t stub = stat ? sign->getStaticCallStub() : sign->getSpecialCallStub(); - if (!ctpInfo->getCachedValue(index)) { - // Do a compare and swap, so that we do not overwrite what a stub might + if (!ctpInfo->ctpRes[index]) { + // Do a compare and swap, so that we do not overwrtie what a stub might // have just updated. word_t val = (word_t) - ctpInfo->updateCachedValueSynchronized(index, (void*)stub, NULL); + __sync_val_compare_and_swap(&(ctpInfo->ctpRes[index]), NULL, (void*)stub); // If there is something in the the constant pool that is not NULL nor // the stub, then it's the method. if (val != 0 && val != stub) { @@ -425,12 +414,11 @@ Value* JavaJ3LazyJITCompiler::addCallbac } } // Load the constant pool. - Value* Args[] = { - getNativeClass(cl), - ConstantInt::get(Type::getInt32Ty(insert->getContext()), index), - compilingMMTk ? JavaIntrinsics.constantZero : JavaIntrinsics.CurrentIsolateID - }; - Value* func = CallInst::Create(JavaIntrinsics.GetCachedValueFunction, Args, "", insert); + Value* CTP = getResolvedConstantPool(ctpInfo); + Value* Index = ConstantInt::get(Type::getInt32Ty(insert->getContext()), + index); + Value* func = GetElementPtrInst::Create(CTP, Index, "", insert); + func = new LoadInst(func, "", false, insert); // Bitcast it to the LLVM function. func = new BitCastInst(func, stat ? LSI->getStaticPtrType() : LSI->getVirtualPtrType(), @@ -446,10 +434,10 @@ bool JavaJ3LazyJITCompiler::needsCallbac getMethod(meth, customizeFor)->hasExternalWeakLinkage()); } -JavaJ3LazyJITCompiler::JavaJ3LazyJITCompiler(const std::string& ModuleID, bool compilingMMTk) - : JavaJITCompiler(ModuleID, compilingMMTk) {} +JavaJ3LazyJITCompiler::JavaJ3LazyJITCompiler(const std::string& ModuleID) + : JavaJITCompiler(ModuleID) {} -JavaJITCompiler* JavaJITCompiler::CreateCompiler(const std::string& ModuleID, bool compilingMMTk) { - return new JavaJ3LazyJITCompiler(ModuleID, compilingMMTk); +JavaJITCompiler* JavaJITCompiler::CreateCompiler(const std::string& ModuleID) { + return new JavaJ3LazyJITCompiler(ModuleID); } Modified: vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/JavaLLVMCompiler.cpp Thu Apr 25 11:49:31 2013 @@ -10,7 +10,7 @@ #include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/PassManager.h" -#include "llvm/Analysis/DIBuilder.h" +#include "llvm/DIBuilder.h" #include "llvm/Analysis/LoopPass.h" #include "llvm/DataLayout.h" @@ -25,9 +25,9 @@ using namespace llvm; namespace j3 { -JavaLLVMCompiler::JavaLLVMCompiler(const std::string& str, bool CompilingMMTk) : +JavaLLVMCompiler::JavaLLVMCompiler(const std::string& str) : TheModule(new llvm::Module(str, *(new LLVMContext()))), - DebugFactory(new DIBuilder(*TheModule)), compilingMMTk(CompilingMMTk) { + DebugFactory(new DIBuilder(*TheModule)) { enabledException = true; cooperativeGC = true; @@ -61,7 +61,7 @@ Function* JavaLLVMCompiler::parseFunctio // We are jitting. Take the lock. vmkit::VmkitModule::protectIR(); if (func->getLinkage() == GlobalValue::ExternalWeakLinkage) { - JavaJIT jit(this, meth, func, customizeFor, compilingMMTk); + JavaJIT jit(this, meth, func, customizeFor); if (isNative(meth->access)) { jit.nativeCompile(); vmkit::VmkitModule::runPasses(func, JavaNativeFunctionPasses); Modified: vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp (original) +++ vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Thu Apr 25 11:49:31 2013 @@ -38,6 +38,30 @@ private: }; char LowerConstantCalls::ID = 0; +static Value* getTCM(J3Intrinsics* intrinsics, Value* Arg, Instruction* CI) { + Value* GEP[2] = { intrinsics->constantZero, + intrinsics->OffsetTaskClassMirrorInClassConstant }; + Value* TCMArray = GetElementPtrInst::Create(Arg, GEP, "", CI); + + Value* GEP2[2] = { intrinsics->constantZero, intrinsics->constantZero }; + + Value* TCM = GetElementPtrInst::Create(TCMArray, GEP2, "", CI); + return TCM; + +} + +static Value* getDelegatee(J3Intrinsics* intrinsics, Value* Arg, Instruction* CI) { + Value* GEP[2] = { intrinsics->constantZero, + intrinsics->constantZero }; + Value* TCMArray = GetElementPtrInst::Create(Arg, GEP, "", CI); + + Value* GEP2[2] = { intrinsics->constantZero, intrinsics->constantZero }; + + Value* TCM = GetElementPtrInst::Create(TCMArray, GEP2, "", CI); + return new LoadInst(TCM, "", CI); + +} + bool LowerConstantCalls::runOnFunction(Function& F) { LLVMContext* Context = &F.getContext(); bool Changed = false; @@ -255,12 +279,107 @@ bool LowerConstantCalls::runOnFunction(F Value* Class = new LoadInst(ClassPtr, "", CI); CI->replaceAllUsesWith(Class); CI->eraseFromParent(); + } else if (V == intrinsics->GetClassDelegateeFunction) { + Changed = true; + BasicBlock* NBB = II->getParent()->splitBasicBlock(II); + I->getParent()->getTerminator()->eraseFromParent(); + Value* Del = getDelegatee(intrinsics, Call.getArgument(0), CI); + Value* cmp = new ICmpInst(CI, ICmpInst::ICMP_EQ, Del, + intrinsics->JavaObjectNullConstant, ""); + + BasicBlock* NoDelegatee = BasicBlock::Create(*Context, "No delegatee", &F); + BasicBlock* DelegateeOK = BasicBlock::Create(*Context, "Delegatee OK", &F); + BranchInst::Create(NoDelegatee, DelegateeOK, cmp, CI); + PHINode* phi = PHINode::Create(intrinsics->JavaObjectType, 2, "", DelegateeOK); + phi->addIncoming(Del, CI->getParent()); + + Instruction* Res = CallInst::Create(intrinsics->RuntimeDelegateeFunction, + Call.getArgument(0), "", NoDelegatee); + Res->setDebugLoc(CI->getDebugLoc()); + BranchInst::Create(DelegateeOK, NoDelegatee); + phi->addIncoming(Res, NoDelegatee); + + CI->replaceAllUsesWith(phi); + CI->eraseFromParent(); + BranchInst::Create(NBB, DelegateeOK); + break; + + } else if (V == intrinsics->InitialisationCheckFunction) { + Changed = true; + + BasicBlock* NBB = 0; + if (CI->getParent()->getTerminator() != CI) { + NBB = II->getParent()->splitBasicBlock(II); + CI->getParent()->getTerminator()->eraseFromParent(); + } else { + InvokeInst* Invoke = dyn_cast(CI); + assert(Invoke && "Last instruction is not an invoke"); + NBB = Invoke->getNormalDest(); + } + + Value* Cl = Call.getArgument(0); + Value* TCM = getTCM(intrinsics, Call.getArgument(0), CI); + Value* GEP[2] = + { intrinsics->constantZero, + intrinsics->OffsetInitializedInTaskClassMirrorConstant }; + Value* StatusPtr = GetElementPtrInst::Create(TCM, GEP, "", CI); + + Value* test = new LoadInst(StatusPtr, "", CI); + + BasicBlock* trueCl = BasicBlock::Create(*Context, "Initialized", &F); + BasicBlock* falseCl = BasicBlock::Create(*Context, "Uninitialized", &F); + PHINode* node = llvm::PHINode::Create(intrinsics->JavaClassType, 2, "", trueCl); + node->addIncoming(Cl, CI->getParent()); + BranchInst::Create(trueCl, falseCl, test, CI); + + + Instruction* res = 0; + if (InvokeInst* Invoke = dyn_cast(CI)) { + Value* Args[1] = { Cl }; + BasicBlock* UI = Invoke->getUnwindDest(); + + res = InvokeInst::Create(intrinsics->InitialiseClassFunction, + trueCl, UI, Args, "", falseCl); + + // For some reason, an LLVM pass may add PHI nodes to the + // exception destination. + BasicBlock::iterator Temp = UI->getInstList().begin(); + while (PHINode* PHI = dyn_cast(Temp)) { + Value* Val = PHI->getIncomingValueForBlock(CI->getParent()); + PHI->removeIncomingValue(CI->getParent(), false); + PHI->addIncoming(Val, falseCl); + Temp++; + } + + // And here we set the phi nodes of the normal dest of the Invoke + // instruction. The phi nodes have now the trueCl as basic block. + Temp = NBB->getInstList().begin(); + while (PHINode* PHI = dyn_cast(Temp)) { + Value* Val = PHI->getIncomingValueForBlock(CI->getParent()); + PHI->removeIncomingValue(CI->getParent(), false); + PHI->addIncoming(Val, trueCl); + Temp++; + } + + } else { + res = CallInst::Create(intrinsics->InitialiseClassFunction, + Cl, "", falseCl); + BranchInst::Create(trueCl, falseCl); + } + res->setDebugLoc(CI->getDebugLoc()); + + node->addIncoming(res, falseCl); + + + CI->replaceAllUsesWith(node); + CI->eraseFromParent(); + BranchInst::Create(NBB, trueCl); + break; } else if (V == intrinsics->GetConstantPoolAtFunction) { Function* resolver = dyn_cast(Call.getArgument(0)); assert(resolver && "Wrong use of GetConstantPoolAt"); Type* returnType = resolver->getReturnType(); - Value* isolateID = Call.getArgument(1); - Value* cl = Call.getArgument(2); + Value* CTP = Call.getArgument(1); Value* Index = Call.getArgument(3); Changed = true; BasicBlock* NBB = 0; @@ -273,8 +392,9 @@ bool LowerConstantCalls::runOnFunction(F NBB = Invoke->getNormalDest(); } - Value* GCVArgs[] = {cl, Index, isolateID}; - Value* arg1 = CallInst::Create(intrinsics->GetCachedValueFunction, GCVArgs, "", CI); + Value* indexes = Index; + Value* arg1 = GetElementPtrInst::Create(CTP, indexes, "", CI); + arg1 = new LoadInst(arg1, "", false, CI); Value* test = new ICmpInst(CI, ICmpInst::ICMP_EQ, arg1, intrinsics->constantPtrNull, ""); Modified: vmkit/trunk/lib/j3/LLVMRuntime/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/Makefile?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/Makefile (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/Makefile Thu Apr 25 11:49:31 2013 @@ -12,8 +12,7 @@ include $(LEVEL)/Makefile.config VMKIT_RUNTIME = $(PROJ_SRC_DIR)/runtime-default.ll VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-mmtk-thread.ll -#VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-single.ll -VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-isolate.ll +VMKIT_RUNTIME += $(PROJ_SRC_DIR)/runtime-single.ll BUILT_SOURCES = LLVMRuntime.inc Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll Thu Apr 25 11:49:31 2013 @@ -5,8 +5,8 @@ ;;; A virtual table is an array of function pointers. %VT = type [0 x i32 (...)*] -;;; The root of all Java Objects: a VT (and a lock moved into GC header). -%JavaObject = type { %VT* } +;;; The root of all Java Objects: a VT and a lock. +%JavaObject = type { %VT*, i8* } ;;; Types for Java arrays. A size of 0 means an undefined size. %JavaArray = type { %JavaObject, i8* } @@ -113,7 +113,7 @@ declare %VT* @getIMT(%VT*) readnone declare %JavaCommonClass* @getClass(%JavaObject*) readnone ;;; getLock - Get the lock of an object. -;;;declare i8* @getLock(%JavaObject*) +declare i8* @getLock(%JavaObject*) ;;; getVTFromCommonClass - Get the VT of a class from its runtime ;;; representation. Removed: vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll?rev=180291&view=auto ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-isolate.ll (removed) @@ -1,15 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;; Isolate specific types ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -%JavaCommonClass = type { [256 x %JavaObject*], i32, - %JavaClass**, i16, %UTF8*, %JavaClass*, i8*, %VT* } - -%ClassBytes = type { i32, i8* } - -%JavaClass = type { %JavaCommonClass, i32, i32, [256 x %TaskClassMirror], - %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, - %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribute*, - i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 } - -declare i32 @j3SetIsolate(i32, i32*) Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll (original) +++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-single.ll Thu Apr 25 11:49:31 2013 @@ -9,5 +9,5 @@ %JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror], %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, - %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribute*, + %JavaMethod*, i16, i8*, %ClassBytes*, %JavaConstantPool*, %Attribut*, i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 } Modified: vmkit/trunk/lib/j3/VMCore/JavaArray.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaArray.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaArray.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaArray.h Thu Apr 25 11:49:31 2013 @@ -120,7 +120,7 @@ ARRAYCLASS(ArraySInt32, sint32); ARRAYCLASS(ArrayLong, sint64); ARRAYCLASS(ArrayFloat, float); ARRAYCLASS(ArrayDouble, double); -ARRAYCLASS(ArrayPtr, void*); +ARRAYCLASS(ArrayPtr, word_t); #undef ARRAYCLASS Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:49:31 2013 @@ -31,17 +31,17 @@ using namespace j3; -const UTF8* JavaAttribute::annotationsAttribute = 0; -const UTF8* JavaAttribute::codeAttribute = 0; -const UTF8* JavaAttribute::exceptionsAttribute = 0; -const UTF8* JavaAttribute::constantAttribute = 0; -const UTF8* JavaAttribute::lineNumberTableAttribute = 0; -const UTF8* JavaAttribute::innerClassesAttribute = 0; -const UTF8* JavaAttribute::sourceFileAttribute = 0; -const UTF8* JavaAttribute::signatureAttribute = 0; -const UTF8* JavaAttribute::enclosingMethodAttribute = 0; -const UTF8* JavaAttribute::paramAnnotationsAttribute = 0; -const UTF8* JavaAttribute::annotationDefaultAttribute = 0; +const UTF8* Attribut::annotationsAttribut = 0; +const UTF8* Attribut::codeAttribut = 0; +const UTF8* Attribut::exceptionsAttribut = 0; +const UTF8* Attribut::constantAttribut = 0; +const UTF8* Attribut::lineNumberTableAttribut = 0; +const UTF8* Attribut::innerClassesAttribut = 0; +const UTF8* Attribut::sourceFileAttribut = 0; +const UTF8* Attribut::signatureAttribut = 0; +const UTF8* Attribut::enclosingMethodAttribut = 0; +const UTF8* Attribut::paramAnnotationsAttribut = 0; +const UTF8* Attribut::annotationDefaultAttribut = 0; Class* ClassArray::SuperArray; Class** ClassArray::InterfacesArray; @@ -51,7 +51,7 @@ extern "C" void ArrayObjectTracer(JavaOb extern "C" void RegularObjectTracer(JavaObject*); extern "C" void ReferenceObjectTracer(JavaObject*); -JavaAttribute::JavaAttribute(const UTF8* name, uint32 length, +Attribut::Attribut(const UTF8* name, uint32 length, uint32 offset) { this->start = offset; @@ -59,27 +59,27 @@ JavaAttribute::JavaAttribute(const UTF8* this->name = name; } -JavaAttribute* Class::lookupAttribute(const UTF8* key) { - for (uint32 i = 0; i < nbAttributes; ++i) { - JavaAttribute* cur = &(attributes[i]); +Attribut* Class::lookupAttribut(const UTF8* key) { + for (uint32 i = 0; i < nbAttributs; ++i) { + Attribut* cur = &(attributs[i]); if (cur->name->equals(key)) return cur; } return 0; } -JavaAttribute* JavaField::lookupAttribute(const UTF8* key) { - for (uint32 i = 0; i < nbAttributes; ++i) { - JavaAttribute* cur = &(attributes[i]); +Attribut* JavaField::lookupAttribut(const UTF8* key) { + for (uint32 i = 0; i < nbAttributs; ++i) { + Attribut* cur = &(attributs[i]); if (cur->name->equals(key)) return cur; } return 0; } -JavaAttribute* JavaMethod::lookupAttribute(const UTF8* key) { - for (uint32 i = 0; i < nbAttributes; ++i) { - JavaAttribute* cur = &(attributes[i]); +Attribut* JavaMethod::lookupAttribut(const UTF8* key) { + for (uint32 i = 0; i < nbAttributs; ++i) { + Attribut* cur = &(attributs[i]); if (cur->name->equals(key)) return cur; } @@ -90,9 +90,9 @@ CommonClass::~CommonClass() { } Class::~Class() { - for (uint32 i = 0; i < nbAttributes; ++i) { - JavaAttribute* cur = &(attributes[i]); - cur->~JavaAttribute(); + for (uint32 i = 0; i < nbAttributs; ++i) { + Attribut* cur = &(attributs[i]); + cur->~Attribut(); classLoader->allocator.Deallocate(cur); } @@ -134,17 +134,17 @@ Class::~Class() { } JavaField::~JavaField() { - for (uint32 i = 0; i < nbAttributes; ++i) { - JavaAttribute* cur = &(attributes[i]); - cur->~JavaAttribute(); + for (uint32 i = 0; i < nbAttributs; ++i) { + Attribut* cur = &(attributs[i]); + cur->~Attribut(); classDef->classLoader->allocator.Deallocate(cur); } } JavaMethod::~JavaMethod() { - for (uint32 i = 0; i < nbAttributes; ++i) { - JavaAttribute* cur = &(attributes[i]); - cur->~JavaAttribute(); + for (uint32 i = 0; i < nbAttributs; ++i) { + Attribut* cur = &(attributs[i]); + cur->~Attribut(); classDef->classLoader->allocator.Deallocate(cur); } } @@ -443,11 +443,11 @@ JavaField* Class::lookupField(const UTF8 return res; } -JavaObject* UserClass::doNew(Jnjvm* vm, isolate_id_t isolateID) { +JavaObject* UserClass::doNew(Jnjvm* vm) { JavaObject* res = NULL; llvm_gcroot(res, 0); assert(this && "No class when allocating."); - assert((this->isInitializing(isolateID) || + assert((this->isInitializing() || classLoader->getCompiler()->isStaticCompiling() || this == classLoader->bootstrapLoader->upcalls->newClass) && "Uninitialized class when allocating."); @@ -518,10 +518,10 @@ bool JavaVirtualTable::isSubtypeOf(JavaV return false; } -void JavaField::InitNullStaticField(isolate_id_t isolateID) { +void JavaField::InitNullStaticField() { Typedef* type = getSignature(); - void* obj = classDef->getStaticInstance(isolateID); + void* obj = classDef->getStaticInstance(); if (!type->isPrimitive()) { ((JavaObject**)((uint64)obj + ptrOffset))[0] = NULL; return; @@ -549,9 +549,9 @@ void JavaField::InitNullStaticField(isol } } -void JavaField::InitStaticField(uint64 val, isolate_id_t isolateID) { +void JavaField::InitStaticField(uint64 val) { Typedef* type = getSignature(); - void* obj = classDef->getStaticInstance(isolateID); + void* obj = classDef->getStaticInstance(); assert(type->isPrimitive() && "Non primitive field"); PrimitiveTypedef* prim = (PrimitiveTypedef*)type; if (prim->isLong()) { @@ -572,31 +572,30 @@ void JavaField::InitStaticField(uint64 v } } -void JavaField::InitStaticField(JavaObject* val, isolate_id_t isolateID) { +void JavaField::InitStaticField(JavaObject* val) { llvm_gcroot(val, 0); - void* obj = classDef->getStaticInstance(isolateID); + void* obj = classDef->getStaticInstance(); assert(isReference()); JavaObject** ptr = (JavaObject**)((uint64)obj + ptrOffset); vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); } -void JavaField::InitStaticField(double val, isolate_id_t isolateID) { - void* obj = classDef->getStaticInstance(isolateID); +void JavaField::InitStaticField(double val) { + void* obj = classDef->getStaticInstance(); ((double*)((uint64)obj + ptrOffset))[0] = val; } -void JavaField::InitStaticField(float val, isolate_id_t isolateID) { - void* obj = classDef->getStaticInstance(isolateID); +void JavaField::InitStaticField(float val) { + void* obj = classDef->getStaticInstance(); ((float*)((uint64)obj + ptrOffset))[0] = val; } void JavaField::InitStaticField(Jnjvm* vm) { const Typedef* type = getSignature(); - JavaAttribute* attribut = lookupAttribute(JavaAttribute::constantAttribute); - isolate_id_t isolateID = JavaThread::getValidIsolateID(CURRENT_ISOLATE); + Attribut* attribut = lookupAttribut(Attribut::constantAttribut); if (!attribut) { - InitNullStaticField(isolateID); + InitNullStaticField(); } else { Reader reader(attribut, classDef->bytes); JavaConstantPool * ctpInfo = classDef->ctpInfo; @@ -604,17 +603,17 @@ void JavaField::InitStaticField(Jnjvm* v if (type->isPrimitive()) { UserCommonClass* cl = type->assocClass(vm->bootstrapLoader); if (cl == vm->upcalls->OfLong) { - InitStaticField((uint64)ctpInfo->LongAt(idx), isolateID); + InitStaticField((uint64)ctpInfo->LongAt(idx)); } else if (cl == vm->upcalls->OfDouble) { - InitStaticField(ctpInfo->DoubleAt(idx), isolateID); + InitStaticField(ctpInfo->DoubleAt(idx)); } else if (cl == vm->upcalls->OfFloat) { - InitStaticField(ctpInfo->FloatAt(idx), isolateID); + InitStaticField(ctpInfo->FloatAt(idx)); } else { - InitStaticField((uint64)ctpInfo->IntegerAt(idx), isolateID); + InitStaticField((uint64)ctpInfo->IntegerAt(idx)); } } else if (type->isReference()) { const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[idx]); - InitStaticField((JavaObject*)ctpInfo->resolveString(utf8, idx), isolateID); + InitStaticField((JavaObject*)ctpInfo->resolveString(utf8, idx)); } else { fprintf(stderr, "I haven't verified your class file and it's malformed:" " unknown constant %s!\n", @@ -676,7 +675,7 @@ void Class::readParents(Reader& reader) void internalLoadExceptions(JavaMethod& meth) { - JavaAttribute* codeAtt = meth.lookupAttribute(JavaAttribute::codeAttribute); + Attribut* codeAtt = meth.lookupAttribut(Attribut::codeAttribut); if (codeAtt) { Reader reader(codeAtt, meth.classDef->bytes); @@ -711,15 +710,15 @@ void UserClass::loadExceptions() { internalLoadExceptions(staticMethods[i]); } -JavaAttribute* Class::readAttributes(Reader& reader, uint16& size) { +Attribut* Class::readAttributs(Reader& reader, uint16& size) { uint16 nba = reader.readU2(); - JavaAttribute* attributs = new(classLoader->allocator, "Attributs") JavaAttribute[nba]; + Attribut* attributs = new(classLoader->allocator, "Attributs") Attribut[nba]; for (int i = 0; i < nba; i++) { const UTF8* attName = ctpInfo->UTF8At(reader.readU2()); uint32 attLen = reader.readU4(); - JavaAttribute& att = attributs[i]; + Attribut& att = attributs[i]; att.start = reader.cursor; att.nbb = attLen; att.name = attName; @@ -749,7 +748,7 @@ void Class::readFields(Reader& reader) { field->initialise(this, name, type, access); ++nbVirtualFields; } - field->attributes = readAttributes(reader, field->nbAttributes); + field->attributs = readAttributs(reader, field->nbAttributs); } } @@ -848,7 +847,7 @@ void Class::readMethods(Reader& reader) meth->initialise(this, name, type, access); ++nbVirtualMethods; } - meth->attributes = readAttributes(reader, meth->nbAttributes); + meth->attributs = readAttributs(reader, meth->nbAttributs); } if (isAbstract(access)) { @@ -906,7 +905,7 @@ void Class::readClass() { readParents(reader); readFields(reader); readMethods(reader); - attributes = readAttributes(reader, nbAttributes); + attributs = readAttributs(reader, nbAttributs); } void UserClass::resolveParents() { @@ -923,13 +922,14 @@ void Class::resolveClass() { resolveParents(); loadExceptions(); // Do a compare and swap in case another thread initialized the class. - setResolvedSynchronized(loaded); + __sync_val_compare_and_swap( + &(getCurrentTaskClassMirror().status), loaded, resolved); assert(isResolved() || isErroneous()); } void UserClass::resolveInnerOuterClasses() { if (!innerOuterResolved) { - JavaAttribute* attribut = lookupAttribute(JavaAttribute::innerClassesAttribute); + Attribut* attribut = lookupAttribut(Attribut::innerClassesAttribut); if (attribut != 0) { Reader reader(attribut, bytes); uint16 nbi = reader.readU2(); @@ -1002,7 +1002,7 @@ ArrayObject* JavaMethod::getExceptionTyp llvm_gcroot(res, 0); llvm_gcroot(delegatee, 0); - JavaAttribute* exceptionAtt = lookupAttribute(JavaAttribute::exceptionsAttribute); + Attribut* exceptionAtt = lookupAttribut(Attribut::exceptionsAttribut); Jnjvm* vm = JavaThread::get()->getJVM(); if (exceptionAtt == 0) { return (ArrayObject*)vm->upcalls->classArrayClass->doNew(0, vm); @@ -1025,15 +1025,15 @@ ArrayObject* JavaMethod::getExceptionTyp } -JavaObject* CommonClass::setDelegatee(JavaObject* val, isolate_id_t isolateID) { +JavaObject* CommonClass::setDelegatee(JavaObject* val) { llvm_gcroot(val, 0); - JavaObject** obj = getDelegateePtr(isolateID); + JavaObject** obj = &(delegatee[0]); classLoader->lock.lock(); if (*obj == NULL) { vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)obj, (gc*)val); } classLoader->lock.unlock(); - return getDelegatee(isolateID); + return getDelegatee(); } @@ -1288,14 +1288,14 @@ ArrayUInt16* JavaMethod::toString() cons } -bool UserClass::needsInitialisationCheck(isolate_id_t isolateID) { +bool UserClass::needsInitialisationCheck() { -// if (isReady(isolateID)) return false; + if (isReady()) return false; - if (super && super->needsInitialisationCheck(isolateID)) + if (super && super->needsInitialisationCheck()) return true; - if (nbStaticFields > 0) return true; + if (nbStaticFields) return true; JavaMethod* meth = lookupMethodDontThrow(classLoader->bootstrapLoader->clinitName, @@ -1304,8 +1304,7 @@ bool UserClass::needsInitialisationCheck if (meth) return true; - setResolved(); - setInitializationState(ready, isolateID); + setInitializationState(ready); return false; } @@ -1700,7 +1699,7 @@ void AnnotationReader::readElementValue( } uint16 JavaMethod::lookupLineNumber(vmkit::FrameInfo* info) { - JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); + Attribut* codeAtt = lookupAttribut(Attribut::codeAttribut); if (codeAtt == NULL) return 0; Reader reader(codeAtt, classDef->bytes); reader.readU2(); // max_stack @@ -1713,7 +1712,7 @@ uint16 JavaMethod::lookupLineNumber(vmki for (uint16 att = 0; att < nba; ++att) { const UTF8* attName = classDef->ctpInfo->UTF8At(reader.readU2()); uint32 attLen = reader.readU4(); - if (attName->equals(JavaAttribute::lineNumberTableAttribute)) { + if (attName->equals(Attribut::lineNumberTableAttribut)) { uint16_t lineLength = reader.readU2(); uint16_t currentLine = 0; for (uint16 j = 0; j < lineLength; ++j) { @@ -1730,7 +1729,7 @@ uint16 JavaMethod::lookupLineNumber(vmki } uint16 JavaMethod::lookupCtpIndex(vmkit::FrameInfo* FI) { - JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute); + Attribut* codeAtt = lookupAttribut(Attribut::codeAttribut); Reader reader(codeAtt, classDef->bytes); reader.cursor = reader.cursor + 2 + 2 + 4 + FI->SourceIndex + 1; return reader.readU2(); @@ -1765,20 +1764,19 @@ void Class::broadcastClass() { JavaObject::notifyAll(delegatee); } -bool Class::isInitializing(isolate_id_t isolateID) -{ - TaskClassMirror& TCM = getTaskClassMirror(isolateID); - if (TCM.status >= inClinit) return true; - if (!isResolved(isolateID)) return false; - - needsInitialisationCheck(isolateID); - return (TCM.status >= inClinit); -} - -JavaField_IMPL_ASSESSORS(float, Float) -JavaField_IMPL_ASSESSORS(double, Double) -JavaField_IMPL_ASSESSORS(uint8, Int8) -JavaField_IMPL_ASSESSORS(uint16, Int16) -JavaField_IMPL_ASSESSORS(uint32, Int32) -JavaField_IMPL_ASSESSORS(sint64, Long) -JavaField_IMPL_ASSESSORS(JavaObject*, Object) +void JavaField::setInstanceObjectField(JavaObject* obj, JavaObject* val) { + llvm_gcroot(obj, 0); + llvm_gcroot(val, 0); + if (val != NULL) assert(val->getVirtualTable()); + assert(classDef->isResolved()); + JavaObject** ptr = (JavaObject**)((uint64)obj + ptrOffset); + vmkit::Collector::objectReferenceWriteBarrier((gc*)obj, (gc**)ptr, (gc*)val); +} + +void JavaField::setStaticObjectField(JavaObject* val) { + llvm_gcroot(val, 0); + if (val != NULL) assert(val->getVirtualTable()); + assert(classDef->isResolved()); + JavaObject** ptr = (JavaObject**)((uint64)classDef->getStaticInstance() + ptrOffset); + vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); +} Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 11:49:31 2013 @@ -22,9 +22,6 @@ #include "JavaObject.h" #include "JnjvmClassLoader.h" #include "JnjvmConfig.h" -#include "Jnjvm.h" -#include "JavaTypes.h" -#include "JavaThread.h" #include #include @@ -73,84 +70,84 @@ public: void readElementValue(); }; -/// Attribute - This class represents JVM attributes to Java class, methods and +/// Attribut - This class represents JVM attributes to Java class, methods and /// fields located in the .class file. /// -class JavaAttribute : public vmkit::PermanentObject { +class Attribut : public vmkit::PermanentObject { public: - /// name - The name of the attribute. These are specified in the JVM book. + /// name - The name of the attribut. These are specified in the JVM book. /// Experimental attributes exist, but the JnJVM does nor parse them. /// const UTF8* name; - /// start - The offset in the class of this attribute. + /// start - The offset in the class of this attribut. /// uint32 start; - /// nbb - The size of the attribute. + /// nbb - The size of the attribut. /// uint32 nbb; - /// Attribute - Create an attribute at the given length and offset. + /// Attribut - Create an attribut at the given length and offset. /// - JavaAttribute(const UTF8* name, uint32 length, uint32 offset); - JavaAttribute() {} + Attribut(const UTF8* name, uint32 length, uint32 offset); + Attribut() {} - /// codeAttribute - The "Code" JVM attribute. This is a method attribute for + /// codeAttribut - The "Code" JVM attribut. This is a method attribut for /// finding the bytecode of a method in the .class file. // - static const UTF8* codeAttribute; + static const UTF8* codeAttribut; - /// annotationsAttribute - The "RuntimeVisibleAnnotations" JVM attribute. - /// This is a method attribute for getting the runtime annotations. + /// annotationsAttribut - The "RuntimeVisibleAnnotations" JVM attribut. + /// This is a method attribut for getting the runtime annotations. // - static const UTF8* annotationsAttribute; + static const UTF8* annotationsAttribut; - /// exceptionsAttribute - The "Exceptions" attribute. This is a method - /// attribute for finding the exception table of a method in the .class + /// exceptionsAttribut - The "Exceptions" attribut. This is a method + /// attribut for finding the exception table of a method in the .class /// file. /// - static const UTF8* exceptionsAttribute; + static const UTF8* exceptionsAttribut; - /// constantAttribute - The "ConstantValue" attribute. This is a field attribute + /// constantAttribut - The "ConstantValue" attribut. This is a field attribut /// when the field has a static constant value. /// - static const UTF8* constantAttribute; + static const UTF8* constantAttribut; - /// lineNumberTableAttribute - The "LineNumberTable" attribute. This is used + /// lineNumberTableAttribut - The "LineNumberTable" attribut. This is used /// for corresponding JVM bytecode to source line in the .java file. /// - static const UTF8* lineNumberTableAttribute; + static const UTF8* lineNumberTableAttribut; - /// innerClassAttribute - The "InnerClasses" attribute. This is a class attribute + /// innerClassAttribut - The "InnerClasses" attribut. This is a class attribut /// for knowing the inner/outer informations of a Java class. /// - static const UTF8* innerClassesAttribute; + static const UTF8* innerClassesAttribut; - /// sourceFileAttribute - The "SourceFile" attribute. This is a class attribute - /// and gives the correspondence between a class and the name of its Java + /// sourceFileAttribut - The "SourceFile" attribut. This is a class attribut + /// and gives the correspondance between a class and the name of its Java /// file. /// - static const UTF8* sourceFileAttribute; + static const UTF8* sourceFileAttribut; - /// signatureAttribute - The "Signature" attribute. This is used to record + /// signatureAttribut - The "Signature" attribut. This is used to record /// generics information about a class or method. /// - static const UTF8* signatureAttribute; + static const UTF8* signatureAttribut; - /// enclosingMEthodAttribute - The "EnclosingMethod" attribute. This is a class - /// attribute that identifies the method defining a local or anonymous class + /// enclosingMEthodAttribut - The "EnclosingMethod" attribut. This is a class + /// attribut that identifies the method definining a local or anonymous class /// - static const UTF8* enclosingMethodAttribute; + static const UTF8* enclosingMethodAttribut; - /// paramAnnotationsAttribute - Annotations for parameters attribute + /// paramAnnotationsAttribut - Annotations for parameters attribut /// - static const UTF8* paramAnnotationsAttribute; + static const UTF8* paramAnnotationsAttribut; - /// annotationDefaultAttribute - The "AnnotationDefault" attribute + /// annotationDefaultAttribut - The "AnnotationDefault" attribut /// - static const UTF8* annotationDefaultAttribute; + static const UTF8* annotationDefaultAttribut; }; /// TaskClassMirror - The isolate specific class information: the initialization @@ -178,7 +175,7 @@ public: /// class CommonClass : public vmkit::PermanentObject { -private: +public: //===----------------------------------------------------------------------===// // @@ -192,7 +189,6 @@ private: /// JavaObject* delegatee[NR_ISOLATES]; -public: /// access - {public, private, protected}. /// uint32 access; @@ -322,7 +318,7 @@ public: /// getClassDelegatee - Return the java/lang/Class representation of this /// class. /// - JavaObject* getClassDelegatee(Jnjvm* vm, JavaObject* pd = NULL, isolate_id_t isolateID = CURRENT_ISOLATE); + JavaObject* getClassDelegatee(Jnjvm* vm, JavaObject* pd = NULL); /// getClassDelegateePtr - Return a pointer on the java/lang/Class /// representation of this class. Used for JNI. @@ -357,22 +353,19 @@ public: /// setDelegatee - Set the java/lang/Class object of this class. /// - JavaObject* setDelegatee(JavaObject* val, isolate_id_t isolateID = CURRENT_ISOLATE); + JavaObject* setDelegatee(JavaObject* val); /// getDelegatee - Get the java/lang/Class object representing this class. /// - JavaObject* getDelegatee(isolate_id_t isolateID = CURRENT_ISOLATE) const { - return *getDelegateePtr(isolateID); + JavaObject* getDelegatee() const { + return delegatee[0]; } /// getDelegatee - Get a pointer on the java/lang/Class object /// representing this class. /// - JavaObject* const* getDelegateePtr(isolate_id_t isolateID = CURRENT_ISOLATE) const { - return const_cast(this)->getDelegateePtr(isolateID); - } - JavaObject** getDelegateePtr(isolate_id_t isolateID = CURRENT_ISOLATE) { - return delegatee + JavaThread::getValidIsolateID(isolateID); + JavaObject* const* getDelegateePtr() const { + return delegatee; } /// resolvedImplClass - Return the internal representation of the @@ -470,13 +463,13 @@ public: /// JavaConstantPool* ctpInfo; - /// attributes - JVM attributes of this class. + /// attributs - JVM attributes of this class. /// - JavaAttribute* attributes; + Attribut* attributs; - /// nbAttributes - The number of attributes. + /// nbAttributs - The number of attributes. /// - uint16 nbAttributes; + uint16 nbAttributs; /// innerClasses - The inner classes of this class. /// @@ -607,7 +600,7 @@ public: /// doNew - Allocates a Java object whose class is this class. /// - JavaObject* doNew(Jnjvm* vm, isolate_id_t isolateID = CURRENT_ISOLATE); + JavaObject* doNew(Jnjvm* vm); /// tracer - Tracer function of instances of Class. /// @@ -616,9 +609,9 @@ public: ~Class(); Class(); - /// lookupAttribute - Look up a JVM attribute of this class. + /// lookupAttribut - Look up a JVM attribut of this class. /// - JavaAttribute* lookupAttribute(const UTF8* key); + Attribut* lookupAttribut(const UTF8* key); /// allocateStaticInstance - Allocate the static instance of this class. /// @@ -637,9 +630,9 @@ public: /// void loadExceptions(); - /// readAttributes - Reads the attributes of the class. + /// readAttributs - Reads the attributs of the class. /// - JavaAttribute* readAttributes(Reader& reader, uint16& size); + Attribut* readAttributs(Reader& reader, uint16& size); /// readFields - Reads the fields of the class. /// @@ -700,85 +693,89 @@ public: /// isolate. /// TaskClassMirror& getCurrentTaskClassMirror() { - return getTaskClassMirror(); - } - - TaskClassMirror& getTaskClassMirror(isolate_id_t isolateID = CURRENT_ISOLATE) { - return IsolateInfo[JavaThread::getValidIsolateID(isolateID)]; + return IsolateInfo[0]; } - + /// isReadyForCompilation - Can this class be inlined when JITing? /// - bool isReadyForCompilation(isolate_id_t isolateID = CURRENT_ISOLATE) { - return isReady(isolateID); + bool isReadyForCompilation() { + return isReady(); } /// setResolved - Set the status of the class as resolved. - /// Resolved state is common to all isolates + /// void setResolved() { - getTaskClassMirror(0).status = resolved; + getCurrentTaskClassMirror().status = resolved; } - void setResolvedSynchronized(uint8 oldStatus, isolate_id_t isolateID = CURRENT_ISOLATE) { - TaskClassMirror& TCM = getTaskClassMirror(0); - __sync_val_compare_and_swap(&TCM.status, oldStatus, resolved); - } - /// setErroneous - Set the class as erroneous. /// void setErroneous() { getCurrentTaskClassMirror().status = erroneous; } + /// setIsResolving - The class file is being resolved. + /// + void setIsResolving() { + getCurrentTaskClassMirror().status = resolving; + } + /// getStaticInstance - Get the memory that holds static variables. /// - void* getStaticInstance(isolate_id_t isolateID = CURRENT_ISOLATE) { - return getTaskClassMirror(isolateID).staticInstance; + void* getStaticInstance() { + return getCurrentTaskClassMirror().staticInstance; } /// setStaticInstance - Set the memory that holds static variables. /// - void setStaticInstance(void* val, isolate_id_t isolateID = CURRENT_ISOLATE) { - TaskClassMirror& TCM = getTaskClassMirror(isolateID); - assert((val != NULL) && (TCM.staticInstance == NULL)); - TCM.staticInstance = val; + void setStaticInstance(void* val) { + assert(getCurrentTaskClassMirror().staticInstance == NULL); + getCurrentTaskClassMirror().staticInstance = val; } /// getInitializationState - Get the state of the class. /// - uint8 getInitializationState(isolate_id_t isolateID = CURRENT_ISOLATE) { - return getTaskClassMirror(isolateID).status; + uint8 getInitializationState() { + return getCurrentTaskClassMirror().status; } /// setInitializationState - Set the state of the class. /// - void setInitializationState(uint8 st, isolate_id_t isolateID = CURRENT_ISOLATE) { - TaskClassMirror& TCM = getTaskClassMirror(isolateID); + void setInitializationState(uint8 st) { + TaskClassMirror& TCM = getCurrentTaskClassMirror(); TCM.status = st; if (st == ready) TCM.initialized = true; } /// isReady - Has this class been initialized? /// - bool isReady(isolate_id_t isolateID = CURRENT_ISOLATE) { - return getTaskClassMirror(isolateID).status == ready; + bool isReady() { + return getCurrentTaskClassMirror().status == ready; } /// isInitializing - Is the class currently being initialized? /// - bool isInitializing(isolate_id_t isolateID = CURRENT_ISOLATE); + bool isInitializing() { + return getCurrentTaskClassMirror().status >= inClinit; + } /// isResolved - Has this class been resolved? /// - bool isResolved(isolate_id_t isolateID = CURRENT_ISOLATE) { - return (getTaskClassMirror(0).status >= resolved && - getTaskClassMirror(isolateID).status != erroneous); + bool isResolved() { + uint8 stat = getCurrentTaskClassMirror().status; + return (stat >= resolved && stat != erroneous); } /// isErroneous - Is the class in an erroneous state. /// - bool isErroneous(isolate_id_t isolateID = CURRENT_ISOLATE) { - return getTaskClassMirror(isolateID).status == erroneous; + bool isErroneous() { + return getCurrentTaskClassMirror().status == erroneous; + } + + /// isResolving - Is the class currently being resolved? + /// + bool isResolving() { + return getCurrentTaskClassMirror().status == resolving; } /// isNativeOverloaded - Is the method overloaded with a native function? @@ -787,7 +784,7 @@ public: /// needsInitialisationCheck - Does the method need an initialisation check? /// - bool needsInitialisationCheck(isolate_id_t isolateID = CURRENT_ISOLATE); + bool needsInitialisationCheck(); /// fillIMT - Fill the vector with vectors of methods with the same IMT /// index. @@ -880,13 +877,13 @@ public: /// uint16 access; - /// attributes - List of Java attributes of this method. + /// attributs - List of Java attributs of this method. /// - JavaAttribute* attributes; + Attribut* attributs; - /// nbAttributes - The number of attributes. + /// nbAttributs - The number of attributes. /// - uint16 nbAttributes; + uint16 nbAttributs; /// classDef - The Java class where the method is defined. /// @@ -912,10 +909,10 @@ public: /// uint32 offset; - /// lookupAttribute - Look up an attribute in the method's attributes. Returns - /// null if the attribute is not found. + /// lookupAttribut - Look up an attribut in the method's attributs. Returns + /// null if the attribut is not found. /// - JavaAttribute* lookupAttribute(const UTF8* key); + Attribut* lookupAttribut(const UTF8* key); /// lookupLineNumber - Find the line number based on the given frame info. /// @@ -926,7 +923,7 @@ public: /// uint16 lookupCtpIndex(vmkit::FrameInfo* FI); - /// getSignature - Get the signature of the method, resolving it if + /// getSignature - Get the signature of thes method, resolving it if /// necessary. /// Signdef* getSignature() { @@ -989,123 +986,108 @@ public: // //===----------------------------------------------------------------------===// -#define DO_TRY -#define DO_CATCH if (th->pendingException) { th->throwFromJava(); } - -private: - jvalue* marshalArguments(vmkit::ThreadAllocator& allocator, va_list& ap); - - template - TYPE invokeSpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) { - llvm_gcroot(obj, 0); - verifyNull(obj); - - void* func = this->compiledPtr(); - FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)getSignature()->getVirtualCallBuf(); - - JavaThread* th = JavaThread::get(); - th->startJava(); - TYPE res; - - DO_TRY - res = call(cl->getConstantPool(), func, obj, buf); - DO_CATCH - - th->endJava(); - return res; - } - - template - TYPE invokeVirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) { - UserCommonClass* theClass = JavaObject::getClass(obj); - UserClass* objCl = theClass->isArray() ? theClass->super : theClass->asClass(); - - JavaMethod* meth = this; - if ((objCl != classDef) && !isFinal(access)) { - meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); - assert(meth && "No method found"); - } - - assert(objCl->isSubclassOf(meth->classDef) && "Wrong type"); - - return meth->invokeSpecialBuf(vm, cl, obj, buf); - } - - template - TYPE invokeStaticBuf(Jnjvm* vm, UserClass* cl, void* buf) { - if (!cl->isReady()) { - cl->resolveClass(); - cl->initialiseClass(vm); - } - - void* func = this->compiledPtr(); - FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)getSignature()->getStaticCallBuf(); - - JavaThread* th = JavaThread::get(); - th->startJava(); - TYPE res; - - DO_TRY - res = call(cl->getConstantPool(), func, buf); - DO_CATCH - - th->endJava(); - return res; - } - - template - TYPE invokeVirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) { - llvm_gcroot(obj, 0); - verifyNull(obj); - - vmkit::ThreadAllocator allocator; - jvalue* buffer = marshalArguments(allocator, ap); - return invokeVirtualBuf(vm, cl, obj, buffer); - } - - template - TYPE invokeSpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) { - llvm_gcroot(obj, 0); - verifyNull(obj); - - vmkit::ThreadAllocator allocator; - jvalue* buffer = marshalArguments(allocator, ap); - return invokeSpecialBuf(vm, cl, obj, buffer); - } - - template - TYPE invokeStaticAP(Jnjvm* vm, UserClass* cl, va_list& ap) { - vmkit::ThreadAllocator allocator; - jvalue* buffer = marshalArguments(allocator, ap); - return invokeStaticBuf(vm, cl, buffer); - } - -#define JavaMethod_DECL_INVOKE_VA(TYPE, TYPE_NAME) \ - TYPE invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) __attribute__ ((noinline)); \ - TYPE invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) __attribute__ ((noinline)); \ - TYPE invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) __attribute__ ((noinline)); - -#define JavaMethod_DECL_INVOKE_AP(TYPE, TYPE_NAME) \ - TYPE invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) __attribute__ ((noinline)); \ - TYPE invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) __attribute__ ((noinline)); \ - TYPE invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list& ap) __attribute__ ((noinline)); - -#define JavaMethod_DECL_INVOKE_BUF(TYPE, TYPE_NAME) \ - TYPE invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__ ((noinline)); \ - TYPE invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) __attribute__ ((noinline)); \ - TYPE invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) __attribute__ ((noinline)); - -#define JavaMethod_DECL_INVOKE(TYPE, TYPE_NAME) \ - JavaMethod_DECL_INVOKE_BUF(TYPE, TYPE_NAME) \ - JavaMethod_DECL_INVOKE_AP(TYPE, TYPE_NAME) \ - JavaMethod_DECL_INVOKE_VA(TYPE, TYPE_NAME) - -public: - JavaMethod_DECL_INVOKE(uint32_t, Int) - JavaMethod_DECL_INVOKE(int64_t, Long) - JavaMethod_DECL_INVOKE(float, Float) - JavaMethod_DECL_INVOKE(double, Double) - JavaMethod_DECL_INVOKE(JavaObject*, JavaObject) + /// This class of methods takes a variable argument list. + uint32 invokeIntSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) + __attribute__ ((noinline)); + float invokeFloatSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) + __attribute__ ((noinline)); + double invokeDoubleSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, + va_list ap) __attribute__ ((noinline)); + sint64 invokeLongSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectSpecialAP(Jnjvm* vm, UserClass*, JavaObject* obj, + va_list ap) __attribute__ ((noinline)); + + uint32 invokeIntVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) + __attribute__ ((noinline)); + float invokeFloatVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) + __attribute__ ((noinline)); + double invokeDoubleVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, + va_list ap) __attribute__ ((noinline)); + sint64 invokeLongVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, va_list ap) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectVirtualAP(Jnjvm* vm, UserClass*, JavaObject* obj, + va_list ap) __attribute__ ((noinline)); + + uint32 invokeIntStaticAP(Jnjvm* vm, UserClass*, va_list ap) + __attribute__ ((noinline)); + float invokeFloatStaticAP(Jnjvm* vm, UserClass*, va_list ap) + __attribute__ ((noinline)); + double invokeDoubleStaticAP(Jnjvm* vm, UserClass*, va_list ap) + __attribute__ ((noinline)); + sint64 invokeLongStaticAP(Jnjvm* vm, UserClass*, va_list ap) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectStaticAP(Jnjvm* vm, UserClass*, va_list ap) + __attribute__ ((noinline)); + + /// This class of methods takes a buffer which contain the arguments of the + /// call. + uint32 invokeIntSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) + __attribute__ ((noinline)); + float invokeFloatSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) + __attribute__ ((noinline)); + double invokeDoubleSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, + void* buf) __attribute__ ((noinline)); + sint64 invokeLongSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectSpecialBuf(Jnjvm* vm, UserClass*, JavaObject* obj, + void* buf) __attribute__ ((noinline)); + + uint32 invokeIntVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) + __attribute__ ((noinline)); + float invokeFloatVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) + __attribute__ ((noinline)); + double invokeDoubleVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, + void* buf) __attribute__ ((noinline)); + sint64 invokeLongVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, void* buf) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectVirtualBuf(Jnjvm* vm, UserClass*, JavaObject* obj, + void* buf) __attribute__ ((noinline)); + + uint32 invokeIntStaticBuf(Jnjvm* vm, UserClass*, void* buf) + __attribute__ ((noinline)); + float invokeFloatStaticBuf(Jnjvm* vm, UserClass*, void* buf) + __attribute__ ((noinline)); + double invokeDoubleStaticBuf(Jnjvm* vm, UserClass*, void* buf) + __attribute__ ((noinline)); + sint64 invokeLongStaticBuf(Jnjvm* vm, UserClass*, void* buf) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectStaticBuf(Jnjvm* vm, UserClass*, void* buf) + __attribute__ ((noinline)); + + /// This class of methods is variadic. + uint32 invokeIntSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + float invokeFloatSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + double invokeDoubleSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + sint64 invokeLongSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectSpecial(Jnjvm* vm, UserClass*, JavaObject* obj, + ...) __attribute__ ((noinline)); + + uint32 invokeIntVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + float invokeFloatVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + double invokeDoubleVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + sint64 invokeLongVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, ...) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectVirtual(Jnjvm* vm, UserClass*, JavaObject* obj, + ...) __attribute__ ((noinline)); + + uint32 invokeIntStatic(Jnjvm* vm, UserClass*, ...) + __attribute__ ((noinline)); + float invokeFloatStatic(Jnjvm* vm, UserClass*, ...) + __attribute__ ((noinline)); + double invokeDoubleStatic(Jnjvm* vm, UserClass*, ...) + __attribute__ ((noinline)); + sint64 invokeLongStatic(Jnjvm* vm, UserClass*, ...) + __attribute__ ((noinline)); + JavaObject* invokeJavaObjectStatic(Jnjvm* vm, UserClass*, ...) + __attribute__ ((noinline)); #define JNI_NAME_PRE "Java_" #define JNI_NAME_PRE_LEN 5 @@ -1122,11 +1104,11 @@ private: /// InitField - Set an initial value to the field. /// - void InitStaticField(uint64 val, isolate_id_t isolateID = CURRENT_ISOLATE); - void InitStaticField(JavaObject* val, isolate_id_t isolateID = CURRENT_ISOLATE); - void InitStaticField(double val, isolate_id_t isolateID = CURRENT_ISOLATE); - void InitStaticField(float val, isolate_id_t isolateID = CURRENT_ISOLATE); - void InitNullStaticField(isolate_id_t isolateID = CURRENT_ISOLATE); + void InitStaticField(uint64 val); + void InitStaticField(JavaObject* val); + void InitStaticField(double val); + void InitStaticField(float val); + void InitNullStaticField(); public: @@ -1150,13 +1132,13 @@ public: /// const UTF8* type; - /// attributes - List of Java attributes for this field. + /// attributs - List of Java attributs for this field. /// - JavaAttribute* attributes; + Attribut* attributs; - /// nbAttributes - The number of attributes. + /// nbAttributs - The number of attributes. /// - uint16 nbAttributes; + uint16 nbAttributs; /// classDef - The class where the field is defined. /// @@ -1185,13 +1167,13 @@ public: /// void InitStaticField(Jnjvm* vm); - /// lookupAttribute - Look up the attribute in the field's list of attributes. + /// lookupAttribut - Look up the attribut in the field's list of attributs. /// - JavaAttribute* lookupAttribute(const UTF8* key); + Attribut* lookupAttribut(const UTF8* key); - JavaObject** getStaticObjectFieldPtr(isolate_id_t isolateID = CURRENT_ISOLATE) { - assert(classDef->getStaticInstance(isolateID)); - return (JavaObject**)((uint64)classDef->getStaticInstance(isolateID) + ptrOffset); + JavaObject** getStaticObjectFieldPtr() { + assert(classDef->getStaticInstance()); + return (JavaObject**)((uint64)classDef->getStaticInstance() + ptrOffset); } JavaObject** getInstanceObjectFieldPtr(JavaObject* obj) { @@ -1199,89 +1181,74 @@ public: return (JavaObject**)((uint64)obj + ptrOffset); } -private: /// getStatic*Field - Get a static field. /// - template - TYPE getStaticField(isolate_id_t isolateID) { - assert(classDef->isResolved(isolateID)); - void* ptr = (void*)((uint64)classDef->getStaticInstance(isolateID) + ptrOffset); - return *static_cast(ptr); - } - - /* - The struct FieldSetter is a workaround in C++ to enable - template-based method specialization in a non-template - class. See specialization below the class declaration. - */ - template - struct FieldSetter { - /// setStatic*Field - Set a field of an object. - /// - static void setStaticField(const JavaField* field, TYPE val, isolate_id_t isolateID) { - assert(field->classDef->isResolved(isolateID)); - void* ptr = (void*)((uint64)field->classDef->getStaticInstance(isolateID) + field->ptrOffset); - *static_cast(ptr) = val; - } - - /// setInstance*Field - Set an instance field. - /// - static void setInstanceField(const JavaField* field, JavaObject* obj, TYPE val) { - llvm_gcroot(obj, 0); - assert(field->classDef->isResolved()); - void* ptr = (void*)((uint64)obj + field->ptrOffset); - *static_cast(ptr) = val; - } - }; + #define GETSTATICFIELD(TYPE, TYPE_NAME) \ + TYPE getStatic##TYPE_NAME##Field() { \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ + return ((TYPE*)ptr)[0]; \ + } /// setStatic*Field - Set a field of an object. /// - template - void setStaticField(TYPE val, isolate_id_t isolateID) { - FieldSetter::setStaticField(this, val, isolateID); + #define SETSTATICFIELD(TYPE, TYPE_NAME) \ + void setStatic##TYPE_NAME##Field(TYPE val) { \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); \ + ((TYPE*)ptr)[0] = val; \ } /// getInstance*Field - Get an instance field. /// - template - TYPE getInstanceField(JavaObject* obj) { + #define GETINSTANCEFIELD(TYPE, TYPE_NAME) \ + TYPE getInstance##TYPE_NAME##Field(JavaObject* obj) { \ + llvm_gcroot(obj, 0); \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)obj + ptrOffset); \ + return ((TYPE*)ptr)[0]; \ + } \ + + /// setInstance*Field - Set an instance field. + /// + #define SETINSTANCEFIELD(TYPE, TYPE_NAME) \ + void setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \ + llvm_gcroot(obj, 0); \ + assert(classDef->isResolved()); \ + void* ptr = (void*)((uint64)obj + ptrOffset); \ + ((TYPE*)ptr)[0] = val; \ + } + + #define MK_ASSESSORS(TYPE, TYPE_NAME) \ + GETSTATICFIELD(TYPE, TYPE_NAME) \ + SETSTATICFIELD(TYPE, TYPE_NAME) \ + GETINSTANCEFIELD(TYPE, TYPE_NAME) \ + SETINSTANCEFIELD(TYPE, TYPE_NAME) \ + + MK_ASSESSORS(float, Float) + MK_ASSESSORS(double, Double) + MK_ASSESSORS(uint8, Int8) + MK_ASSESSORS(uint16, Int16) + MK_ASSESSORS(uint32, Int32) + MK_ASSESSORS(sint64, Long) + + JavaObject* getStaticObjectField() { + assert(classDef->isResolved()); + void* ptr = (void*)((uint64)classDef->getStaticInstance() + ptrOffset); + return ((JavaObject**)ptr)[0]; + } + + void setStaticObjectField(JavaObject* val); + + JavaObject* getInstanceObjectField(JavaObject* obj) { llvm_gcroot(obj, 0); assert(classDef->isResolved()); void* ptr = (void*)((uint64)obj + ptrOffset); - return *static_cast(ptr); + return ((JavaObject**)ptr)[0]; } - /// setInstance*Field - Set an instance field. - /// - template - void setInstanceField(JavaObject* obj, TYPE val) { - FieldSetter::setInstanceField(this, obj, val); - } - -#define JavaField_DECL_ASSESSORS(TYPE, TYPE_NAME) \ - TYPE getStatic##TYPE_NAME##Field(isolate_id_t isolateID = CURRENT_ISOLATE); \ - void setStatic##TYPE_NAME##Field(TYPE val, isolate_id_t isolateID = CURRENT_ISOLATE); \ - TYPE getInstance##TYPE_NAME##Field(JavaObject* obj); \ - void setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val); - -#define JavaField_IMPL_ASSESSORS(TYPE, TYPE_NAME) \ - TYPE JavaField::getStatic##TYPE_NAME##Field(isolate_id_t isolateID) { \ - return getStaticField(isolateID);} \ - void JavaField::setStatic##TYPE_NAME##Field(TYPE val, isolate_id_t isolateID) { \ - return setStaticField(val, isolateID);} \ - TYPE JavaField::getInstance##TYPE_NAME##Field(JavaObject* obj) { \ - return this->getInstanceField(obj);} \ - void JavaField::setInstance##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \ - return this->setInstanceField(obj, val);} - -public: - JavaField_DECL_ASSESSORS(float, Float) - JavaField_DECL_ASSESSORS(double, Double) - JavaField_DECL_ASSESSORS(uint8, Int8) - JavaField_DECL_ASSESSORS(uint16, Int16) - JavaField_DECL_ASSESSORS(uint32, Int32) - JavaField_DECL_ASSESSORS(sint64, Long) - JavaField_DECL_ASSESSORS(JavaObject*, Object) + // This can't be inlined because of a linker bug. + void setInstanceObjectField(JavaObject* obj, JavaObject* val); bool isReference() { uint16 val = type->elements[0]; @@ -1322,28 +1289,6 @@ public: }; -// Specialization for TYPE=JavaObject* -template<> -struct JavaField::FieldSetter { - - static void setStaticField(const JavaField* field, JavaObject* val, isolate_id_t isolateID = CURRENT_ISOLATE) { - llvm_gcroot(val, 0); - if (val != NULL) assert(val->getVirtualTable()); - assert(field->classDef->isResolved(isolateID)); - JavaObject** ptr = (JavaObject**)((uint64)field->classDef->getStaticInstance(isolateID) + field->ptrOffset); - vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)ptr, (gc*)val); - } - - static void setInstanceField(const JavaField* field, JavaObject* obj, JavaObject* val) { - llvm_gcroot(obj, 0); - llvm_gcroot(val, 0); - if (val != NULL) assert(val->getVirtualTable()); - assert(field->classDef->isResolved()); - JavaObject** ptr = (JavaObject**)((uint64)obj + field->ptrOffset); - vmkit::Collector::objectReferenceWriteBarrier((gc*)obj, (gc**)ptr, (gc*)val); - } -}; - } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp Thu Apr 25 11:49:31 2013 @@ -157,7 +157,6 @@ uint32 JavaConstantPool::CtpReaderDouble void* JavaConstantPool::operator new(size_t sz, vmkit::BumpPtrAllocator& allocator, uint32 ctpSize) { - // NOTICE: 'size' is not the final size of the object, as it does more allocations in the constructor uint32 size = sz + ctpSize * (sizeof(void*) + sizeof(sint32) + sizeof(uint8)); void* res = allocator.Allocate(size, "Constant pool"); return res; @@ -178,14 +177,6 @@ JavaConstantPool::JavaConstantPool(Class while (cur < ctpSize) { uint8 curType = reader.readU1(); ctpType[cur] = curType; - - // 'ctpRes' entries corresponding to 'ConstantString' types are pointers to arrays of values - // corresponding to different isolates. - if (ctpType[cur] == ConstantString) { - ctpRes[cur] = classDef->classLoader->allocator.Allocate(sizeof(void *) * NR_ISOLATES, NULL); - memset(ctpRes[cur], 0, sizeof(void *) * NR_ISOLATES); - } - cur += ((funcsReader[curType])(this, reader, cur)); } } @@ -197,7 +188,7 @@ const UTF8* JavaConstantPool::UTF8At(uin abort(); } - if (!getCachedValue(entry)) { + if (!ctpRes[entry]) { vmkit::ThreadAllocator allocator; Reader reader(classDef->bytes, ctpDef[entry]); uint32 len = reader.readU2(); @@ -229,13 +220,13 @@ const UTF8* JavaConstantPool::UTF8At(uin JnjvmClassLoader* loader = classDef->classLoader; const UTF8* utf8 = loader->hashUTF8->lookupOrCreateReader(buf, n); - updateCachedValue(entry, const_cast(utf8)); + ctpRes[entry] = const_cast(utf8); PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] \t\t\"%s\"\n", entry, UTF8Buffer(utf8)->cString()); } - return (const UTF8*)getCachedValue(entry); + return (const UTF8*)ctpRes[entry]; } float JavaConstantPool::FloatAt(uint32 entry) { @@ -281,12 +272,12 @@ CommonClass* JavaConstantPool::isClassLo abort(); } - CommonClass* res = (CommonClass*)getCachedValue(entry); + CommonClass* res = (CommonClass*)ctpRes[entry]; if (res == NULL) { JnjvmClassLoader* loader = classDef->classLoader; const UTF8* name = UTF8At(ctpDef[entry]); res = loader->lookupClassOrArray(name); - updateCachedValue(entry, res); + ctpRes[entry] = res; } return res; } @@ -307,7 +298,7 @@ CommonClass* JavaConstantPool::loadClass } else { temp = loader->loadName(name, resolve, false, NULL); } - updateCachedValue(index, temp); + ctpRes[index] = temp; } else if (resolve && temp->isClass()) { temp->asClass()->resolveClass(); } @@ -329,7 +320,7 @@ CommonClass* JavaConstantPool::getMethod } Typedef* JavaConstantPool::resolveNameAndType(uint32 index) { - void* res = getCachedValue(index); + void* res = ctpRes[index]; if (!res) { if (typeAt(index) != ConstantNameAndType) { fprintf(stderr, "Malformed class %s\n", @@ -339,14 +330,14 @@ Typedef* JavaConstantPool::resolveNameAn sint32 entry = ctpDef[index]; const UTF8* type = UTF8At(entry & 0xFFFF); Typedef* sign = classDef->classLoader->constructType(type); - updateCachedValue(index, sign); + ctpRes[index] = sign; return sign; } return (Typedef*)res; } Signdef* JavaConstantPool::resolveNameAndSign(uint32 index) { - void* res = getCachedValue(index); + void* res = ctpRes[index]; if (!res) { if (typeAt(index) != ConstantNameAndType) { fprintf(stderr, "Malformed class %s\n", @@ -356,7 +347,7 @@ Signdef* JavaConstantPool::resolveNameAn sint32 entry = ctpDef[index]; const UTF8* type = UTF8At(entry & 0xFFFF); Signdef* sign = classDef->classLoader->constructSign(type); - updateCachedValue(index, sign); + ctpRes[index] = sign; return sign; } return (Signdef*)res; @@ -481,7 +472,7 @@ void JavaConstantPool::resolveMethod(uin const UTF8*& utf8, Signdef*& sign) { sint32 entry = ctpDef[index]; sint32 ntIndex = entry & 0xFFFF; - sign = (Signdef*)getCachedValue(ntIndex); + sign = (Signdef*)ctpRes[ntIndex]; assert(sign && "No cached signature after JITting"); utf8 = UTF8At(ctpDef[ntIndex] >> 16); cl = loadClass(entry >> 16); @@ -494,7 +485,7 @@ void JavaConstantPool::resolveField(uint const UTF8*& utf8, Typedef*& sign) { sint32 entry = ctpDef[index]; sint32 ntIndex = entry & 0xFFFF; - sign = (Typedef*)getCachedValue(ntIndex); + sign = (Typedef*)ctpRes[ntIndex]; assert(sign && "No cached Typedef after JITting"); utf8 = UTF8At(ctpDef[ntIndex] >> 16); cl = loadClass(entry >> 16); @@ -506,7 +497,7 @@ void JavaConstantPool::resolveField(uint JavaField* JavaConstantPool::lookupField(uint32 index, bool stat) { sint32 entry = ctpDef[index]; sint32 ntIndex = entry & 0xFFFF; - Typedef* sign = (Typedef*)getCachedValue(ntIndex); + Typedef* sign = (Typedef*)ctpRes[ntIndex]; const UTF8* utf8 = UTF8At(ctpDef[ntIndex] >> 16); CommonClass* cl = getMethodClassIfLoaded(entry >> 16); if (cl) { @@ -517,10 +508,10 @@ JavaField* JavaConstantPool::lookupField // don't throw if no field, the exception will be thrown just in time if (field) { if (!stat) { - updateCachedValue(index, (void*)field->ptrOffset); + ctpRes[index] = (void*)field->ptrOffset; } else if (lookup->isReady()) { void* S = field->classDef->getStaticInstance(); - updateCachedValue(index, (void*)((uint64)S + field->ptrOffset)); + ctpRes[index] = (void*)((uint64)S + field->ptrOffset); } } return field; @@ -537,24 +528,6 @@ JavaString* JavaConstantPool::resolveStr return str; } -void** JavaConstantPool::getCachedValuePtr(uint32_t index, isolate_id_t isolateID) -{ - assert(index < ctpSize && "Invalid constant index"); - void **entry = ctpRes + index; - if (ctpType[index] != ConstantString) return entry; - - isolateID = JavaThread::getValidIsolateID(isolateID); - void ** stringArray = reinterpret_cast(*entry); - return stringArray + isolateID; -} - -void* JavaConstantPool::updateCachedValue(uint32_t index, void* newValue, isolate_id_t isolateID) { - void** valuePtr = getCachedValuePtr(index, isolateID); - void* oldValue = *valuePtr; - *valuePtr = newValue; - return oldValue; -} - JavaConstantPool::ctpReader JavaConstantPool::funcsReader[16] = { unimplemented, CtpReaderUTF8, Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.h Thu Apr 25 11:49:31 2013 @@ -49,13 +49,11 @@ public: /// sint32* ctpDef; -private: /// ctpRes - Objects resolved dynamically, e.g. UTF8s, classes, methods, /// fields, string pointers. /// void** ctpRes; -public: /// operator new - Redefine the operator to allocate the arrays of a /// constant pool inline. void* operator new(size_t sz, vmkit::BumpPtrAllocator& allocator, @@ -259,23 +257,6 @@ public: /// ~JavaConstantPool - Delete the constant pool. /// ~JavaConstantPool() {} - -protected: - void** getCachedValuePtr(uint32_t index, isolate_id_t isolateID = CURRENT_ISOLATE); - -public: - void* getCachedValue(uint32_t index, isolate_id_t isolateID = CURRENT_ISOLATE) { - return *getCachedValuePtr(index, isolateID); - } - - /// This returns the old contents before updating - void* updateCachedValueSynchronized(uint32_t index, void* newValue, void* oldValue, isolate_id_t isolateID = CURRENT_ISOLATE) { - void** valuePtr = getCachedValuePtr(index, isolateID); - return __sync_val_compare_and_swap(valuePtr, oldValue, newValue); - } - - /// This returns the old contents before updating - void* updateCachedValue(uint32_t index, void* newValue, isolate_id_t isolateID = CURRENT_ISOLATE); }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp Thu Apr 25 11:49:31 2013 @@ -23,88 +23,260 @@ using namespace j3; +#define readArgs(buf, signature, ap, jni) { \ + jvalue* buffer = (jvalue*)buf; \ + Typedef* const* arguments = signature->getArgumentsType(); \ + for (uint32 i = 0; i < signature->nbArguments; ++i) { \ + const Typedef* type = arguments[i];\ + if (type->isPrimitive()) {\ + const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type;\ + if (prim->isLong()) {\ + buffer[i].j = va_arg(ap, sint64);\ + } else if (prim->isInt()){ \ + buffer[i].i = va_arg(ap, sint32);\ + } else if (prim->isChar()) { \ + buffer[i].c = va_arg(ap, uint32);\ + } else if (prim->isShort()) { \ + buffer[i].s = va_arg(ap, sint32);\ + } else if (prim->isByte()) { \ + buffer[i].b = va_arg(ap, sint32);\ + } else if (prim->isBool()) { \ + buffer[i].z = va_arg(ap, uint32);\ + } else if (prim->isFloat()) {\ + buffer[i].f = (float)va_arg(ap, double);\ + } else if (prim->isDouble()) {\ + buffer[i].d = va_arg(ap, double);\ + } else {\ + fprintf(stderr, "Can't happen");\ + abort();\ + }\ + } else{\ + buffer[i].l = reinterpret_cast(va_arg(ap, JavaObject**));\ + }\ + }\ +} + +#define DO_TRY +#define DO_CATCH if (th->pendingException) { th->throwFromJava(); } + //===----------------------------------------------------------------------===// // We do not need to have special care on the GC-pointers in the buffer // manipulated in these functions because the objects in the buffer are // addressed and never stored directly. //===----------------------------------------------------------------------===// -jvalue* JavaMethod::marshalArguments(vmkit::ThreadAllocator& allocator, va_list& ap) -{ - Signdef* signature = getSignature(); - if (signature->nbArguments == 0) return NULL; //Zero arguments - - Typedef* const* arguments = signature->getArgumentsType(); - - jvalue* buffer = (jvalue*)allocator.Allocate(signature->nbArguments * sizeof(jvalue)); - - for (uint32 i = 0; i < signature->nbArguments; ++i) { - const Typedef* type = arguments[i]; - - if (type->isPrimitive()) { - const PrimitiveTypedef* prim = (const PrimitiveTypedef*)type; - - if (prim->isLong()) buffer[i].j = va_arg(ap, sint64); - else if (prim->isInt()) buffer[i].i = va_arg(ap, sint32); - else if (prim->isChar()) buffer[i].c = va_arg(ap, uint32); - else if (prim->isShort()) buffer[i].s = va_arg(ap, sint32); - else if (prim->isByte()) buffer[i].b = va_arg(ap, sint32); - else if (prim->isBool()) buffer[i].z = va_arg(ap, uint32); - else if (prim->isFloat()) buffer[i].f = (float)va_arg(ap, double); - else if (prim->isDouble()) buffer[i].d = va_arg(ap, double); - else assert(0 && "Unknown primitive type."); - } else - buffer[i].l = reinterpret_cast(va_arg(ap, JavaObject**)); - } - return buffer; +#if 1 // VA_ARGS do not work on all platforms for LLVM. +#define INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ +\ +TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \ + llvm_gcroot(obj, 0); \ + verifyNull(obj); \ + Signdef* sign = getSignature(); \ + vmkit::ThreadAllocator allocator; \ + jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ + readArgs(buf, sign, ap, jni); \ + return invoke##TYPE_NAME##VirtualBuf(vm, cl, obj, buf); \ +}\ +\ +TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {\ + llvm_gcroot(obj, 0); \ + verifyNull(obj); \ + Signdef* sign = getSignature(); \ + vmkit::ThreadAllocator allocator; \ + jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ + readArgs(buf, sign, ap, jni); \ + return invoke##TYPE_NAME##SpecialBuf(vm, cl, obj, buf); \ +}\ +\ +TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) {\ + Signdef* sign = getSignature(); \ + vmkit::ThreadAllocator allocator; \ + jvalue* buf = (jvalue*)allocator.Allocate(sign->nbArguments * sizeof(jvalue)); \ + readArgs(buf, sign, ap, jni); \ + return invoke##TYPE_NAME##StaticBuf(vm, cl, buf); \ +} + +#else + +#define INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ +TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) { \ + llvm_gcroot(obj, 0); \ + verifyNull(obj); \ + UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ + if (objCl == classDef || isFinal(access)) { \ + meth = this; \ + } else { \ + meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \ + } \ + assert(meth && "No method found"); \ + void* func = meth->compiledPtr(); \ + Signdef* sign = getSignature(); \ + FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \ + JavaThread* th = JavaThread::get(); \ + th->startJava(); \ + TYPE res = 0; \ + DO_TRY \ + res = call(cl->getConstantPool(), func, obj, ap);\ + DO_CATCH \ + th->endJava(); \ + return res; \ +}\ +\ +TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list ap) {\ + llvm_gcroot(obj, 0); \ + verifyNull(obj);\ + void* func = this->compiledPtr();\ + Signdef* sign = getSignature(); \ + FUNC_TYPE_VIRTUAL_AP call = (FUNC_TYPE_VIRTUAL_AP)sign->getVirtualCallAP(); \ + JavaThread* th = JavaThread::get(); \ + th->startJava(); \ + TYPE res = 0; \ + DO_TRY \ + res = call(cl->getConstantPool(), func, obj, ap);\ + DO_CATCH \ + th->endJava(); \ + return res; \ +}\ +\ +TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list ap) {\ + if (!cl->isReady()) { \ + cl->resolveClass(); \ + cl->initialiseClass(vm); \ + } \ + \ + void* func = this->compiledPtr();\ + Signdef* sign = getSignature(); \ + FUNC_TYPE_STATIC_AP call = (FUNC_TYPE_STATIC_AP)sign->getStaticCallAP(); \ + JavaThread* th = JavaThread::get(); \ + th->startJava(); \ + TYPE res = 0; \ + DO_TRY \ + res = call(cl->getConstantPool(), func, ap);\ + DO_CATCH \ + th->endJava(); \ + return res; \ } -#define JavaMethod_INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ - llvm_gcroot(obj, 0); \ - va_list ap; \ - va_start(ap, obj); \ - TYPE res = invokeVirtualAP(vm, cl, obj, ap); \ - va_end(ap); \ - return res; \ - } \ - TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ - llvm_gcroot(obj, 0); \ - va_list ap; \ - va_start(ap, obj); \ - TYPE res = invokeSpecialAP(vm, cl, obj, ap); \ - va_end(ap); \ - return res; \ - } \ - TYPE JavaMethod::invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) { \ - va_list ap; \ - va_start(ap, cl); \ - TYPE res = invokeStaticAP(vm, cl, ap); \ - va_end(ap); \ - return res; \ - } - -#define JavaMethod_INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - TYPE JavaMethod::invoke##TYPE_NAME##VirtualAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) {return invokeVirtualAP(vm, cl, obj, ap);} \ - TYPE JavaMethod::invoke##TYPE_NAME##SpecialAP(Jnjvm* vm, UserClass* cl, JavaObject* obj, va_list& ap) {return invokeSpecialAP(vm, cl, obj, ap);} \ - TYPE JavaMethod::invoke##TYPE_NAME##StaticAP(Jnjvm* vm, UserClass* cl, va_list& ap) {return invokeStaticAP(vm, cl, ap);} - -#define JavaMethod_INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ - TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {return invokeVirtualBuf(vm, cl, obj, buf);} \ - TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {return invokeSpecialBuf(vm, cl, obj, buf);} \ - TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) {return invokeStaticBuf(vm, cl, buf);} - -#define JavaMethod_INVOKE(TYPE, TYPE_NAME) \ - typedef TYPE (* func_virtual_ap_##TYPE_NAME)(UserConstantPool*, void*, JavaObject*, va_list); \ - typedef TYPE (* func_static_ap_##TYPE_NAME)(UserConstantPool*, void*, va_list); \ - typedef TYPE (* func_virtual_buf_##TYPE_NAME)(UserConstantPool*, void*, JavaObject*, void*); \ - typedef TYPE (* func_static_buf_##TYPE_NAME)(UserConstantPool*, void*, void*); \ - JavaMethod_INVOKE_AP(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) \ - JavaMethod_INVOKE_BUF(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) \ - JavaMethod_INVOKE_VA(TYPE, TYPE_NAME, func_virtual_ap_##TYPE_NAME, func_static_ap_##TYPE_NAME, func_virtual_buf_##TYPE_NAME, func_static_buf_##TYPE_NAME) - -JavaMethod_INVOKE(uint32, Int) -JavaMethod_INVOKE(sint64, Long) -JavaMethod_INVOKE(float, Float) -JavaMethod_INVOKE(double, Double) -JavaMethod_INVOKE(JavaObject*, JavaObject) +#endif + +#define INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ +TYPE JavaMethod::invoke##TYPE_NAME##VirtualBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\ + llvm_gcroot(obj, 0); \ + verifyNull(obj);\ + Signdef* sign = getSignature(); \ + UserClass* objCl = JavaObject::getClass(obj)->isArray() ? JavaObject::getClass(obj)->super : JavaObject::getClass(obj)->asClass(); \ + JavaMethod* meth = NULL; \ + if (objCl == classDef || isFinal(access)) { \ + meth = this; \ + } else { \ + meth = objCl->lookupMethodDontThrow(name, type, false, true, &cl); \ + } \ + assert(meth && "No method found"); \ + assert(objCl->isSubclassOf(meth->classDef) && "Wrong type"); \ + void* func = meth->compiledPtr(); \ + FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \ + JavaThread* th = JavaThread::get(); \ + th->startJava(); \ + TYPE res = 0; \ + DO_TRY \ + res = call(cl->getConstantPool(), func, obj, buf);\ + DO_CATCH \ + th->endJava(); \ + return res; \ +}\ +TYPE JavaMethod::invoke##TYPE_NAME##SpecialBuf(Jnjvm* vm, UserClass* cl, JavaObject* obj, void* buf) {\ + llvm_gcroot(obj, 0); \ + verifyNull(obj);\ + void* func = this->compiledPtr();\ + Signdef* sign = getSignature(); \ + FUNC_TYPE_VIRTUAL_BUF call = (FUNC_TYPE_VIRTUAL_BUF)sign->getVirtualCallBuf(); \ + JavaThread* th = JavaThread::get(); \ + th->startJava(); \ + TYPE res = 0; \ + DO_TRY \ + res = call(cl->getConstantPool(), func, obj, buf);\ + DO_CATCH \ + th->endJava(); \ + return res; \ +}\ +\ +TYPE JavaMethod::invoke##TYPE_NAME##StaticBuf(Jnjvm* vm, UserClass* cl, void* buf) {\ + if (!cl->isReady()) { \ + cl->resolveClass(); \ + cl->initialiseClass(vm); \ + } \ + \ + void* func = this->compiledPtr();\ + Signdef* sign = getSignature(); \ + FUNC_TYPE_STATIC_BUF call = (FUNC_TYPE_STATIC_BUF)sign->getStaticCallBuf(); \ + JavaThread* th = JavaThread::get(); \ + th->startJava(); \ + TYPE res = 0; \ + DO_TRY \ + res = call(cl->getConstantPool(), func, buf);\ + DO_CATCH \ + th->endJava(); \ + return res; \ +}\ + +#define INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ +TYPE JavaMethod::invoke##TYPE_NAME##Virtual(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) { \ + llvm_gcroot(obj, 0); \ + va_list ap;\ + va_start(ap, obj);\ + TYPE res = invoke##TYPE_NAME##VirtualAP(vm, cl, obj, ap);\ + va_end(ap); \ + return res; \ +}\ +\ +TYPE JavaMethod::invoke##TYPE_NAME##Special(Jnjvm* vm, UserClass* cl, JavaObject* obj, ...) {\ + llvm_gcroot(obj, 0); \ + va_list ap;\ + va_start(ap, obj);\ + TYPE res = invoke##TYPE_NAME##SpecialAP(vm, cl, obj, ap);\ + va_end(ap); \ + return res; \ +}\ +\ +TYPE JavaMethod::invoke##TYPE_NAME##Static(Jnjvm* vm, UserClass* cl, ...) {\ + va_list ap;\ + va_start(ap, cl);\ + TYPE res = invoke##TYPE_NAME##StaticAP(vm, cl, ap);\ + va_end(ap); \ + return res; \ +}\ + +#define INVOKE(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + INVOKE_AP(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + INVOKE_BUF(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) \ + INVOKE_VA(TYPE, TYPE_NAME, FUNC_TYPE_VIRTUAL_AP, FUNC_TYPE_STATIC_AP, FUNC_TYPE_VIRTUAL_BUF, FUNC_TYPE_STATIC_BUF) + +typedef uint32 (*uint32_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); +typedef sint64 (*sint64_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); +typedef float (*float_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); +typedef double (*double_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); +typedef JavaObject* (*object_virtual_ap)(UserConstantPool*, void*, JavaObject*, va_list); + +typedef uint32 (*uint32_static_ap)(UserConstantPool*, void*, va_list); +typedef sint64 (*sint64_static_ap)(UserConstantPool*, void*, va_list); +typedef float (*float_static_ap)(UserConstantPool*, void*, va_list); +typedef double (*double_static_ap)(UserConstantPool*, void*, va_list); +typedef JavaObject* (*object_static_ap)(UserConstantPool*, void*, va_list); + +typedef uint32 (*uint32_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); +typedef sint64 (*sint64_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); +typedef float (*float_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); +typedef double (*double_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); +typedef JavaObject* (*object_virtual_buf)(UserConstantPool*, void*, JavaObject*, void*); + +typedef uint32 (*uint32_static_buf)(UserConstantPool*, void*, void*); +typedef sint64 (*sint64_static_buf)(UserConstantPool*, void*, void*); +typedef float (*float_static_buf)(UserConstantPool*, void*, void*); +typedef double (*double_static_buf)(UserConstantPool*, void*, void*); +typedef JavaObject* (*object_static_buf)(UserConstantPool*, void*, void*); + +INVOKE(uint32, Int, uint32_virtual_ap, uint32_static_ap, uint32_virtual_buf, uint32_static_buf) +INVOKE(sint64, Long, sint64_virtual_ap, sint64_static_ap, sint64_virtual_buf, sint64_static_buf) +INVOKE(float, Float, float_virtual_ap, float_static_ap, float_virtual_buf, float_static_buf) +INVOKE(double, Double, double_virtual_ap, double_static_ap, double_virtual_buf, double_static_buf) +INVOKE(JavaObject*, JavaObject, object_virtual_ap, object_static_ap, object_virtual_buf, object_static_buf) Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 11:49:31 2013 @@ -68,7 +68,7 @@ uint32_t JavaObject::hashCode(JavaObject void JavaObject::waitIntern( - JavaObject* self, struct timeval* info, bool& timed) { + JavaObject* self, struct timeval* info, bool timed) { llvm_gcroot(self, 0); JavaThread* thread = JavaThread::get(); vmkit::LockSystem& table = thread->getJVM()->lockSystem; @@ -91,18 +91,15 @@ void JavaObject::waitIntern( void JavaObject::wait(JavaObject* self) { llvm_gcroot(self, 0); - bool timeout = false; - waitIntern(self, NULL, timeout); + waitIntern(self, NULL, false); } -bool JavaObject::timedWait(JavaObject* self, struct timeval& info) { +void JavaObject::timedWait(JavaObject* self, struct timeval& info) { llvm_gcroot(self, 0); - bool timeout = true; - waitIntern(self, &info, timeout); - return !timeout; //Return false if timed out + waitIntern(self, &info, true); } -bool JavaObject::wait(JavaObject* self, int64_t ms, int32_t ns) { +void JavaObject::wait(JavaObject* self, int64_t ms, int32_t ns) { llvm_gcroot(self, 0); Jnjvm* vm = JavaThread::get()->getJVM(); @@ -118,10 +115,9 @@ bool JavaObject::wait(JavaObject* self, struct timeval t; t.tv_sec = sec; t.tv_usec = usec; - return JavaObject::timedWait(self, t); + JavaObject::timedWait(self, t); } else { JavaObject::wait(self); - return true; } } Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaObject.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaObject.h Thu Apr 25 11:49:31 2013 @@ -233,7 +233,7 @@ private: /// waitIntern - internal wait on a monitor /// - static void waitIntern(JavaObject* self, struct timeval *info, bool& timed); + static void waitIntern(JavaObject* self, struct timeval *info, bool timed); public: @@ -255,11 +255,11 @@ public: /// timedWait - Java timed wait. Makes the current thread waiting on a /// monitor for the given amount of time. /// - static bool timedWait(JavaObject* self, struct timeval &info); + static void timedWait(JavaObject* self, struct timeval &info); /// wait - Wait for specified ms and ns. Wrapper for either wait() or /// timedWait, depending on duration specified. - static bool wait(JavaObject* self, int64_t ms, int32_t ns); + static void wait(JavaObject* self, int64_t ms, int32_t ns); /// notify - Java notify. Notifies a thread from the availability of the /// monitor. Modified: vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaRuntimeJIT.cpp Thu Apr 25 11:49:31 2013 @@ -8,9 +8,7 @@ // //===----------------------------------------------------------------------===// -#include -#include "Classpath.h" #include "ClasspathReflect.h" #include "JavaArray.h" #include "JavaClass.h" @@ -27,30 +25,13 @@ using namespace j3; -extern "C" UserCommonClass* j3RuntimeInitialiseClass(UserClass*); - -extern "C" UserClass* j3InitialisationCheck(UserClass* cl) -{ - if (!cl->isClass()) return cl; - if (!cl->isInitializing()) - cl = j3RuntimeInitialiseClass(cl)->asClass(); - return cl; -} - -extern "C" UserClass* j3InitialisationCheckForJavaObject(JavaObject* obj) -{ - CommonClass* ccl = JavaObject::getClass(obj); - if (!ccl->isClass()) return NULL; - return j3InitialisationCheck(ccl->asClass()); -} - extern "C" void* j3InterfaceLookup(UserClass* caller, uint32 index) { void* res = 0; UserConstantPool* ctpInfo = caller->getConstantPool(); - if (ctpInfo->getCachedValue(index)) { - res = ctpInfo->getCachedValue(index); + if (ctpInfo->ctpRes[index]) { + res = ctpInfo->ctpRes[index]; } else { UserCommonClass* cl = 0; const UTF8* utf8 = 0; @@ -60,7 +41,7 @@ extern "C" void* j3InterfaceLookup(UserC assert(cl->isClass() && isInterface(cl->access) && "Wrong type of method"); res = cl->asClass()->lookupInterfaceMethod(utf8, sign->keyName); - ctpInfo->updateCachedValue(index, res); + ctpInfo->ctpRes[index] = (void*)res; } return res; } @@ -71,8 +52,8 @@ extern "C" void* j3VirtualFieldLookup(Us void* res = 0; UserConstantPool* ctpInfo = caller->getConstantPool(); - if (ctpInfo->getCachedValue(index)) { - res = ctpInfo->getCachedValue(index); + if (ctpInfo->ctpRes[index]) { + res = ctpInfo->ctpRes[index]; } else { UserCommonClass* cl = 0; @@ -84,7 +65,7 @@ extern "C" void* j3VirtualFieldLookup(Us UserClass* lookup = cl->isArray() ? cl->super : cl->asClass(); JavaField* field = lookup->lookupField(utf8, sign->keyName, false, true, 0); - ctpInfo->updateCachedValue(index, (void*)field->ptrOffset); + ctpInfo->ctpRes[index] = (void*)field->ptrOffset; res = (void*)field->ptrOffset; } @@ -99,8 +80,8 @@ extern "C" void* j3StaticFieldLookup(Use UserConstantPool* ctpInfo = caller->getConstantPool(); - if (ctpInfo->getCachedValue(index)) { - res = ctpInfo->getCachedValue(index); + if (ctpInfo->ctpRes[index]) { + res = ctpInfo->ctpRes[index]; } else { UserCommonClass* cl = 0; @@ -120,7 +101,7 @@ extern "C" void* j3StaticFieldLookup(Use assert(obj && "No static instance in static field lookup"); void* ptr = (void*)((uint64)obj + field->ptrOffset); - ctpInfo->updateCachedValue(index, ptr); + ctpInfo->ctpRes[index] = ptr; res = ptr; } @@ -192,9 +173,8 @@ extern "C" void* j3ClassLookup(UserClass // Calls Java code. // Throws if initializing the class throws an exception. extern "C" UserCommonClass* j3RuntimeInitialiseClass(UserClass* cl) { - Jnjvm* vm = JavaThread::get()->getJVM(); cl->resolveClass(); - cl->initialiseClass(vm); + cl->initialiseClass(JavaThread::get()->getJVM()); return cl; } @@ -203,10 +183,6 @@ extern "C" JavaObject* j3RuntimeDelegate return cl->getClassDelegatee(JavaThread::get()->getJVM()); } -extern "C" JavaObject** j3RuntimeDelegateePtr(UserCommonClass* cl) { - return const_cast(cl->getClassDelegateePtr(JavaThread::get()->getJVM())); -} - // Throws if one of the dimension is negative. JavaObject* multiCallNewIntern(UserClassArray* cl, uint32 len, sint32* dims, Jnjvm* vm) { @@ -290,13 +266,13 @@ extern "C" void j3EndJNI(uint32** oldLRN th->currentAddedReferences = *oldLRN; } -extern "C" void* j3StartJNI(uint32* localReferencesNumber, +extern "C" word_t j3StartJNI(uint32* localReferencesNumber, uint32** oldLocalReferencesNumber, vmkit::KnownFrame* Frame) __attribute__((noinline)); // Never throws. Does not call Java code. Can not yield a GC. May join a GC. -extern "C" void* j3StartJNI(uint32* localReferencesNumber, +extern "C" word_t j3StartJNI(uint32* localReferencesNumber, uint32** oldLocalReferencesNumber, vmkit::KnownFrame* Frame) { @@ -383,7 +359,7 @@ extern "C" void* j3StringLookup(UserClas UserConstantPool* ctpInfo = cl->getConstantPool(); const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[index]); str = cl->classLoader->UTF8ToStr(utf8); - ctpInfo->updateCachedValue(index, str); + ctpInfo->ctpRes[index] = str; return (void*)str; } @@ -477,7 +453,7 @@ extern "C" void* j3ResolveStaticStub() { result = callee->compiledPtr(); // Update the entry in the constant pool. - ctpInfo->updateCachedValue(ctpIndex, result); + ctpInfo->ctpRes[ctpIndex] = result; return result; } @@ -518,7 +494,7 @@ extern "C" void* j3ResolveSpecialStub() result = callee->compiledPtr(); // Update the entry in the constant pool. - ctpInfo->updateCachedValue(ctpIndex, result); + ctpInfo->ctpRes[ctpIndex] = result; return result; } @@ -526,10 +502,7 @@ extern "C" void* j3ResolveSpecialStub() // Does not throw an exception. extern "C" void* j3ResolveInterface(JavaObject* obj, JavaMethod* meth, uint32_t index) { word_t result = 0; - UserClass* cl = j3InitialisationCheckForJavaObject(obj); - assert(cl && "Invalid class of JavaObject"); - - InterfaceMethodTable* IMT = cl->virtualVT->IMT; + InterfaceMethodTable* IMT = JavaObject::getClass(obj)->virtualVT->IMT; if ((IMT->contents[index] & 1) == 0) { result = IMT->contents[index]; } else { @@ -552,42 +525,15 @@ extern "C" void* j3ResolveInterface(Java } extern "C" void j3PrintMethodStart(JavaMethod* meth) { -#if JNJVM_EXECUTE > 0 - JavaThread *thread = JavaThread::get(); - char tab_level[10240]; - - assert((thread->call_level < sizeof(tab_level)/sizeof(tab_level[0])) && "Too deep call level to be logged!"); - - memset(tab_level, ' ', thread->call_level); - tab_level[thread->call_level++] = '\0'; - -// uint16_t c = meth->classDef->name->elements[0]; -// if (c != 'i') return; - - std::ostringstream log; - log << '[' << *thread << ']' << tab_level << " call " << - *meth->classDef->name << '.' << *meth->name << std::endl; - std::cerr << log.str(); -#endif + fprintf(stderr, "[%p] executing %s.%s\n", (void*)vmkit::Thread::get(), + UTF8Buffer(meth->classDef->name).cString(), + UTF8Buffer(meth->name).cString()); } extern "C" void j3PrintMethodEnd(JavaMethod* meth) { -#if JNJVM_EXECUTE > 0 - JavaThread *thread = JavaThread::get(); - char tab_level[10240]; - - thread->call_level--; - memset(tab_level, ' ', thread->call_level); - tab_level[thread->call_level] = '\0'; - -// uint16_t c = meth->classDef->name->elements[0]; -// if (c != 'i') return; - - std::ostringstream log; - log << '[' << *thread << ']' << tab_level << " ret " << - *meth->classDef->name << '.' << *meth->name << std::endl; - std::cerr << log.str(); -#endif + fprintf(stderr, "[%p] return from %s.%s\n", (void*)vmkit::Thread::get(), + UTF8Buffer(meth->classDef->name).cString(), + UTF8Buffer(meth->name).cString()); } extern "C" void j3PrintExecution(uint32 opcode, uint32 index, @@ -597,50 +543,3 @@ extern "C" void j3PrintExecution(uint32 UTF8Buffer(meth->name).cString(), OpcodeNames[opcode], index); } - -extern "C" void* j3GetCachedValue(UserClass* cl, uint32 index, isolate_id_t isolateID) -{ - return cl->ctpInfo->getCachedValue(index, isolateID); -} - -extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID) -{ - vmkit::Thread* thread = vmkit::Thread::get(); - isolate_id_t oldIsolateID = thread->getIsolateID(); - isolate_id_t curIsolateID = oldIsolateID; - - if ((isolateID != CURRENT_ISOLATE) && (isolateID != oldIsolateID)) { - thread->setIsolateID(isolateID); - curIsolateID = isolateID; - } - - if (currentIsolateID != NULL) *currentIsolateID = curIsolateID; - return oldIsolateID; -} - -extern "C" JavaObject** j3GetClassDelegateePtr(UserCommonClass* commonCl) -{ - JavaObject **obj = commonCl->getDelegateePtr(); - if (!obj || !(*obj)) { - Jnjvm* vm = JavaThread::get()->getJVM(); - commonCl->getClassDelegatee(vm, NULL); - obj = commonCl->getDelegateePtr(); - - assert(obj && (*obj) && "Invalid class delegatee"); - } - return obj; -} - -extern "C" JavaObject* j3GetClassDelegatee(UserCommonClass* commonClass) -{ - JavaObject *obj = commonClass->getDelegatee(); - if (!obj) obj = j3RuntimeDelegatee(commonClass); - return obj; -} - -extern "C" void* j3GetStaticInstance(UserClass* caller) -{ - TaskClassMirror& tcm = caller->getCurrentTaskClassMirror(); - assert(caller->isInitializing() && (tcm.staticInstance != NULL) && "Isolate static instance not initialized."); - return tcm.staticInstance; -} Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Thu Apr 25 11:49:31 2013 @@ -7,15 +7,12 @@ // //===----------------------------------------------------------------------===// -#include - #include "vmkit/Locks.h" #include "vmkit/Thread.h" #include "JavaClass.h" #include "JavaObject.h" #include "JavaThread.h" -#include "JavaString.h" #include "JavaUpcalls.h" #include "Jnjvm.h" @@ -24,9 +21,6 @@ using namespace j3; JavaThread::JavaThread(Jnjvm* isolate) : MutatorThread() { MyVM = isolate; - JavaThread* th = JavaThread::get(); - if (th->isVmkitThread()) - isolateID = th->getIsolateID(); pendingException = NULL; jniEnv = isolate->jniEnv; localJNIRefs = new JNILocalReferences(); @@ -46,13 +40,12 @@ JavaThread::~JavaThread() { delete localJNIRefs; } -void JavaThread::throwException(JavaObject* obj, bool immediate) { +void JavaThread::throwException(JavaObject* obj) { llvm_gcroot(obj, 0); JavaThread* th = JavaThread::get(); assert(th->pendingException == 0 && "pending exception already there?"); vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&(th->pendingException), (gc*)obj); - if (immediate) - th->internalThrowException(); + th->internalThrowException(); } void JavaThread::throwPendingException() { @@ -134,7 +127,7 @@ void JavaThread::printJavaBacktrace() { while (vmkit::FrameInfo* FI = Walker.get()) { if (FI->Metadata != NULL) { - MyVM->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); + MyVM->printMethod(FI, Walker.ip, Walker.addr); } ++Walker; } @@ -170,92 +163,3 @@ void JNILocalReferences::removeJNIRefere length -= num; } } - -std::ostream& j3::operator << (std::ostream& os, JavaThread& thread) -{ - os << (void*)(&thread); - - Jnjvm* vm = thread.getJVM(); - JavaObject* jThread = thread.currentThread(); - if (vm && jThread) { - JavaString* threadNameObj = static_cast( - vm->upcalls->threadName->getInstanceObjectField(jThread)); - char *threadName = JavaString::strToAsciiz(threadNameObj); - os << '(' << threadName << ')'; - delete [] threadName; - } - - return os << ',' << thread.getIsolateID(); -} - -void JavaThread::printStackTrace(int skip, int level_deep) -{ - JavaThread *thread = JavaThread::get(); - std::cerr << '[' << *thread << "] Call stack trace:" << std::endl; - - j3::Jnjvm *vm = thread->getJVM(); - vmkit::StackWalker Walker(thread); - for (vmkit::FrameInfo* FI = NULL; (level_deep > 0) && ((FI = Walker.get()) != NULL); ++Walker) { - if (!FI->Metadata) continue; - if (skip > 0) {--skip; continue;} - - vm->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); - --level_deep; - } -} - -void JavaThread::throwNullPointerException(void* methodIP) const -{ - if (!this->isVmkitThread()) - return vmkit::Thread::throwNullPointerException(methodIP); - - this->cleanUpOnDeadIsolateBeforeException(&methodIP); - - MyVM->nullPointerException(); - UNREACHABLE(); -} - -void JavaThread::throwDeadIsolateException() const -{ - if (this->runsDeadIsolate()) - const_cast(this)->setIsolateID(0); - - if (!this->isVmkitThread()) - return vmkit::Thread::throwDeadIsolateException(); - - void *methodIP = StackWalker_getCallFrameAddress(); - methodIP = vmkit::StackWalker::getReturnAddressFromCallFrame(methodIP); - - MyVM->deadIsolateException(methodIP, true); - UNREACHABLE(); -} - -extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); - -void JavaThread::cleanUpOnDeadIsolateBeforeException(void** methodIP, JavaMethod** method) const -{ - vmkit::StackWalker walker(const_cast(this), true); - vmkit::FrameInfo *FI = walker.get(); - - if (!FI) { - if (methodIP != NULL) *methodIP = NULL; - if (method != NULL) *method = NULL; - return; - } - - JavaMethod* meth = (JavaMethod*)FI->Metadata; - - // Restore the current isolate ID to that of the caller - isolate_id_t callerIsolateID = meth->classDef->classLoader->getIsolateID(); - j3SetIsolate(callerIsolateID, NULL); - - if (methodIP != NULL) *methodIP = FI->ReturnAddress; - if (method != NULL) *method = meth; -} - -void JavaThread::runAfterLeavingGarbageCollectorRendezVous() -{ - // Be sure to throw an exception if I am running in a dead isolate - if (this->runsDeadIsolate()) - throwDeadIsolateException(); -} Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original) +++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 11:49:31 2013 @@ -10,8 +10,6 @@ #ifndef JNJVM_JAVA_THREAD_H #define JNJVM_JAVA_THREAD_H -#include - #include "vmkit/Cond.h" #include "vmkit/Locks.h" #include "vmkit/ObjectLocks.h" @@ -35,7 +33,7 @@ class Jnjvm; #define BEGIN_JNI_EXCEPTION \ JavaThread* th = JavaThread::get(); \ - void* SP = th->getLastSP(); \ + word_t SP = th->getLastSP(); \ th->leaveUncooperativeCode(); \ vmkit::KnownFrame Frame; \ th->startKnownFrame(Frame); \ @@ -94,9 +92,6 @@ public: /// JNILocalReferences* localJNIRefs; -#if JNJVM_EXECUTE > 0 - unsigned int call_level; -#endif JavaObject** pushJNIRef(JavaObject* obj) { llvm_gcroot(obj, 0); @@ -114,9 +109,6 @@ public: /// JavaThread - Empty constructor, used to get the VT. /// JavaThread() { -#if JNJVM_EXECUTE > 0 - call_level = 0; -#endif } /// ~JavaThread - Delete any potential malloc'ed objects used by this thread. @@ -149,7 +141,7 @@ public: /// throwException - Throw the given exception in the current thread. /// - void throwException(JavaObject* obj, bool immediate = true); + void throwException(JavaObject* obj); /// throwPendingException - Throw a pending exception. /// @@ -163,7 +155,7 @@ public: /// throwFromJNI - Throw an exception after executing JNI code. /// - void throwFromJNI(void* SP) { + void throwFromJNI(word_t SP) { endKnownFrame(); enterUncooperativeCode(SP); } @@ -211,17 +203,6 @@ public: /// void printJavaBacktrace(); - static void printStackTrace(int skip = 3, int level_deep = 1) __attribute__((noinline)); - - friend std::ostream& operator << (std::ostream&, JavaThread&); - - void cleanUpOnDeadIsolateBeforeException(void** methodIP = NULL, JavaMethod** method = NULL) const; - - virtual void throwNullPointerException(void* methodIP) const; - virtual void throwDeadIsolateException() const; - - virtual void runAfterLeavingGarbageCollectorRendezVous(); - /// getJavaFrameContext - Fill the buffer with Java methods currently on /// the stack. /// Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:49:31 2013 @@ -8,7 +8,6 @@ //===----------------------------------------------------------------------===// #define JNJVM_LOAD 0 -#define JNJVM_CLINIT 0 #include #include @@ -16,7 +15,6 @@ #include #include #include -#include #include #include "debug.h" @@ -121,6 +119,9 @@ void UserClass::initialiseClass(Jnjvm* v setInitializationState(inClinit); UserClass* cl = (UserClass*)this; + // Single environment allocates the static instance during resolution, so + // that compiled code can access it directly (with an initialization + // check just before the access) if (!cl->getStaticInstance()) cl->allocateStaticInstance(vm); release(); @@ -169,25 +170,8 @@ void UserClass::initialiseClass(Jnjvm* v JavaMethod* meth = lookupMethodDontThrow(vm->bootstrapLoader->clinitName, vm->bootstrapLoader->clinitType, true, false, 0); -#if JNJVM_CLINIT - uint16_t c = this->name->elements[0]; - bool logInit = !(c == 'j' || c == 'g'); - - static char init_buffer[10240]; - static int init_level; - if (logInit) std::cout << '[' << *self << ']' << init_buffer; -#endif if (meth) { - -#if JNJVM_CLINIT - if (logInit) { - std::cout << " clinit " << *name << " ..." << std::endl; - init_buffer[init_level] = ' '; - init_buffer[++init_level] = '\0'; - } -#endif - TRY { meth->invokeIntStatic(vm, cl); } CATCH { @@ -195,31 +179,12 @@ void UserClass::initialiseClass(Jnjvm* v assert(exc && "no exception?"); self->clearException(); } END_CATCH; - -#if JNJVM_CLINIT - if (logInit) { - init_buffer[--init_level] = '\0'; - std::cout << '[' << *self << ']' << init_buffer; - } -#endif - } -#if JNJVM_CLINIT - else { - if (logInit) std::cout << " init " << *name << " ... "; - } -#endif - // 9. If the execution of the initializers completes normally, then lock // this Class object, label it fully initialized, notify all waiting // threads, release the lock, and complete this procedure normally. if (!exc) { - -#if JNJVM_CLINIT - if (logInit) std::cout << " done" << std::endl; -#endif - acquire(); setInitializationState(ready); setOwnerClass(0); @@ -228,10 +193,6 @@ void UserClass::initialiseClass(Jnjvm* v return; } -#if JNJVM_CLINIT - if (logInit) std::cout << " failed" << std::endl; -#endif - // 10. Otherwise, the initializers must have completed abruptly by // throwing some exception E. If the class of E is not Error or one // of its subclasses, then create a new instance of the class @@ -302,19 +263,12 @@ JavaObject* Jnjvm::CreateError(UserClass return obj; } -void Jnjvm::error(UserClass* cl, JavaMethod* init, JavaString* str, bool immediate) { +void Jnjvm::error(UserClass* cl, JavaMethod* init, JavaString* str) { JavaObject* obj = 0; llvm_gcroot(obj, 0); llvm_gcroot(str, 0); obj = CreateError(cl, init, str); - JavaThread::get()->throwException(obj, immediate); -} - -void Jnjvm::error(UserClass* cl, JavaMethod* init, const char* str, bool immediate) { - JavaObject* obj = 0; - llvm_gcroot(obj, 0); - obj = CreateError(cl, init, str); - JavaThread::get()->throwException(obj, immediate); + JavaThread::get()->throwException(obj); } void Jnjvm::arrayStoreException() { @@ -809,28 +763,28 @@ void Jnjvm::addProperty(char* key, char* } // Mimic what's happening in Classpath when creating a java.lang.Class object. -JavaObject* UserCommonClass::getClassDelegatee(Jnjvm* vm, JavaObject* pd, isolate_id_t isolateID) { +JavaObject* UserCommonClass::getClassDelegatee(Jnjvm* vm, JavaObject* pd) { JavaObjectClass* delegatee = 0; JavaObjectClass* base = 0; llvm_gcroot(pd, 0); llvm_gcroot(delegatee, 0); llvm_gcroot(base, 0); - if (getDelegatee(isolateID) == NULL) { + if (getDelegatee() == NULL) { UserClass* cl = vm->upcalls->newClass; - delegatee = (JavaObjectClass*)cl->doNew(vm, isolateID); + delegatee = (JavaObjectClass*)cl->doNew(vm); JavaObjectClass::setClass(delegatee, this); if (pd == NULL && isArray()) { base = (JavaObjectClass*) - asArrayClass()->baseClass()->getClassDelegatee(vm, pd, isolateID); + asArrayClass()->baseClass()->getClassDelegatee(vm, pd); JavaObjectClass::setProtectionDomain( delegatee, JavaObjectClass::getProtectionDomain(base)); } else { JavaObjectClass::setProtectionDomain(delegatee, pd); } - setDelegatee(delegatee, isolateID); + setDelegatee(delegatee); } - return getDelegatee(isolateID); + return getDelegatee(); } JavaObject* const* UserCommonClass::getClassDelegateePtr(Jnjvm* vm, JavaObject* pd) { @@ -1371,9 +1325,6 @@ Jnjvm::Jnjvm(vmkit::BumpPtrAllocator& Al bootstrapLoader = loader; upcalls = bootstrapLoader->upcalls; throwable = upcalls->newThrowable; - - RunningIsolates[0].state = IsolateRunning; - RunningIsolates[0].loader = loader; } Jnjvm::~Jnjvm() { @@ -1399,12 +1350,7 @@ void Jnjvm::startCollection() { referenceThread->WeakReferencesQueue.acquire(); referenceThread->PhantomReferencesQueue.acquire(); } - -void Jnjvm::endCollectionBeforeUnblockingThreads() -{ - collectIsolates(); -} - + void Jnjvm::endCollection() { finalizerThread->FinalizationQueueLock.release(); referenceThread->ToEnqueueLock.release(); @@ -1500,16 +1446,16 @@ extern "C" int StartJnjvmWithoutJIT(int return 0; } -void Jnjvm::printMethod(vmkit::FrameInfo* FI, void* ip, void* callFrame) { +void Jnjvm::printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr) { if (FI->Metadata == NULL) { - vmkit::MethodInfoHelper::print(ip, callFrame); + vmkit::MethodInfoHelper::print(ip, addr); return; } JavaMethod* meth = (JavaMethod*)FI->Metadata; fprintf(stderr, "; %p (%p) in %s.%s (line %d, bytecode %d, code start %p)", - ip, - callFrame, + (void*)ip, + (void*)addr, UTF8Buffer(meth->classDef->name).cString(), UTF8Buffer(meth->name).cString(), meth->lookupLineNumber(FI), Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original) +++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:49:31 2013 @@ -24,7 +24,6 @@ #include "JnjvmConfig.h" #include "JNIReferences.h" #include "LockedMap.h" -#include "JavaArray.h" namespace j3 { @@ -47,21 +46,6 @@ class UserClassArray; class UserClassPrimitive; class UserCommonClass; -enum IsolateState { // These are bits that can be set independently - IsolateFree = 0x0, - IsolateRunning = 0x1, - - IsolateDenyExecution = 0x2, - IsolateResetReferences = 0x4 -}; -typedef uint8_t isolate_state_t; - -struct IsolateDescriptor { - isolate_state_t state; - JnjvmClassLoader *loader; -}; - - /// ThreadSystem - Thread management of a JVM. Each JVM has one thread /// management system to count the number of non-daemon threads it owns. /// The initial thread of the JVM is a non-daemon thread. When there are @@ -110,7 +94,7 @@ public: char* jarFile; std::vector< std::pair > agents; - void readArgs(class Jnjvm *vm); + void readArgs(Jnjvm *vm); void extractClassFromJar(Jnjvm* vm, int argc, char** argv, int i); void javaAgent(char* cur); @@ -139,7 +123,6 @@ private: ReferenceThread* referenceThread; virtual void startCollection(); - virtual void endCollectionBeforeUnblockingThreads(); virtual void endCollection(); virtual void scanWeakReferencesQueue(word_t closure); virtual void scanSoftReferencesQueue(word_t closure); @@ -148,11 +131,9 @@ private: virtual void addFinalizationCandidate(gc* obj); virtual size_t getObjectSize(gc* obj); virtual const char* getObjectTypeName(gc* obj); + virtual void printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr); -public: - virtual void printMethod(vmkit::FrameInfo* FI, void* ip, void* callFrame); -private: /// CreateError - Creates a Java object of the specified exception class /// and calling its function. /// @@ -163,8 +144,7 @@ private: /// that calls this functions. This is used internally by Jnjvm to control /// which pair class/method are used. /// - void error(UserClass* cl, JavaMethod* meth, JavaString*, bool immediate = true); - void error(UserClass* cl, JavaMethod* meth, const char*, bool immediate = true); + void error(UserClass* cl, JavaMethod* meth, JavaString*); /// errorWithExcp - Throws an exception whose cause is the Java object excp. /// @@ -370,34 +350,6 @@ public: /// mapping the initial thread. /// void loadBootstrap(); - void loadIsolate(JnjvmClassLoader *loader); - - IsolateDescriptor RunningIsolates[NR_ISOLATES]; - vmkit::LockNormal IsolateLock; - - int allocateNextFreeIsolateID(JnjvmClassLoader* loader, isolate_id_t *isolateID); - void freeIsolateID(isolate_id_t isolateID); - - void disableIsolates(isolate_id_t* isolateID, size_t isolateCount, bool denyIsolateExecution, bool resetIsolateReferences); - - void collectIsolates(); - void collectIsolate(isolate_id_t isolateID); - void denyIsolateExecutionInThread(isolate_id_t isolateID, JavaThread& thread); - void denyIsolateExecutionInMethodFrame(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker); - void removeExceptionHandlersInThread(isolate_id_t isolateID, JavaThread& thread); - void denyMethodExecution(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker); - void denyMethodExecution(JavaMethod& method); - bool isActivatorStopMethod(JavaMethod& method) const; - isolate_id_t getFrameIsolateID(const vmkit::FrameInfo& frame) const; - isolate_id_t getFrameIsolateID(const JavaMethod& method) const; - void redirectMethodProlog(void* methodAddress, void* redirectCode, size_t codeSize); - void denyClassExecution(isolate_id_t isolateID, CommonClass& cl); - void invalidateAllClassesInIsolate(isolate_id_t isolateID); - - virtual bool resetDeadIsolateReference(void* source, void** objectRef); - virtual void deadIsolateException(void* methodIP, bool immediate = true); - - virtual void printCallStack(const vmkit::StackWalker& walker); }; } // end namespace j3 Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:49:31 2013 @@ -49,7 +49,6 @@ typedef void (*static_init_t)(JnjvmClass const UTF8* JavaCompiler::InlinePragma = 0; const UTF8* JavaCompiler::NoInlinePragma = 0; -extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); JnjvmBootstrapLoader::JnjvmBootstrapLoader(vmkit::BumpPtrAllocator& Alloc, JavaCompiler* Comp, @@ -143,18 +142,18 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad arrayTable[JavaArray::T_LONG - 4] = upcalls->ArrayOfLong; arrayTable[JavaArray::T_DOUBLE - 4] = upcalls->ArrayOfDouble; - JavaAttribute::annotationsAttribute = + Attribut::annotationsAttribut = asciizConstructUTF8("RuntimeVisibleAnnotations"); - JavaAttribute::codeAttribute = asciizConstructUTF8("Code"); - JavaAttribute::exceptionsAttribute = asciizConstructUTF8("Exceptions"); - JavaAttribute::constantAttribute = asciizConstructUTF8("ConstantValue"); - JavaAttribute::lineNumberTableAttribute = asciizConstructUTF8("LineNumberTable"); - JavaAttribute::innerClassesAttribute = asciizConstructUTF8("InnerClasses"); - JavaAttribute::sourceFileAttribute = asciizConstructUTF8("SourceFile"); - JavaAttribute::signatureAttribute = asciizConstructUTF8("Signature"); - JavaAttribute::enclosingMethodAttribute = asciizConstructUTF8("EnclosingMethod"); - JavaAttribute::paramAnnotationsAttribute = asciizConstructUTF8("RuntimeVisibleParameterAnnotations"); - JavaAttribute::annotationDefaultAttribute = asciizConstructUTF8("AnnotationDefault"); + Attribut::codeAttribut = asciizConstructUTF8("Code"); + Attribut::exceptionsAttribut = asciizConstructUTF8("Exceptions"); + Attribut::constantAttribut = asciizConstructUTF8("ConstantValue"); + Attribut::lineNumberTableAttribut = asciizConstructUTF8("LineNumberTable"); + Attribut::innerClassesAttribut = asciizConstructUTF8("InnerClasses"); + Attribut::sourceFileAttribut = asciizConstructUTF8("SourceFile"); + Attribut::signatureAttribut = asciizConstructUTF8("Signature"); + Attribut::enclosingMethodAttribut = asciizConstructUTF8("EnclosingMethod"); + Attribut::paramAnnotationsAttribut = asciizConstructUTF8("RuntimeVisibleParameterAnnotations"); + Attribut::annotationDefaultAttribut = asciizConstructUTF8("AnnotationDefault"); JavaCompiler::InlinePragma = asciizConstructUTF8("Lorg/vmmagic/pragma/Inline;"); @@ -173,7 +172,6 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad VMDoubleName = asciizConstructUTF8("java/lang/VMDouble"); stackWalkerName = asciizConstructUTF8("gnu/classpath/VMStackWalker"); NoClassDefFoundError = asciizConstructUTF8("java/lang/NoClassDefFoundError"); - org_osgi_framework_BundleContext = asciizConstructUTF8("Lorg/osgi/framework/BundleContext;"); #define DEF_UTF8(var) \ var = asciizConstructUTF8(#var) @@ -206,20 +204,14 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad DEF_UTF8(doubleToRawLongBits); DEF_UTF8(intBitsToFloat); DEF_UTF8(longBitsToDouble); - DEF_UTF8(stop); #undef DEF_UTF8 } -JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : - isolateID(0), allocator(Alloc) -{ -} - JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, JavaObject* loader, VMClassLoader* vmdata, - Jnjvm* VM) : isolateID(0), allocator(Alloc) { + Jnjvm* I) : allocator(Alloc) { llvm_gcroot(loader, 0); llvm_gcroot(vmdata, 0); bootstrapLoader = JCL.bootstrapLoader; @@ -234,22 +226,13 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit vmdata->JCL = this; vmkit::Collector::objectReferenceNonHeapWriteBarrier( (gc**)&javaLoader, (gc*)loader); - vm = VM; + isolate = I; JavaMethod* meth = bootstrapLoader->upcalls->loadInClassLoader; loadClassMethod = JavaObject::getClass(loader)->asClass()->lookupMethodDontThrow( meth->name, meth->type, false, true, &loadClass); assert(loadClass && "Loader does not have a loadClass function"); - - if (VM->appClassLoader != NULL) { // Is the system class loader already set up? - isolate_id_t oldIsolateID = 0; - VM->allocateNextFreeIsolateID(this, &isolateID); - - oldIsolateID = j3SetIsolate(isolateID, NULL); - VM->loadIsolate(this); - j3SetIsolate(oldIsolateID, NULL); - } } void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) { @@ -347,9 +330,9 @@ UserClass* JnjvmClassLoader::internalLoa if (!cl) { UserClass* forCtp = loadClass; if (strName == NULL) { - strName = JavaString::internalToJava(name, vm); + strName = JavaString::internalToJava(name, isolate); } - obj = loadClassMethod->invokeJavaObjectVirtual(vm, forCtp, javaLoader, + obj = loadClassMethod->invokeJavaObjectVirtual(isolate, forCtp, javaLoader, &strName); cl = JavaObjectClass::getClass(((JavaObjectClass*)obj)); } @@ -854,9 +837,8 @@ const UTF8* JnjvmClassLoader::readerCons JnjvmClassLoader::~JnjvmClassLoader() { - if (vm) { - vm->removeFrameInfos(TheCompiler); - vm->freeIsolateID(isolateID); + if (isolate) { + isolate->removeFrameInfos(TheCompiler); } if (classes) { @@ -897,7 +879,7 @@ JnjvmBootstrapLoader::~JnjvmBootstrapLoa JavaString** JnjvmClassLoader::UTF8ToStr(const UTF8* val) { JavaString* res = NULL; llvm_gcroot(res, 0); - res = vm->internalUTF8ToStr(val); + res = isolate->internalUTF8ToStr(val); return strings->addString(this, res); } Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:49:31 2013 @@ -57,14 +57,12 @@ private: /// isolate - Which isolate defined me? Null for the bootstrap class loader. /// - Jnjvm* vm; - isolate_id_t isolateID; + Jnjvm* isolate; /// javaLoder - The Java representation of the class loader. Null for the /// bootstrap class loader. /// JavaObject* javaLoader; -// JavaObject* javaLoader[NR_ISOLATES]; /// internalLoad - Load the class with the given name. /// @@ -80,7 +78,7 @@ private: /// first use of a Java class loader. /// JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL, - JavaObject* loader, VMClassLoader* vmdata, Jnjvm* VM); + JavaObject* loader, VMClassLoader* vmdata, Jnjvm* isolate); /// lookupComponentName - Try to find the component name of the given array /// name. If the component name is not in the table of UTF8s and holder @@ -94,7 +92,7 @@ private: void ensureCached(UserCommonClass* cl); protected: - JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc); + JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) : allocator(Alloc) {} /// TheCompiler - The Java compiler for this class loader. /// @@ -132,7 +130,9 @@ public: /// vmkit::BumpPtrAllocator& allocator; - isolate_id_t getIsolateID() const {return isolateID;} + /// getIsolate - Returns the isolate that created this class loader. + /// + Jnjvm* getIsolate() const { return isolate; } /// getClasses - Returns the classes this class loader has loaded. /// @@ -387,7 +387,6 @@ public: Classpath* upcalls; /// Lists of UTF8s used internaly in VMKit. - const UTF8* org_osgi_framework_BundleContext; const UTF8* NoClassDefFoundError; const UTF8* initName; const UTF8* clinitName; @@ -428,7 +427,6 @@ public: const UTF8* doubleToRawLongBits; const UTF8* intBitsToFloat; const UTF8* longBitsToDouble; - const UTF8* stop; /// primitiveMap - Map of primitive classes, hashed by id. std::map primitiveMap; Modified: vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmConfig.h Thu Apr 25 11:49:31 2013 @@ -28,6 +28,6 @@ class JavaConstantPool; } #define ISOLATE_STATIC static -#define NR_ISOLATES 256 +#define NR_ISOLATES 1 #endif // JNJVM_CONFIG_H Removed: vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp?rev=180291&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.cpp (removed) @@ -1,196 +0,0 @@ - -#include "JnjvmIsolate.h" - -using namespace j3; - - -extern "C" jint Java_ijvm_isolate_vm_IJVM_getObjectIsolateID(JavaObject* object) -{ - llvm_gcroot(object, 0); - const UserCommonClass* ccl = JavaObject::getClass(object); - isolate_id_t isolateID = ccl->classLoader->getIsolateID(); - return isolateID; -} - -extern "C" void Java_ijvm_isolate_vm_IJVM_disableIsolates(ArrayLong *isolateID, jboolean denyIsolateExecution, jboolean resetIsolateReferences) -{ - size_t isolateCount = ArrayLong::getSize(isolateID); - isolate_id_t* list = new isolate_id_t[isolateCount]; - - for (size_t i=0; i < isolateCount; ++i) - list[i] = (isolate_id_t)ArrayLong::getElement(isolateID, i); - - ((Jnjvm*)vmkit::Thread::get()->MyVM)->disableIsolates(list, isolateCount, denyIsolateExecution, resetIsolateReferences); - - delete [] list; -} - -void Jnjvm::disableIsolates(isolate_id_t* isolateID, size_t isolateCount, bool denyIsolateExecution, bool resetIsolateReferences) -{ - if (!isolateID || !isolateCount || (!denyIsolateExecution && !resetIsolateReferences)) return; // Nothing to do - - for (size_t i=0; i < isolateCount; ++i) { - if (isolateID[i] == 0) - illegalArgumentException("isolateID must not be zero"); - } - - { - vmkit::LockGuard lg(IsolateLock); - for (size_t i=0; i < isolateCount; ++i) { - RunningIsolates[isolateID[i]].state |= - (resetIsolateReferences ? IsolateResetReferences : 0) | - (denyIsolateExecution ? IsolateDenyExecution : 0); - } - } - - vmkit::Collector::collect(); -} - -void Jnjvm::collectIsolates() -{ -// vmkit::LockGuard lg(IsolateLock); - for (isolate_id_t isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) - collectIsolate(isolateID); -} - -void Jnjvm::collectIsolate(isolate_id_t isolateID) -{ - if (!(RunningIsolates[isolateID].state & IsolateDenyExecution)) return; - - // Deny current isolate execution in running threads - vmkit::Thread *thisThread = vmkit::Thread::get(); - for (vmkit::Thread* th = (vmkit::Thread*)thisThread->next(); th != thisThread; th = (vmkit::Thread*)th->next()) - denyIsolateExecutionInThread(isolateID, *(JavaThread*)th); - - // Deny future isolate execution - ClassMap* classes = RunningIsolates[isolateID].loader->getClasses(); -// classes->lock.lock(); - for (ClassMap::iterator cl = classes->map.begin(), clEnd = classes->map.end(); cl != clEnd; ++cl) - denyClassExecution(isolateID, *cl->second); -// classes->lock.unlock(); - - invalidateAllClassesInIsolate(isolateID); -} - -void Jnjvm::printCallStack(const vmkit::StackWalker& walker) -{ - vmkit::FrameInfo* FI = NULL; - JavaThread* thread = (JavaThread*)walker.getScannedThread(); - - std::cerr << '[' << *thread << "] Call stack trace from call frame=" << walker.getCallFrame() << std::endl; - for (vmkit::StackWalker w(walker); (FI = w.get()) != NULL; ++w) - this->printMethod(FI, w.getReturnAddress(), w.getCallFrame()); - std::cerr << std::endl; -} - -void Jnjvm::loadIsolate(JnjvmClassLoader *loader) -{ - JavaObject* obj = NULL; - JavaObject* javaLoader = NULL; - llvm_gcroot(obj, 0); - llvm_gcroot(javaLoader, 0); - - assert((bootstrapLoader->upcalls->newString != NULL) && "bootstrap class loader not initialized"); - -#define LOAD_CLASS(cl) \ - cl->resolveClass(); \ - cl->initialiseClass(this); - - LOAD_CLASS(upcalls->newString); - - // The initialization code of the classes initialized below may require - // to get the Java thread, so we create the Java thread object first. - LOAD_CLASS(upcalls->newThread); - LOAD_CLASS(upcalls->newVMThread); - LOAD_CLASS(upcalls->threadGroup); - - LOAD_CLASS(upcalls->newClass); - LOAD_CLASS(upcalls->newConstructor); - LOAD_CLASS(upcalls->newField); - LOAD_CLASS(upcalls->newMethod); - LOAD_CLASS(upcalls->newStackTraceElement); - LOAD_CLASS(upcalls->boolClass); - LOAD_CLASS(upcalls->byteClass); - LOAD_CLASS(upcalls->charClass); - LOAD_CLASS(upcalls->shortClass); - LOAD_CLASS(upcalls->intClass); - LOAD_CLASS(upcalls->longClass); - LOAD_CLASS(upcalls->floatClass); - LOAD_CLASS(upcalls->doubleClass); - LOAD_CLASS(upcalls->InvocationTargetException); - LOAD_CLASS(upcalls->ArrayStoreException); - LOAD_CLASS(upcalls->ClassCastException); - LOAD_CLASS(upcalls->IllegalMonitorStateException); - LOAD_CLASS(upcalls->IllegalArgumentException); - LOAD_CLASS(upcalls->InterruptedException); - LOAD_CLASS(upcalls->IndexOutOfBoundsException); - LOAD_CLASS(upcalls->ArrayIndexOutOfBoundsException); - LOAD_CLASS(upcalls->NegativeArraySizeException); - LOAD_CLASS(upcalls->NullPointerException); - LOAD_CLASS(upcalls->SecurityException); - LOAD_CLASS(upcalls->ClassFormatError); - LOAD_CLASS(upcalls->ClassCircularityError); - LOAD_CLASS(upcalls->NoClassDefFoundError); - LOAD_CLASS(upcalls->UnsupportedClassVersionError); - LOAD_CLASS(upcalls->NoSuchFieldError); - LOAD_CLASS(upcalls->NoSuchMethodError); - LOAD_CLASS(upcalls->InstantiationError); - LOAD_CLASS(upcalls->IllegalAccessError); - LOAD_CLASS(upcalls->IllegalAccessException); - LOAD_CLASS(upcalls->VerifyError); - LOAD_CLASS(upcalls->ExceptionInInitializerError); - LOAD_CLASS(upcalls->LinkageError); - LOAD_CLASS(upcalls->AbstractMethodError); - LOAD_CLASS(upcalls->UnsatisfiedLinkError); - LOAD_CLASS(upcalls->InternalError); - LOAD_CLASS(upcalls->OutOfMemoryError); - LOAD_CLASS(upcalls->StackOverflowError); - LOAD_CLASS(upcalls->UnknownError); - LOAD_CLASS(upcalls->ClassNotFoundException); - LOAD_CLASS(upcalls->ArithmeticException); - LOAD_CLASS(upcalls->InstantiationException); - LOAD_CLASS(upcalls->SystemClass); - LOAD_CLASS(upcalls->cloneableClass); - LOAD_CLASS(upcalls->CloneNotSupportedException); -#undef LOAD_CLASS - - // Implementation-specific end-of-bootstrap initialization - upcalls->InitializeSystem(this); - - obj = JavaThread::get()->currentThread(); - javaLoader = loader->getJavaClassLoader(); - upcalls->setContextClassLoader->invokeIntSpecial(this, upcalls->newThread, obj, &javaLoader); - - // load and initialize math since it is responsible for dlopen'ing - // libjavalang.so and we are optimizing some math operations - UserCommonClass* math = bootstrapLoader->loadName(bootstrapLoader->mathName, true, true, NULL); - math->asClass()->initialiseClass(this); -} - -int Jnjvm::allocateNextFreeIsolateID(JnjvmClassLoader* loader, isolate_id_t *isolateID) -{ - isolate_id_t i = 0; - { - vmkit::LockGuard lg(IsolateLock); - for (; (i < NR_ISOLATES) && (RunningIsolates[i].state != IsolateFree); ++i); - - if (i < NR_ISOLATES) { - RunningIsolates[i].state = IsolateRunning; - RunningIsolates[i].loader = loader; - - if (isolateID != NULL) *isolateID = i; - } - } - - assert((i < NR_ISOLATES) && "Not enough isolate slots"); - return (i < NR_ISOLATES) ? 0 : ENOENT; -} - -void Jnjvm::freeIsolateID(isolate_id_t isolateID) -{ - vmkit::LockGuard lg(IsolateLock); - RunningIsolates[isolateID].state = IsolateFree; - RunningIsolates[isolateID].loader = NULL; - - std::cout << "Isolate " << isolateID << " unloaded from memory." << std::endl; -} Removed: vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h?rev=180291&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolate.h (removed) @@ -1,32 +0,0 @@ - -#include -#include -#include - -#include "VmkitGC.h" -#include "Jnjvm.h" -#include "JavaClass.h" -#include "JavaUpcalls.h" -#include "VMStaticInstance.h" -#include "j3/JavaJITCompiler.h" -#include "j3/jni.h" - - -extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); - -extern "C" void CalledStoppedIsolateMethod(void* methodIP) __attribute__((noinline)); -extern "C" void ReturnedToStoppedIsolateMethod(void* methodIP) __attribute__((noinline)); - -extern "C" void StoppedIsolate_Redirect_ReturnToDeadMethod() __attribute__((naked, noreturn, noinline)); - -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod() __attribute__((naked, noreturn, noinline)); -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_End() __attribute__((naked, noreturn, noinline)); - -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop() __attribute__((naked, noreturn, noinline)); -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End() __attribute__((naked, noreturn, noinline)); - -#define StoppedIsolate_Redirect_CallToDeadMethod_CodeSize \ - ((size_t)((intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_End - (intptr_t)StoppedIsolate_Redirect_CallToDeadMethod)) - -#define StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_CodeSize \ - ((size_t)((intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End - (intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop)) Removed: vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp?rev=180291&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolateRef.cpp (removed) @@ -1,37 +0,0 @@ - -#include "JnjvmIsolate.h" - -using namespace j3; - - -bool Jnjvm::resetDeadIsolateReference(void* source, void** ptr) -{ - // Don't touch fake Java objects that exist only as bridges between the - // Java object model and the C++ object model. - if (!ptr || !(*ptr) // NULL reference or NULL object - || VMClassLoader::isVMClassLoader(*(JavaObject**)ptr) - || VMStaticInstance::isVMStaticInstance(*(JavaObject**)ptr)) - return false; - - CommonClass* ccl = JavaObject::getClass(*((JavaObject**)ptr)); - isolate_id_t isolateID = ccl->classLoader->getIsolateID(); - - // vmkit::LockGuard lg(IsolateLock); - if (!(RunningIsolates[isolateID].state & IsolateResetReferences)) - return false; // Isolate not marked for resetting references - - std::cout << "Resetting @reference=" << ptr << " @oldObject=" << *ptr << - " class=" << *ccl->name << " isolateID=" << isolateID; - - if (source) { - CommonClass* sccl = JavaObject::getClass(((JavaObject*)source)); - isolate_id_t sourceIsolateID = sccl->classLoader->getIsolateID(); - - std::cout << " fromClass=" << *sccl->name << " fromIsolateID=" << sourceIsolateID; - } - - std::cout << std::endl; - - *ptr = NULL; // Reset the reference - return true; -} Removed: vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp?rev=180291&view=auto ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JnjvmIsolateTerm.cpp (removed) @@ -1,505 +0,0 @@ - -#include "JnjvmIsolate.h" - -using namespace j3; - - -void Jnjvm::invalidateAllClassesInIsolate(isolate_id_t isolateID) -{ - // Mark all classes as invalid in the given isolate - ClassMap* classes = RunningIsolates[isolateID].loader->getClasses(); -// classes->lock.lock(); - - for (isolate_id_t runningIsolateID = 0; runningIsolateID < NR_ISOLATES; ++runningIsolateID) { - if (RunningIsolates[runningIsolateID].state == IsolateFree) continue; - - classes = RunningIsolates[runningIsolateID].loader->getClasses(); - for (ClassMap::iterator cli = classes->map.begin(), cliEnd = classes->map.end(); cli != cliEnd; ++cli) { - if (!cli->second->isClass()) continue; - - Class *cl = cli->second->asClass(); - for (isolate_id_t deniedIsolateID = 0; deniedIsolateID < NR_ISOLATES; ++deniedIsolateID) { - if (!(RunningIsolates[deniedIsolateID].state & IsolateDenyExecution)) continue; - - TaskClassMirror& tcm = cl->getTaskClassMirror(deniedIsolateID); - tcm.initialized = false; - tcm.status = loaded; - } - } - } -// classes->lock.unlock(); -} - -void Jnjvm::denyIsolateExecutionInThread(isolate_id_t isolateID, JavaThread& thread) -{ - if (!thread.isVmkitThread()) return; // This is not a Java thread - - removeExceptionHandlersInThread(isolateID, thread); - - // We look at every pair of methods (native and Java methods). - vmkit::StackWalker CallerWalker(&thread); - - if (!CallerWalker.isValid()) - return; // No methods (native/Java) to inspect in this stack - - vmkit::StackWalker CalledWalker(CallerWalker); - ++CallerWalker; - - if (!CallerWalker.isValid()) return; // One frame in the stack (is this normal? possible?) - - // Loop over pairs of method frames (caller/called) in the stack - for (vmkit::StackWalkerState state = vmkit::StackWalkerInvalid; - (state = CallerWalker.getState()) >= vmkit::StackWalkerValid; - CalledWalker = CallerWalker, ++CallerWalker) - { - if (state != vmkit::StackWalkerValidMetadata) - continue; // The caller method is not a Java method - - const vmkit::FrameInfo* CallerFrame = CallerWalker.get(); - if (isolateID != getFrameIsolateID(*CallerFrame)) - continue; // The caller method does not belong to the terminating isolate - - // The caller method is a Java method belonging to the terminating isolate. - vmkit::StackWalker LastJavaCallerWalker(CallerWalker); - - // Look for the next Java methods. - CallerWalker.reportOnlyMetadataEnabledFrames(true); - for (++CallerWalker; ; LastJavaCallerWalker = CallerWalker, ++CallerWalker) { - if ((state = CallerWalker.getState()) == vmkit::StackWalkerInvalid) { - // No Java methods calling this method, only native methods. - CallerWalker = LastJavaCallerWalker; - break; - } - - // We found a Java caller method - CallerFrame = CallerWalker.get(); - if (isolateID != getFrameIsolateID(*CallerFrame)) { - // The Java caller method does not belong to the terminating isolate. - // Make CallerWalker point at the last frame before that foreign Java method frame. - vmkit::StackWalker ForeignCaller(CallerWalker); - CallerWalker = LastJavaCallerWalker; - CallerWalker.reportOnlyMetadataEnabledFrames(false); - - for (++CallerWalker; - CallerWalker != ForeignCaller; - LastJavaCallerWalker = CallerWalker, ++CallerWalker); - - CallerWalker = LastJavaCallerWalker; - break; - } - - // We found another Java caller method belonging to the terminating isolate. - // Continue scanning... - } - CallerWalker.reportOnlyMetadataEnabledFrames(false); - - // CalledWalker : called frame, native or NOT belonging to the terminating isolate. - // (CalledWalker + 1)...CallerWalker: caller frames, native or belonging to the terminating isolate. - denyIsolateExecutionInMethodFrame(CallerWalker, CalledWalker); - - // We are sure that the next method frame is either native or a Java method frame - // not belonging to the terminating isolate. - ++CallerWalker; - } - - // If the thread was running code in the isolate to kill, set its current isolate ID - // to the dead isolate ID, it should throw an exception as soon as it accesses isolate ID - if (thread.getIsolateID() == isolateID) - thread.markRunningDeadIsolate(); -} - -isolate_id_t Jnjvm::getFrameIsolateID(const vmkit::FrameInfo& frame) const -{ - assert(frame.Metadata && "Method frame has no metadata."); - return getFrameIsolateID(*(const JavaMethod*)frame.Metadata); -} - -isolate_id_t Jnjvm::getFrameIsolateID(const JavaMethod& method) const -{ - const JnjvmClassLoader* loader = method.classDef->classLoader; - return (loader == loader->bootstrapLoader) ? 0 : loader->getIsolateID(); -} - -void Jnjvm::denyIsolateExecutionInMethodFrame(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker) -{ - denyMethodExecution(CallerWalker, CalledWalker); - - // Patch the return address of the given method frame in order to return to the address of - // StoppedIsolate_RedirectMethodCodeToException when it executes the ret instruction. - vmkit::StackWalker walker(CalledWalker); - ++walker; - walker.updateReturnAddress((void*)(intptr_t)(&StoppedIsolate_Redirect_ReturnToDeadMethod)); - - // Patch the thread stack frames to exclude the given method frames, so that further scanning of the stack does - // not reveal those method frames. - walker.updateCallerFrameAddress(CallerWalker.getCallerCallFrame()); -} - -void Jnjvm::redirectMethodProlog(void* methodAddress, void* redirectCode, size_t codeSize) -{ - llvm::sys::MemoryBlock methodProlog(methodAddress, codeSize); - llvm::sys::Memory::setWritable(methodProlog); - - memcpy(methodAddress, redirectCode, codeSize); - - llvm::sys::Memory::InvalidateInstructionCache(methodAddress, codeSize); -} - -void Jnjvm::removeExceptionHandlersInThread(isolate_id_t isolateID, JavaThread& thread) -{ - // Remove all exception handlers which run in the given isolate. - // These exception handlers might exist in a method that was loaded by the isolate class loader itself, - // and might be a method that does not modify the current isolate ID (e.g. a Java runtime method) and - // which consequently run in the isolate of its caller. - - vmkit::ExceptionBuffer *CurExceptBuffer, *CalledExceptBuffer = NULL; - for (CurExceptBuffer = thread.lastExceptionBuffer; - CurExceptBuffer != NULL; - CurExceptBuffer = CurExceptBuffer->getPrevious()) - { - if (isolateID != CurExceptBuffer->getHandlerIsolateID()) { - CalledExceptBuffer = CurExceptBuffer; - continue; - } - - if (JavaMethod* method = (JavaMethod*)thread.MyVM->IPToFrameInfo(CurExceptBuffer->getHandlerMethod())->Metadata) { - std::cout << '[' << thread << "] Disabling exception handler inside method=" << - *method->classDef->name << '.' << *method->name << - " in isolateID=" << getFrameIsolateID(*method) << std::endl; - } - - // Skip the exception buffer - if (!CalledExceptBuffer) - thread.lastExceptionBuffer = CurExceptBuffer->getPrevious(); - else - CalledExceptBuffer->setPrevious(CurExceptBuffer->getPrevious()); - } -} -/* -void Jnjvm::removeExceptionHandlersInMethodFrames(JavaThread& thread, const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker) -{ - // Remove all exception handlers in the given methods - vmkit::ExceptionBuffer *CurExceptBuffer, *CalledExceptBuffer = NULL; - bool MoreFramesToCheck = true, skippedExceptHandler = false; - vmkit::StackWalker CalledMarkerWalker(CalledWalker); - ++CalledMarkerWalker; // Skip the called method - - for (CurExceptBuffer = thread.lastExceptionBuffer; - CurExceptBuffer != NULL; - CalledExceptBuffer = skippedExceptHandler ? CalledExceptBuffer : CurExceptBuffer, - CurExceptBuffer = CurExceptBuffer->getPrevious()) - { - vmkit::FrameInfo* ExceptHandlerMethodFrame; - JavaMethod* ExceptHandlerMethodInfo; - vmkit::StackWalker walker(CalledMarkerWalker); - skippedExceptHandler = false; - - void* ExceptHandlerMethodAddr = CurExceptBuffer->getHandlerMethod(); - if (!ExceptHandlerMethodAddr) continue; - - ExceptHandlerMethodFrame = thread.MyVM->IPToFrameInfo(ExceptHandlerMethodAddr); - if (!ExceptHandlerMethodFrame) continue; - - ExceptHandlerMethodInfo = (JavaMethod*)ExceptHandlerMethodFrame->Metadata; - if (!ExceptHandlerMethodInfo) continue; - - walker.reportOnlyMetadataEnabledFrames(false); - - for (bool inLastCaller = false; !inLastCaller; ++walker) { - inLastCaller = (walker == CallerWalker); - - vmkit::FrameInfo* DeadMethodFrame = walker.get(); - if (!DeadMethodFrame) continue; - - JavaMethod* DeadMethodInfo = (JavaMethod*)DeadMethodFrame->Metadata; - if (!DeadMethodInfo) continue; - if (DeadMethodInfo != ExceptHandlerMethodInfo) continue; - - std::cout << '[' << thread << "] Disabling exception handler inside method=" << - *DeadMethodInfo->classDef->name << '.' << *DeadMethodInfo->name << - " in isolateID=" << getFrameIsolateID(*DeadMethodInfo) << std::endl; - - // Skip the exception buffer - if (!CalledExceptBuffer) - thread.lastExceptionBuffer = CurExceptBuffer->getPrevious(); - else - CalledExceptBuffer->setPrevious(CurExceptBuffer->getPrevious()); - - // This called method frame exception buffer is now skipped, don't check it again. - CalledMarkerWalker = walker; - ++CalledMarkerWalker; - - skippedExceptHandler = true; - MoreFramesToCheck = !inLastCaller; // Still have method frames to check? - break; - } - - if (!MoreFramesToCheck) - break; - } -} -*/ -void Jnjvm::denyMethodExecution(const vmkit::StackWalker& CallerWalker, vmkit::StackWalker& CalledWalker) -{ - vmkit::StackWalker walker(CalledWalker); - do { - ++walker; - if (walker.getState() < vmkit::StackWalkerValidMetadata) continue; - - denyMethodExecution(*((JavaMethod*)walker.get()->Metadata)); - } while (walker != CallerWalker); -} - -void Jnjvm::denyMethodExecution(JavaMethod& method) -{ - void *redirectCode; - size_t redirectCodeSize; - if (isActivatorStopMethod(method)) { - redirectCode = (void*)(intptr_t)StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop; - redirectCodeSize = StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_CodeSize; - } else { - redirectCode = (void*)(intptr_t)StoppedIsolate_Redirect_CallToDeadMethod; - redirectCodeSize = StoppedIsolate_Redirect_CallToDeadMethod_CodeSize; - } - - if (method.code == redirectCode) - return; // Already denied, nothing to do - - if (method.code != NULL) { // Method was generated, overwrite its prolog code in memory - std::cout << "Patching prolog of method[generated,non-custom]=" << - *method.classDef->name << '.' << *method.name << - " in isolateID=" << getFrameIsolateID(method) << std::endl; - - redirectMethodProlog(method.code, redirectCode, redirectCodeSize); - - method.code = redirectCode; // Make the function point to the redirection code. - return; - } - - if (!method.isCustomizable) { - std::cout << "Patching prolog of method[not-generated,non-custom]=" << - *method.classDef->name << '.' << *method.name << - " in isolateID=" << getFrameIsolateID(method) << std::endl; - - method.code = redirectCode; // Make the function point to the redirection code. - return; - } - - // NOTE: - // We must NOT generate code here, because we might cause a dead lock while trying to obtain - // the LLVM-IR lock via protectIR(). - - // Avoid any further customizations to this method - JavaJITCompiler* compiler = static_cast(method.classDef->classLoader->getCompiler()); - LLVMMethodInfo* methodInfo = compiler->getMethodInfo(&method); - - method.isCustomizable = false; - methodInfo->isCustomizable = false; - - // Patch all the customized versions of the method. - LLVMMethodInfo::customizedVersionsType* methodVersions = methodInfo->getCustomizedVersions(); - for (LLVMMethodInfo::customizedVersionsIterator methodCode = methodVersions->begin(), - methodCodeEnd = methodVersions->end(); - methodCode != methodCodeEnd; - ++methodCode) - { - std::cout << "Patching prolog of method[generated,custom]=" << - *method.classDef->name << '.' << *method.name << - " customizedFor=" << *methodCode->first->name << - " in isolateID=" << getFrameIsolateID(method) << std::endl; - - void *code = compiler->executionEngine->getPointerToGlobal(methodCode->second); - redirectMethodProlog(code, redirectCode, redirectCodeSize); - } - - method.code = redirectCode; // Make the function point to the redirection code. -} - -bool Jnjvm::isActivatorStopMethod(JavaMethod& method) const -{ - /* - WARNING: We have made enough checks to be sure this method is: - public void stop(BundleContext bundleContext) throws Exception - - However, we must also check that the class of this method is the Activator of the bundle. - This would require calling org.osgi.framework.Bundle.getHeaders() and finding the - "Bundle-Activator" meta-data to compare it with method.classDef. - */ - if (!isPublic(method.access) || isStatic(method.access)) return false; - - const Signdef* sign = method.getSignature(); - if ((sign->nbArguments != 1) || !sign->getReturnType()->isVoid()) return false; - - JnjvmBootstrapLoader* bootstrapLoader = method.classDef->classLoader->bootstrapLoader; - return method.name->equals(bootstrapLoader->stop) - && (**sign->getArgumentsType()).keyName->equals(bootstrapLoader->org_osgi_framework_BundleContext); -} - -void Jnjvm::denyClassExecution(isolate_id_t isolateID, CommonClass& ccl) -{ - if ((ccl.classLoader->getIsolateID() != isolateID) - || ccl.isPrimitive() || ccl.isArray() || ccl.isInterface()) - return; - - if (ccl.super) - denyClassExecution(isolateID, *ccl.super); // Deny the super class, if any - - Class& cl = *ccl.asClass(); - for (size_t i=0; i < cl.nbInnerClasses; ++i) - denyClassExecution(isolateID, *cl.innerClasses[i]); // Deny inner classes, if any - - std::cout << "Denying class execution: " << *cl.name << std::endl; - - for (size_t i=0; i < cl.nbStaticMethods; ++i) - denyMethodExecution(cl.staticMethods[i]); // Deny static class methods - - for (size_t i=0; i < cl.nbVirtualMethods; ++i) - denyMethodExecution(cl.virtualMethods[i]); // Deny virtual object methods -} - -extern "C" void CalledStoppedIsolateMethod(void* methodIP) -{ - JavaThread *thread = JavaThread::get(); - JavaMethod* method = NULL; - thread->cleanUpOnDeadIsolateBeforeException(&methodIP, &method); - - if (method) { - std::cout << '[' << *thread << "] DeadIsolateException(ReturnedToStoppedIsolateMethod) in method=" << - *method->classDef->name << '.' << *method->name << std::endl; - } - - thread->MyVM->deadIsolateException(methodIP); - UNREACHABLE(); -} - -extern "C" void ReturnedToStoppedIsolateMethod(void* methodIP) -{ - JavaThread *thread = JavaThread::get(); - JavaMethod* method = NULL; - thread->cleanUpOnDeadIsolateBeforeException(&methodIP, &method); - - if (method) { - std::cout << '[' << *thread << "] DeadIsolateException(ReturnedToStoppedIsolateMethod) in method=" << - *method->classDef->name << '.' << *method->name << std::endl; - } - - thread->MyVM->deadIsolateException(methodIP); - UNREACHABLE(); -} - -void Jnjvm::deadIsolateException(void* methodIP, bool immediate) -{ - //error(upcalls->DeadIsolateException, upcalls->InitDeadIsolateException, str, immediate); - error( - upcalls->InterruptedException, upcalls->InitInterruptedException, - "Called method is implemented by a bundle that was stopped.", - immediate); -} - -#if defined(ARCH_X86) && defined(LINUX_OS) - -/* -This code treats the case where M0 calls M1 which calls M2 (Mi are Java methods) where: -- M1 belongs to the terminating isolate, and -- M0 and M2 do not. - -M2 will continue running as expected. But when it returns, instead of jumping to M1, it comes here. -In fact, M2 should have its on-stack return address patched to jump here. -So, this code will run in the stack frame of M1. This code will adjust the stack frame of M1 then -simulate a call to throw an exception. The adjustment made will make it seem as if M0 thrown the -exception directly. - -In short, this code transforms: M0 > M1 > M2 - into: M0 > throw exception - -NOTICE: -* The exception thrower function should never return to its caller, except to exception handlers. -* This code supposes that the calling convention of LLVM-generated code is cdecl. The stdcall calling - convention requires the called method to know the number of parameters it receives and to pop them - out on return (instruction: ret N), this would prohibit us from writing a generic code to patch the - stack, and would require dynamic code generation, or another way of doing things... -* This code must be position-independent because it might be copied elsewhere, so no relative - offsets should be generated. Careful choosing instructions. -*/ - -extern "C" void StoppedIsolate_Redirect_ReturnToDeadMethod() -{ - asm volatile ( - "mov %ebp, %esp \n" // Free all locals - "pop %ebp \n" // caller EBP ==> EBP - "push (%esp) \n" // Arg0 = ReturnAddress - // Copy the full function address into the register to avoid generating an offset-based call instruction. - "mov $ReturnedToStoppedIsolateMethod, %eax \n" - "jmp %eax \n" // simulate a call from caller - ); -} - -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod() -{ - asm volatile ( - "push (%esp) \n" // Arg0 = ReturnAddress - // Copy the full function address into the register to avoid generating an offset-based call instruction. - "mov $CalledStoppedIsolateMethod, %eax \n" - "jmp %eax \n" // simulate a call from caller - "StoppedIsolate_Redirect_CallToDeadMethod_End: \n" // Mark the end of code - - ".globl StoppedIsolate_Redirect_CallToDeadMethod_End \n" // Reserve space for the label address - ); -} - -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop() -{ - asm volatile ( - "ret \n" // Return directly to the caller - "StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End: \n"// Mark the end of code - - ".globl StoppedIsolate_Redirect_CallToDeadMethod_ActivatorStop_End \n"// Reserve space for the label address - ); -} - -/* -// NOTE: This works more correctly than __builtin_frame_address because this does NOT require stack frame to be setup. -extern "C" void* StoppedIsolate_GetEIP() -{ - asm volatile ( - "mov (%esp), %eax \n" - "ret \n" - ); -} - -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod_Redirect() -{ - asm volatile ( - "sub $StoppedIsolate_Redirect_CallToDeadMethod_Code, %eax \n" - "add $StoppedIsolate_Redirect_CallToDeadMethod_Data, %eax \n" - "mov (%eax), %eax \n" - - "push %ebp \n" - "push %eax \n" - "mov $CalledStoppedIsolateMethod, %eax \n" - "call %eax \n" - ); -} - -extern "C" void StoppedIsolate_Redirect_CallToDeadMethod() -{ - asm volatile ( - "mov $StoppedIsolate_GetEIP, %eax \n" - "call %eax \n" - - "StoppedIsolate_Redirect_CallToDeadMethod_Code: \n" - "mov $StoppedIsolate_Redirect_CallToDeadMethod_Redirect, %ebx \n" - "jmp %ebx \n" - - "StoppedIsolate_Redirect_CallToDeadMethod_Data: \n" - ".fill 4 \n"// Enough to store a (void*) - "StoppedIsolate_Redirect_CallToDeadMethod_End: \n" - - ".globl StoppedIsolate_Redirect_CallToDeadMethod_End \n" - ); -} -*/ - -#else -#error "Sorry. Only Linux x86 is currently supported." -#endif Modified: vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h (original) +++ vmkit/trunk/lib/j3/VMCore/LinkJavaRuntime.h Thu Apr 25 11:49:31 2013 @@ -29,14 +29,6 @@ namespace vmkit { using namespace j3; -extern "C" uint32_t j3SetIsolate(uint32_t isolateID, uint32_t* currentIsolateID); -extern "C" void* j3GetStaticInstance(UserClass* cl); -extern "C" void* j3GetCachedValue(UserClass* cl, uint32 index, isolate_id_t isolateID); -extern "C" JavaObject** j3GetClassDelegateePtr(UserCommonClass* commonCl); -extern "C" JavaObject* j3GetClassDelegatee(UserCommonClass* commonCl); -extern "C" UserClass* j3InitialisationCheck(UserClass* cl); -extern "C" UserClass* j3InitialisationCheckForJavaObject(JavaObject* obj); - extern "C" void* j3InterfaceLookup(UserClass* caller, uint32 index); extern "C" void* j3VirtualFieldLookup(UserClass* caller, uint32 index); extern "C" void* j3StaticFieldLookup(UserClass* caller, uint32 index); @@ -44,7 +36,6 @@ extern "C" void* j3VirtualTableLookup(Us extern "C" void* j3StringLookup(UserClass* cl, uint32 index); extern "C" void* j3ClassLookup(UserClass* caller, uint32 index); extern "C" UserCommonClass* j3RuntimeInitialiseClass(UserClass* cl); -extern "C" JavaObject** j3RuntimeDelegateePtr(UserCommonClass* cl); extern "C" JavaObject* j3RuntimeDelegatee(UserCommonClass* cl); extern "C" JavaArray* j3MultiCallNew(UserClassArray* cl, uint32 len, ...); extern "C" UserClassArray* j3GetArrayClass(UserCommonClass*, Modified: vmkit/trunk/lib/j3/VMCore/Reader.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Reader.h?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/Reader.h (original) +++ vmkit/trunk/lib/j3/VMCore/Reader.h Thu Apr 25 11:49:31 2013 @@ -44,7 +44,7 @@ public: uint32 cursor; uint32 max; - Reader(JavaAttribute* attr, ClassBytes* bytes) { + Reader(Attribut* attr, ClassBytes* bytes) { this->bytes = bytes; this->cursor = attr->start; this->min = attr->start; Modified: vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Thu Apr 25 11:49:31 2013 @@ -175,8 +175,8 @@ void CommonClass::tracer(word_t closure) } for (uint32 i = 0; i < NR_ISOLATES; ++i) { - if (getDelegatee(i) != NULL) { - vmkit::Collector::markAndTraceRoot(getDelegateePtr(i), closure); + if (delegatee[i] != NULL) { + vmkit::Collector::markAndTraceRoot(delegatee + i, closure); } } } @@ -184,12 +184,13 @@ void CommonClass::tracer(word_t closure) void Class::tracer(word_t closure) { CommonClass::tracer(closure); - for (uint32 isolateID = 0; isolateID < NR_ISOLATES; ++isolateID) { - if (getStaticInstance(isolateID) != NULL) { + for (uint32 i = 0; i < NR_ISOLATES; ++i) { + TaskClassMirror &M = IsolateInfo[i]; + if (M.staticInstance != NULL) { for (uint32 i = 0; i < nbStaticFields; ++i) { JavaField& field = staticFields[i]; if (field.isReference()) { - JavaObject** ptr = field.getStaticObjectFieldPtr(isolateID); + JavaObject** ptr = field.getStaticObjectFieldPtr(); vmkit::Collector::markAndTraceRoot(ptr, closure); } } Modified: vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/CollectionRV.cpp Thu Apr 25 11:49:31 2013 @@ -90,7 +90,7 @@ void CooperativeCollectionRV::join() { th->inRV = true; lockRV(); - th->setLastSP(StackWalker_getCallFrameAddress()); + th->setLastSP(System::GetCallerAddress()); th->joinedRV = true; another_mark(); waitEndOfRV(); @@ -98,8 +98,6 @@ void CooperativeCollectionRV::join() { unlockRV(); th->inRV = false; - - th->runAfterLeavingGarbageCollectorRendezVous(); } void CooperativeCollectionRV::joinBeforeUncooperative() { @@ -110,7 +108,6 @@ void CooperativeCollectionRV::joinBefore th->inRV = true; lockRV(); - bool wasInRV = th->doYield; if (th->doYield) { if (!th->joinedRV) { th->joinedRV = true; @@ -121,11 +118,9 @@ void CooperativeCollectionRV::joinBefore unlockRV(); th->inRV = false; - - if (wasInRV) th->runAfterLeavingGarbageCollectorRendezVous(); } -void CooperativeCollectionRV::joinAfterUncooperative(void* SP) { +void CooperativeCollectionRV::joinAfterUncooperative(word_t SP) { vmkit::Thread* th = vmkit::Thread::get(); assert((th->getLastSP() == 0) && "SP set after entering uncooperative code"); @@ -133,7 +128,6 @@ void CooperativeCollectionRV::joinAfterU th->inRV = true; lockRV(); - bool wasInRV = th->doYield; if (th->doYield) { th->setLastSP(SP); if (!th->joinedRV) { @@ -146,8 +140,6 @@ void CooperativeCollectionRV::joinAfterU unlockRV(); th->inRV = false; - - if (wasInRV) th->runAfterLeavingGarbageCollectorRendezVous(); } extern "C" void conditionalSafePoint() { Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:49:31 2013 @@ -394,7 +394,7 @@ FatLock* LockSystem::getFatLockFromID(wo bool LockingThread::wait( - gc* self, LockSystem& table, struct timeval* info, bool& timed) { + gc* self, LockSystem& table, struct timeval* info, bool timed) { llvm_gcroot(self, 0); assert(vmkit::ThinLock::owner(self, table)); @@ -450,7 +450,6 @@ bool LockingThread::wait( l->firstThread->nextWaiting)) && "Inconsistent list"); bool interrupted = (this->interruptFlag != 0); - timed = timeout; if (interrupted || timeout) { if (this->nextWaiting) { Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc (original) +++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv-linux-x86.inc Thu Apr 25 11:49:31 2013 @@ -39,8 +39,8 @@ void Handler::UpdateRegistersForNPE() { } void Handler::UpdateRegistersForStackOverflow() { - greg_t alt_stack = (greg_t)vmkit::Thread::get()->GetAlternativeStackStart(); - ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBX] = (greg_t)StackWalker::getReturnAddressFromCallFrame((void*)((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]); + word_t alt_stack = vmkit::Thread::get()->GetAlternativeStackStart(); + ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBX] = System::GetIPFromCallerAddress(((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]); ((ucontext_t*)context)->uc_mcontext.gregs[REG_EAX] = ((ucontext_t*)context)->uc_mcontext.gregs[REG_EBP]; ((ucontext_t*)context)->uc_mcontext.gregs[REG_ESP] = alt_stack; ((ucontext_t*)context)->uc_mcontext.gregs[REG_EIP] = (word_t)HandleStackOverflow; Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp Thu Apr 25 11:49:31 2013 @@ -52,7 +52,7 @@ bool System::SupportsHardwareStackOverfl } #endif -extern "C" void ThrowStackOverflowError(void* ip) { +extern "C" void ThrowStackOverflowError(word_t ip) { vmkit::Thread* th = vmkit::Thread::get(); vmkit::FrameInfo* FI = th->MyVM->IPToFrameInfo(ip); if (FI->Metadata == NULL) { @@ -65,15 +65,23 @@ extern "C" void ThrowStackOverflowError( UNREACHABLE(); } -extern "C" void ThrowNullPointerException(void* methodIP) -{ - vmkit::Thread::get()->throwNullPointerException(methodIP); +extern "C" void ThrowNullPointerException(word_t ip) { + vmkit::Thread* th = vmkit::Thread::get(); + vmkit::FrameInfo* FI = th->MyVM->IPToFrameInfo(ip); + if (FI->Metadata == NULL) { + fprintf(stderr, "Thread %p received a SIGSEGV: either the VM code or an external\n" + "native method is bogus. Aborting...\n", (void*)th); + abort(); + } else { + vmkit::Thread::get()->MyVM->nullPointerException(); + } + UNREACHABLE(); } void sigsegvHandler(int n, siginfo_t *info, void *context) { Handler handler(context); vmkit::Thread* th = vmkit::Thread::get(); - void* addr = (void*)info->si_addr; + word_t addr = (word_t)info->si_addr; if (th->IsStackOverflowAddr(addr)) { if (vmkit::System::SupportsHardwareStackOverflow()) { handler.UpdateRegistersForStackOverflow(); Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original) +++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 11:49:31 2013 @@ -16,7 +16,6 @@ #include "vmkit/Locks.h" #include "vmkit/Thread.h" -#include #include #include #include @@ -28,27 +27,6 @@ using namespace vmkit; -ExceptionBuffer::ExceptionBuffer() -{ - addToThreadExceptionList(0); - handlerIsolateID = Thread::get()->getIsolateID(); -} - -void ExceptionBuffer::addToThreadExceptionList(void* returnAddr) -{ - Thread* th = Thread::get(); - handlerMethod = returnAddr; - previousBuffer = th->lastExceptionBuffer; - th->lastExceptionBuffer = this; -} - -void ExceptionBuffer::removeFromThreadExceptionList() -{ - Thread* th = Thread::get(); - assert(th->lastExceptionBuffer == this && "Wrong exception buffer"); - th->lastExceptionBuffer = previousBuffer; -} - int Thread::kill(void* tid, int signo) { return pthread_kill((pthread_t)tid, signo); } @@ -75,13 +53,13 @@ void Thread::joinRVBeforeEnter() { MyVM->rendezvous.joinBeforeUncooperative(); } -void Thread::joinRVAfterLeave(void* savedSP) { +void Thread::joinRVAfterLeave(word_t savedSP) { MyVM->rendezvous.joinAfterUncooperative(savedSP); } void Thread::startKnownFrame(KnownFrame& F) { // Get the caller of this function - void* cur = StackWalker_getCallFrameAddress(); + word_t cur = System::GetCallerAddress(); F.previousFrame = lastKnownFrame; F.currentFP = cur; // This is used as a marker. @@ -96,12 +74,12 @@ void Thread::endKnownFrame() { void Thread::startUnknownFrame(KnownFrame& F) { // Get the caller of this function - void* cur = StackWalker_getCallFrameAddress(); + word_t cur = System::GetCallerAddress(); // Get the caller of the caller. - cur = StackWalker::getCallerCallFrameAddress(cur); + cur = System::GetCallerOfAddress(cur); F.previousFrame = lastKnownFrame; F.currentFP = cur; - F.currentIP = StackWalker::getReturnAddressFromCallFrame(cur); + F.currentIP = System::GetIPFromCallerAddress(cur); lastKnownFrame = &F; } @@ -111,23 +89,23 @@ void Thread::endUnknownFrame() { } void Thread::internalThrowException() { - LONGJMP(lastExceptionBuffer->getSetJmpBuffer(), 1); + LONGJMP(lastExceptionBuffer->buffer, 1); } void Thread::printBacktrace() { StackWalker Walker(this); while (FrameInfo* FI = Walker.get()) { - MyVM->printMethod(FI, Walker.getReturnAddress(), Walker.getCallFrame()); + MyVM->printMethod(FI, Walker.ip, Walker.addr); ++Walker; } } -void Thread::getFrameContext(void** buffer) { +void Thread::getFrameContext(word_t* buffer) { vmkit::StackWalker Walker(this); uint32_t i = 0; - while (void* ip = *Walker) { + while (word_t ip = *Walker) { buffer[i++] = ip; ++Walker; } @@ -144,185 +122,63 @@ uint32_t Thread::getFrameContextLength() return i; } -void* StackWalker::getCallerCallFrameAddress(void* callFrame) -{ - void **oldBasePtr = (void**)callFrame; - return *oldBasePtr; -} - -void** StackWalker::getReturnAddressPtrFromCallFrame(void* callFrame) -{ - void **oldBasePtr = (void**)callFrame; - -#if defined(MACOS_OS) && defined(ARCH_PPC) - return oldBasePtr + 2; -#else - return oldBasePtr + 1; -#endif -} - -void* StackWalker::getReturnAddressFromCallFrame(void* callFrame) -{ - return *getReturnAddressPtrFromCallFrame(callFrame); -} - FrameInfo* StackWalker::get() { - if (callFrame == thread->baseSP) return 0; - return thread->MyVM->IPToFrameInfo(getReturnAddress()); + if (addr == thread->baseSP) return 0; + ip = System::GetIPFromCallerAddress(addr); + return thread->MyVM->IPToFrameInfo(ip); } -StackWalkerState StackWalker::getState() const -{ - const FrameInfo *fi = this->get(); - if (!fi) return StackWalkerInvalid; - if (!fi->Metadata) return StackWalkerValid; - return StackWalkerValidMetadata; +word_t StackWalker::operator*() { + if (addr == thread->baseSP) return 0; + ip = System::GetIPFromCallerAddress(addr); + return ip; } -void* StackWalker::operator*() { - if (callFrame == thread->baseSP) return 0; - return getReturnAddress(); -} - -void* StackWalker::getCallerCallFrame() const -{ - StackWalker walker(*this); - ++walker; - return walker.getCallFrame(); +void StackWalker::operator++() { + if (addr != thread->baseSP) { + assert((addr < thread->baseSP) && "Corrupted stack"); + assert((addr < System::GetCallerOfAddress(addr)) && "Corrupted stack"); + if ((frame != NULL) && (addr == frame->currentFP)) { + assert(frame->currentIP == 0); + frame = frame->previousFrame; + assert(frame != NULL); + assert(frame->currentIP != 0); + addr = frame->currentFP; + frame = frame->previousFrame; + } else { + addr = System::GetCallerOfAddress(addr); + } + } } -void StackWalker::operator++() { - for (;;) { - if (callFrame != thread->baseSP) { - assert((callFrame < thread->baseSP) && "Corrupted stack"); - assert((callFrame < StackWalker::getCallerCallFrameAddress(callFrame)) && "Corrupted stack"); - if ((frame != NULL) && (callFrame == frame->currentFP)) { - assert(frame->currentIP == 0); - frame = frame->previousFrame; - assert(frame != NULL); - assert(frame->currentIP != 0); - callFrame = frame->currentFP; +StackWalker::StackWalker(vmkit::Thread* th) { + thread = th; + frame = th->lastKnownFrame; + if (vmkit::Thread::get() == th) { + addr = System::GetCallerAddress(); + addr = System::GetCallerOfAddress(addr); + } else { + addr = th->waitOnSP(); + if (frame) { + assert(frame->currentFP >= addr); + } + if (frame && (addr == frame->currentFP)) { + frame = frame->previousFrame; + // Let this be called from JNI, as in + // OpenJDK's JVM_FillInStackTrace: + if (frame && frame->currentIP != 0) frame = frame->previousFrame; - } else { - callFrame = StackWalker::getCallerCallFrameAddress(callFrame); - } + assert((frame == NULL) || (frame->currentIP == 0)); } - - if (!onlyReportMetadataEnabledFrames) break; - StackWalkerState state = getState(); - if (state == StackWalkerInvalid || state == StackWalkerValidMetadata) break; - } -} - -void StackWalker::operator--() -{ - // The call stack is a singly-linked list of call frames whose head is the last - // called method frame. This means that implementing this feature (getting the - // called frame of the current frame) requires rescanning the whole stack from the - // beginning (the last called frame), which can be slow in some cases. - - StackWalker caller(*this, true); - StackWalker called(caller); - ++caller; - - for (void* currentAddr = this->getCallFrame(); - (caller.get() != NULL) && (caller.getCallFrame() != currentAddr); - called = caller, ++caller); - - assert((caller.get() != NULL) && "Caller of the current frame not found!"); - *this = called; -} - -// This code must be a macro because it must be directly called -//from its caller, with not additional function frames in between. -#define StackWalker_reset() \ -{ \ - if (vmkit::Thread::get() == thread) { \ - callFrame = StackWalker_getCallFrameAddress(); \ - callFrame = StackWalker::getCallerCallFrameAddress(callFrame); \ - } else { \ - callFrame = thread->waitOnSP(); \ - if (frame) assert(frame->currentFP >= callFrame); \ - if (frame && (callFrame == frame->currentFP)) { \ - frame = frame->previousFrame; \ - if (frame && frame->currentIP != 0) \ - frame = frame->previousFrame; \ - assert((frame == NULL) || (frame->currentIP == 0)); \ - } \ - } \ - assert(callFrame && "No address to start with"); \ - if (onlyReportMetadataEnabledFrames) { \ - FrameInfo *fi = this->get(); \ - if ((fi != NULL) && !fi->Metadata) ++(*(this)); \ - } \ -} - -StackWalker::StackWalker(vmkit::Thread* th, bool only_report_metadata_enabled_frames) : - callFrame(0), frame(th->lastKnownFrame), thread(th), - onlyReportMetadataEnabledFrames(only_report_metadata_enabled_frames) -{ - StackWalker_reset(); -} - -StackWalker::StackWalker(const StackWalker& obj, bool reset) : - callFrame(obj.callFrame), frame(obj.frame), thread(obj.thread), - onlyReportMetadataEnabledFrames(obj.onlyReportMetadataEnabledFrames) -{ - if (!reset) return; - StackWalker_reset(); -} - -void StackWalker::reset() -{ - StackWalker_reset(); -} - -StackWalker& StackWalker::operator = (const StackWalker& obj) -{ - callFrame = obj.callFrame; - frame = obj.frame; - thread = obj.thread; - onlyReportMetadataEnabledFrames = obj.onlyReportMetadataEnabledFrames; - return *this; -} - -void* StackWalker::updateReturnAddress(void* newAddr) -{ - void** retAddrPtr = StackWalker::getReturnAddressPtrFromCallFrame(callFrame); - void* oldRetAddr = *retAddrPtr; - *retAddrPtr = newAddr; - return oldRetAddr; -} - -void* StackWalker::updateCallerFrameAddress(void* newAddr) -{ - void **oldBasePtr = (void**)callFrame; - void* oldOldBasePtr = *oldBasePtr; - - for (void* framePtr = callFrame; framePtr != newAddr; framePtr = StackWalker::getCallerCallFrameAddress(framePtr)) { - for (KnownFrame *kf = thread->lastKnownFrame, *pkf = NULL; kf != NULL; pkf = kf, kf = kf->previousFrame) { - if (kf->currentFP != framePtr) continue; - - if (!pkf) - thread->lastKnownFrame = kf->previousFrame; - else - pkf->previousFrame = kf->previousFrame; - } - } - - *oldBasePtr = newAddr; - return oldOldBasePtr; -} - -void StackWalker::dump() const -{ - thread->MyVM->printCallStack(*this); + } + assert(addr && "No address to start with"); } + void Thread::scanStack(word_t closure) { StackWalker Walker(this); while (FrameInfo* MI = Walker.get()) { - MethodInfoHelper::scan(closure, MI, Walker.getReturnAddress(), Walker.getCallFrame()); + MethodInfoHelper::scan(closure, MI, Walker.ip, Walker.addr); ++Walker; } } @@ -332,10 +188,10 @@ void Thread::enterUncooperativeCode(uint if (!inRV) { assert(!lastSP && "SP already set when entering uncooperative code"); // Get the caller. - void* temp = StackWalker_getCallFrameAddress(); + word_t temp = System::GetCallerAddress(); // Make sure to at least get the caller of the caller. ++level; - while (level--) temp = StackWalker::getCallerCallFrameAddress(temp); + while (level--) temp = System::GetCallerOfAddress(temp); // The cas is not necessary, but it does a memory barrier. __sync_bool_compare_and_swap(&lastSP, 0, temp); if (doYield) joinRVBeforeEnter(); @@ -344,7 +200,7 @@ void Thread::enterUncooperativeCode(uint } } -void Thread::enterUncooperativeCode(void* SP) { +void Thread::enterUncooperativeCode(word_t SP) { if (isVmkitThread()) { if (!inRV) { assert(!lastSP && "SP already set when entering uncooperative code"); @@ -360,7 +216,7 @@ void Thread::leaveUncooperativeCode() { if (isVmkitThread()) { if (!inRV) { assert(lastSP && "No last SP when leaving uncooperative code"); - void* savedSP = lastSP; + word_t savedSP = lastSP; // The cas is not necessary, but it does a memory barrier. __sync_bool_compare_and_swap(&lastSP, lastSP, 0); // A rendezvous has just been initiated, join it. @@ -370,9 +226,9 @@ void Thread::leaveUncooperativeCode() { } } -void* Thread::waitOnSP() { +word_t Thread::waitOnSP() { // First see if we can get lastSP directly. - void* sp = lastSP; + word_t sp = lastSP; if (sp) return sp; // Then loop a fixed number of iterations to get lastSP. @@ -466,14 +322,13 @@ public: StackThreadManager TheStackManager; extern void sigsegvHandler(int, siginfo_t*, void*); -//extern void interruptSignalHandler(int signal_number, siginfo_t *info, void *context); /// internalThreadStart - The initial function called by a thread. Sets some /// thread specific data, registers the thread to the GC and calls the /// given routine of th. /// void Thread::internalThreadStart(vmkit::Thread* th) { - th->baseSP = StackWalker_getCallFrameAddress(); + th->baseSP = System::GetCallerAddress(); // Set the alternate stack as the second page of the thread's // stack. @@ -484,11 +339,11 @@ void Thread::internalThreadStart(vmkit:: sigaltstack(&st, NULL); // Set the SIGSEGV handler to diagnose errors. - struct sigaction sa = {}; -// sigset_t mask; -// sigfillset(&mask); + struct sigaction sa; + sigset_t mask; + sigfillset(&mask); sa.sa_flags = SA_SIGINFO | SA_ONSTACK; -// sa.sa_mask = mask; + sa.sa_mask = mask; sa.sa_sigaction = sigsegvHandler; sigaction(SIGSEGV, &sa, NULL); sigaction(SIGBUS, &sa, NULL); @@ -543,47 +398,3 @@ void Thread::releaseThread(vmkit::Thread index = (index & ~TheStackManager.baseAddr) >> 20; TheStackManager.used[index] = 0; } - -isolate_id_t Thread::getValidIsolateID(isolate_id_t isolateID) -{ - if (isolateID != CURRENT_ISOLATE) return isolateID; - return Thread::get()->getIsolateID(); -} - -bool Thread::runsDeadIsolate() const -{ - return runningDeadIsolate; -} - -void Thread::markRunningDeadIsolate() -{ - runningDeadIsolate = true; -} - -void Thread::setIsolateID(isolate_id_t newIsolateID) -{ - isolateID = newIsolateID; -} - -isolate_id_t Thread::getIsolateID() const -{ - return isolateID; -} - -bool Thread::isCurrentThread() -{ - return (pthread_t)internalThreadID == pthread_self(); -} - -void Thread::throwNullPointerException(void* methodIP) const -{ - vmkit::FrameInfo* FI = MyVM->IPToFrameInfo(methodIP); - if (FI->Metadata == NULL) { - fprintf(stderr, "Thread %p received a SIGSEGV: either the VM code or an external\n" - "native method is bogus. Aborting...\n", (void*)this); - abort(); - } - - MyVM->nullPointerException(); - UNREACHABLE(); -} Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original) +++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 11:49:31 2013 @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -316,7 +315,6 @@ void BaseIntrinsics::init(llvm::Module* constantPtrZero = ConstantInt::get(pointerSizeType, 0); constantPtrNull = Constant::getNullValue(ptrType); - constantPtr32Null = Constant::getNullValue(ptr32Type); constantPtrLogSize = ConstantInt::get(Type::getInt32Ty(Context), kWordSizeLog2); arrayPtrType = PointerType::getUnqual(ArrayType::get(Type::getInt8Ty(Context), 0)); @@ -407,10 +405,10 @@ Frames* VmkitModule::addToVM(VirtualMach frame->FrameSize = FI->getFrameSize(); frame->Metadata = meta; frame->SourceIndex = I->Loc.getLine(); - frame->ReturnAddress = (void*)JCE->getLabelAddress(I->Label); - // If the safe point is from an NPE, increment the return address to + frame->ReturnAddress = JCE->getLabelAddress(I->Label); + // If the safe point is fro an NPE, increment the return address to // not clash with post calls. - if (I->Loc.getCol() == 1) frame->ReturnAddress = (void*)((uintptr_t)frame->ReturnAddress + 1); + if (I->Loc.getCol() == 1) frame->ReturnAddress += 1; int i = 0; for (llvm::GCFunctionInfo::live_iterator KI = FI->live_begin(I), KE = FI->live_end(I); KI != KE; ++KI) { Modified: vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll (original) +++ vmkit/trunk/lib/vmkit/Compiler/LLVMRuntime.ll Thu Apr 25 11:49:31 2013 @@ -70,9 +70,7 @@ declare void @fieldWriteBarrier(i8*, i8* declare void @nonHeapWriteBarrier(i8**, i8*) -; ExceptionBuffer. A size of 0 means an undefined size. -%ExceptionBuffer = type {i8*, i32, %ExceptionBuffer*, [0 x i8]} declare i32 @_setjmp(i8*) nounwind -declare void @registerSetjmp(%ExceptionBuffer*) nounwind -declare void @unregisterSetjmp(%ExceptionBuffer*) nounwind +declare void @registerSetjmp(i8*) nounwind +declare void @unregisterSetjmp(i8*) nounwind Modified: vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/MethodInfo.cpp Thu Apr 25 11:49:31 2013 @@ -19,25 +19,25 @@ namespace vmkit { -void MethodInfoHelper::scan(word_t closure, FrameInfo* FI, void* ip, void* callFrame) { - //void* spaddr = (void*)((intptr_t)callFrame + FI->FrameSize + sizeof(void*)); - void* spaddr = StackWalker::getCallerCallFrameAddress(callFrame); +void MethodInfoHelper::scan(word_t closure, FrameInfo* FI, word_t ip, word_t addr) { + //word_t spaddr = (word_t)addr + FI->FrameSize + sizeof(void*); + word_t spaddr = System::GetCallerOfAddress(addr); for (uint16 i = 0; i < FI->NumLiveOffsets; ++i) { - void* obj = *(void**)((intptr_t)spaddr + FI->LiveOffsets[i]); + word_t obj = *(word_t*)(spaddr + FI->LiveOffsets[i]); // Verify that obj does not come from a JSR bytecode. - if (!((uintptr_t)obj & 1)) { - Collector::scanObject((void**)((intptr_t)spaddr + FI->LiveOffsets[i]), closure); + if (!(obj & 1)) { + Collector::scanObject((void**)(spaddr + FI->LiveOffsets[i]), closure); } } } -void MethodInfoHelper::print(void* ip, void* callFrame) { +void MethodInfoHelper::print(word_t ip, word_t addr) { Dl_info info; - int res = dladdr(ip, &info); + int res = dladdr((void*)ip, &info); if (res != 0 && info.dli_sname != NULL) { - fprintf(stderr, "; %p (%p) in %s\n", ip, callFrame, info.dli_sname); + fprintf(stderr, "; %p (%p) in %s\n", (void*)ip, (void*)addr, info.dli_sname); } else { - fprintf(stderr, "; %p in Unknown method\n", ip); + fprintf(stderr, "; %p in Unknown method\n", (void*)ip); } } @@ -71,9 +71,9 @@ FunctionMap::FunctionMap(BumpPtrAllocato // Create a dummy FrameInfo, so that methods don't have to null check. static FrameInfo emptyInfo; -FrameInfo* FunctionMap::IPToFrameInfo(void* ip) { +FrameInfo* FunctionMap::IPToFrameInfo(word_t ip) { FunctionMapLock.acquire(); - llvm::DenseMap::iterator I = Functions.find(ip); + llvm::DenseMap::iterator I = Functions.find(ip); FrameInfo* res = NULL; if (I != Functions.end()) { res = I->second; @@ -87,7 +87,7 @@ FrameInfo* FunctionMap::IPToFrameInfo(vo } -void FunctionMap::addFrameInfo(void* ip, FrameInfo* meth) { +void FunctionMap::addFrameInfo(word_t ip, FrameInfo* meth) { FunctionMapLock.acquire(); addFrameInfoNoLock(ip, meth); FunctionMapLock.release(); Modified: vmkit/trunk/lib/vmkit/Runtime/Object.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/Object.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/Object.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/Object.cpp Thu Apr 25 11:49:31 2013 @@ -39,13 +39,11 @@ extern "C" void EmptyDestructor() { } extern "C" void registerSetjmp(ExceptionBuffer* buffer) { - void* callFrame = StackWalker_getCallFrameAddress(); - void* retAddr = StackWalker::getReturnAddressFromCallFrame(callFrame); - buffer->addToThreadExceptionList(retAddr); + buffer->init(); } extern "C" void unregisterSetjmp(ExceptionBuffer* buffer) { - buffer->removeFromThreadExceptionList(); + buffer->remove(); } void VirtualMachine::waitForExit() { Modified: vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp (original) +++ vmkit/trunk/lib/vmkit/Runtime/UTF8.cpp Thu Apr 25 11:49:31 2013 @@ -39,32 +39,6 @@ uint32 UTF8::readerHasher(const uint16* return (r1 & 255) + ((r0 & 255) << 8); } -std::string UTF8::toString() const -{ - std::string contents; - contents.resize(size); - - for (ssize_t i = 0; i < size; ++i) - contents[i] = (std::string::value_type)(elements[i]); - - return contents; -} - -int UTF8::compare(const char *s) const -{ - int len = strlen(s); - int diff = size - len; - if (diff != 0) return diff; - - for (int i = 0; (i < size) && (diff == 0); ++i) - diff = (char)(elements[i]) - s[i]; - return diff; -} - -void UTF8::dump() const -{ - std::cout << (const void *)this << ": " << toString() << std::endl; -} const UTF8* UTF8Map::lookupOrCreateAsciiz(const char* asciiz) { sint32 size = strlen(asciiz); Modified: vmkit/trunk/mmtk/java/build.xml.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/build.xml.in?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/mmtk/java/build.xml.in (original) +++ vmkit/trunk/mmtk/java/build.xml.in Thu Apr 25 11:49:31 2013 @@ -1,7 +1,7 @@ - + Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original) +++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:49:31 2013 @@ -114,8 +114,6 @@ void Collector::scanObject(void** ptr, w if ((*ptr) != NULL) { assert(((gc*)(*ptr))->getVirtualTable()); } - if (vmkit::Thread::get()->MyVM->resetDeadIsolateReference(NULL, ptr)) - return; JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr); } @@ -125,8 +123,6 @@ void Collector::markAndTrace(void* sourc assert(((gc*)(*ptr_))->getVirtualTable()); } if ((*(void**)ptr) != NULL) assert(((gc*)(*(void**)ptr))->getVirtualTable()); - if (vmkit::Thread::get()->MyVM->resetDeadIsolateReference(source, ptr_)) - return; JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr); } @@ -135,8 +131,6 @@ void Collector::markAndTraceRoot(void* p if ((*ptr_) != NULL) { assert(((gc*)(*ptr_))->getVirtualTable()); } - if (vmkit::Thread::get()->MyVM->resetDeadIsolateReference(NULL, ptr_)) - return; JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true); } Modified: vmkit/trunk/mmtk/mmtk-j3/Collection.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Collection.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/mmtk/mmtk-j3/Collection.cpp (original) +++ vmkit/trunk/mmtk/mmtk-j3/Collection.cpp Thu Apr 25 11:49:31 2013 @@ -41,7 +41,6 @@ extern "C" void Java_org_j3_mmtk_Collect JnJVM_org_j3_bindings_Bindings_collect__I(why); - th->MyVM->endCollectionBeforeUnblockingThreads(); th->MyVM->rendezvous.finishRV(); th->MyVM->endCollection(); } Removed: vmkit/trunk/tests/debug.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/debug.txt?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/debug.txt (original) +++ vmkit/trunk/tests/debug.txt (removed) @@ -1,30 +0,0 @@ -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticExposer_1.0.0.jar -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticClient_1.0.0.jar -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticClient_1.0.1.jar -start 10 11 12 - - -stop 10 11 12 - -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.StaticExposer_1.0.0.jar -start 10 -stop 10 -framework uninstall 10 -framework meminfo -gc -framework meminfo -gc - -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.looper_1.0.0.jar -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.tier_1.0.0.jar -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.loopClient_1.0.0.jar -install file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.isolateKiller_1.0.0.jar -start 10 11 12 - -framework call ijvm.isolate.isolatemanager.IsolateManager killBundles ijvm.tests.tier ijvm.tests.looper - -framework call ijvm.isolate.isolatemanager.IsolateManager killBundle ijvm.tests.looper - -framework call ijvm.isolate.isolatemanager.IsolateManager killBundle ijvm.tests.tierImpl - -framework call ijvm.tests.looper.LoopController cancelLoop - -framework meminfo -gc Removed: vmkit/trunk/tests/i-jvm-log.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/i-jvm-log.txt?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/i-jvm-log.txt (original) +++ vmkit/trunk/tests/i-jvm-log.txt (removed) @@ -1,129 +0,0 @@ -I-JVM - -============================================================================== -Direct access to static string: -============================================================================== - -INFO[2:21:22.804 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:21:22.805 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:21:22.805 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:21:23.432 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:21:23.432 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:21:23.433 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:21:23.806 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:21:23.806 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:21:23.807 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:21:24.433 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:21:24.434 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:21:24.434 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| - -============================================================================== -Access to static string through a getter function: -============================================================================== - -INFO[2:42:21.715 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:21.987 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:21.988 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:21.988 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:22.989 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:22.990 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:22.990 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:23.990 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:23.991 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:23.991 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:24.991 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:24.992 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:24.992 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:25.992 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:25.993 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:25.993 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:26.993 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:26.993 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:26.994 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:27.994 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:27.995 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:27.995 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:28.996 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:28.996 @ 9befe00 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:28.996 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:42:29.996 @ 9bef100 vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:42:29.997 @ 9bef100 vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:42:29.997 @ 9befe00 vmkit.tests.staticstringclient.Activator.sync] |*| - -============================================================================== -Direct and getter-based access to static object (Integer): -============================================================================== - -INFO[17:57:28.139 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:28.744 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:28.744 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:28.776 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 -INFO[17:57:29.776 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:29.776 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:29.777 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 -INFO[17:57:30.777 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:30.777 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:30.777 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 -INFO[17:57:31.778 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:31.778 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:31.778 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 -INFO[17:57:32.778 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:32.779 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:32.779 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 -INFO[17:57:33.779 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:33.779 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:33.779 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 -INFO[17:57:34.780 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:34.780 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:34.780 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 -INFO[17:57:35.780 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:35.781 @ 9bb8240 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:35.781 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 116 -INFO[17:57:36.781 @ 9bb8c40 vmkit.tests.staticclient.Activator.sync2] |>> -INFO[17:57:36.781 @ 9bb8c40 vmkit.tests.staticclient.Activator.run] >>| -INFO[17:57:36.781 @ 9bb8240 vmkit.tests.staticclient.Activator.sync2] |*| r = 59, m = 362 - -============================================================================== -Forced isolate termination: -============================================================================== - -INFO[17:59:55.807 @ b5bab9e4 ijvm.tests.isolatekiller.Activator.killTheIsolate] Killed TierService bundle. -INFO[17:59:55.808 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... - -Exception in thread "Tier worker" java.lang.InterruptedException - at ijvm.tests.tier.Activator.run(Activator.java:68) - at java.lang.Thread.run(Thread.java:743) - at java.lang.VMThread.run(VMThread.java:120) - -INFO[17:59:58.809 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... -INFO[18:0:1.810 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... -INFO[18:0:4.810 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... -INFO[18:0:7.811 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... -INFO[18:0:10.811 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... -INFO[18:0:13.812 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Still looping... -INFO[18:0:15.809 @ b5bab9e4 ijvm.tests.isolatekiller.Activator.killTheIsolate] Cancelling LoopController loop... -INFO[18:0:15.830 @ b5bab9e4 ijvm.tests.looper.LoopControllerImpl.cancelLoop] Cancel looping -INFO[18:0:15.830 @ b5bab9e4 ijvm.tests.isolatekiller.Activator.killTheIsolate] Cancelled LoopController loop. -INFO[18:0:16.813 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.loop] Done looping - -INFO[18:0:19.454 @ 9bd7e20 ijvm.tests.looper.LoopControllerImpl.callMeBack] ijvm.tests.looper.LoopControllerImpl.callMeBack -java.lang.InterruptedException - at ijvm.tests.tier.TierServiceImpl.callBack(TierServiceImpl.java:57) - at ijvm.tests.looper.LoopControllerImpl.callMeBack(LoopControllerImpl.java:38) - at ijvm.tests.tier.TierServiceImpl.beforeLeaving(TierServiceImpl.java:47) - at ijvm.tests.tier.TierServiceImpl.thenAnotherThing(TierServiceImpl.java:35) - at ijvm.tests.tier.TierServiceImpl.doSomething(TierServiceImpl.java:23) - at ijvm.tests.loopclient.Activator.run(Activator.java:54) - at java.lang.Thread.run(Thread.java:743) - at java.lang.VMThread.run(VMThread.java:120) - -INFO[18:0:21.548 @ 9bd7e20 ijvm.tests.loopclient.Activator.run] ijvm.tests.loopclient.Activator.run -java.lang.InterruptedException - at ijvm.tests.tier.TierServiceImpl.beforeLeaving(TierServiceImpl.java:47) - at ijvm.tests.tier.TierServiceImpl.thenAnotherThing(TierServiceImpl.java:35) - at ijvm.tests.tier.TierServiceImpl.doSomething(TierServiceImpl.java:23) - at ijvm.tests.loopclient.Activator.run(Activator.java:54) - at java.lang.Thread.run(Thread.java:743) - at java.lang.VMThread.run(VMThread.java:120) - -INFO[18:0:21.549 @ 9bd7e20 ijvm.tests.loopclient.Activator.run] Loop client done. Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/.project (removed) @@ -1,28 +0,0 @@ - - - ijvm.isolate.IsolateManager - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/META-INF/MANIFEST.MF (removed) @@ -1,11 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: IsolateManager -Bundle-SymbolicName: ijvm.isolate.IsolateManager;singleton:=true -Bundle-Version: 1.0.0 -Bundle-Activator: ijvm.isolate.IsolateManagerActivator -Import-Package: org.osgi.framework;version="1.3.0", - org.osgi.service.packageadmin;version="1.0.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.4 -Bundle-Vendor: Koutheir Attouchi -Export-Package: ijvm.isolate.isolatemanager Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerActivator.java (removed) @@ -1,40 +0,0 @@ -package ijvm.isolate; - - -import ijvm.isolate.isolatemanager.IsolateManager; -import ijvm.isolate.util.IsolateLogger; - -import java.util.Hashtable; -import java.util.logging.Logger; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - -public class IsolateManagerActivator - implements BundleActivator -{ - private Logger log; - private IsolateManagerImpl serviceImpl; - - public void start(BundleContext context) throws Exception - { - log = IsolateLogger.createLogger(IsolateManagerActivator.class.getName()); - log.info("STARTING"); - - // Create the service implementation - serviceImpl = new IsolateManagerImpl(log); - serviceImpl.open(context); - - // Register the service - context.registerService(IsolateManager.class.getName(), serviceImpl, new Hashtable()); - } - - public void stop(BundleContext context) throws Exception - { - serviceImpl.close(); - serviceImpl = null; - - log.info("DONE"); - log = null; - } -} Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/IsolateManagerImpl.java (removed) @@ -1,167 +0,0 @@ -package ijvm.isolate; - -import ijvm.isolate.isolatemanager.IsolateManager; -import ijvm.isolate.vm.IJVM; - -import java.security.InvalidParameterException; -import java.util.ArrayList; -import java.util.Dictionary; -import java.util.List; -import java.util.logging.Logger; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkEvent; -import org.osgi.framework.FrameworkListener; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.Version; -import org.osgi.service.packageadmin.PackageAdmin; - - -class IsolateManagerImpl - implements IsolateManager, FrameworkListener -{ - private Logger log; - private BundleContext context; - private List isolatesToKill; - - public IsolateManagerImpl(Logger log) - { - this.log = log; - isolatesToKill = new ArrayList(); - } - - public void open(BundleContext context) - { - this.context = context; - // We need to know when packages are refreshed - context.addFrameworkListener(this); - } - - public void close() - { - context.removeFrameworkListener(this); - } - - Bundle getBundle(String symbolicName) - { - Bundle[] bundles = context.getBundles(); - for (int i=0; i < bundles.length; ++i) { - if (symbolicName.equals(bundles[i].getSymbolicName())) - return bundles[i]; - } - return null; - } - - public void killBundle(String bundleName) throws Exception - { - log.info("Killing bundle: " + bundleName); - killBundles(new Bundle[] {getBundle(bundleName)}); - log.info("Killed bundle."); - } - - public void killBundles(String bundleName1, String bundleName2) throws Exception - { - log.info("Killing bundles: " + bundleName1 + ", " + bundleName2); - killBundles(new Bundle[] {getBundle(bundleName1), getBundle(bundleName2)}); - log.info("Killed bundles."); - } - - public void killBundles(Bundle[] bundles) throws Exception - { - // We kill bundles asynchronously - final Object intializedLock = new Object(); - final Bundle[] theBundles = bundles; - - Thread worker = new Thread(new Runnable() { - public void run() - { - try { - killBundlesThread(intializedLock, theBundles); - } catch (Exception e) { - log.info(IsolateManagerImpl.class.getName() + ".killBundles"); - e.printStackTrace(); - } - } - }, "Bundles killer"); - worker.start(); - - synchronized (intializedLock) { - intializedLock.wait(); - } - // At this point, we are sure the bundle execution is denied - } - - void killBundlesThread(final Object intializedLock, final Bundle[] bundles) throws Exception - { - synchronized (isolatesToKill) { - while (!isolatesToKill.isEmpty()) { - log.info("Previous killBundles operation pending..."); - isolatesToKill.wait(4000); - } - } - - long[] isolateID = new long[bundles.length]; - for (int i = 0; i < bundles.length; ++i) { - String activatorClassName = (String)bundles[i].getHeaders().get("Bundle-Activator"); - Object activatorObject = bundles[i].loadClass(activatorClassName).newInstance(); - isolateID[i] = IJVM.getObjectIsolateID(activatorObject); - activatorObject = null; - } - - // Disable bundle execution - log.info("Denying bundles execution..."); - IJVM.disableIsolates(isolateID, true, false); - - synchronized (intializedLock) { // Enable caller to continue - intializedLock.notify(); - } - - // Stop and uninstall the bundles - // NOTE: As the bundle Activator.stop() method is specially patched to return directly - // without doing anything, we can call it. - log.info("Stopping and uninstalling bundles..."); - for (int i = 0; i < bundles.length; ++i) { - bundles[i].stop(); - bundles[i].uninstall(); - } - - synchronized (isolatesToKill) { - for (int i = 0; i < bundles.length; ++i) - isolatesToKill.add(i, new Long(isolateID[i])); - - isolatesToKill.notifyAll(); - } - - log.info("Refreshing framework..."); - ServiceReference pkgAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); - PackageAdmin pkgAdmin = (PackageAdmin)context.getService(pkgAdminRef); - pkgAdmin.refreshPackages(bundles); - } - - public void frameworkEvent(FrameworkEvent event) - { - if (event.getType() != FrameworkEvent.PACKAGES_REFRESHED) return; - - log.info("Framework refreshed."); - - long[] isolateID = null; - - synchronized (isolatesToKill) { - int isolateCount = isolatesToKill.size(); - if (isolateCount > 0) { - isolateID = new long[isolateCount]; - for (int i = 0; i < isolateCount; ++i) - isolateID[i] = ((Long)isolatesToKill.get(i)).longValue(); - - isolatesToKill.clear(); - isolatesToKill.notifyAll(); - } - } - - if (isolateID == null) return; - - log.info("Resetting isolate references..."); - IJVM.disableIsolates(isolateID, true, true); - } -} Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/isolatemanager/IsolateManager.java (removed) @@ -1,11 +0,0 @@ -package ijvm.isolate.isolatemanager; - -import org.osgi.framework.Bundle; -import org.osgi.framework.Version; - -public interface IsolateManager -{ - public void killBundles(Bundle[] bundles) throws Exception; - public void killBundles(String bundleName1, String bundleName2) throws Exception; - public void killBundle(String bundleName) throws Exception; -} Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/util/IsolateLogger.java (removed) @@ -1,47 +0,0 @@ -package ijvm.isolate.util; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.logging.ConsoleHandler; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.LogRecord; -import java.util.logging.Logger; - -public class IsolateLogger - extends java.util.logging.Formatter -{ - public static Logger createLogger(String className) - { - Logger log = Logger.getAnonymousLogger(); - - Handler logConsoleHandler = new ConsoleHandler(); - logConsoleHandler.setFormatter(new IsolateLogger()); - log.addHandler(logConsoleHandler); - - log.setUseParentHandlers(false); - log.setLevel(Level.INFO); - return log; - } - - public String format(LogRecord record) - { - Calendar cal = GregorianCalendar.getInstance(); - cal.setTime(new Date(record.getMillis())); - String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + - cal.get(Calendar.MINUTE) + ":" + - cal.get(Calendar.SECOND) + "." + - cal.get(Calendar.MILLISECOND); - - StringBuffer str = new StringBuffer(256); - str.append(record.getLevel().getName() + - "[" + logTime + - " @ " + Integer.toHexString(record.getThreadID()) + " " + - record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + - record.getMessage() + "\n" - ); - - return str.toString(); - } -} Removed: vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java (original) +++ vmkit/trunk/tests/ijvm.isolate.IsolateManager/src/ijvm/isolate/vm/IJVM.java (removed) @@ -1,9 +0,0 @@ -package ijvm.isolate.vm; - -import java.util.ArrayList; - -public class IJVM -{ - public static native int getObjectIsolateID(Object object); - public static native void disableIsolates(long[] isolateID, boolean denyIsolateExecution, boolean resetIsolateReferences); -} Removed: vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath (original) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/tests/ijvm.tests.StaticClient/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/.project (original) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/.project (removed) @@ -1,34 +0,0 @@ - - - ijvm.tests.StaticClient - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - org.eclipse.pde.api.tools.apiAnalysisBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - org.eclipse.pde.api.tools.apiAnalysisNature - - Removed: vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/META-INF/MANIFEST.MF (removed) @@ -1,10 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: StaticClient -Bundle-SymbolicName: ijvm.tests.StaticClient -Bundle-Version: 1.0.0 -Bundle-Activator: ijvm.tests.staticclient.Activator -Import-Package: ijvm.tests.staticexposer, - org.osgi.framework;version="1.3.0", - org.osgi.util.tracker;version="1.0.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.4 Removed: vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties (original) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java (original) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/logging/InlineFormatter.java (removed) @@ -1,41 +0,0 @@ -package ijvm.tests.logging; - -import java.util.*; -import java.util.logging.*; - -public class InlineFormatter - extends java.util.logging.Formatter -{ - public static Logger createLogger(String className) - { - Logger log = Logger.getAnonymousLogger(); - - Handler logConsoleHandler = new ConsoleHandler(); - logConsoleHandler.setFormatter(new InlineFormatter()); - log.addHandler(logConsoleHandler); - - log.setUseParentHandlers(false); - log.setLevel(Level.INFO); - return log; - } - - public String format(LogRecord record) - { - Calendar cal = GregorianCalendar.getInstance(); - cal.setTime(new Date(record.getMillis())); - String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + - cal.get(Calendar.MINUTE) + ":" + - cal.get(Calendar.SECOND) + "." + - cal.get(Calendar.MILLISECOND); - - StringBuffer str = new StringBuffer(256); - str.append(record.getLevel().getName() + - "[" + logTime + - " @ " + Integer.toHexString(record.getThreadID()) + " " + - record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + - record.getMessage() + "\n" - ); - - return str.toString(); - } -} Removed: vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.StaticClient/src/ijvm/tests/staticclient/Activator.java (removed) @@ -1,93 +0,0 @@ -package ijvm.tests.staticclient; - -import java.util.logging.Logger; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.util.tracker.ServiceTracker; - -import ijvm.tests.logging.InlineFormatter; -import ijvm.tests.staticexposer.StaticExposer; - - -public class Activator - implements BundleActivator, Runnable -{ - private StaticExposer service; - private ServiceTracker serviceTracker; - private Thread thread; - boolean stopThread; - Logger log; - - public void start(BundleContext context) throws Exception - { - log = InlineFormatter.createLogger(Activator.class.getName()); - log.info("STARTING"); - - serviceTracker = new ServiceTracker(context, StaticExposer.class.getName(), null); - serviceTracker.open(); - service = (StaticExposer)serviceTracker.getService(); - - stopThread = false; - thread = new Thread(this, "Sync Client"); - thread.start(); - } - - public void stop(BundleContext context) throws Exception - { - stopThread = true; - thread.join(); - thread = null; - - serviceTracker.close(); - serviceTracker = null; - - log.info("DONE"); - log = null; - } - - public void run() - { - try { - while (!stopThread) { - log.info(">>|"); -// sync1(); - sync2(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void sync1() throws InterruptedException - { -// synchronized(service.theStaticString) { - synchronized(service.getStaticString()) { - log.info("|*|"); - Thread.sleep(1000); - log.info("|>>"); - } - } - - private void sync2() throws InterruptedException - { - synchronized(service.getStaticInteger()) { - int r = xync3(); - int m = xync4(); - - log.info("|*| r = " + r + ", m = " + m); - Thread.sleep(1000); - log.info("|>>"); - } - } - - private int xync3() - { - return service.getStaticInteger().intValue(); - } - - private int xync4() - { - return service.theStaticInteger.intValue(); - } -} Removed: vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath (original) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/tests/ijvm.tests.StaticExposer/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/.project (original) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/.project (removed) @@ -1,34 +0,0 @@ - - - ijvm.tests.StaticExposer - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - org.eclipse.pde.api.tools.apiAnalysisBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - org.eclipse.pde.api.tools.apiAnalysisNature - - Removed: vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/META-INF/MANIFEST.MF (removed) @@ -1,9 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: StaticExposer -Bundle-SymbolicName: ijvm.tests.StaticExposer -Bundle-Version: 1.0.0 -Bundle-Activator: ijvm.tests.staticexposer.Activator -Import-Package: org.osgi.framework;version="1.3.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.4 -Export-Package: ijvm.tests.staticexposer;uses:="org.osgi.framework" Removed: vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties (original) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/Activator.java (removed) @@ -1,25 +0,0 @@ -package ijvm.tests.staticexposer; - -import java.util.Hashtable; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - -public class Activator - implements BundleActivator -{ - private StaticExposer service; - - public void start(BundleContext context) throws Exception - { - service = new StaticExposerImpl(); - - Hashtable properties = new Hashtable(); - context.registerService(StaticExposer.class.getName(), service, properties); - } - - public void stop(BundleContext context) throws Exception - { - service = null; - } -} Removed: vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java (original) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposer.java (removed) @@ -1,10 +0,0 @@ -package ijvm.tests.staticexposer; - -public interface StaticExposer -{ - public String theStaticString = "Hello World Two"; - public Integer theStaticInteger = new Integer((int)(Math.random() * 1000.0)); - - public String getStaticString(); - public Integer getStaticInteger(); -} Removed: vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java (original) +++ vmkit/trunk/tests/ijvm.tests.StaticExposer/src/ijvm/tests/staticexposer/StaticExposerImpl.java (removed) @@ -1,15 +0,0 @@ -package ijvm.tests.staticexposer; - -public class StaticExposerImpl - implements StaticExposer -{ - public String getStaticString() - { - return theStaticString; - } - - public Integer getStaticInteger() - { - return theStaticInteger; - } -} Removed: vmkit/trunk/tests/ijvm.tests.loopClient/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/.classpath?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/.classpath (original) +++ vmkit/trunk/tests/ijvm.tests.loopClient/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/tests/ijvm.tests.loopClient/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/.project (original) +++ vmkit/trunk/tests/ijvm.tests.loopClient/.project (removed) @@ -1,28 +0,0 @@ - - - ijvm.tests.loopClient - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - Removed: vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/tests/ijvm.tests.loopClient/META-INF/MANIFEST.MF (removed) @@ -1,10 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: LoopClient -Bundle-SymbolicName: ijvm.tests.loopClient -Bundle-Version: 1.0.0 -Bundle-Activator: ijvm.tests.loopclient.Activator -Import-Package: ijvm.tests.tier, - org.osgi.framework;version="1.3.0", - org.osgi.util.tracker;version="1.0.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.4 Removed: vmkit/trunk/tests/ijvm.tests.loopClient/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/build.properties?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/build.properties (original) +++ vmkit/trunk/tests/ijvm.tests.loopClient/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java (original) +++ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/logging/InlineFormatter.java (removed) @@ -1,41 +0,0 @@ -package ijvm.tests.logging; - -import java.util.*; -import java.util.logging.*; - -public class InlineFormatter - extends java.util.logging.Formatter -{ - public static Logger createLogger(String className) - { - Logger log = Logger.getAnonymousLogger(); - - Handler logConsoleHandler = new ConsoleHandler(); - logConsoleHandler.setFormatter(new InlineFormatter()); - log.addHandler(logConsoleHandler); - - log.setUseParentHandlers(false); - log.setLevel(Level.INFO); - return log; - } - - public String format(LogRecord record) - { - Calendar cal = GregorianCalendar.getInstance(); - cal.setTime(new Date(record.getMillis())); - String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + - cal.get(Calendar.MINUTE) + ":" + - cal.get(Calendar.SECOND) + "." + - cal.get(Calendar.MILLISECOND); - - StringBuffer str = new StringBuffer(256); - str.append(record.getLevel().getName() + - "[" + logTime + - " @ " + Integer.toHexString(record.getThreadID()) + " " + - record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + - record.getMessage() + "\n" - ); - - return str.toString(); - } -} Removed: vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.loopClient/src/ijvm/tests/loopclient/Activator.java (removed) @@ -1,101 +0,0 @@ -package ijvm.tests.loopclient; - -import java.util.ArrayList; -import java.util.logging.Logger; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceEvent; -import org.osgi.framework.ServiceListener; -import org.osgi.util.tracker.ServiceTracker; - -import ijvm.tests.logging.InlineFormatter; -import ijvm.tests.tier.TierService; -import ijvm.tests.tier.Utility; - -public class Activator - implements BundleActivator, ServiceListener, Runnable -{ - private BundleContext context; - private Logger log; - - private ServiceTracker serviceTracker; - private TierService service; - - private Thread thread; - private ArrayList utilArray; - - public void start(BundleContext context) throws Exception - { - this.context = context; - log = InlineFormatter.createLogger(Activator.class.getName()); - log.info("STARTING"); - - serviceTracker = new ServiceTracker(context, TierService.class.getName(), null); - serviceTracker.open(); - service = (TierService)serviceTracker.getService(); - context.addServiceListener(this, "(objectclass=" + TierService.class.getName() + ")"); - - thread = new Thread(this, "Loop Client"); - thread.start(); - } - - public void stop(BundleContext bundleContext) throws Exception - { - log.info("Stopping..."); - - this.context = null; - - thread.join(); - thread = null; - - serviceTracker.close(); - serviceTracker = null; - service = null; - - log.info("DONE"); - log = null; - } - - public void serviceChanged(ServiceEvent event) - { - Object serviceObj = context.getService(event.getServiceReference()); - - switch(event.getType()) { - case ServiceEvent.REGISTERED: - if (TierService.class.isInstance(serviceObj)) - service = (TierService)serviceObj; - break; - - case ServiceEvent.UNREGISTERING: - if (TierService.class.isInstance(serviceObj)) - service = null; - break; - } - } - - public void run() - { - log.info("Loop client running..."); - - utilArray = new ArrayList(1); - utilArray.add( - service.getSomething()); - - try { - service.doSomething(); - } catch (Exception e) { - log.info(Activator.class.getName() + ".run"); - e.printStackTrace(); - } - - try { - ((Utility)utilArray.get(0)).getSomething(); - } catch (Exception e) { - log.info(Activator.class.getName() + ".run"); - e.printStackTrace(); - } - - log.info("Loop client done."); - } -} Removed: vmkit/trunk/tests/ijvm.tests.looper/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/.classpath?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/.classpath (original) +++ vmkit/trunk/tests/ijvm.tests.looper/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/tests/ijvm.tests.looper/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/.project (original) +++ vmkit/trunk/tests/ijvm.tests.looper/.project (removed) @@ -1,28 +0,0 @@ - - - ijvm.tests.looper - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - Removed: vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/tests/ijvm.tests.looper/META-INF/MANIFEST.MF (removed) @@ -1,9 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Looper -Bundle-SymbolicName: ijvm.tests.looper -Bundle-Version: 1.0.0 -Bundle-Activator: ijvm.tests.looper.Activator -Import-Package: org.osgi.framework;version="1.3.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.4 -Export-Package: ijvm.tests.looper Removed: vmkit/trunk/tests/ijvm.tests.looper/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/build.properties?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/build.properties (original) +++ vmkit/trunk/tests/ijvm.tests.looper/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java (original) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/logging/InlineFormatter.java (removed) @@ -1,41 +0,0 @@ -package ijvm.tests.logging; - -import java.util.*; -import java.util.logging.*; - -public class InlineFormatter - extends java.util.logging.Formatter -{ - public static Logger createLogger(String className) - { - Logger log = Logger.getAnonymousLogger(); - - Handler logConsoleHandler = new ConsoleHandler(); - logConsoleHandler.setFormatter(new InlineFormatter()); - log.addHandler(logConsoleHandler); - - log.setUseParentHandlers(false); - log.setLevel(Level.INFO); - return log; - } - - public String format(LogRecord record) - { - Calendar cal = GregorianCalendar.getInstance(); - cal.setTime(new Date(record.getMillis())); - String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + - cal.get(Calendar.MINUTE) + ":" + - cal.get(Calendar.SECOND) + "." + - cal.get(Calendar.MILLISECOND); - - StringBuffer str = new StringBuffer(256); - str.append(record.getLevel().getName() + - "[" + logTime + - " @ " + Integer.toHexString(record.getThreadID()) + " " + - record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + - record.getMessage() + "\n" - ); - - return str.toString(); - } -} Removed: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/Activator.java (removed) @@ -1,39 +0,0 @@ -package ijvm.tests.looper; - -import ijvm.tests.logging.InlineFormatter; - -import java.util.Hashtable; -import java.util.logging.Logger; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - - - -public class Activator - implements BundleActivator -{ - private Logger log; - private LoopController service; - - public void start(BundleContext context) throws Exception - { - log = InlineFormatter.createLogger(Activator.class.getName()); - log.info("STARTING"); - - service = new LoopControllerImpl(log); - - context.registerService(LoopController.class.getName(), service, new Hashtable()); - } - - public void stop(BundleContext context) throws Exception - { - log.info("Stopping..."); - - service.cancelLoop(); - service = null; - - log.info("DONE"); - log = null; - } -} Removed: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java (original) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/CallBack.java (removed) @@ -1,6 +0,0 @@ -package ijvm.tests.looper; - -public interface CallBack -{ - public void callBack() throws Exception; -} Removed: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java (original) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopController.java (removed) @@ -1,9 +0,0 @@ -package ijvm.tests.looper; - -public interface LoopController -{ - public void loop() throws Exception; - public void callMeBack(CallBack cb) throws Exception; - public void cancelLoop(); - public void keepThis(Object o); -} Removed: vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java (original) +++ vmkit/trunk/tests/ijvm.tests.looper/src/ijvm/tests/looper/LoopControllerImpl.java (removed) @@ -1,50 +0,0 @@ -package ijvm.tests.looper; - -import java.util.logging.Logger; - -public class LoopControllerImpl - implements LoopController -{ - protected boolean cancelLoop; - private Logger log; - private Object keptObj; - - public LoopControllerImpl(Logger log) - { - this.log = log; - } - - public void loop() throws Exception - { - log.info("Start looping"); - - cancelLoop = false; - while (!cancelLoop) { - log.info("Still looping..."); - Thread.sleep(10000); - } - - log.info("Done looping"); - } - - public void cancelLoop() - { - log.info("Cancel looping"); - cancelLoop = true; - } - - public void callMeBack(CallBack cb) throws Exception - { - try { - cb.callBack(); - } catch (Exception e) { - log.info(LoopControllerImpl.class.getName() + ".callMeBack"); - e.printStackTrace(); - } - } - - public void keepThis(Object o) - { - keptObj = o; - } -} Removed: vmkit/trunk/tests/ijvm.tests.tier/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/.classpath?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/.classpath (original) +++ vmkit/trunk/tests/ijvm.tests.tier/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/tests/ijvm.tests.tier/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/.project (original) +++ vmkit/trunk/tests/ijvm.tests.tier/.project (removed) @@ -1,28 +0,0 @@ - - - ijvm.tests.tier - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - Removed: vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/tests/ijvm.tests.tier/META-INF/MANIFEST.MF (removed) @@ -1,9 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Tier -Bundle-SymbolicName: ijvm.tests.tier -Bundle-Version: 1.0.0 -Bundle-Activator: ijvm.tests.tier.Activator -Import-Package: org.osgi.framework;version="1.3.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.4 -Export-Package: ijvm.tests.tier Removed: vmkit/trunk/tests/ijvm.tests.tier/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/build.properties?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/build.properties (original) +++ vmkit/trunk/tests/ijvm.tests.tier/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java (original) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/logging/InlineFormatter.java (removed) @@ -1,41 +0,0 @@ -package ijvm.tests.logging; - -import java.util.*; -import java.util.logging.*; - -public class InlineFormatter - extends java.util.logging.Formatter -{ - public static Logger createLogger(String className) - { - Logger log = Logger.getAnonymousLogger(); - - Handler logConsoleHandler = new ConsoleHandler(); - logConsoleHandler.setFormatter(new InlineFormatter()); - log.addHandler(logConsoleHandler); - - log.setUseParentHandlers(false); - log.setLevel(Level.INFO); - return log; - } - - public String format(LogRecord record) - { - Calendar cal = GregorianCalendar.getInstance(); - cal.setTime(new Date(record.getMillis())); - String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + - cal.get(Calendar.MINUTE) + ":" + - cal.get(Calendar.SECOND) + "." + - cal.get(Calendar.MILLISECOND); - - StringBuffer str = new StringBuffer(256); - str.append(record.getLevel().getName() + - "[" + logTime + - " @ " + Integer.toHexString(record.getThreadID()) + " " + - record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + - record.getMessage() + "\n" - ); - - return str.toString(); - } -} Removed: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Activator.java (removed) @@ -1,26 +0,0 @@ -package ijvm.tests.tier; - -import ijvm.tests.logging.InlineFormatter; - -import java.util.logging.Logger; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - -public class Activator - implements BundleActivator -{ - private Logger log; - - public void start(BundleContext bundleContext) throws Exception - { - log = InlineFormatter.createLogger(Activator.class.getName()); - log.info("STARTING"); - } - - public void stop(BundleContext bundleContext) throws Exception - { - log.info("DONE"); - log = null; - } -} Removed: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java (original) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/TierService.java (removed) @@ -1,7 +0,0 @@ -package ijvm.tests.tier; - -public interface TierService -{ - public void doSomething() throws Exception; - public Utility getSomething(); -} Removed: vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java (original) +++ vmkit/trunk/tests/ijvm.tests.tier/src/ijvm/tests/tier/Utility.java (removed) @@ -1,7 +0,0 @@ -package ijvm.tests.tier; - -public interface Utility -{ - public int getSomething(); - public void setSomething(int x); -} Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/.classpath (removed) @@ -1,7 +0,0 @@ - - - - - - - Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/.project URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/.project?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/.project (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/.project (removed) @@ -1,28 +0,0 @@ - - - ijvm.tests.tierImpl - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/META-INF/MANIFEST.MF (removed) @@ -1,11 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: TierImpl -Bundle-SymbolicName: ijvm.tests.tierImpl -Bundle-Version: 1.0.0 -Bundle-Activator: ijvm.tests.tierImpl.Activator -Import-Package: ijvm.tests.looper, - ijvm.tests.tier, - org.osgi.framework;version="1.3.0", - org.osgi.util.tracker;version="1.0.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.4 Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/build.properties (removed) @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/logging/InlineFormatter.java (removed) @@ -1,41 +0,0 @@ -package ijvm.tests.logging; - -import java.util.*; -import java.util.logging.*; - -public class InlineFormatter - extends java.util.logging.Formatter -{ - public static Logger createLogger(String className) - { - Logger log = Logger.getAnonymousLogger(); - - Handler logConsoleHandler = new ConsoleHandler(); - logConsoleHandler.setFormatter(new InlineFormatter()); - log.addHandler(logConsoleHandler); - - log.setUseParentHandlers(false); - log.setLevel(Level.INFO); - return log; - } - - public String format(LogRecord record) - { - Calendar cal = GregorianCalendar.getInstance(); - cal.setTime(new Date(record.getMillis())); - String logTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + - cal.get(Calendar.MINUTE) + ":" + - cal.get(Calendar.SECOND) + "." + - cal.get(Calendar.MILLISECOND); - - StringBuffer str = new StringBuffer(256); - str.append(record.getLevel().getName() + - "[" + logTime + - " @ " + Integer.toHexString(record.getThreadID()) + " " + - record.getSourceClassName() + "." + record.getSourceMethodName() + "] " + - record.getMessage() + "\n" - ); - - return str.toString(); - } -} Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/Activator.java (removed) @@ -1,117 +0,0 @@ -package ijvm.tests.tierImpl; - -import ijvm.tests.logging.InlineFormatter; -import ijvm.tests.looper.LoopController; -import ijvm.tests.tier.TierService; - -import java.util.Hashtable; -import java.util.logging.Logger; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceEvent; -import org.osgi.framework.ServiceListener; -import org.osgi.util.tracker.ServiceTracker; - - -public class Activator - implements BundleActivator, ServiceListener, Runnable -{ - private BundleContext context; - private Logger log; - - private ServiceTracker loopControllerTracker; - private LoopController loopControllerService; - - private TierServiceImpl serviceImpl; - - private Thread thread; - private boolean stopThread; - - - public void start(BundleContext context) throws Exception - { - this.context = context; - log = InlineFormatter.createLogger(Activator.class.getName()); - log.info("STARTING"); - - loopControllerTracker = new ServiceTracker(context, LoopController.class.getName(), null); - loopControllerTracker.open(); - loopControllerService = (LoopController)loopControllerTracker.getService(); - context.addServiceListener(this, "(objectclass=" + LoopController.class.getName() + ")"); - - serviceImpl = new TierServiceImpl(log); - serviceImpl.setLoopControllerService(loopControllerService); - - context.registerService(TierService.class.getName(), serviceImpl, new Hashtable()); - -// thread = new Thread(this, "Tier worker"); -// stopThread = false; -// thread.start(); - } - - public void stop(BundleContext bundleContext) throws Exception - { - log.info("Stopping..."); - - this.context = null; - - if (thread != null) { - stopThread = true; - thread.join(); - thread = null; - } - - serviceImpl = null; - - loopControllerTracker.close(); - loopControllerTracker = null; - loopControllerService = null; - - log.info("DONE"); - log = null; - } - - public void serviceChanged(ServiceEvent event) - { - Object serviceObj = context.getService(event.getServiceReference()); - - switch(event.getType()) { - case ServiceEvent.REGISTERED: - if (LoopController.class.isInstance(serviceObj)) - serviceImpl.setLoopControllerService((LoopController)serviceObj); - break; - - case ServiceEvent.UNREGISTERING: - if (LoopController.class.isInstance(serviceObj)) - serviceImpl.setLoopControllerService(null); - break; - } - } - - public void run() - { - log.info("Tier thread running..."); - -// for (;;) {} - - try { -/* - boolean done; - for (done = false; !done; ) { - done = false; - } - - Thread.sleep(1000); -*/ - while (!stopThread) { - Thread.sleep(1000); - } - } catch (InterruptedException e) { - log.info(Activator.class.getName() + ".run"); - e.printStackTrace(); - } - - log.info("Tier thread done."); - } -} Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/TierServiceImpl.java (removed) @@ -1,77 +0,0 @@ -package ijvm.tests.tierImpl; - -import ijvm.tests.looper.CallBack; -import ijvm.tests.looper.LoopController; -import ijvm.tests.tier.TierService; -import ijvm.tests.tier.Utility; - -import java.util.ArrayList; -import java.util.logging.Logger; - -public class TierServiceImpl - implements TierService, CallBack -{ - private Logger log; - private LoopController loopControllerService; - - TierServiceImpl(Logger log) - { - this.loopControllerService = null; - this.log = log; - } - - public void setLoopControllerService(LoopController loopControllerService) - { - this.loopControllerService = loopControllerService; - } - - public void doSomething() throws Exception - { - log.info("Now doing something"); - - try { - thenAnotherThing(); - } catch (Exception e) { - log.info(TierServiceImpl.class.getName() + ".doSomething"); - e.printStackTrace(); - } - - log.info("Done something"); - } - - public void thenAnotherThing() throws Exception - { - try { - beforeLeaving(); - } catch (Exception e) { - log.info(TierServiceImpl.class.getName() + ".thenAnotherThing"); - e.printStackTrace(); - } - } - - public void beforeLeaving() throws Exception - { - try { - loopControllerService.callMeBack(this); - } catch (Exception e) { - log.info(TierServiceImpl.class.getName() + ".beforeLeaving"); - e.printStackTrace(); - } - } - - public void callBack() throws Exception - { - try { - loopControllerService.keepThis(this); - loopControllerService.loop(); - } catch (Exception e) { - log.info(TierServiceImpl.class.getName() + ".callBack"); - e.printStackTrace(); - } - } - - public Utility getSomething() - { - return new UtilityImpl(22); - } -} Removed: vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java (original) +++ vmkit/trunk/tests/ijvm.tests.tierImpl/src/ijvm/tests/tierImpl/UtilityImpl.java (removed) @@ -1,30 +0,0 @@ -package ijvm.tests.tierImpl; - -import ijvm.tests.tier.Utility; - -public class UtilityImpl - implements Utility -{ - int something; - - UtilityImpl(int x) - { - something = x; - } - - protected void finalize() throws Throwable - { - System.out.println("UtilityImpl.finalize()"); - something = -1; - } - - public int getSomething() - { - return something; - } - - public void setSomething(int x) - { - something = x; - } -} Removed: vmkit/trunk/tests/minimal.xargs URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/minimal.xargs?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/minimal.xargs (original) +++ vmkit/trunk/tests/minimal.xargs (removed) @@ -1,28 +0,0 @@ --Dorg.knopflerfish.framework.main.verbosity=0 --Dorg.knopflerfish.gosg.jars=file:jars/ --Forg.knopflerfish.framework.debug.errors=true --Forg.knopflerfish.framework.debug.packages=false --Forg.knopflerfish.framework.debug.classloader=false --Forg.osgi.framework.system.packages.extra= - --Forg.knopflerfish.startlevel.use=true - --init - --install log/log_api-3.1.2.jar --install console/console_api-3.0.3.jar --istart cm/cm_api-3.0.4.jar --istart log/log-3.1.2.jar --istart console/console-3.0.3.jar --istart consoletty/consoletty-3.0.1.jar --istart frameworkcommands/frameworkcommands-3.0.4.jar --istart logcommands/logcommands-3.1.1.jar --istart useradmin/useradmin_api-3.0.2.jar - --istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.isolate.IsolateManager_1.0.0.jar --istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.looper_1.0.0.jar --istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.tier_1.0.0.jar --istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.tierImpl_1.0.0.jar --istart file:///home/koutheir/PhD/VMKit/ijvm/tests/plugins/ijvm.tests.loopClient_1.0.0.jar - --launch Removed: vmkit/trunk/tests/sun-jvm-log.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/sun-jvm-log.txt?rev=180291&view=auto ============================================================================== --- vmkit/trunk/tests/sun-jvm-log.txt (original) +++ vmkit/trunk/tests/sun-jvm-log.txt (removed) @@ -1,58 +0,0 @@ -Sun JVM - -Direct access to static string. - -INFO[2:24:52.372 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:24:52.373 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:24:52.378 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:24:53.373 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:24:53.373 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:24:53.373 @ c vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:24:54.374 @ c vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:24:54.374 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:24:54.374 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:24:55.374 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:24:55.375 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:24:55.375 @ c vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:24:56.375 @ c vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:24:56.375 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:24:56.375 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:24:57.376 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:24:57.376 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:24:57.376 @ c vmkit.tests.staticstringclient.Activator.sync] |*| - -Access to static string through a getter function. - -INFO[2:45:5.298 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:5.308 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:5.309 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:6.308 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:6.308 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:6.308 @ c vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:7.309 @ c vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:7.309 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:7.309 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:8.310 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:8.310 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:8.310 @ c vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:9.310 @ c vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:9.310 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:9.310 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:10.311 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:10.311 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:10.311 @ c vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:11.312 @ c vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:11.312 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:11.312 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:12.312 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:12.313 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:12.313 @ c vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:13.313 @ c vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:13.313 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:13.313 @ b vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:14.314 @ b vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:14.314 @ b vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:14.314 @ c vmkit.tests.staticstringclient.Activator.sync] |*| -INFO[2:45:15.314 @ c vmkit.tests.staticstringclient.Activator.sync] |>> -INFO[2:45:15.315 @ c vmkit.tests.staticstringclient.Activator.run] >>| -INFO[2:45:15.315 @ b vmkit.tests.staticstringclient.Activator.sync] |*| Modified: vmkit/trunk/tools/precompiler/trainer/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/tools/precompiler/trainer/Makefile (original) +++ vmkit/trunk/tools/precompiler/trainer/Makefile Thu Apr 25 11:49:31 2013 @@ -33,7 +33,7 @@ generated.bc: $(PRECOMPILER) HelloWorld. Precompiled.bc: HelloWorld.class $(LibDir)/StaticGCPass$(SHLIBEXT) $(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc $(Echo) "Building precompiled bootstrap code" $(Verb) $(MKDIR) $(ObjDir) - $(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim $(PRECOMPILER_FLAGS) -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc -o $(ObjDir)/Precompiled.s + $(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim -O3 -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc -o $(ObjDir)/Precompiled.s $(Verb) $(CC) -c $(ObjDir)/Precompiled.s -o $(ObjDir)/Precompiled.o $(Verb) $(Archive) $(LibDir)/libPrecompiled.a $(ObjDir)/Precompiled.o $(Verb) $(Ranlib) $(LibDir)/libPrecompiled.a Modified: vmkit/trunk/tools/vmjc/vmjc.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180292&r1=180291&r2=180292&view=diff ============================================================================== --- vmkit/trunk/tools/vmjc/vmjc.cpp (original) +++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 11:49:31 2013 @@ -124,11 +124,7 @@ int main(int argc, char **argv) { vmkit::VmkitModule::initialise(argc, argv); vmkit::Collector::initialise(argc, argv); - // WARNING: This is a silly method to discover that we are compiling MMTk. - // Please change to anything more deterministic. - bool compilingMMTk = (DisableExceptions && DisableCooperativeGC && DisableStubs && AssumeCompiled); - - JavaAOTCompiler* Comp = new JavaAOTCompiler("AOT", compilingMMTk); + JavaAOTCompiler* Comp = new JavaAOTCompiler("AOT"); vmkit::BumpPtrAllocator allocator; JnjvmBootstrapLoader* loader = new(allocator, "Bootstrap loader") From peter.senna at gmail.com Thu Apr 25 10:00:11 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:11 -0000 Subject: [vmkit-commits] [vmkit] r180333 - Remove my wrong sentence from README.txt. Check the optimization flags after having included the llvm build system. Message-ID: <20130425165840.DFFFC2A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:58:40 2013 New Revision: 180333 URL: http://llvm.org/viewvc/llvm-project?rev=180333&view=rev Log: Remove my wrong sentence from README.txt. Check the optimization flags after having included the llvm build system. (cherry picked from commit bcdce8922b67da539c7c1058569e6b30becf9f5e) Modified: vmkit/trunk/Makefile.common.in vmkit/trunk/README.TXT Modified: vmkit/trunk/Makefile.common.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180333&r1=180332&r2=180333&view=diff ============================================================================== --- vmkit/trunk/Makefile.common.in (original) +++ vmkit/trunk/Makefile.common.in Thu Apr 25 11:58:40 2013 @@ -16,48 +16,9 @@ ifeq ($(BUILD_FRAMETABLE), 1) BUILT_SOURCES = FrametablesSymbols.inc FrametablesExterns.inc endif -#ENABLE_OPTIMIZED := 0 REQUIRES_FRAME_POINTER := 1 JAVAC_TARGET := 1.5 -ifneq ($(ENABLE_OPTIMIZED), 1) - CFLAGS += -O0 - CXXFLAGS += -O0 - - LLC_CPP_FLAGS := -O=0 - LLC_ASM_FLAGS := -O=0 -asm-verbose - LLC_GLIBJ_FLAGS := - - OPT_BC_WITH_GC_FLAGS := -inline - OPT_MMTK_FLAGS := - OPT_VMJC_FLAGS := -std-compile-opts - - VMJC_MMTK_FLAGS := - VMJC_GLIBJ_FLAGS := -jit-emit-debug -std-compile-opts - - PRECOMPILER_FLAGS := - - KEEP_SYMBOLS := 1 - DEBUG_RUNTIME := 1 - DEBUG_SYMBOLS := 1 -else - CFLAGS += -O2 -g0 - CXXFLAGS += -O2 -g0 - - LLC_CPP_FLAGS := - LLC_ASM_FLAGS := -O=2 -disable-debug-info-print - LLC_GLIBJ_FLAGS := -disable-debug-info-print - - OPT_BC_WITH_GC_FLAGS := -std-compile-opts -strip-debug - OPT_MMTK_FLAGS := -std-compile-opts -strip-debug - OPT_VMJC_FLAGS := -std-compile-opts -strip-debug - - PRECOMPILER_FLAGS := -O3 - - VMJC_MMTK_FLAGS := -std-compile-opts - VMJC_GLIBJ_FLAGS := -std-compile-opts -endif - # Include LLVM's Master Makefile. include $(LLVM_OBJ_ROOT)/Makefile.common @@ -75,4 +36,33 @@ endif LIBS += -lz + +ifeq ($(ENABLE_OPTIMIZED),1) + LLC_CPP_FLAGS := + LLC_ASM_FLAGS := -O=2 -disable-debug-info-print + LLC_GLIBJ_FLAGS := -disable-debug-info-print + + OPT_BC_WITH_GC_FLAGS := -std-compile-opts -strip-debug + OPT_MMTK_FLAGS := -std-compile-opts -strip-debug + OPT_VMJC_FLAGS := -std-compile-opts -strip-debug + + PRECOMPILER_FLAGS := -O3 + + VMJC_MMTK_FLAGS := -std-compile-opts + VMJC_GLIBJ_FLAGS := -std-compile-opts +else + LLC_CPP_FLAGS := -O=0 + LLC_ASM_FLAGS := -O=0 -asm-verbose + LLC_GLIBJ_FLAGS := + + OPT_BC_WITH_GC_FLAGS := -inline + OPT_MMTK_FLAGS := + OPT_VMJC_FLAGS := -std-compile-opts + + VMJC_MMTK_FLAGS := + VMJC_GLIBJ_FLAGS := -jit-emit-debug -std-compile-opts + + PRECOMPILER_FLAGS := +endif + include $(VMKIT_SRC_ROOT)/Makefile.rules Modified: vmkit/trunk/README.TXT URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180333&r1=180332&r2=180333&view=diff ============================================================================== --- vmkit/trunk/README.TXT (original) +++ vmkit/trunk/README.TXT Thu Apr 25 11:58:40 2013 @@ -53,8 +53,6 @@ ln -sf ../native/jni/java-util/.libs/lib LLVM: ===== -* Notice that installing clang is not mandatory on a recent MACOS - * Get it (git): git clone http://llvm.org/git/llvm.git From peter.senna at gmail.com Thu Apr 25 10:00:17 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:17 -0000 Subject: [vmkit-commits] [vmkit] r180334 - Add a --enable-incinerator option in configure Message-ID: <20130425165846.9865D2A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:58:46 2013 New Revision: 180334 URL: http://llvm.org/viewvc/llvm-project?rev=180334&view=rev Log: Add a --enable-incinerator option in configure (cherry picked from commit 1c9b614c83c9121e08549fb8c3cd169e8aa0c6ac) Modified: vmkit/trunk/autoconf/configure.ac vmkit/trunk/configure vmkit/trunk/include/vmkit/VirtualMachine.h vmkit/trunk/include/vmkit/config.h.in Modified: vmkit/trunk/autoconf/configure.ac URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/autoconf/configure.ac?rev=180334&r1=180333&r2=180334&view=diff ============================================================================== --- vmkit/trunk/autoconf/configure.ac (original) +++ vmkit/trunk/autoconf/configure.ac Thu Apr 25 11:58:46 2013 @@ -255,6 +255,19 @@ esac AC_SUBST(classpathimpl) +dnl ************************************************************************** +dnl Kill stale references +dnl ************************************************************************** +AC_ARG_ENABLE(incinerator, + AS_HELP_STRING([--enable-incinerator], + [Use incinerator to kill stale references in OSGi (default is NO)]),, + enableval=no) +case "$enableval" in + yes) AC_DEFINE(RESET_STALE_REFERENCES,[1]) ;; + no) ;; #AC_DEFINE(RESET_STALE_REFERENCES,[0]) ;; + *) AC_MSG_ERROR([Invalid setting for --enable-incinerator. Use "yes" or "no"]) ;; +esac + dnl===-----------------------------------------------------------------------=== dnl=== Modified: vmkit/trunk/configure URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/configure?rev=180334&r1=180333&r2=180334&view=diff ============================================================================== --- vmkit/trunk/configure (original) +++ vmkit/trunk/configure Thu Apr 25 11:58:46 2013 @@ -1,13 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for vmkit 0.32svn. +# Generated by GNU Autoconf 2.69 for vmkit 0.32svn. # # Report bugs to . # # -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -138,6 +136,31 @@ export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh @@ -171,7 +194,8 @@ if ( set x; as_fn_ret_success y && test else exitcode=1; echo positional parameters were not saved. fi -test x\$exitcode = x0 || exit 1" +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && @@ -216,21 +240,25 @@ IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi if test x$as_have_required = xno; then : @@ -333,6 +361,14 @@ $as_echo X"$as_dir" | } # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take @@ -454,6 +490,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). @@ -488,16 +528,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -509,28 +549,8 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -714,6 +734,7 @@ with_gnu_classpath_libs with_gnu_classpath_glibj with_openjdk_path with_classpath_impl +enable_incinerator ' ac_precious_vars='build_alias host_alias @@ -1182,8 +1203,6 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1339,6 +1358,13 @@ if test -n "$ac_init_help"; then esac cat <<\_ACEOF +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-incinerator Use incinerator to kill stale references in OSGi + (default is NO) + Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) @@ -1436,9 +1462,9 @@ test -n "$ac_init_help" && exit $ac_stat if $ac_init_version; then cat <<\_ACEOF vmkit configure 0.32svn -generated by GNU Autoconf 2.68 +generated by GNU Autoconf 2.69 -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -1591,7 +1617,7 @@ $as_echo "$ac_try_echo"; } >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext + test -x conftest$ac_exeext }; then : ac_retval=0 else @@ -1899,7 +1925,7 @@ This file contains any messages produced running configure, to aid debugging if configure makes a mistake. It was created by vmkit $as_me 0.32svn, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2860,6 +2886,20 @@ esac +# Check whether --enable-incinerator was given. +if test "${enable_incinerator+set}" = set; then : + enableval=$enable_incinerator; +else + enableval=no +fi + +case "$enableval" in + yes) $as_echo "#define RESET_STALE_REFERENCES 1" >>confdefs.h + ;; + no) ;; #AC_DEFINE(RESET_STALE_REFERENCES,[0]) ;; + *) as_fn_error $? "Invalid setting for --enable-incinerator. Use \"yes\" or \"no\"" "$LINENO" 5 ;; +esac + ac_ext=c @@ -2884,7 +2924,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2924,7 +2964,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2977,7 +3017,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3018,7 +3058,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -3076,7 +3116,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3120,7 +3160,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3566,8 +3606,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -3813,7 +3852,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3857,7 +3896,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4051,8 +4090,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -4165,7 +4203,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4209,7 +4247,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4479,7 +4517,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CMP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4520,7 +4558,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4561,7 +4599,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4602,7 +4640,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4643,7 +4681,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4684,7 +4722,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4725,7 +4763,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4765,7 +4803,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4805,7 +4843,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4858,7 +4896,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4899,7 +4937,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4940,7 +4978,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4981,7 +5019,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_BINPWD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5022,7 +5060,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5064,7 +5102,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LLVMAS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5105,7 +5143,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LLC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5146,7 +5184,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ANT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5186,7 +5224,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAVAC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5227,7 +5265,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5288,7 +5326,7 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -5416,7 +5454,7 @@ do for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in @@ -5482,7 +5520,7 @@ do for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in @@ -6212,16 +6250,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -6281,28 +6319,16 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -6324,7 +6350,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri # values after options handling. ac_log=" This file was extended by vmkit $as_me 0.32svn, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -6390,10 +6416,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ vmkit config.status 0.32svn -configured by $0, generated by GNU Autoconf 2.68, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -6482,7 +6508,7 @@ fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' Modified: vmkit/trunk/include/vmkit/VirtualMachine.h URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180334&r1=180333&r2=180334&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/VirtualMachine.h (original) +++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:58:46 2013 @@ -10,7 +10,7 @@ #ifndef VMKIT_VIRTUALMACHINE_H #define VMKIT_VIRTUALMACHINE_H -#define RESET_STALE_REFERENCES 1 +#include "vmkit/config.h" #include "llvm/ADT/DenseMap.h" Modified: vmkit/trunk/include/vmkit/config.h.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/config.h.in?rev=180334&r1=180333&r2=180334&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/config.h.in (original) +++ vmkit/trunk/include/vmkit/config.h.in Thu Apr 25 11:58:46 2013 @@ -77,3 +77,6 @@ /* Define to `unsigned int' if does not define. */ #undef size_t + +/* Kill stale references +#undef RESET_STALE_REFERENCES From peter.senna at gmail.com Thu Apr 25 10:00:25 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:25 -0000 Subject: [vmkit-commits] [vmkit] r180335 - remove useless options of config.h Message-ID: <20130425165852.365622A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:58:51 2013 New Revision: 180335 URL: http://llvm.org/viewvc/llvm-project?rev=180335&view=rev Log: remove useless options of config.h (cherry picked from commit 62674352740b40f7fe42d2673af63acd1fffa1ba) Added: vmkit/trunk/include/vmkit/config.h.in.orig - copied, changed from r180334, vmkit/trunk/include/vmkit/config.h.in Modified: vmkit/trunk/include/vmkit/config.h.in Modified: vmkit/trunk/include/vmkit/config.h.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/config.h.in?rev=180335&r1=180334&r2=180335&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/config.h.in (original) +++ vmkit/trunk/include/vmkit/config.h.in Thu Apr 25 11:58:51 2013 @@ -1,82 +1,2 @@ -/* include/vmkit/config.h.in. Generated from autoconf/configure.ac by autoheader. */ - -/* Define to 1 if the system has the type `int64_t'. */ -#undef HAVE_INT64_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `z' library (-lz). */ -#undef HAVE_LIBZ - -/* Define to 1 if you have the `longjmp' function. */ -#undef HAVE_LONGJMP - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `setjmp' function. */ -#undef HAVE_SETJMP - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if the system has the type `uint64_t'. */ -#undef HAVE_UINT64_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if the system has the type `u_int64_t'. */ -#undef HAVE_U_INT64_T - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if your declares `struct tm'. */ -#undef TM_IN_SYS_TIME - -/* Building on a platform with 64bit cas */ -#undef WITH_64 - -/* Define to `int' if does not define. */ -#undef pid_t - -/* Define to `unsigned int' if does not define. */ -#undef size_t - /* Kill stale references #undef RESET_STALE_REFERENCES Copied: vmkit/trunk/include/vmkit/config.h.in.orig (from r180334, vmkit/trunk/include/vmkit/config.h.in) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/config.h.in.orig?p2=vmkit/trunk/include/vmkit/config.h.in.orig&p1=vmkit/trunk/include/vmkit/config.h.in&r1=180334&r2=180335&rev=180335&view=diff ============================================================================== (empty) From peter.senna at gmail.com Thu Apr 25 10:00:26 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:26 -0000 Subject: [vmkit-commits] [vmkit] r180336 - add the end of the comment :) Message-ID: <20130425165855.F0E592A6C02B@llvm.org> Author: peter.senna Date: Thu Apr 25 11:58:55 2013 New Revision: 180336 URL: http://llvm.org/viewvc/llvm-project?rev=180336&view=rev Log: add the end of the comment :) (cherry picked from commit e6f396ef319a7a86879e514ce56a8d274cb229b6) Modified: vmkit/trunk/include/vmkit/config.h.in Modified: vmkit/trunk/include/vmkit/config.h.in URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/config.h.in?rev=180336&r1=180335&r2=180336&view=diff ============================================================================== --- vmkit/trunk/include/vmkit/config.h.in (original) +++ vmkit/trunk/include/vmkit/config.h.in Thu Apr 25 11:58:55 2013 @@ -1,2 +1,2 @@ -/* Kill stale references +/* Kill stale references */ #undef RESET_STALE_REFERENCES From peter.senna at gmail.com Thu Apr 25 10:00:31 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:31 -0000 Subject: [vmkit-commits] [vmkit] r180337 - remove the target 1.5, it does not work. Should be corrected. Message-ID: <20130425165900.3B33D2A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:59:00 2013 New Revision: 180337 URL: http://llvm.org/viewvc/llvm-project?rev=180337&view=rev Log: remove the target 1.5, it does not work. Should be corrected. (cherry picked from commit 7cbb12138d6ee3c0552ecfee3299bd6fbb181740) Modified: vmkit/trunk/tools/precompiler/trainer/Makefile Modified: vmkit/trunk/tools/precompiler/trainer/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=180337&r1=180336&r2=180337&view=diff ============================================================================== --- vmkit/trunk/tools/precompiler/trainer/Makefile (original) +++ vmkit/trunk/tools/precompiler/trainer/Makefile Thu Apr 25 11:59:00 2013 @@ -24,7 +24,8 @@ endif HelloWorld.class: HelloWorld.java $(Echo) "Compiling trainer" - $(Verb) javac -target $(JAVAC_TARGET) $< -d . +# $(Verb) javac -source $(JAVAC_TARGET) -target $(JAVAC_TARGET) $< -d . + $(Verb) javac $< -d . generated.bc: $(PRECOMPILER) HelloWorld.class $(Echo) "Pre-compiling bootstrap code" From peter.senna at gmail.com Thu Apr 25 10:00:34 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:34 -0000 Subject: [vmkit-commits] [vmkit] r180338 - Don't check for java 1.5 in j3, it does not work... Message-ID: <20130425165904.5A5772A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:59:04 2013 New Revision: 180338 URL: http://llvm.org/viewvc/llvm-project?rev=180338&view=rev Log: Don't check for java 1.5 in j3, it does not work... (cherry picked from commit fd83b1f1b02b7aa7e073e842083c859ba0598a37) Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180338&r1=180337&r2=180338&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:59:04 2013 @@ -940,6 +940,7 @@ void Class::getMinimalJDKVersion(uint16 bool Class::isClassVersionSupported(uint16 major, uint16 minor) { +#if 0 const int supportedJavaMinorVersion = 5; // Java 1.5 unsigned int JDKMajor, JDKMinor, JDKBuild; @@ -951,6 +952,9 @@ bool Class::isClassVersionSupported(uint ". This JVM only supports Java versions up to 1." << supportedJavaMinorVersion << '.' << endl; } return res; +#else + return 1; +#endif } void UserClass::resolveParents() { From peter.senna at gmail.com Thu Apr 25 10:00:53 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:53 -0000 Subject: [vmkit-commits] [vmkit] r180339 - J3 checks for Java class version on loading. This code was correct since the beginning. Message-ID: <20130425165909.226822A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:59:08 2013 New Revision: 180339 URL: http://llvm.org/viewvc/llvm-project?rev=180339&view=rev Log: J3 checks for Java class version on loading. This code was correct since the beginning. (cherry picked from commit 0b5f5fc6b2313889da9b22864ace43f42b448376) Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180339&r1=180338&r2=180339&view=diff ============================================================================== --- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original) +++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:59:08 2013 @@ -940,7 +940,6 @@ void Class::getMinimalJDKVersion(uint16 bool Class::isClassVersionSupported(uint16 major, uint16 minor) { -#if 0 const int supportedJavaMinorVersion = 5; // Java 1.5 unsigned int JDKMajor, JDKMinor, JDKBuild; @@ -952,9 +951,6 @@ bool Class::isClassVersionSupported(uint ". This JVM only supports Java versions up to 1." << supportedJavaMinorVersion << '.' << endl; } return res; -#else - return 1; -#endif } void UserClass::resolveParents() { From peter.senna at gmail.com Thu Apr 25 10:00:55 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:00:55 -0000 Subject: [vmkit-commits] [vmkit] r180340 - Updated Dacapo tests. Message-ID: <20130425165925.552F52A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:59:24 2013 New Revision: 180340 URL: http://llvm.org/viewvc/llvm-project?rev=180340&view=rev Log: Updated Dacapo tests. (cherry picked from commit 468ecb3542982e1bdffa7bf8f603bc8fbf719585) Added: vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile - copied, changed from r180339, vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile vmkit/trunk/tests/dacapo/2006-10/Makefile - copied, changed from r180339, vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile vmkit/trunk/tests/dacapo/9.12-bach/Makefile - copied, changed from r180339, vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile vmkit/trunk/tests/dacapo/Makefile - copied, changed from r180339, vmkit/trunk/incinerator/tests/dacapo/Makefile vmkit/trunk/tests/dacapo/Makefile.inc - copied, changed from r180339, vmkit/trunk/incinerator/tests/dacapo/Makefile.inc vmkit/trunk/tests/dacapo/jars/download.txt - copied, changed from r180339, vmkit/trunk/incinerator/tests/dacapo/jars/download.txt Removed: vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile vmkit/trunk/incinerator/tests/dacapo/Makefile vmkit/trunk/incinerator/tests/dacapo/Makefile.inc vmkit/trunk/incinerator/tests/dacapo/jars/download.txt Removed: vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile?rev=180339&view=auto ============================================================================== --- vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile (original) +++ vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile (removed) @@ -1,6 +0,0 @@ -LEVEL := .. -DACAPO_VERSION := 2006-10-MR2 -DACAPO_ARGS := -s default -DECAPO_BENCHMARKS := antlr bloat chart eclipse fop hsqldb jython luindex lusearch pmd xalan batik ps - -include ../Makefile.inc Removed: vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile?rev=180339&view=auto ============================================================================== --- vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile (original) +++ vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile (removed) @@ -1,6 +0,0 @@ -LEVEL := .. -DACAPO_VERSION := 2006-10 -DACAPO_ARGS := -s default -DECAPO_BENCHMARKS := antlr bloat chart eclipse fop hsqldb jython luindex lusearch pmd xalan batik ps - -include ../Makefile.inc Removed: vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile?rev=180339&view=auto ============================================================================== --- vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile (original) +++ vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile (removed) @@ -1,6 +0,0 @@ -LEVEL := .. -DACAPO_VERSION := 9.12-bach -DACAPO_ARGS := -s default -DECAPO_BENCHMARKS := avrora batik eclipse fop h2 jython luindex lusearch pmd sunflow tomcat tradebeans tradesoap xalan - -include ../Makefile.inc Removed: vmkit/trunk/incinerator/tests/dacapo/Makefile URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/dacapo/Makefile?rev=180339&view=auto ============================================================================== --- vmkit/trunk/incinerator/tests/dacapo/Makefile (original) +++ vmkit/trunk/incinerator/tests/dacapo/Makefile (removed) @@ -1,9 +0,0 @@ -LEVEL := . -DIRS := 2006-10 2006-10-MR2 9.12-bach - -default: all - -$(DIRS):: - $(MAKE) -C $@ $(MAKECMDGOALS) - -all clean: $(DIRS) Removed: vmkit/trunk/incinerator/tests/dacapo/Makefile.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/dacapo/Makefile.inc?rev=180339&view=auto ============================================================================== --- vmkit/trunk/incinerator/tests/dacapo/Makefile.inc (original) +++ vmkit/trunk/incinerator/tests/dacapo/Makefile.inc (removed) @@ -1,35 +0,0 @@ -TEMP_LEVEL := ../.. -DACAPO := $(PWD)/$(LEVEL)/jars/dacapo-$(DACAPO_VERSION).jar -LOG_DIR := $(LEVEL)/logs -LOG_DIR_FROM_TEMP := $(PWD)/$(LOG_DIR) -J3_PATH := $(PWD)/../$(TEMP_LEVEL)/$(LEVEL)/vmkit_stale_ref/Debug+Asserts/bin/j3 -TEMP_J3 := $(PWD)/$(LEVEL)/$(DACAPO_VERSION)/j3 -IJVM_PATH := $(PWD)/../$(TEMP_LEVEL)/$(LEVEL)/ijvm/Debug+Asserts/bin/j3 -TEMP_IJVM := $(PWD)/$(LEVEL)/$(DACAPO_VERSION)/ijvm - -ifndef ENABLE_J3 - ENABLE_J3 := 1 -endif - -ifndef ENABLE_IJVM - ENABLE_IJVM := 1 -endif - -J3_DEFINED := [ "$(ENABLE_J3)" -ne 0 ] -IJVM_DEFINED := [ "$(ENABLE_IJVM)" -ne 0 ] - -all: $(VM) $(LOG_DIR) $(DECAPO_BENCHMARKS) - -$(LOG_DIR): - @mkdir -p $@ 2>/dev/null - -$(DECAPO_BENCHMARKS): - @-$(J3_DEFINED) && echo "Dacapo benchmark version " $(DACAPO_VERSION) ": j3 ==> " $@ - @-$(J3_DEFINED) && rm -rf $(TEMP_J3)/$@ && mkdir -p $(TEMP_J3)/$@ - @-$(J3_DEFINED) && cd $(TEMP_J3)/$@ && $(J3_PATH) -jar $(DACAPO) $(DACAPO_ARGS) $@ >$(LOG_DIR_FROM_TEMP)/j3-$@-$(DACAPO_VERSION).log 2>&1 - @-$(IJVM_DEFINED) && echo "Dacapo benchmark version " $(DACAPO_VERSION) ": ijvm ==> " $@ - @-$(IJVM_DEFINED) && rm -rf $(TEMP_IJVM)/$@ && mkdir -p $(TEMP_IJVM)/$@ - @-$(IJVM_DEFINED) && cd $(TEMP_IJVM)/$@ && $(IJVM_PATH) -jar $(DACAPO) $(DACAPO_ARGS) $@ >$(LOG_DIR_FROM_TEMP)/ijvm-$@-$(DACAPO_VERSION).log 2>&1 - -clean: - @-rm -rf $(LOG_DIR) $(TEMP_J3) $(TEMP_IJVM) 2>/dev/null Removed: vmkit/trunk/incinerator/tests/dacapo/jars/download.txt URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/dacapo/jars/download.txt?rev=180339&view=auto ============================================================================== --- vmkit/trunk/incinerator/tests/dacapo/jars/download.txt (original) +++ vmkit/trunk/incinerator/tests/dacapo/jars/download.txt (removed) @@ -1,3 +0,0 @@ -http://sourceforge.net/projects/dacapobench/files/archive/2006-10/ -http://sourceforge.net/projects/dacapobench/files/archive/2006-10-MR2/ -http://sourceforge.net/projects/dacapobench/files/9.12-bach/ Copied: vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile (from r180339, vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile?p2=vmkit/trunk/tests/dacapo/2006-10-MR2/Makefile&p1=vmkit/trunk/incinerator/tests/dacapo/2006-10-MR2/Makefile&r1=180339&r2=180340&rev=180340&view=diff ============================================================================== (empty) Copied: vmkit/trunk/tests/dacapo/2006-10/Makefile (from r180339, vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/2006-10/Makefile?p2=vmkit/trunk/tests/dacapo/2006-10/Makefile&p1=vmkit/trunk/incinerator/tests/dacapo/2006-10/Makefile&r1=180339&r2=180340&rev=180340&view=diff ============================================================================== (empty) Copied: vmkit/trunk/tests/dacapo/9.12-bach/Makefile (from r180339, vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/9.12-bach/Makefile?p2=vmkit/trunk/tests/dacapo/9.12-bach/Makefile&p1=vmkit/trunk/incinerator/tests/dacapo/9.12-bach/Makefile&r1=180339&r2=180340&rev=180340&view=diff ============================================================================== (empty) Copied: vmkit/trunk/tests/dacapo/Makefile (from r180339, vmkit/trunk/incinerator/tests/dacapo/Makefile) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/Makefile?p2=vmkit/trunk/tests/dacapo/Makefile&p1=vmkit/trunk/incinerator/tests/dacapo/Makefile&r1=180339&r2=180340&rev=180340&view=diff ============================================================================== (empty) Copied: vmkit/trunk/tests/dacapo/Makefile.inc (from r180339, vmkit/trunk/incinerator/tests/dacapo/Makefile.inc) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/Makefile.inc?p2=vmkit/trunk/tests/dacapo/Makefile.inc&p1=vmkit/trunk/incinerator/tests/dacapo/Makefile.inc&r1=180339&r2=180340&rev=180340&view=diff ============================================================================== --- vmkit/trunk/incinerator/tests/dacapo/Makefile.inc (original) +++ vmkit/trunk/tests/dacapo/Makefile.inc Thu Apr 25 11:59:24 2013 @@ -2,7 +2,7 @@ TEMP_LEVEL := ../.. DACAPO := $(PWD)/$(LEVEL)/jars/dacapo-$(DACAPO_VERSION).jar LOG_DIR := $(LEVEL)/logs LOG_DIR_FROM_TEMP := $(PWD)/$(LOG_DIR) -J3_PATH := $(PWD)/../$(TEMP_LEVEL)/$(LEVEL)/vmkit_stale_ref/Debug+Asserts/bin/j3 +J3_PATH := $(PWD)/../$(TEMP_LEVEL)/$(LEVEL)/vmkit2/Debug+Asserts/bin/j3 TEMP_J3 := $(PWD)/$(LEVEL)/$(DACAPO_VERSION)/j3 IJVM_PATH := $(PWD)/../$(TEMP_LEVEL)/$(LEVEL)/ijvm/Debug+Asserts/bin/j3 TEMP_IJVM := $(PWD)/$(LEVEL)/$(DACAPO_VERSION)/ijvm @@ -23,7 +23,7 @@ all: $(VM) $(LOG_DIR) $(DECAPO_BENCHMARK $(LOG_DIR): @mkdir -p $@ 2>/dev/null -$(DECAPO_BENCHMARKS): +$(DECAPO_BENCHMARKS): $(DACAPO) @-$(J3_DEFINED) && echo "Dacapo benchmark version " $(DACAPO_VERSION) ": j3 ==> " $@ @-$(J3_DEFINED) && rm -rf $(TEMP_J3)/$@ && mkdir -p $(TEMP_J3)/$@ @-$(J3_DEFINED) && cd $(TEMP_J3)/$@ && $(J3_PATH) -jar $(DACAPO) $(DACAPO_ARGS) $@ >$(LOG_DIR_FROM_TEMP)/j3-$@-$(DACAPO_VERSION).log 2>&1 Copied: vmkit/trunk/tests/dacapo/jars/download.txt (from r180339, vmkit/trunk/incinerator/tests/dacapo/jars/download.txt) URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/dacapo/jars/download.txt?p2=vmkit/trunk/tests/dacapo/jars/download.txt&p1=vmkit/trunk/incinerator/tests/dacapo/jars/download.txt&r1=180339&r2=180340&rev=180340&view=diff ============================================================================== (empty) From peter.senna at gmail.com Thu Apr 25 10:01:05 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:01:05 -0000 Subject: [vmkit-commits] [vmkit] r180341 - getDeclaredAnnotations in VMField is working for GNUClasspath Message-ID: <20130425165931.CD1A42A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:59:31 2013 New Revision: 180341 URL: http://llvm.org/viewvc/llvm-project?rev=180341&view=rev Log: getDeclaredAnnotations in VMField is working for GNUClasspath (cherry picked from commit 43fb29a378aee7d15ad27760c978615cdea505b1) Modified: vmkit/trunk/incinerator/tests/AnnotationClassTest.java vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Modified: vmkit/trunk/incinerator/tests/AnnotationClassTest.java URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/AnnotationClassTest.java?rev=180341&r1=180340&r2=180341&view=diff ============================================================================== --- vmkit/trunk/incinerator/tests/AnnotationClassTest.java (original) +++ vmkit/trunk/incinerator/tests/AnnotationClassTest.java Thu Apr 25 11:59:31 2013 @@ -28,9 +28,13 @@ public class AnnotationClassTest { Method m = Sample.class.getMethod("y"); Sample sample = new Sample(); sample.x = 14; + + f.getDeclaredAnnotations(); MyAnnotation xx = (MyAnnotation)f.getAnnotation(MyAnnotation.class); MyAnnotation yy = (MyAnnotation)f.getAnnotation(MyAnnotation.class); + + check(f.getInt(sample) == 14); f.setInt(sample, 17); Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc?rev=180341&r1=180340&r2=180341&view=diff ============================================================================== --- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc (original) +++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Thu Apr 25 11:59:31 2013 @@ -28,7 +28,7 @@ #include "Reader.h" -#if 1 +#if 0 using namespace vmkit; #define dprintf(...) do { printf("ClasspathVMField: "); printf(__VA_ARGS__); } while(0) #else @@ -60,7 +60,7 @@ JavaObjectVMField* VMField, JavaObjectCl if (annotationClass) { /* Retrieving annotationClass classname */ UserClass* clazz = JavaObjectClass::getClass(annotationClass)->asClass(); - dprintf("searched annotation : %s\n\n", UTF8Buffer(clazz->name).cString()); + dprintf("searched annotation : %s in loader %ld\n\n", UTF8Buffer(clazz->name).cString(), JavaObjectClass::getClass(annotationClass)->classLoader); /* Retrieving VMField.class attributes list */ UserClass* compilingClass = JavaObjectVMField::getClass(VMField); @@ -83,6 +83,8 @@ JavaObjectVMField* VMField, JavaObjectCl dprintf("Comparing with : %s\n", UTF8Buffer(annoType).cString()); if (clazz->name->equals(annoType->elements+1, annoType->size-2)) { newHashMap = AR.createAnnotationMapValues(); + + break; } else { @@ -105,6 +107,77 @@ JavaObjectVMField* VMField, JavaObjectCl return res; } +JNIEXPORT JavaObject* JNICALL Java_java_lang_reflect_VMField_getDeclaredAnnotations( +#ifdef NATIVE_JNI +JNIEnv *env, +#endif +JavaObjectVMField* VMField) { + JavaObject* res = 0; + JavaObject* annon = 0; + JavaObject* newHashMap = 0; + JavaObject* annotationClass = 0; + llvm_gcroot(res, 0); + llvm_gcroot(annon, 0); + llvm_gcroot(newHashMap, 0); + llvm_gcroot(VMField, 0); + llvm_gcroot(annotationClass, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + Jnjvm* vm = JavaThread::get()->getJVM(); + Classpath* upcalls = vm->upcalls; + + /* Retrieving VMField.class attributes list */ + UserClass* compilingClass = JavaObjectVMField::getClass(VMField); + JavaField* field = JavaObjectVMField::getInternalField(VMField); + Attribut* annotationsAtt = + field->lookupAttribut(Attribut::annotationsAttribut); + dprintf("JavaField : %s\n", UTF8Buffer(field->name).cString()); + + //UserCommonClass* cl = JavaObject::getClass(VMField); + JnjvmClassLoader* loader = compilingClass->classLoader; + + if (annotationsAtt) { + Reader reader(annotationsAtt, compilingClass->bytes); + AnnotationReader AR(reader, compilingClass); + uint16 numAnnotations = reader.readU2(); + + UserClassArray* array = upcalls->annotationArrayClass; + res = array->doNew(numAnnotations, vm); + dprintf("JavaField : %s % with %d fields \n", UTF8Buffer(field->name).cString(), numAnnotations); + dprintf("The loader to use is : %ld\n", loader); + for (uint16 i = 0; i < numAnnotations; ++i) { + uint16 typeIndex = reader.readU2(); + const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex); + newHashMap = AR.createAnnotationMapValues(); + + annoType = annoType->extract(loader->hashUTF8, 1,annoType->size-1); + dprintf("Annotation type : %s\n", UTF8Buffer(annoType).cString()); + UserClass* AnnonClass = 0; + UserCommonClass* commClass = loader->lookupClass(annoType); + + if (commClass) + AnnonClass = commClass -> asClass(); + else + AnnonClass = loader->loadName(annoType, true, true, NULL); + + if (!AnnonClass) { + dprintf("AHHHHHH\n"); + abort(); + } + dprintf("Loaded class : %s \n", UTF8Buffer(AnnonClass->name).cString()); + annotationClass = AnnonClass->getClassDelegatee(vm); + + annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap); + ArrayObject::setElement((ArrayObject *)res, annon, i); + } // end for + } + + END_NATIVE_EXCEPTION + dprintf("getDeclaredAnnotations done\n"); + return res; +} + JNIEXPORT jint JNICALL Java_java_lang_reflect_VMField_getModifiersInternal( #ifdef NATIVE_JNI JNIEnv *env, From peter.senna at gmail.com Thu Apr 25 10:01:06 2013 From: peter.senna at gmail.com (Peter Senna Tschudin) Date: Thu, 25 Apr 2013 17:01:06 -0000 Subject: [vmkit-commits] [vmkit] r180342 - Updated Dacapo tests to run using the Release+Asserts build of J3. Message-ID: <20130425165936.A8A6B2A6C02A@llvm.org> Author: peter.senna Date: Thu Apr 25 11:59:36 2013 New Revision: 180342 URL: http://llvm.org/viewvc/llvm-project?rev=180342&view=rev Log: Updated Dacapo tests to run using the Release+Asserts build of J3. (cherry picked from commit f78f7f6d260ec1b5b51e53f07dea4d9e133e86bf) Modified: vmkit/trunk/.autotools vmkit/trunk/.cproject vmkit/trunk/tests/dacapo/Makefile.inc Modified: vmkit/trunk/.autotools URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/.autotools?rev=180342&r1=180341&r2=180342&view=diff ============================================================================== --- vmkit/trunk/.autotools (original) +++ vmkit/trunk/.autotools Thu Apr 25 11:59:36 2013 @@ -39,4 +39,43 @@