Logo Search packages:      
Sourcecode: virtualbox-ose version File versions  Download package

static KI32 kldrModLXDoCall ( KUPTR  uEntrypoint,
KUPTR  uHandle,
KU32  uOp,
void *  pvReserved 
) [static]

Do a 3 parameter callback.

Returns:
32-bit callback return.
Parameters:
uEntrypoint The address of the function to be called.
uHandle The first argument, the module handle.
uOp The second argumnet, the reason we're calling.
pvReserved The third argument, reserved argument. (figure this one out)

Definition at line 2083 of file kLdrModLX.c.

References KCPU_ERR_ARCH_CPU_NOT_COMPATIBLE.

Referenced by kldrModLXDoCallDLL().

{
#if defined(__X86__) || defined(__i386__) || defined(_M_IX86)
    KI32 rc;
/** @todo try/except */

    /*
     * Paranoia.
     */
# ifdef __GNUC__
    __asm__ __volatile__(
        "pushl  %2\n\t"
        "pushl  %1\n\t"
        "pushl  %0\n\t"
        "lea   12(%%esp), %2\n\t"
        "call  *%3\n\t"
        "movl   %2, %%esp\n\t"
        : "=a" (rc)
        : "d" (uOp),
          "S" (0),
          "c" (uEntrypoint),
          "0" (uHandle));
# elif defined(_MSC_VER)
    __asm {
        mov     eax, [uHandle]
        mov     edx, [uOp]
        mov     ecx, 0
        mov     ebx, [uEntrypoint]
        push    edi
        mov     edi, esp
        push    ecx
        push    edx
        push    eax
        call    ebx
        mov     esp, edi
        pop     edi
        mov     [rc], eax
    }
# else
#  error "port me!"
# endif
    return rc;

#else
    return KCPU_ERR_ARCH_CPU_NOT_COMPATIBLE;
#endif
}


Generated by  Doxygen 1.6.0   Back to index