From: <fd...@us...> - 2010-07-11 14:27:47
|
Revision: 5756 http://jnode.svn.sourceforge.net/jnode/?rev=5756&view=rev Author: fduminy Date: 2010-07-11 14:27:38 +0000 (Sun, 11 Jul 2010) Log Message: ----------- Merge git://gitorious.org/~fduminy/jnode/maven into HEAD Conflicts: builder/src/builder/org/jnode/build/AbstractBootImageBuilder.java builder/src/builder/org/jnode/build/ObjectEmitter.java core/src/classpath/vm/java/lang/ThreadHelper.java core/src/core/org/jnode/assembler/x86/X86Register.java core/src/core/org/jnode/plugin/model/PluginJar.java core/src/core/org/jnode/plugin/model/PluginRegistryModel.java core/src/core/org/jnode/system/IRQResource.java core/src/core/org/jnode/system/resource/IRQResource.java core/src/core/org/jnode/vm/BaseVmArchitecture.java core/src/core/org/jnode/vm/BootLogImpl.java core/src/core/org/jnode/vm/InternString.java core/src/core/org/jnode/vm/MemoryBlockManager.java core/src/core/org/jnode/vm/Unsafe.java core/src/core/org/jnode/vm/VmImpl.java core/src/core/org/jnode/vm/bytecode/BasicBlock.java core/src/core/org/jnode/vm/classmgr/ClassDecoder.java core/src/core/org/jnode/vm/classmgr/SelectorMap.java core/src/core/org/jnode/vm/classmgr/VmType.java core/src/core/org/jnode/vm/compiler/OptimizingBytecodeVisitor.java core/src/core/org/jnode/vm/isolate/VmIsolate.java core/src/core/org/jnode/vm/objects/VmSystemObject.java core/src/core/org/jnode/vm/scheduler/IRQManager.java core/src/core/org/jnode/vm/x86/VmX86Architecture.java core/src/core/org/jnode/vm/x86/VmX86Processor.java core/src/core/org/jnode/vm/x86/VmX86Processor32.java core/src/core/org/jnode/vm/x86/VmX86Processor64.java core/src/core/org/jnode/vm/x86/compiler/l1a/X86BytecodeVisitor.java core/src/core/org/jnode/vm/x86/compiler/l1b/X86BytecodeVisitor.java core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/BaseMmtkHeapManager.java core/src/mmtk-vm/org/mmtk/vm/Assert.java Modified Paths: -------------- trunk/builder/src/builder/org/jnode/ant/taskdefs/NativeCheckTask.java trunk/builder/src/builder/org/jnode/build/AbstractAsmConstBuilder.java trunk/builder/src/builder/org/jnode/build/AbstractBootImageBuilder.java trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java trunk/builder/src/builder/org/jnode/build/x86/AsmConstBuilder.java trunk/builder/src/builder/org/jnode/build/x86/BootImageBuilder.java trunk/cli/src/commands/org/jnode/command/system/GcCommand.java trunk/cli/src/commands/org/jnode/command/system/OnHeapCommand.java trunk/cli/src/commands/org/jnode/command/system/PluginCommand.java trunk/cli/src/commands/org/jnode/command/system/VmInfoCommand.java trunk/core/descriptors/org.jnode.vm.core.xml trunk/core/src/classpath/vm/gnu/classpath/jdwp/NativeVMVirtualMachine.java trunk/core/src/classpath/vm/java/lang/ThreadHelper.java trunk/core/src/classpath/vm/java/lang/VMRuntime.java trunk/core/src/classpath/vm/java/lang/VMSystem.java trunk/core/src/core/org/jnode/assembler/ObjectResolver.java trunk/core/src/core/org/jnode/assembler/x86/X86Register.java trunk/core/src/core/org/jnode/plugin/AutoUnzipPlugin.java trunk/core/src/core/org/jnode/plugin/PluginClassLoader.java trunk/core/src/core/org/jnode/plugin/PluginDescriptor.java trunk/core/src/core/org/jnode/plugin/model/AbstractModelObject.java trunk/core/src/core/org/jnode/plugin/model/AttributeModel.java trunk/core/src/core/org/jnode/plugin/model/ExtensionPointModel.java trunk/core/src/core/org/jnode/plugin/model/PluginClassLoaderImpl.java trunk/core/src/core/org/jnode/plugin/model/PluginJar.java trunk/core/src/core/org/jnode/plugin/model/PluginRegistryModel.java trunk/core/src/core/org/jnode/vm/AllocationBitmap.java trunk/core/src/core/org/jnode/vm/BootLogImpl.java trunk/core/src/core/org/jnode/vm/HeapHelperImpl.java trunk/core/src/core/org/jnode/vm/InternString.java trunk/core/src/core/org/jnode/vm/LoadCompileService.java trunk/core/src/core/org/jnode/vm/MemoryBlockManager.java trunk/core/src/core/org/jnode/vm/MemoryResourceImpl.java trunk/core/src/core/org/jnode/vm/SoftByteCodes.java trunk/core/src/core/org/jnode/vm/Unsafe.java trunk/core/src/core/org/jnode/vm/VmAddress.java trunk/core/src/core/org/jnode/vm/VmJavaClassLoader.java trunk/core/src/core/org/jnode/vm/VmReflection.java trunk/core/src/core/org/jnode/vm/VmStackFrame.java trunk/core/src/core/org/jnode/vm/VmStackReader.java trunk/core/src/core/org/jnode/vm/VmSystem.java trunk/core/src/core/org/jnode/vm/VmSystemClassLoader.java trunk/core/src/core/org/jnode/vm/bytecode/BasicBlock.java trunk/core/src/core/org/jnode/vm/classmgr/AbstractCode.java trunk/core/src/core/org/jnode/vm/classmgr/AbstractExceptionHandler.java trunk/core/src/core/org/jnode/vm/classmgr/ClassDecoder.java trunk/core/src/core/org/jnode/vm/classmgr/CompiledCodeList.java trunk/core/src/core/org/jnode/vm/classmgr/ObjectLayout.java trunk/core/src/core/org/jnode/vm/classmgr/SelectorMap.java trunk/core/src/core/org/jnode/vm/classmgr/Signature.java trunk/core/src/core/org/jnode/vm/classmgr/VmAddressMap.java trunk/core/src/core/org/jnode/vm/classmgr/VmAnnotatedElement.java trunk/core/src/core/org/jnode/vm/classmgr/VmAnnotation.java trunk/core/src/core/org/jnode/vm/classmgr/VmArray.java trunk/core/src/core/org/jnode/vm/classmgr/VmByteCode.java trunk/core/src/core/org/jnode/vm/classmgr/VmCP.java trunk/core/src/core/org/jnode/vm/classmgr/VmClassLoader.java trunk/core/src/core/org/jnode/vm/classmgr/VmClassType.java trunk/core/src/core/org/jnode/vm/classmgr/VmConstObject.java trunk/core/src/core/org/jnode/vm/classmgr/VmExceptions.java trunk/core/src/core/org/jnode/vm/classmgr/VmField.java trunk/core/src/core/org/jnode/vm/classmgr/VmImplementedInterface.java trunk/core/src/core/org/jnode/vm/classmgr/VmIsolatedStatics.java trunk/core/src/core/org/jnode/vm/classmgr/VmLineNumberMap.java trunk/core/src/core/org/jnode/vm/classmgr/VmLocalVariable.java trunk/core/src/core/org/jnode/vm/classmgr/VmLocalVariableTable.java trunk/core/src/core/org/jnode/vm/classmgr/VmMember.java trunk/core/src/core/org/jnode/vm/classmgr/VmMethod.java trunk/core/src/core/org/jnode/vm/classmgr/VmMethodCode.java trunk/core/src/core/org/jnode/vm/classmgr/VmSharedStatics.java trunk/core/src/core/org/jnode/vm/classmgr/VmStatics.java trunk/core/src/core/org/jnode/vm/classmgr/VmStaticsBase.java trunk/core/src/core/org/jnode/vm/classmgr/VmType.java trunk/core/src/core/org/jnode/vm/compiler/CompiledIMT.java trunk/core/src/core/org/jnode/vm/compiler/CompiledMethod.java trunk/core/src/core/org/jnode/vm/compiler/EntryPoints.java trunk/core/src/core/org/jnode/vm/compiler/IMTCompiler.java trunk/core/src/core/org/jnode/vm/compiler/NativeCodeCompiler.java trunk/core/src/core/org/jnode/vm/compiler/OptimizingBytecodeVisitor.java trunk/core/src/core/org/jnode/vm/isolate/VmIsolate.java trunk/core/src/core/org/jnode/vm/isolate/VmIsolateLocal.java trunk/core/src/core/org/jnode/vm/memmgr/HeapHelper.java trunk/core/src/core/org/jnode/vm/memmgr/VmHeapManager.java trunk/core/src/core/org/jnode/vm/memmgr/def/DefGCStatistics.java trunk/core/src/core/org/jnode/vm/memmgr/def/DefHeapStatistics.java trunk/core/src/core/org/jnode/vm/memmgr/def/DefaultHeapManager.java trunk/core/src/core/org/jnode/vm/memmgr/def/DefaultWriteBarrier.java trunk/core/src/core/org/jnode/vm/memmgr/def/FinalizerVisitor.java trunk/core/src/core/org/jnode/vm/memmgr/def/GCManager.java trunk/core/src/core/org/jnode/vm/memmgr/def/GCMarkVisitor.java trunk/core/src/core/org/jnode/vm/memmgr/def/GCSetWhiteVisitor.java trunk/core/src/core/org/jnode/vm/memmgr/def/GCStack.java trunk/core/src/core/org/jnode/vm/memmgr/def/GCSweepVisitor.java trunk/core/src/core/org/jnode/vm/memmgr/def/GCVerifyVisitor.java trunk/core/src/core/org/jnode/vm/memmgr/def/HeapStatisticsVisitor.java trunk/core/src/core/org/jnode/vm/memmgr/def/VmAbstractHeap.java trunk/core/src/core/org/jnode/vm/memmgr/def/VmBootHeap.java trunk/core/src/core/org/jnode/vm/memmgr/def/VmDefaultHeap.java trunk/core/src/core/org/jnode/vm/objects/BootableArrayList.java trunk/core/src/core/org/jnode/vm/objects/BootableHashMap.java trunk/core/src/core/org/jnode/vm/objects/Statistic.java trunk/core/src/core/org/jnode/vm/scheduler/IRQManager.java trunk/core/src/core/org/jnode/vm/scheduler/MonitorManager.java trunk/core/src/core/org/jnode/vm/scheduler/SpinLock.java trunk/core/src/core/org/jnode/vm/scheduler/VmProcessor.java trunk/core/src/core/org/jnode/vm/scheduler/VmScheduler.java trunk/core/src/core/org/jnode/vm/scheduler/VmThread.java trunk/core/src/core/org/jnode/vm/scheduler/VmThreadQueue.java trunk/core/src/core/org/jnode/vm/scheduler/VmThreadQueueEntry.java trunk/core/src/core/org/jnode/vm/x86/VmX86Architecture.java trunk/core/src/core/org/jnode/vm/x86/VmX86Architecture32.java trunk/core/src/core/org/jnode/vm/x86/VmX86Architecture64.java trunk/core/src/core/org/jnode/vm/x86/VmX86Processor.java trunk/core/src/core/org/jnode/vm/x86/VmX86Processor32.java trunk/core/src/core/org/jnode/vm/x86/VmX86Processor64.java trunk/core/src/core/org/jnode/vm/x86/VmX86Thread.java trunk/core/src/core/org/jnode/vm/x86/VmX86Thread64.java trunk/core/src/core/org/jnode/vm/x86/X86MemoryMapEntry.java trunk/core/src/core/org/jnode/vm/x86/compiler/AbstractX86Compiler.java trunk/core/src/core/org/jnode/vm/x86/compiler/X86CompilerHelper.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/DoubleItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/DoubleWordItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/FPCompilerFPU.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/FloatItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/IntItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/Item.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/ItemFactory.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/ItemStack.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/LongItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/MagicHelper.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/RefItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/VirtualStack.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/WordItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/X86BytecodeVisitor.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/X86StackFrame.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/DoubleItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/DoubleWordItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/FPCompilerFPU.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/FloatItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/IntItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/Item.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/ItemFactory.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/ItemStack.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/LongItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/MagicHelper.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/RefItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/VirtualStack.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/WordItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/X86BytecodeVisitor.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/X86StackFrame.java trunk/core/src/driver/org/jnode/driver/bus/pci/PCIDriver.java trunk/core/src/driver/org/jnode/driver/system/acpi/AcpiDriver.java trunk/core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/BaseMmtkGCStatistics.java trunk/core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/BaseMmtkHeapManager.java trunk/core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/genrc/HeapManager.java trunk/core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/ms/HeapManager.java trunk/core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/nogc/HeapManager.java trunk/core/src/mmtk-vm/org/mmtk/vm/Assert.java trunk/core/src/mmtk-vm/org/mmtk/vm/Memory.java trunk/core/src/mmtk-vm/org/mmtk/vm/Scanning.java trunk/core/src/mmtk-vm/org/mmtk/vm/Strings.java trunk/core/src/mmtk-vm/org/mmtk/vm/VMConstants.java trunk/core/src/openjdk/vm/java/lang/NativeRuntime.java trunk/core/src/openjdk/vm/java/lang/reflect/NativeArray.java trunk/core/src/openjdk/vm/sun/management/NativeThreadImpl.java trunk/core/src/openjdk/vm/sun/management/NativeVMManagementImpl.java trunk/core/src/openjdk/vm/sun/misc/NativeUnsafe.java trunk/core/src/test/org/jnode/test/ResolverTest.java trunk/core/src/test/org/jnode/test/core/CompilerTest.java trunk/core/src/test/org/jnode/test/core/IMTCompilerTest.java trunk/core/src/test/org/jnode/test/core/StackView.java trunk/core/src/vmmagic/org/vmmagic/unboxed/MagicUtils.java trunk/gui/src/awt/org/jnode/awt/font/renderer/SummedAreaTable.java trunk/gui/src/awt/org/jnode/awt/font/spi/AbstractTextRenderer.java trunk/gui/src/awt/org/jnode/awt/util/BasicSurfaceGraphics.java trunk/gui/src/desktop/org/jnode/desktop/Desktop.java trunk/gui/src/driver/org/jnode/driver/video/vga/VGABitmapGraphics.java trunk/gui/src/driver/org/jnode/driver/video/vga/VGADriver.java Added Paths: ----------- trunk/core/src/core/org/jnode/vm/BaseVmArchitecture.java trunk/core/src/core/org/jnode/vm/VmImpl.java trunk/core/src/core/org/jnode/vm/classmgr/Mangler.java trunk/core/src/core/org/jnode/vm/facade/ trunk/core/src/core/org/jnode/vm/facade/GCStatistics.java trunk/core/src/core/org/jnode/vm/facade/HeapStatistics.java trunk/core/src/core/org/jnode/vm/facade/MemoryMapEntry.java trunk/core/src/core/org/jnode/vm/facade/ObjectVisitor.java trunk/core/src/core/org/jnode/vm/facade/TypeSizeInfo.java trunk/core/src/core/org/jnode/vm/facade/Vm.java trunk/core/src/core/org/jnode/vm/facade/VmArchitecture.java trunk/core/src/core/org/jnode/vm/facade/VmHeapManager.java trunk/core/src/core/org/jnode/vm/facade/VmProcessor.java trunk/core/src/core/org/jnode/vm/facade/VmThread.java trunk/core/src/core/org/jnode/vm/facade/VmThreadVisitor.java trunk/core/src/core/org/jnode/vm/facade/VmUtils.java trunk/core/src/core/org/jnode/vm/facade/VmWriteBarrier.java trunk/core/src/core/org/jnode/vm/objects/BootableObject.java trunk/core/src/core/org/jnode/vm/objects/VmSystemObject.java Removed Paths: ------------- trunk/core/src/core/org/jnode/vm/BootableObject.java trunk/core/src/core/org/jnode/vm/MemoryMapEntry.java trunk/core/src/core/org/jnode/vm/ObjectVisitor.java trunk/core/src/core/org/jnode/vm/Vm.java trunk/core/src/core/org/jnode/vm/VmArchitecture.java trunk/core/src/core/org/jnode/vm/VmSystemObject.java trunk/core/src/core/org/jnode/vm/VmUtils.java trunk/core/src/core/org/jnode/vm/classmgr/TypeSizeInfo.java trunk/core/src/core/org/jnode/vm/memmgr/GCStatistics.java trunk/core/src/core/org/jnode/vm/memmgr/HeapStatistics.java trunk/core/src/core/org/jnode/vm/memmgr/VmWriteBarrier.java trunk/core/src/core/org/jnode/vm/scheduler/VmThreadVisitor.java Property Changed: ---------------- trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/DoubleItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/FloatItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/IntItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/LongItem.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/RefItem.java Modified: trunk/builder/src/builder/org/jnode/ant/taskdefs/NativeCheckTask.java =================================================================== --- trunk/builder/src/builder/org/jnode/ant/taskdefs/NativeCheckTask.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/builder/src/builder/org/jnode/ant/taskdefs/NativeCheckTask.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -30,8 +30,9 @@ import java.util.Map; import java.util.Set; import java.util.TreeSet; + import org.apache.tools.ant.BuildException; -import org.jnode.vm.VmUtils; +import org.jnode.vm.facade.VmUtils; import org.objectweb.asm.Attribute; import org.objectweb.asm.ClassAdapter; import org.objectweb.asm.ClassReader; Modified: trunk/builder/src/builder/org/jnode/build/AbstractAsmConstBuilder.java =================================================================== --- trunk/builder/src/builder/org/jnode/build/AbstractAsmConstBuilder.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/builder/src/builder/org/jnode/build/AbstractAsmConstBuilder.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -30,13 +30,15 @@ import java.net.URL; import java.util.ArrayList; import java.util.Date; -import org.jnode.vm.Vm; -import org.jnode.vm.VmArchitecture; + +import org.jnode.vm.BaseVmArchitecture; +import org.jnode.vm.VmImpl; import org.jnode.vm.VmSystemClassLoader; import org.jnode.vm.classmgr.VmField; import org.jnode.vm.classmgr.VmInstanceField; import org.jnode.vm.classmgr.VmNormalClass; import org.jnode.vm.classmgr.VmType; +import org.jnode.vm.facade.Vm; /** * TODO describe the class. @@ -75,14 +77,14 @@ private void doExecute() throws BuildException, ClassNotFoundException, IllegalAccessException, IOException, InstantiationException { - final VmArchitecture arch = getArchitecture(); + final BaseVmArchitecture arch = getArchitecture(); String[] urls = classesURL.split(","); URL[] urla = new URL[urls.length]; for (int i = 0; i < urls.length; i++) urla[i] = new URL(urls[i].trim()); final VmSystemClassLoader cl = new VmSystemClassLoader(urla, arch); - final Vm vm = new Vm("?", arch, cl.getSharedStatics(), false, cl, null); + final Vm vm = new VmImpl("?", arch, cl.getSharedStatics(), false, cl, null); vm.toString(); // Just to avoid compiler warnings VmType.initializeForBootImage(cl); long lastModified = 0; @@ -249,5 +251,5 @@ this.classesURL = classesURL; } - protected abstract VmArchitecture getArchitecture(); + protected abstract BaseVmArchitecture getArchitecture(); } Modified: trunk/builder/src/builder/org/jnode/build/AbstractBootImageBuilder.java =================================================================== --- trunk/builder/src/builder/org/jnode/build/AbstractBootImageBuilder.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/builder/src/builder/org/jnode/build/AbstractBootImageBuilder.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -60,13 +60,12 @@ import org.jnode.plugin.model.PluginJar; import org.jnode.plugin.model.PluginRegistryModel; import org.jnode.util.NumberUtils; +import org.jnode.vm.BaseVmArchitecture; import org.jnode.vm.JvmType; import org.jnode.vm.Unsafe; import org.jnode.vm.VirtualMemoryRegion; -import org.jnode.vm.Vm; -import org.jnode.vm.VmArchitecture; +import org.jnode.vm.VmImpl; import org.jnode.vm.VmSystemClassLoader; -import org.jnode.vm.VmSystemObject; import org.jnode.vm.bytecode.BytecodeParser; import org.jnode.vm.classmgr.Modifier; import org.jnode.vm.classmgr.ObjectLayout; @@ -83,9 +82,13 @@ import org.jnode.vm.classmgr.VmStatics; import org.jnode.vm.classmgr.VmType; import org.jnode.vm.compiler.NativeCodeCompiler; +import org.jnode.vm.facade.Vm; +import org.jnode.vm.facade.VmArchitecture; +import org.jnode.vm.facade.VmUtils; import org.jnode.vm.memmgr.HeapHelper; import org.jnode.vm.memmgr.VmHeapManager; import org.jnode.vm.objects.BootableHashMap; +import org.jnode.vm.objects.VmSystemObject; import org.jnode.vm.scheduler.VmProcessor; import org.vmmagic.unboxed.UnboxedObject; @@ -206,7 +209,7 @@ * @param arch * @throws ClassNotFoundException */ - private final void compileClasses(NativeStream os, VmArchitecture arch) + private final void compileClasses(NativeStream os, BaseVmArchitecture arch) throws ClassNotFoundException { final NativeCodeCompiler[] compilers = arch.getCompilers(); final int optLevel = compilers.length - 1; @@ -389,7 +392,7 @@ * @return The processor * @throws BuildException */ - protected abstract VmProcessor createProcessor(Vm vm, VmSharedStatics statics, + protected abstract VmProcessor createProcessor(VmImpl vm, VmSharedStatics statics, VmIsolatedStatics isolatedStatics) throws BuildException; private final void doExecute() throws BuildException { @@ -448,7 +451,7 @@ final Map<String, byte[]> resources = loadSystemResource(piRegistry); /* Now create the processor */ - final VmArchitecture arch = getArchitecture(); + final BaseVmArchitecture arch = getArchitecture(); final NativeStream os = createNativeStream(); clsMgr = new VmSystemClassLoader(null/*classesURL*/, arch, new BuildObjectResolver(os, this)); @@ -468,9 +471,9 @@ } // Create the VM - final Vm vm = new Vm(version, arch, clsMgr.getSharedStatics(), debug, clsMgr, piRegistry); + final VmImpl vm = new VmImpl(version, arch, clsMgr.getSharedStatics(), debug, clsMgr, piRegistry); blockedObjects.add(vm); - blockedObjects.add(Vm.getCompiledMethods()); + blockedObjects.add(VmUtils.getVm().getCompiledMethods()); final VmProcessor proc = createProcessor(vm, clsMgr.getSharedStatics(), clsMgr.getIsolatedStatics()); @@ -504,14 +507,14 @@ loadClass(VmType[].class); loadClass(Vm.class); loadClass(VirtualMemoryRegion.class).link(); - Vm.getHeapManager().loadClasses(clsMgr); + vm.getHeapManager().loadClasses(clsMgr); loadClass(VmHeapManager.class); loadClass(VmSharedStatics.class); loadClass(VmIsolatedStatics.class); - loadClass(Vm.getHeapManager().getClass()); + loadClass(VmUtils.getVm().getHeapManager().getClass()); loadClass(HeapHelper.class); loadClass("org.jnode.vm.HeapHelperImpl"); - loadClass(Vm.getCompiledMethods().getClass()); + loadClass(VmUtils.getVm().getCompiledMethods().getClass()); loadClass(VmCompiledCode[].class); loadSystemClasses(resources.keySet()); @@ -558,8 +561,8 @@ // Emit the compiled method list log("Emit compiled methods", Project.MSG_VERBOSE); - blockedObjects.remove(Vm.getCompiledMethods()); - final int compiledMethods = Vm.getCompiledMethods().size(); + blockedObjects.remove(VmUtils.getVm().getCompiledMethods()); + final int compiledMethods = VmUtils.getVm().getCompiledMethods().size(); emitObjects(os, arch, blockedObjects, false); // Twice, this is intended! emitObjects(os, arch, blockedObjects, false); @@ -595,7 +598,7 @@ // Verify no methods have been compiled after we wrote the // CompiledCodeList. - if (Vm.getCompiledMethods().size() != compiledMethods) { + if (VmUtils.getVm().getCompiledMethods().size() != compiledMethods) { throw new BuildException( "Method have been compiled after CompiledCodeList was written."); } @@ -638,7 +641,7 @@ clsMgr.getSharedStatics().dumpStatistics(out); log("Isolated statics"); clsMgr.getIsolatedStatics().dumpStatistics(out); - vm.dumpStatistics(out); + VmUtils.dumpStatistics(out); logStatistics(os); @@ -670,7 +673,7 @@ * @param blockObjects * @throws BuildException */ - private final void emitObjects(NativeStream os, VmArchitecture arch, + private final void emitObjects(NativeStream os, BaseVmArchitecture arch, Set<Object> blockObjects, boolean skipCopyStatics) throws BuildException { log("Emitting objects", Project.MSG_DEBUG); @@ -883,7 +886,7 @@ * @return The target architecture * @throws BuildException */ - protected abstract VmArchitecture getArchitecture() throws BuildException; + protected abstract BaseVmArchitecture getArchitecture() throws BuildException; /** * Gets the internal class loader. @@ -1458,6 +1461,7 @@ addCompileHighOptLevel("org.jnode.vm.bytecode"); addCompileHighOptLevel("org.jnode.vm.classmgr"); addCompileHighOptLevel("org.jnode.vm.compiler"); + addCompileHighOptLevel("org.jnode.vm.facade"); addCompileHighOptLevel("org.jnode.vm.isolate"); addCompileHighOptLevel("org.jnode.vm.objects"); addCompileHighOptLevel("org.jnode.vm.scheduler"); Modified: trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java =================================================================== --- trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/builder/src/builder/org/jnode/build/ObjectEmitter.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -32,8 +32,6 @@ import org.jnode.assembler.NativeStream; import org.jnode.assembler.x86.X86BinaryAssembler; import org.jnode.bootlog.BootLogInstance; -import org.jnode.vm.BootableObject; -import org.jnode.vm.VmSystemObject; import org.jnode.vm.classmgr.VmArrayClass; import org.jnode.vm.classmgr.VmClassLoader; import org.jnode.vm.classmgr.VmClassType; @@ -41,6 +39,8 @@ import org.jnode.vm.classmgr.VmInstanceField; import org.jnode.vm.classmgr.VmNormalClass; import org.jnode.vm.classmgr.VmType; +import org.jnode.vm.objects.BootableObject; +import org.jnode.vm.objects.VmSystemObject; import org.vmmagic.unboxed.UnboxedObject; public class ObjectEmitter { Modified: trunk/builder/src/builder/org/jnode/build/x86/AsmConstBuilder.java =================================================================== --- trunk/builder/src/builder/org/jnode/build/x86/AsmConstBuilder.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/builder/src/builder/org/jnode/build/x86/AsmConstBuilder.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -21,7 +21,7 @@ package org.jnode.build.x86; import org.jnode.build.AbstractAsmConstBuilder; -import org.jnode.vm.VmArchitecture; +import org.jnode.vm.BaseVmArchitecture; import org.jnode.vm.x86.VmX86Architecture32; import org.jnode.vm.x86.VmX86Architecture64; @@ -32,9 +32,9 @@ private int bits = 32; - private VmArchitecture arch; + private BaseVmArchitecture arch; - protected VmArchitecture getArchitecture() { + protected BaseVmArchitecture getArchitecture() { if (arch == null) { switch (bits) { case 32: Modified: trunk/builder/src/builder/org/jnode/build/x86/BootImageBuilder.java =================================================================== --- trunk/builder/src/builder/org/jnode/build/x86/BootImageBuilder.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/builder/src/builder/org/jnode/build/x86/BootImageBuilder.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -43,11 +43,10 @@ import org.jnode.linker.ElfLinker; import org.jnode.plugin.PluginRegistry; import org.jnode.util.NumberUtils; +import org.jnode.vm.BaseVmArchitecture; import org.jnode.vm.SoftByteCodes; -import org.jnode.vm.Vm; -import org.jnode.vm.VmArchitecture; +import org.jnode.vm.VmImpl; import org.jnode.vm.VmSystem; -import org.jnode.vm.VmSystemObject; import org.jnode.vm.classmgr.ObjectLayout; import org.jnode.vm.classmgr.VmArray; import org.jnode.vm.classmgr.VmClassType; @@ -58,6 +57,9 @@ import org.jnode.vm.classmgr.VmSharedStatics; import org.jnode.vm.classmgr.VmStaticField; import org.jnode.vm.classmgr.VmType; +import org.jnode.vm.facade.Vm; +import org.jnode.vm.facade.VmUtils; +import org.jnode.vm.objects.VmSystemObject; import org.jnode.vm.scheduler.MonitorManager; import org.jnode.vm.scheduler.VmProcessor; import org.jnode.vm.scheduler.VmScheduler; @@ -155,7 +157,7 @@ * @return The processor * @throws BuildException */ - protected VmProcessor createProcessor(Vm vm, VmSharedStatics statics, VmIsolatedStatics isolatedStatics) + protected VmProcessor createProcessor(VmImpl vm, VmSharedStatics statics, VmIsolatedStatics isolatedStatics) throws BuildException { this.sharedStatics = statics; VmScheduler scheduler = new VmScheduler(getArchitecture()); @@ -185,7 +187,7 @@ * @return The target architecture * @throws BuildException */ - protected final VmArchitecture getArchitecture() throws BuildException { + protected final BaseVmArchitecture getArchitecture() throws BuildException { if (arch == null) { switch (bits) { case 32: @@ -483,8 +485,8 @@ protected void initVm(X86BinaryAssembler os, Vm vm) throws BuildException, ClassNotFoundException { os.setObjectRef(new Label("$$Initialize Vm")); - VmType<?> vmClass = loadClass(Vm.class); - VmStaticField vmField = (VmStaticField) vmClass.getField("instance"); + VmType<?> vmClass = loadClass(VmUtils.class); + VmStaticField vmField = (VmStaticField) vmClass.getField("VM_INSTANCE"); final GPR abx = os.isCode32() ? (GPR) X86Register.EBX : X86Register.RBX; final GPR adi = os.isCode32() ? (GPR) X86Register.EDI : X86Register.RDI; Modified: trunk/cli/src/commands/org/jnode/command/system/GcCommand.java =================================================================== --- trunk/cli/src/commands/org/jnode/command/system/GcCommand.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/cli/src/commands/org/jnode/command/system/GcCommand.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -27,8 +27,9 @@ import org.jnode.shell.syntax.EnumArgument; import org.jnode.shell.syntax.FlagArgument; import org.jnode.util.NumberUtils; -import org.jnode.vm.Vm; -import org.jnode.vm.memmgr.GCStatistics; +import org.jnode.vm.VmImpl; +import org.jnode.vm.facade.GCStatistics; +import org.jnode.vm.facade.VmUtils; import org.jnode.vm.memmgr.VmHeapManager; /** @@ -100,12 +101,12 @@ public void execute() throws Exception { final PrintWriter out = getOutput().getPrintWriter(); if (argSet.isSet()) { - Vm.getHeapManager().setHeapFlags(getFlags()); + VmUtils.getVm().getHeapManager().setHeapFlags(getFlags()); } else if (argClear.isSet()) { - int flags = Vm.getHeapManager().getHeapFlags() ^ getFlags(); - Vm.getHeapManager().setHeapFlags(flags); + int flags = VmUtils.getVm().getHeapManager().getHeapFlags() ^ getFlags(); + VmUtils.getVm().getHeapManager().setHeapFlags(flags); } else if (argShow.isSet()) { - showFlags(Vm.getHeapManager().getHeapFlags(), out); + showFlags(VmUtils.getVm().getHeapManager().getHeapFlags(), out); } else { final Runtime rt = Runtime.getRuntime(); out.format(fmt_out, str_mem_size, NumberUtils.toBinaryByte(rt.totalMemory())); @@ -114,7 +115,7 @@ out.println(str_start); long start = System.currentTimeMillis(); rt.gc(); - GCStatistics stats = Vm.getHeapManager().getStatistics(); + GCStatistics stats = VmUtils.getVm().getHeapManager().getStatistics(); Thread.yield(); long end = System.currentTimeMillis(); Modified: trunk/cli/src/commands/org/jnode/command/system/OnHeapCommand.java =================================================================== --- trunk/cli/src/commands/org/jnode/command/system/OnHeapCommand.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/cli/src/commands/org/jnode/command/system/OnHeapCommand.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -27,8 +27,9 @@ import org.jnode.shell.syntax.Argument; import org.jnode.shell.syntax.IntegerArgument; import org.jnode.shell.syntax.LongArgument; -import org.jnode.vm.Vm; -import org.jnode.vm.memmgr.HeapStatistics; +import org.jnode.vm.VmImpl; +import org.jnode.vm.facade.HeapStatistics; +import org.jnode.vm.facade.VmUtils; /** * @author Martin Husted Hartvig (ha...@jn...) @@ -61,7 +62,7 @@ public void execute() throws Exception { PrintWriter out = getOutput().getPrintWriter(); out.println(str_on_heap); - final HeapStatistics stats = Vm.getHeapManager().getHeapStatistics(); + final HeapStatistics stats = VmUtils.getVm().getHeapManager().getHeapStatistics(); if (argMinInstanceCount.isSet()) { stats.setMinimumInstanceCount(argMinInstanceCount.getValue()); Modified: trunk/cli/src/commands/org/jnode/command/system/PluginCommand.java =================================================================== --- trunk/cli/src/commands/org/jnode/command/system/PluginCommand.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/cli/src/commands/org/jnode/command/system/PluginCommand.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -46,7 +46,7 @@ import org.jnode.shell.syntax.StringArgument; import org.jnode.shell.syntax.SyntaxMultiplicityException; import org.jnode.shell.syntax.URLArgument; -import org.jnode.vm.Vm; +import org.jnode.vm.facade.VmUtils; /** * @author epr @@ -120,7 +120,7 @@ private void doRun() throws NameNotFoundException, SyntaxMultiplicityException, PluginException, MalformedURLException { mgr = InitialNaming.lookup(PluginManager.NAME); - final String version = argVersion.isSet() ? argVersion.getValue() : Vm.getVm().getVersion(); + final String version = argVersion.isSet() ? argVersion.getValue() : VmUtils.getVm().getVersion(); final String pluginId = argPluginID.getValue(); if (argLoaderUrl.isSet()) { addPluginLoader(argLoaderUrl.getValue()); Modified: trunk/cli/src/commands/org/jnode/command/system/VmInfoCommand.java =================================================================== --- trunk/cli/src/commands/org/jnode/command/system/VmInfoCommand.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/cli/src/commands/org/jnode/command/system/VmInfoCommand.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -26,8 +26,8 @@ import org.jnode.shell.AbstractCommand; import org.jnode.shell.syntax.Argument; import org.jnode.shell.syntax.FlagArgument; -import org.jnode.vm.Vm; -import org.jnode.vm.scheduler.VmProcessor; +import org.jnode.vm.facade.VmProcessor; +import org.jnode.vm.facade.VmUtils; /** * @author Ewout Prangsma (ep...@us...) @@ -55,13 +55,13 @@ @Override public void execute() { - final Vm vm = Vm.getVm(); + final org.jnode.vm.facade.Vm vm = VmUtils.getVm(); if (vm != null && !vm.isBootstrap()) { PrintWriter out = getOutput().getPrintWriter(); out.format(fmt_vm, vm.getVersion()); - vm.dumpStatistics(out); + VmUtils.dumpStatistics(out); vm.getSharedStatics().dumpStatistics(out); - Vm.getHeapManager().dumpStatistics(out); + VmUtils.getVm().getHeapManager().dumpStatistics(out); final SecurityManager sm = System.getSecurityManager(); out.format(fmt_sm, sm); List<VmProcessor> processors = vm.getProcessors(); @@ -70,7 +70,7 @@ cpu.dumpStatistics(out); } if (argReset.isSet()) { - vm.resetCounters(); + VmUtils.resetCounters(); } } } Modified: trunk/core/descriptors/org.jnode.vm.core.xml =================================================================== --- trunk/core/descriptors/org.jnode.vm.core.xml 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/descriptors/org.jnode.vm.core.xml 2010-07-11 14:27:38 UTC (rev 5756) @@ -23,6 +23,7 @@ <export name="org.jnode.vm.bytecode.*"/> <export name="org.jnode.vm.classmgr.*"/> <export name="org.jnode.vm.compiler.*"/> + <export name="org.jnode.vm.facade.*"/> <export name="org.jnode.vm.isolate.*"/> <export name="org.jnode.vm.memmgr.*"/> <export name="org.jnode.vm.objects.*"/> Modified: trunk/core/src/classpath/vm/gnu/classpath/jdwp/NativeVMVirtualMachine.java =================================================================== --- trunk/core/src/classpath/vm/gnu/classpath/jdwp/NativeVMVirtualMachine.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/classpath/vm/gnu/classpath/jdwp/NativeVMVirtualMachine.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -26,7 +26,8 @@ import java.lang.reflect.Method; import gnu.classpath.jdwp.util.MethodResult; import gnu.classpath.jdwp.event.EventRequest; -import org.jnode.vm.Vm; + +import org.jnode.vm.facade.VmUtils; import org.jnode.vm.isolate.VmIsolate; import org.jnode.vm.classmgr.VmIsolatedStatics; import org.jnode.vm.classmgr.VmStaticsIterator; @@ -71,7 +72,7 @@ */ private static Iterator getAllLoadedClasses() { return new Iterator() { - private VmStaticsIterator iter = new VmStaticsIterator(Vm.getVm().getSharedStatics()); + private VmStaticsIterator iter = new VmStaticsIterator(VmUtils.getVm().getSharedStatics()); private Iterator<VmIsolatedStatics> isolated = VmIsolate.staticsIterator(); public boolean hasNext() { Modified: trunk/core/src/classpath/vm/java/lang/ThreadHelper.java =================================================================== --- trunk/core/src/classpath/vm/java/lang/ThreadHelper.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/classpath/vm/java/lang/ThreadHelper.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -20,10 +20,10 @@ package java.lang; +import org.jnode.annotation.Internal; +import org.jnode.annotation.KernelSpace; import org.jnode.permission.JNodePermission; import org.jnode.vm.scheduler.VmThread; -import org.jnode.annotation.KernelSpace; -import org.jnode.annotation.Internal; /** * Modified: trunk/core/src/classpath/vm/java/lang/VMRuntime.java =================================================================== --- trunk/core/src/classpath/vm/java/lang/VMRuntime.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/classpath/vm/java/lang/VMRuntime.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -23,10 +23,10 @@ import java.io.File; import java.io.IOException; -import org.jnode.vm.Vm; import org.jnode.vm.VmProcess; import org.jnode.vm.VmSystem; import org.jnode.vm.VmExit; +import org.jnode.vm.facade.VmUtils; import org.jnode.vm.isolate.VmIsolate; import javax.isolate.Isolate; @@ -52,7 +52,7 @@ * @return the number of processors available, at least 1 */ static int availableProcessors() { - return Vm.getVm().availableProcessors(); + return VmUtils.getVm().availableProcessors(); } /** Modified: trunk/core/src/classpath/vm/java/lang/VMSystem.java =================================================================== --- trunk/core/src/classpath/vm/java/lang/VMSystem.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/classpath/vm/java/lang/VMSystem.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -44,8 +44,9 @@ import java.util.ArrayList; import org.jnode.util.SystemInputStream; -import org.jnode.vm.Vm; +import org.jnode.vm.VmImpl; import org.jnode.vm.VmSystem; +import org.jnode.vm.facade.VmUtils; /** * VMSystem is a package-private helper class for System that the VM must @@ -112,7 +113,7 @@ * @return true if the system is big-endian. */ static boolean isWordsBigEndian() { - return (Vm.getArch().getByteOrder() == ByteOrder.BIG_ENDIAN); + return (VmUtils.getVm().getArch().getByteOrder() == ByteOrder.BIG_ENDIAN); } /** Modified: trunk/core/src/core/org/jnode/assembler/ObjectResolver.java =================================================================== --- trunk/core/src/core/org/jnode/assembler/ObjectResolver.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/assembler/ObjectResolver.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -20,7 +20,7 @@ package org.jnode.assembler; -import org.jnode.vm.VmSystemObject; +import org.jnode.vm.objects.VmSystemObject; /** * @author epr Modified: trunk/core/src/core/org/jnode/assembler/x86/X86Register.java =================================================================== --- trunk/core/src/core/org/jnode/assembler/x86/X86Register.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/assembler/x86/X86Register.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -20,8 +20,8 @@ package org.jnode.assembler.x86; -import org.jnode.vm.VmSystemObject; import org.jnode.vm.objects.BootableHashMap; +import org.jnode.vm.objects.VmSystemObject; /** * Registers of the x86 architecture. Modified: trunk/core/src/core/org/jnode/plugin/AutoUnzipPlugin.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/AutoUnzipPlugin.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/AutoUnzipPlugin.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -85,11 +85,16 @@ // copy each plugin's resource to the plugin root directory final PluginDescriptor desc = AutoUnzipPlugin.this.getDescriptor(); - final PluginClassLoader cl = (PluginClassLoader) desc.getPluginClassLoader(); + final ClassLoader cl = desc.getPluginClassLoader(); final String pluginRoot = pluginRootFile.getAbsolutePath() + "/"; final byte[] buffer = new byte[10240]; - for (String resName : cl.getResources()) { + if (!(cl instanceof PluginClassLoader)) { + System.err.println("Plugin's ClassLoader doesn't implements PluginClassLoader"); + return; + } + + for (String resName : ((PluginClassLoader) cl).getResources()) { final InputStream input = cl.getResourceAsStream(resName); try { Modified: trunk/core/src/core/org/jnode/plugin/PluginClassLoader.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/PluginClassLoader.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/PluginClassLoader.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -23,53 +23,31 @@ import java.util.Collection; import java.util.Set; -import org.jnode.vm.classmgr.VmClassLoader; - /** + * Interface for plugin {@link ClassLoader}s. They should of course also + * inherit from {@link ClassLoader}. * @author Ewout Prangsma (ep...@us...) */ -public abstract class PluginClassLoader extends ClassLoader { +public interface PluginClassLoader { /** - * Default ctor - */ - public PluginClassLoader() { - // No code here - } - - /** - * Wrap this classloader around the given vmClassLoader. - * Requires special permission. - * - * @param parent - * @param vmClassLoader - */ - protected PluginClassLoader(ClassLoader parent, VmClassLoader vmClassLoader) { - super(parent, vmClassLoader); - } - - /** * Gets the descriptor of the plugin in which this element was declared. * * @return The descriptor */ - public abstract PluginDescriptor getDeclaringPluginDescriptor(); + PluginDescriptor getDeclaringPluginDescriptor(); /** * Gets the names of the classes contained in this plugin. * * @return the set of contained classnames */ - public abstract Set<String> getClassNames(); + Set<String> getClassNames(); /** * Gets the names of the resources contained in this plugin. * * @return the set of contained resources */ - public abstract Collection<String> getResources(); - - public String toString() { - return getClass().getName() + "(" + getDeclaringPluginDescriptor().getId() + ")"; - } + Collection<String> getResources(); } Modified: trunk/core/src/core/org/jnode/plugin/PluginDescriptor.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/PluginDescriptor.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/PluginDescriptor.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -197,6 +197,8 @@ /** * Gets the classloader of this plugin descriptor. + * It's <strong>not mandatory</strong> but the returned {@link ClassLoader} usually + * implements {@link PluginClassLoader}. * * @return ClassLoader */ Modified: trunk/core/src/core/org/jnode/plugin/model/AbstractModelObject.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/model/AbstractModelObject.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/model/AbstractModelObject.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -22,7 +22,7 @@ import org.jnode.nanoxml.XMLElement; import org.jnode.plugin.PluginException; -import org.jnode.vm.VmSystemObject; +import org.jnode.vm.objects.VmSystemObject; /** * @author epr Modified: trunk/core/src/core/org/jnode/plugin/model/AttributeModel.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/model/AttributeModel.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/model/AttributeModel.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -20,7 +20,7 @@ package org.jnode.plugin.model; -import org.jnode.vm.BootableObject; +import org.jnode.vm.objects.BootableObject; /** * @author epr Modified: trunk/core/src/core/org/jnode/plugin/model/ExtensionPointModel.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/model/ExtensionPointModel.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/model/ExtensionPointModel.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -220,7 +220,7 @@ } /** - * @see org.jnode.vm.VmSystemObject#verifyBeforeEmit() + * @see org.jnode.vm.objects.VmSystemObject#verifyBeforeEmit() */ public void verifyBeforeEmit() { super.verifyBeforeEmit(); Modified: trunk/core/src/core/org/jnode/plugin/model/PluginClassLoaderImpl.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/model/PluginClassLoaderImpl.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/model/PluginClassLoaderImpl.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -48,7 +48,7 @@ /** * @author Ewout Prangsma (ep...@us...) */ -final class PluginClassLoaderImpl extends PluginClassLoader { +final class PluginClassLoaderImpl extends ClassLoader implements PluginClassLoader { /** * The registry @@ -85,9 +85,14 @@ } /** - * Initialize this instance. - * + * Wrap this {@link ClassLoader} around the given vmClassLoader. + * Requires special permission. + * + * @param vmClassLoader + * @param registry + * @param descr * @param jar + * @param prerequisiteLoaders */ protected PluginClassLoaderImpl(VmClassLoader vmClassLoader, PluginRegistryModel registry, PluginDescriptorModel descr, PluginJar jar, @@ -100,7 +105,7 @@ } /** - * Gets the names of the classes contained in this plugin + * Gets the names of the classes contained in this plugin. * * @return */ @@ -393,4 +398,8 @@ public PluginDescriptor getDeclaringPluginDescriptor() { return descriptor; } + + public String toString() { + return getClass().getName() + "(" + getDeclaringPluginDescriptor().getId() + ")"; + } } Modified: trunk/core/src/core/org/jnode/plugin/model/PluginJar.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/model/PluginJar.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/model/PluginJar.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -36,10 +36,11 @@ import org.jnode.util.ByteBufferInputStream; import org.jnode.util.FileUtils; import org.jnode.util.JarBuffer; -import org.jnode.vm.BootableObject; import org.jnode.vm.ResourceLoader; -import org.jnode.vm.Vm; +import org.jnode.vm.VmImpl; +import org.jnode.vm.facade.VmUtils; import org.jnode.vm.objects.BootableHashMap; +import org.jnode.vm.objects.BootableObject; /** * @author Ewout Prangsma (ep...@us...) @@ -84,7 +85,7 @@ URL pluginUrl) throws PluginException { try { //get a reference to the plugin jar data - if (Vm.isWritingImage()) { + if (VmUtils.isWritingImage()) { //buildtime initBuffer = pluginIs.array(); } else { Modified: trunk/core/src/core/org/jnode/plugin/model/PluginRegistryModel.java =================================================================== --- trunk/core/src/core/org/jnode/plugin/model/PluginRegistryModel.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/plugin/model/PluginRegistryModel.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -43,9 +43,9 @@ import org.jnode.plugin.PluginReference; import org.jnode.plugin.PluginRegistry; import org.jnode.plugin.PluginSecurityConstants; -import org.jnode.vm.VmSystemObject; import org.jnode.vm.isolate.VmIsolateLocal; import org.jnode.vm.objects.BootableHashMap; +import org.jnode.vm.objects.VmSystemObject; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; Modified: trunk/core/src/core/org/jnode/vm/AllocationBitmap.java =================================================================== --- trunk/core/src/core/org/jnode/vm/AllocationBitmap.java 2010-05-16 17:01:30 UTC (rev 5755) +++ trunk/core/src/core/org/jnode/vm/AllocationBitmap.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -22,6 +22,7 @@ import org.jnode.annotation.MagicPermission; import org.jnode.annotation.Uninterruptible; +import org.jnode.vm.facade.VmUtils; import org.jnode.vm.scheduler.VmThread; import org.vmmagic.unboxed.Address; import org.vmmagic.unboxed.Extent; @@ -91,7 +92,7 @@ */ public final void initialize(Address start, Word bits) { // Size of the lock (we only use an int) - final Extent lockSize = Extent.fromIntZeroExtend(Vm.getArch() + final Extent lockSize = Extent.fromIntZeroExtend(VmUtils.getVm().getArch() .getReferenceSize()); // Create a lock and actual bitmap Copied: trunk/core/src/core/org/jnode/vm/BaseVmArchitecture.java (from rev 5755, trunk/core/src/core/org/jnode/vm/VmArchitecture.java) =================================================================== --- trunk/core/src/core/org/jnode/vm/BaseVmArchitecture.java (rev 0) +++ trunk/core/src/core/org/jnode/vm/BaseVmArchitecture.java 2010-07-11 14:27:38 UTC (rev 5756) @@ -0,0 +1,313 @@ +/* + * $Id$ + * + * Copyright (C) 2003-2010 JNode.org + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; If not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +package org.jnode.vm; + +import java.nio.ByteOrder; + +import org.jnode.annotation.Internal; +import org.jnode.annotation.KernelSpace; +import org.jnode.annotation.MagicPermission; +import org.jnode.permission.JNodePermission; +import org.jnode.system.resource.ResourceManager; +import org.jnode.vm.classmgr.VmIsolatedStatics; +import org.jnode.vm.classmgr.VmSharedStatics; +import org.jnode.vm.compiler.IMTCompiler; +import org.jnode.vm.compiler.NativeCodeCompiler; +import org.jnode.vm.facade.MemoryMapEntry; +import org.jnode.vm.facade.TypeSizeInfo; +import org.jnode.vm.facade.VmUtils; +import org.jnode.vm.objects.VmSystemObject; +import org.jnode.vm.scheduler.IRQManager; +import org.jnode.vm.scheduler.VmProcessor; +import org.jnode.vm.scheduler.VmScheduler; +import org.vmmagic.pragma.UninterruptiblePragma; +import org.vmmagic.unboxed.Address; +import org.vmmagic.unboxed.Extent; +import org.vmmagic.unboxed.Word; + +/** + * Class describing a specific system architecture. + * + * @author Ewout Prangsma (ep...@us...) + */ +@MagicPermission +public abstract class BaseVmArchitecture extends VmSystemObject implements org.jnode.vm.facade.VmArchitecture { + + private final JNodePermission MMAP_PERM = new JNodePermission("getMemoryMap"); + private transient MemoryMapEntry[] memoryMap; + private transient VmMultiMediaSupport multiMediaSupport; + private final int referenceSize; + private final VmStackReader stackReader; + + protected BaseVmArchitecture(int referenceSize, VmStackReader stackReader) { + this.referenceSize = referenceSize; + this.stackReader = stackReader; + } + + /** + * {@inheritDoc} + */ + public abstract String getName(); + + /** + * Gets the full name of this architecture, including operating mode. + * + * @return the architecture's full name + */ + public abstract String getFullName(); + + /** + * {@inheritDoc} + */ + public abstract ByteOrder getByteOrder(); + + /** + * {@inheritDoc} + */ + @KernelSpace + public final int getReferenceSize() { + return referenceSize; + } + + /** + * {@inheritDoc} + */ + public abstract byte getLogPageSize(int region) + throws UninterruptiblePragma; + + /** + * Gets the size in bytes of an OS page in a given region + * + * @param region a {@link VirtualMemoryRegion} value + * @return the page size + */ + public final Extent getPageSize(int region) + throws UninterruptiblePragma { + return Extent.fromIntZeroExtend(1 << getLogPageSize(region)); + } + + /** + * {@inheritDoc} + */ + public abstract TypeSizeInfo getTypeSizeInfo(); + + /** + * Gets the stackreader for this architecture. + * + * @return the architecture's stack reader + */ + @KernelSpace + public final VmStackReader getStackReader() { + return stackReader; + } + + /** + * Gets all compilers for this architecture. + * + * @return The architecture's compilers, sorted by optimization level, from + * least optimizing to most optimizing. + */ + public abstract NativeCodeCompiler[] getCompilers(); + + /** + * Gets all test compilers for this architecture. + * This can be used to test new compilers in a running system. + * + * @return The architecture's test compilers, sorted by optimization level, from + * least optimizing to most optimizing. If there are no configured test compilers, + * {@code null} will be returned. + */ + public abstract NativeCodeCompiler[] getTestCompilers(); + + /** + * Gets the compiler of IMT's. + * + * @return the IMT compiler + */ + public abstract IMTCompiler getIMTCompiler(); + + /** + * Called early on in the boot process (before the initialization of + * the memory manager) to initialize any architecture specific variables. + * Do not allocate memory here. + * + * @param emptyMmap If true, all page mappings in the AVAILABLE region + * are removed. + */ + protected abstract void boot(boolean emptyMmap); + + /** + * Find and start all processors in the system. + * All all discovered processors to the given list. + * The bootstrap processor is already on the given list. + */ + protected abstract void initializeProcessors(ResourceManager rm); + + /** + * Call this method to register a processor found in {@link #initializeProcessors(ResourceManager)}. + * + * @param cpu + */ + protected final void addProcessor(VmProcessor cpu) { + ((VmImpl) VmUtils.getVm()).addProcessor(cpu); + } + + /** + * Create a processor instance for this architecture. + * + * @return The processor + */ + protected abstract VmProcessor createProcessor(int id, VmSharedStatics sharedStatics, + VmIsolatedStatics isolatedStatics, VmScheduler scheduler); + + /** + * Create the IRQ manager for this architecture. + * + * @return the IRQManager + */ + @Internal + public abstract IRQManager createIRQManager(VmProcessor processor); + + /** + * {@inheritDoc} + */ + public Address getStart(int space) { + switch (space) { + case VirtualMemoryRegion.BOOTIMAGE: + return Unsafe.getKernelStart(); + case VirtualMemoryRegion.INITJAR: + return Unsafe.getInitJarStart(); + default: + throw new IllegalArgumentException("Unknown space " + space); + } + } + + /** + * {@inheritDoc} + */ + public Address getEnd(int space) { + switch (space) { + case VirtualMemoryRegion.BOOTIMAGE: + return Unsafe.getBootHeapEnd(); + case VirtualMemoryRegion.INITJAR: + return Unsafe.getInitJarEnd(); + default: + throw new IllegalArgumentException("Unknown space " + space); + } + } + + /** + * Gets the physical address of the first whole page available for use + * by the memory manager. + * + * @return a physical address aligned on the appropriate page boundary + */ + protected final Word getFirstAvailableHeapPage() { + return pageAlign(VirtualMemoryRegion.HEAP, Unsafe.getMemoryStart().toWord(), true); + } + + /** + * Page align a given address (represented as a Word) in a given region. + * + * @param v an address value + * @param region a {@link VirtualMemoryRegion}. + * @param up If true, the value will be rounded up, otherwise rounded down. + * @return the corresponding page aligned address represented as a Word. + */ + public final Word pageAlign(int region, Word v, boolean up) { + final int logPageSize = getLogPageSize(region); + if (up) { + v = v.add((1 << logPageSize) - 1); + } + return v.rshl(logPageSize).lsh(logPageSize); + } + + /** + * {@inheritDoc} + */ + public final Address pageAlign(int region, Address v, boolean up) { + return pageAlign(region, v.toWord(), up).toAddress(); + } + + /** + * {@inheritDoc} + */ + public abstract boolean mmap(int region, Address start, Extent size, Address physAddr) + throws UninterruptiblePragma; + + /** + * Unmap a region of the virtual memory space. Note that you cannot allocate + * memory in this memory, because it is used very early in the boot process. + * + * @param region Memory region + * @param start The start of the virtual memory region to unmap. This value is + * aligned down on pagesize. + * @param size The size of the virtual memory region to unmap. This value is + * aligned up on pagesize. + * @return true for success, false otherwise. + */ + public abstract boolean munmap(int region, Address start, Extent size) + throws UninterruptiblePragma; + + /** + * {@inheritDoc} + */ + public final MemoryMapEntry[] getMemoryMap() { + final SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + sm.check... [truncated message content] |