// // Constructor // static VMIOS_CONSTRUCTOR_FN(constructor) { Uns32 i; // first few argument registers (standard ABI) object->args[0] = vmiosGetRegDesc(processor, "R3"); object->args[1] = vmiosGetRegDesc(processor, "R4"); object->args[2] = vmiosGetRegDesc(processor, "R5"); // return register (standard ABI) object->result = vmiosGetRegDesc(processor, "R11"); // stack pointer (standard ABI) object->sp = vmiosGetRegDesc(processor, "R1"); // __impure_ptr address object->impurePtrDomain = vmirtAddressLookup( processor, ERRNO_REF, &object->impurePtrAddr ); // initialise stdin, stderr and stdout object->fileDescriptors[0] = vmiosGetStdin(processor); object->fileDescriptors[1] = vmiosGetStdout(processor); object->fileDescriptors[2] = vmiosGetStderr(processor); // initialise remaining file descriptors for(i=3; i<FILE_DES_NUM; i++) { object->fileDescriptors[i] = -1; } }
// // Constructor // static VMIOS_CONSTRUCTOR_FN(constructor) { paramValuesP params = parameterValues; // get parameters object->argv = params->userargv; object->envp = params->userenvp; // first three argument registers object->args[0] = vmiosGetRegDesc(processor, "r0"); object->args[1] = vmiosGetRegDesc(processor, "r1"); object->args[2] = vmiosGetRegDesc(processor, "r2"); // return register (standard ABI) object->resultReg = vmiosGetRegDesc(processor, "r0"); // return register (standard ABI) object->argSP = vmiosGetRegDesc(processor, "sp"); // Sets up data common to all newlib implementations // Defined in newlibSemiHost.c.h setupNewlib(object, processor); }
// Constructor // static VMIOS_CONSTRUCTOR_FN(constructor) { if(DIAG_LOW) vmiMessage("I", PREFIX, "Starting SLIRP"); // What am I ? const char *procType = vmirtProcessorType(processor); if (strcmp(procType, "pse") != 0) { vmiMessage("F", PREFIX, "Processor must be a PSE"); } memEndian endian = vmirtGetProcessorDataEndian(processor); if(endian != ENDIAN_NATIVE) { vmiMessage("F", PREFIX, "Host processor must have same endianity as a PSE"); } // return register (standard ABI) object->result = vmiosGetRegDesc(processor, "eax"); // stack pointer (standard ABI) object->sp = vmiosGetRegDesc(processor, "esp"); object->count = 0; }
// // Constructor // static VMIOS_CONSTRUCTOR_FN(constructor) { // first three argument registers (standard ABI) object->args[0] = vmiosGetRegDesc(processor, "R5"); object->args[1] = vmiosGetRegDesc(processor, "R6"); object->args[2] = vmiosGetRegDesc(processor, "R7"); object->args[3] = vmiosGetRegDesc(processor, "R8"); object->args[4] = vmiosGetRegDesc(processor, "R9"); object->args[5] = vmiosGetRegDesc(processor, "R10"); // return register (standard ABI) object->resultReg = vmiosGetRegDesc(processor, "R3"); // Stack Pointer object->argSP = vmiosGetRegDesc(processor, "R1"); Bool found; object->argv = (char **)(UnsPS)vmirtPlatformUns64Attribute(processor, "userargv", &found); object->envp = (char **)(UnsPS)vmirtPlatformUns64Attribute(processor, "userenvp", &found); // Sets up data common to all newlib implementations // Defined in newlibSemiHost.c.h setupNewlib(object, processor); }