Package org.jnode.assembler

Examples of org.jnode.assembler.Label


     * @param hasSymName
     * @throws UnresolvedObjectRefException
     */
    private final void resolve_R386_PC32(long addr, String symName,
                                         boolean hasSymName) throws UnresolvedObjectRefException {
        final NativeStream.ObjectRef ref = os.getObjectRef(new Label(symName));
        if (ref.isResolved()) {
            os.set32((int) addr, (int) (ref.getOffset() - (addr + 4)));
        } else {
            ref.addUnresolvedLink((int) addr, 4);
        }
View Full Code Here


                                           String symName, boolean hasSymName)
        throws UnresolvedObjectRefException {
        if (!hasSymName) {
            os.set32((int) addr, (int) (addend + start + baseAddr));
        } else {
            final NativeStream.ObjectRef ref = os.getObjectRef(new Label(
                symName));
            if (ref.isResolved()) {
                os.set32((int) addr,
                    (int) (ref.getOffset() + baseAddr + addend));
            } else {
View Full Code Here

                                           String symName, boolean hasSymName)
        throws UnresolvedObjectRefException {
        if (!hasSymName) {
            os.set64((int) addr, addend + start + baseAddr);
        } else {
            final NativeStream.ObjectRef ref = os.getObjectRef(new Label(
                symName));
            if (ref.isResolved()) {
                os.set64((int) addr, ref.getOffset() + baseAddr + addend);
            } else {
                os.set64((int) addr, -(baseAddr + addend));
View Full Code Here

                bln = (4 - bln % 4) % 4;
                for (int j = 0; j < bln; j++) {
                    stream.write8(0);
                }
            } else if (o instanceof Identifier) {
                stream.writeObjectRef(new Label(((Identifier) o).name));
            } else {
                throw new IllegalArgumentException("Unknown data: " + o);
            }
        }
    }
View Full Code Here

                bln = (8 - bln % 8) % 8;
                for (int j = 0; j < bln; j++) {
                    stream.write8(0);
                }
            } else if (o instanceof Identifier) {
                stream.writeObjectRef(new Label(((Identifier) o).name));
            } else {
                throw new IllegalArgumentException("Unknown data: " + o);
            }
        }
    }
View Full Code Here

            throw new BuildException(ex);
        }

        // Link the jump table entries
        for (int i = 0; i < X86JumpTable.TABLE_LENGTH; i++) {
            final Label lbl = new Label(X86JumpTable.TABLE_ENTRY_LABELS[i]);
            final int idx = (arch.getMode().is32()) ? i : i * 2;
            sharedStatics.setAddress(idx, lbl);
        }
    }
View Full Code Here

                    + offset + " instead of " + JUMP_MAIN_OFFSET()
                    + "] (set to Object headersize)");
            }

            final X86BinaryAssembler os86 = (X86BinaryAssembler) os;
            final Label introCode = new Label("$$introCode");

            os86.setObjectRef(new Label("$$jmp-introCode"));
            os86.writeJMP(introCode);
            initObject.markEnd();

            // The loading of class can emit object in between, so first load
            // all required classes here.
            loadClass(Main.class);
            loadClass(MonitorManager.class);
            loadClass(SoftByteCodes.class);
            loadClass(Vm.class);
            loadClass(VmMethod.class);
            loadClass(VmProcessor.class);
            loadClass(VmThread.class);
            loadClass(VmType.class);
            loadClass(VmSystem.class);
            loadClass(VmSystemObject.class);

            final X86BinaryAssembler.ObjectInfo initCodeObject = os
                .startObject(vmCodeClass);
            os86.setObjectRef(introCode);
            initMain(os86, pluginRegistry);
            initVm(os86, vm);
            // initHeapManager(os86, vm);
            initVmThread(os86);

            os.setObjectRef(new Label("$$Initial call to clInitCaller"));
            os86.writeCALL(clInitCaller);

            initCallMain(os86);

            initCodeObject.markEnd();
View Full Code Here

        NativeStream.ObjectRef refJava;

        /* Link VmMethod_compile */
        VmType<?> vmMethodClass = loadClass(VmMethod.class);
        refJava = os.getObjectRef(vmMethodClass.getMethod("recompile", "()V"));
        os.getObjectRef(new Label("VmMethod_recompile")).link(refJava);

        final VmType<?> vmThreadClass = loadClass(VmThread.class);

        /* Link VmThread_systemException */
        refJava = os.getObjectRef(vmThreadClass.getMethod("systemException",
            "(II)Ljava/lang/Throwable;"));
        os.getObjectRef(sbcSystemException).link(refJava);

        /* Link VmThread_runThread */
        refJava = os.getObjectRef(vmThreadClass.getMethod("runThread",
            "(Lorg/jnode/vm/scheduler/VmThread;)V"));
        os.getObjectRef(vmThreadRunThread).link(refJava);

        /* Link VmProcessor_reschedule */
        VmType<?> vmProcClass = loadClass(VmProcessor.class);
        refJava = os.getObjectRef(vmProcClass.getMethod("reschedule", "()V"));
        os.getObjectRef(vmReschedule).link(refJava);

        /* Link vmCurProcessor */
        refJava = os.getObjectRef(processor);
        os.getObjectRef(vmCurProcessor).link(refJava);

        /* Set statics index of VmSystem_currentTimeMillis */
        final VmType<?> vmSystemClass = loadClass(VmSystem.class);
        final int staticsIdx = ((VmStaticField) vmSystemClass
            .getField("currentTimeMillis")).getSharedStaticsIndex();
        final X86BinaryAssembler os86 = (X86BinaryAssembler) os;
        os86.set32(os.getObjectRef(new Label("currentTimeMillisStaticsIdx"))
            .getOffset(), staticsIdx);

        /* Link vm_findThrowableHandler */
        refJava = os
            .getObjectRef(vmSystemClass
                .getMethod(
                    "findThrowableHandler",
                    "(Ljava/lang/Throwable;Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Address;)" +
                        "Lorg/vmmagic/unboxed/Address;"));
        os.getObjectRef(vmFindThrowableHandler).link(refJava);

        // Link Luser_esp
        refJava = os.getObjectRef(initialStackPtr);
        os.getObjectRef(new Label("Luser_esp")).link(refJava);

        // Link freeMemoryStart
        refJava = os.getObjectRef(imageEnd);
        os.getObjectRef(new Label("freeMemoryStart")).link(refJava);

        // Link bootHeapStart
        refJava = os.getObjectRef(bootHeapStart);
        os.getObjectRef(new Label("bootHeapStart")).link(refJava);

        // Link bootHeapEnd
        refJava = os.getObjectRef(bootHeapEnd);
        os.getObjectRef(new Label("bootHeapEnd")).link(refJava);

        // Link VmX86Processor_applicationProcessorMain
        final VmType<?> x86ProcessorClass = loadClass(VmX86Processor.class);
        refJava = os.getObjectRef(x86ProcessorClass.getMethod(
            "applicationProcessorMain", "()V"));
        os.getObjectRef(new Label("VmX86Processor_applicationProcessorMain"))
            .link(refJava);

        // Link VmX86Processor_broadcastTimeSliceInterrupt
        refJava = os.getObjectRef(x86ProcessorClass.getMethod(
            "broadcastTimeSliceInterrupt", "()V"));
        os.getObjectRef(new Label("VmX86Processor_broadcastTimeSliceInterrupt"))
            .link(refJava);
    }
View Full Code Here

        final GPR abx = os.isCode32() ? (GPR) X86Register.EBX : X86Register.RBX;
        final GPR adx = os.isCode32() ? (GPR) X86Register.EDX : X86Register.RDX;
        final int slotSize = arch.getReferenceSize();

        os.setObjectRef(new Label("$$Setup initial thread"));
        os.writeMOV_Const(abx, initialThread);

        /** Initialize initialStack.stack to Luser_stack */
        os.writeMOV_Const(adx, initialStack);
        os.writeMOV(adx.getSize(), abx, threadStackField.getOffset(), adx);
View Full Code Here

     * @throws BuildException
     * @throws ClassNotFoundException
     */
    protected void initVm(X86BinaryAssembler os, Vm vm) throws BuildException,
        ClassNotFoundException {
        os.setObjectRef(new Label("$$Initialize Vm"));
        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;
View Full Code Here

TOP

Related Classes of org.jnode.assembler.Label

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.