VirtualBox

Changeset 72138 in vbox


Ignore:
Timestamp:
May 7, 2018 1:03:51 PM (7 years ago)
Author:
vboxsync
Message:

bs3kit: Made the CRx & DRx getters and setters work from rings other than ring-0. Added getters and setters for TR and LDTR.

Location:
trunk/src/VBox/ValidationKit/bootsectors/bs3kit
Files:
3 added
28 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk

    r72133 r72138  
    132132       bs3-cmn-RegSetDr7.asm \
    133133       bs3-cmn-RegSetDrX.asm \
     134       bs3-cmn-RegGetTr.asm \
     135       bs3-cmn-RegSetTr.asm \
     136       bs3-cmn-RegGetLdtr.asm \
     137       bs3-cmn-RegSetLdtr.asm \
    134138       bs3-cmn-ExtCtxInit.c \
    135139       bs3-cmn-ExtCtxSave.asm \
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetCr0.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetCr0, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, cr0
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_CRX
    5671        mov     dl, 0
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, cr0
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetCr0
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetCr2.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetCr2, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, cr2
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_CRX
    5671        mov     dl, 2
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, cr2
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetCr2
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetCr3.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetCr3, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, cr3
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_CRX
    5671        mov     dl, 3
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, cr3
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetCr3
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetCr4.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetCr4, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, cr4
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_CRX
    5671        mov     dl, 4
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, cr4
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetCr4
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetDr0.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetDr0, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, dr0
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_DRX
    5671        mov     dl, 0
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, dr0
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetDr0
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetDr1.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetDr1, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, dr1
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_DRX
    5671        mov     dl, 1
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, dr1
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetDr1
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetDr2.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetDr2, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, dr2
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_DRX
    5671        mov     dl, 2
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, dr2
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetDr2
    7279
    73 
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetDr3.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetDr3, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, dr3
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_DRX
    5671        mov     dl, 3
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, dr3
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetDr3
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetDr6.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    3737
    3838;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(RTCCUINTXREG, Bs3RegGetDr7,(void));
     39; @cproto   BS3_CMN_PROTO_STUB(RTCCUINTXREG, Bs3RegGetDr6,(void));
    4040;
    4141; @returns  Register value.
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetDr6, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, dr6
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_DRX
    5671        mov     dl, 6
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, dr6
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetDr6
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetDr7.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4545;
    4646BS3_PROC_BEGIN_CMN Bs3RegGetDr7, BS3_PBC_HYBRID_SAFE
    47         BS3_CALL_CONV_PROLOG 1
     47        BS3_CALL_CONV_PROLOG 0
    4848        push    xBP
    4949        mov     xBP, xSP
     
    5252        ; If V8086 mode we have to go thru a syscall.
    5353        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    54         jz      .direct_access
     54        jnz     .via_system_call
     55        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     56        je      .direct_access
     57%endif
     58        ; If not in ring-0, we have to make a system call.
     59        mov     ax, ss
     60        and     ax, X86_SEL_RPL
     61        jnz     .via_system_call
     62
     63.direct_access:
     64        mov     sAX, dr7
     65TONLY16 mov     edx, eax
     66TONLY16 shr     edx, 16
     67        jmp     .return
     68
     69.via_system_call:
    5570        mov     xAX, BS3_SYSCALL_GET_DRX
    5671        mov     dl, 7
    5772        call    Bs3Syscall
    58         jmp     .return
    59 
    60 .direct_access:
    61 %endif
    62         ; Switch (iRegister)
    63         mov     sAX, dr7
    64 TONLY16 mov     edx, eax
    65 TONLY16 shr     edx, 16
    6673
    6774.return:
    6875        pop     xBP
    69         BS3_CALL_CONV_EPILOG 1
     76        BS3_CALL_CONV_EPILOG 0
    7077        BS3_HYBRID_RET
    7178BS3_PROC_END_CMN   Bs3RegGetDr7
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegGetDrX.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    5454        ; If V8086 mode we have to go thru a syscall.
    5555        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    56         jz      .direct_access
    57         mov     xAX, BS3_SYSCALL_GET_DRX
    58         mov     dl, [xBP + xCB + cbCurRetAddr]
    59         call    Bs3Syscall
    60         jmp     .return_syscall
     56        jnz     .via_system_call
     57        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     58        je      .direct_access
     59%endif
     60        ; If not in ring-0, we have to make a system call.
     61        mov     ax, ss
     62        and     ax, X86_SEL_RPL
     63        jnz     .via_system_call
    6164
    6265.direct_access:
    63 %endif
    6466        ; Switch (iRegister)
    6567        mov     al, [xBP + xCB + cbCurRetAddr]
     
    8486.get_dr0:
    8587        mov     sAX, dr0
    86         jmp     .return
     88        jmp     .return_fixup
    8789.get_dr1:
    8890        mov     sAX, dr1
    89         jmp     .return
     91        jmp     .return_fixup
    9092.get_dr2:
    9193        mov     sAX, dr2
    92         jmp     .return
     94        jmp     .return_fixup
    9395.get_dr3:
    9496        mov     sAX, dr3
    95         jmp     .return
     97        jmp     .return_fixup
    9698.get_dr4:
    9799        mov     sAX, dr4
    98         jmp     .return
     100        jmp     .return_fixup
    99101.get_dr5:
    100102        mov     sAX, dr5
    101         jmp     .return
     103        jmp     .return_fixup
    102104.get_dr7:
    103105        mov     sAX, dr7
    104         jmp     .return
     106        jmp     .return_fixup
    105107.get_dr6:
    106108        mov     sAX, dr6
    107 .return:
     109        jmp     .return_fixup
     110
     111.via_system_call:
     112        mov     xAX, BS3_SYSCALL_GET_DRX
     113        mov     dl, [xBP + xCB + cbCurRetAddr]
     114        call    Bs3Syscall
     115        jmp     .return
     116
     117.return_fixup:
    108118TONLY16 mov     edx, eax
    109119TONLY16 shr     edx, 16
    110 .return_syscall:
     120.return:
    111121        pop     xBP
    112122        BS3_CALL_CONV_EPILOG 1
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetCr0.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_CRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     cr0, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 0
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     cr0, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetCr2.asm

    r72133 r72138  
    11; $Id$
    22;; @file
    3 ; BS3Kit - Bs3RegSetCr1
     3; BS3Kit - Bs3RegSetCr2
    44;
    55
     
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    4544; @uses     No GPRs.
    4645;
    47 BS3_PROC_BEGIN_CMN Bs3RegSetCr1, BS3_PBC_HYBRID_SAFE
     46BS3_PROC_BEGIN_CMN Bs3RegSetCr2, BS3_PBC_HYBRID_SAFE
    4847        BS3_CALL_CONV_PROLOG 1
    4948        push    xBP
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_CRX
    63         mov     dl, 1
    64         call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     cr2, sSI
    6867        jmp     .return
    6968
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     cr1, sSI
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
     75        mov     dl, 2
     76        call    Bs3Syscall
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
     
    7883        BS3_CALL_CONV_EPILOG 1
    7984        BS3_HYBRID_RET
    80 BS3_PROC_END_CMN   Bs3RegSetCr1
     85BS3_PROC_END_CMN   Bs3RegSetCr2
    8186
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetCr3.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_CRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     cr3, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 3
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     cr3, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetCr4.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_CRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     cr4, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 4
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     cr4, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetDr0.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    3736
    3837;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDrX,(RTCCUINTXREG uValue));
     38; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDr0,(RTCCUINTXREG uValue));
    4039;
    4140; @param    uValue      The value to set.
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_DRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     dr0, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 0
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     dr0, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
     
    8085BS3_PROC_END_CMN   Bs3RegSetDr0
    8186
    82 
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetDr1.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    3736
    3837;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDrX,(RTCCUINTXREG uValue));
     38; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDr1,(RTCCUINTXREG uValue));
    4039;
    4140; @param    uValue      The value to set.
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_DRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     dr1, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 1
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     dr1, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
     
    8085BS3_PROC_END_CMN   Bs3RegSetDr1
    8186
    82 
    83 
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetDr2.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    3736
    3837;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDrX,(RTCCUINTXREG uValue));
     38; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDr2,(RTCCUINTXREG uValue));
    4039;
    4140; @param    uValue      The value to set.
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_DRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     dr2, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 2
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     dr2, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetDr3.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    3736
    3837;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDrX,(RTCCUINTXREG uValue));
     38; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDr3,(RTCCUINTXREG uValue));
    4039;
    4140; @param    uValue      The value to set.
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_DRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     dr3, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 3
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     dr3, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetDr6.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    3736
    3837;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDrX,(RTCCUINTXREG uValue));
     38; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDr6,(RTCCUINTXREG uValue));
    4039;
    4140; @param    uValue      The value to set.
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_DRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     dr6, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 6
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     dr6, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
     
    8085BS3_PROC_END_CMN   Bs3RegSetDr6
    8186
    82 
    83 
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetDr7.asm

    r72133 r72138  
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     
    3736
    3837;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDrX,(RTCCUINTXREG uValue));
     38; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetDr7,(RTCCUINTXREG uValue));
    4039;
    4140; @param    uValue      The value to set.
     
    5150        push    sSI
    5251
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
    54 
    5552%if TMPL_BITS == 16
    5653        ; If V8086 mode we have to go thru a syscall.
    5754        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     55        jnz     .via_system_call
     56        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     57        je      .direct_access
     58%endif
     59        ; If not in ring-0, we have to make a system call.
     60        mov     si, ss
     61        and     si, X86_SEL_RPL
     62        jnz     .via_system_call
    6163
    62         mov     ax, BS3_SYSCALL_SET_DRX
     64.direct_access:
     65        mov     sSI, [xBP + xCB + cbCurRetAddr]
     66        mov     dr7, sSI
     67        jmp     .return
     68
     69.via_system_call:
     70        push    xDX
     71        push    xAX
     72
     73        mov     sSI, [xBP + xCB + cbCurRetAddr]
     74        mov     xAX, BS3_SYSCALL_SET_DRX
    6375        mov     dl, 7
    6476        call    Bs3Syscall
    65 
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     dr7, sSI
     77        pop     xAX
     78        pop     xDX
    7479
    7580.return:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetDrX.asm

    r72133 r72138  
    2929
    3030BS3_EXTERN_CMN Bs3Panic
     31BS3_EXTERN_CMN Bs3Syscall
    3132%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3333BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3434%endif
     
    4949;
    5050BS3_PROC_BEGIN_CMN Bs3RegSetDrX, BS3_PBC_HYBRID_SAFE
    51         BS3_CALL_CONV_PROLOG 1
     51        BS3_CALL_CONV_PROLOG 2
    5252        push    xBP
    5353        mov     xBP, xSP
     
    5555        push    xDX
    5656
    57         mov     dl, [xBP + xCB + cbCurRetAddr]
    5857        mov     sSI, [xBP + xCB + cbCurRetAddr + xCB]
    5958
     
    6160        ; If V8086 mode we have to go thru a syscall.
    6261        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    63         jz      .direct_access
    64         push    ax
    65 
    66         mov     xAX, BS3_SYSCALL_SET_DRX
    67         call    Bs3Syscall
    68 
    69         pop     ax
    70         jmp     .return
     62        jnz     .via_system_call
     63        cmp     byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_RM
     64        je      .direct_access
     65%endif
     66        ; If not in ring-0, we have to make a system call.
     67        mov     dx, ss
     68        and     dx, X86_SEL_RPL
     69        jnz     .via_system_call
    7170
    7271.direct_access:
    73 %endif
    7472        ; Switch (iRegister)
     73        mov     dl, [xBP + xCB + cbCurRetAddr]
    7574        cmp     dl, 6
    7675        jz      .set_dr6
     
    115114.set_dr6:
    116115        mov     dr6, sSI
     116        jmp     .return
     117
     118.via_system_call:
     119        mov     dl, [xBP + xCB + cbCurRetAddr]
     120        push    xAX
     121        mov     xAX, BS3_SYSCALL_SET_DRX
     122        call    Bs3Syscall
     123        pop     xAX
    117124
    118125.return:
     
    120127        pop     sSI
    121128        pop     xBP
    122         BS3_CALL_CONV_EPILOG 1
     129        BS3_CALL_CONV_EPILOG 2
    123130        BS3_HYBRID_RET
    124131BS3_PROC_END_CMN   Bs3RegSetDrX
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegSetTr.asm

    r72136 r72138  
    11; $Id$
    22;; @file
    3 ; BS3Kit - Bs3RegSetCr0
     3; BS3Kit - Bs3RegSetTr
    44;
    55
     
    2828
    2929
    30 BS3_EXTERN_CMN Bs3Panic
     30BS3_EXTERN_CMN Bs3Syscall
    3131%if TMPL_BITS == 16
    32 BS3_EXTERN_CMN Bs3Syscall
    3332BS3_EXTERN_DATA16 g_bBs3CurrentMode
    3433%endif
     34BS3_EXTERN_SYSTEM16 Bs3Gdt
    3535TMPL_BEGIN_TEXT
    3636
    3737
    3838;;
    39 ; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetCr0,(RTCCUINTXREG uValue));
     39; @cproto   BS3_CMN_PROTO_STUB(void, Bs3RegSetTr,(uint16_t uValue));
    4040;
    4141; @param    uValue      The value to set.
     
    4545; @uses     No GPRs.
    4646;
    47 BS3_PROC_BEGIN_CMN Bs3RegSetCr0, BS3_PBC_HYBRID_SAFE
     47BS3_PROC_BEGIN_CMN Bs3RegSetTr, BS3_PBC_HYBRID_SAFE
    4848        BS3_CALL_CONV_PROLOG 1
    4949        push    xBP
    5050        mov     xBP, xSP
    51         push    sSI
     51        push    xDX
     52        push    xAX
     53        push    xDI
    5254
    53         mov     sSI, [xBP + xCB + cbCurRetAddr]
     55        mov     dx, [xBP + xCB + cbCurRetAddr]
    5456
    5557%if TMPL_BITS == 16
    5658        ; If V8086 mode we have to go thru a syscall.
    5759        test    byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    58         jz      .direct_access
    59         push    ax
    60         push    dx
     60        jnz     .via_system_call
     61%endif
     62        ; If not in ring-0, we have to make a system call.
     63        mov     ax, ss
     64        and     ax, X86_SEL_RPL
     65        jnz     .via_system_call
    6166
    62         mov     ax, BS3_SYSCALL_SET_CRX
    63         mov     dl, 0
     67        ; Before we can load it, we must mark it non-busy.
     68%if TMPL_BITS == 16
     69        push    ds
     70        mov     ax, BS3_SEL_SYSTEM16
     71        mov     ds, ax
     72        add     xDI, Bs3Gdt wrt BS3SYSTEM16
     73%else
     74        add     xDI, Bs3Gdt wrt FLAT
     75%endif
     76        add     xDI, X86DESCGENERIC_BIT_OFF_TYPE / 8
     77        and     byte [xDI], ~(X86_SEL_TYPE_SYS_TSS_BUSY_MASK << (X86DESCGENERIC_BIT_OFF_TYPE % 8))
     78%if TMPL_BITS == 16
     79        pop     ds
     80%endif
     81        ltr     dx
     82        jmp     .return
     83
     84.via_system_call:
     85        mov     ax, BS3_SYSCALL_SET_TR
    6486        call    Bs3Syscall
    6587
    66         pop     dx
    67         pop     ax
    68         jmp     .return
    69 
    70 .direct_access:
    71 %endif
    72         ; Switch (iRegister)
    73         mov     cr0, sSI
    74 
    7588.return:
    76         pop     sSI
     89        pop     xDI
     90        pop     xAX
     91        pop     xDX
    7792        pop     xBP
    7893        BS3_CALL_CONV_EPILOG 1
    7994        BS3_HYBRID_RET
    80 BS3_PROC_END_CMN   Bs3RegSetCr0
     95BS3_PROC_END_CMN   Bs3RegSetTr
    8196
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapDefaultHandler.c

    r72133 r72138  
    125125        pTrapFrame->Ctx.rdx.u32 = uValue >> 16;
    126126    }
     127    else if (uSyscallNo == BS3_SYSCALL_SET_TR)
     128        Bs3RegSetTr(pTrapFrame->Ctx.rdx.u16);
     129    else if (uSyscallNo == BS3_SYSCALL_GET_TR)
     130        pTrapFrame->Ctx.rax.u16 = ASMGetTR();
     131    else if (uSyscallNo == BS3_SYSCALL_SET_LDTR)
     132        Bs3RegSetLdtr(pTrapFrame->Ctx.rdx.u16);
     133    else if (uSyscallNo == BS3_SYSCALL_GET_LDTR)
     134        pTrapFrame->Ctx.rax.u16 = ASMGetLDTR();
    127135    else
    128136        Bs3Panic();
     
    137145     * v8086 VMM tasks.
    138146     */
    139 //Bs3TestHostPrintf("Bs3____DefaultHandler: %02xh %04RX16:%08RX32 %08RX32 %04RX16:%08RX32 %d %d\n", pTrapFrame->bXcpt,
    140 //                  pTrapFrame->Ctx.cs, pTrapFrame->Ctx.rip.u32, pTrapFrame->Ctx.rflags.u32, pTrapFrame->Ctx.ss, pTrapFrame->Ctx.rsp.u32, g_fBs3TrapNoV86Assist, 42);
     147    //Bs3TestHostPrintf("Bs3____DefaultHandler: %02xh %04RX16:%08RX32 %08RX32 %04RX16:%08RX32 %d %d\n", pTrapFrame->bXcpt,
     148    //                  pTrapFrame->Ctx.cs, pTrapFrame->Ctx.rip.u32, pTrapFrame->Ctx.rflags.u32, pTrapFrame->Ctx.ss,
     149    //                  pTrapFrame->Ctx.rsp.u32, g_fBs3TrapNoV86Assist, 42);
    141150    if (   (pTrapFrame->Ctx.rflags.u32 & X86_EFL_VM)
    142151        && !g_fBs3TrapNoV86Assist)
     
    152161        pbCode      = (uint8_t const BS3_FAR *)BS3_MAKE_PROT_R0PTR_FROM_REAL(pTrapFrame->Ctx.cs, pTrapFrame->Ctx.rip.u16);
    153162        pbCodeStart = pbCode;
    154 //Bs3TestHostPrintf("Bs3TrapDefaultHandler: V86 assist...\n");
    155163
    156164        /*
     
    159167        if (pTrapFrame->bXcpt == X86_XCPT_GP)
    160168        {
    161 //Bs3TestHostPrintf("Bs3TrapDefaultHandler: #GP %04RX16:%08RX32 %08RX32\n", pTrapFrame->Ctx.cs, pTrapFrame->Ctx.rip.u32, pTrapFrame->Ctx.rflags.u32);
    162169            bOpCode = *pbCode++;
    163170            if (bOpCode == 0x66)
     
    262269        else
    263270        {
    264 //Bs3TestHostPrintf("Bs3TrapDefaultHandler: %02x %04RX16:%08RX32 %08RX32\n", pTrapFrame->bXcpt, pTrapFrame->Ctx.cs, pTrapFrame->Ctx.rip.u32, pTrapFrame->Ctx.rflags.u32);
    265271            fHandled = false;
    266272        }
     
    273279# endif
    274280            Bs3RegCtxRestore(&pTrapFrame->Ctx, 0 /*fFlags*/); /* does not return. */
    275 Bs3TestHostPrintf("Bs3TrapDefaultHandler: => Handled\n");
    276281            return;
    277282        }
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h

    r72133 r72138  
    105105#define Bs3RegGetDr7 BS3_CMN_MANGLER(Bs3RegGetDr7)
    106106#define Bs3RegGetDrX BS3_CMN_MANGLER(Bs3RegGetDrX)
     107#define Bs3RegGetLdtr BS3_CMN_MANGLER(Bs3RegGetLdtr)
     108#define Bs3RegGetTr BS3_CMN_MANGLER(Bs3RegGetTr)
    107109#define Bs3RegSetCr0 BS3_CMN_MANGLER(Bs3RegSetCr0)
    108110#define Bs3RegSetCr2 BS3_CMN_MANGLER(Bs3RegSetCr2)
     
    116118#define Bs3RegSetDr7 BS3_CMN_MANGLER(Bs3RegSetDr7)
    117119#define Bs3RegSetDrX BS3_CMN_MANGLER(Bs3RegSetDrX)
     120#define Bs3RegSetLdtr BS3_CMN_MANGLER(Bs3RegSetLdtr)
     121#define Bs3RegSetTr BS3_CMN_MANGLER(Bs3RegSetTr)
    118122#define Bs3SelFar32ToFlat32 BS3_CMN_MANGLER(Bs3SelFar32ToFlat32)
    119123#define Bs3SelFar32ToFlat32NoClobber BS3_CMN_MANGLER(Bs3SelFar32ToFlat32NoClobber)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h

    r72133 r72138  
    105105#undef Bs3RegGetDr7
    106106#undef Bs3RegGetDrX
     107#undef Bs3RegGetLdtr
     108#undef Bs3RegGetTr
    107109#undef Bs3RegSetCr0
    108110#undef Bs3RegSetCr2
     
    116118#undef Bs3RegSetDr7
    117119#undef Bs3RegSetDrX
     120#undef Bs3RegSetLdtr
     121#undef Bs3RegSetTr
    118122#undef Bs3SelFar32ToFlat32
    119123#undef Bs3SelFar32ToFlat32NoClobber
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r72133 r72138  
    836836/** Get CRx register (register number in dl, value returned in ax:dx). */
    837837#define BS3_SYSCALL_GET_CRX     UINT16_C(0x000b)
     838/** Set the task register (value in ESI). */
     839#define BS3_SYSCALL_SET_TR      UINT16_C(0x000c)
     840/** Get the task register (value returned in ax). */
     841#define BS3_SYSCALL_GET_TR      UINT16_C(0x000d)
     842/** Set the LDT register (value in ESI). */
     843#define BS3_SYSCALL_SET_LDTR    UINT16_C(0x000e)
     844/** Get the LDT register (value returned in ax). */
     845#define BS3_SYSCALL_GET_LDTR    UINT16_C(0x000f)
    838846/** @} */
    839847
     
    28432851BS3_CMN_PROTO_NOSB(RTCCUINTXREG, Bs3RegGetCr3,(void));
    28442852BS3_CMN_PROTO_NOSB(RTCCUINTXREG, Bs3RegGetCr4,(void));
     2853BS3_CMN_PROTO_NOSB(uint16_t, Bs3RegGetTr,(void));
     2854BS3_CMN_PROTO_NOSB(uint16_t, Bs3RegGetLdtr,(void));
    28452855
    28462856BS3_CMN_PROTO_NOSB(void, Bs3RegSetCr0,(RTCCUINTXREG uValue));
     
    28482858BS3_CMN_PROTO_NOSB(void, Bs3RegSetCr3,(RTCCUINTXREG uValue));
    28492859BS3_CMN_PROTO_NOSB(void, Bs3RegSetCr4,(RTCCUINTXREG uValue));
     2860BS3_CMN_PROTO_NOSB(void, Bs3RegSetTr,(uint16_t uValue));
     2861BS3_CMN_PROTO_NOSB(void, Bs3RegSetLdtr,(uint16_t uValue));
    28502862/** @} */
    28512863
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.mac

    r72133 r72138  
    15071507;; Get CRx register (register number in dl, value returned in ax:dx).
    15081508%define BS3_SYSCALL_GET_CRX         000bh
     1509;; Set the task register (value in dx). */
     1510%define BS3_SYSCALL_SET_TR          000ch
     1511;; Get the task register (value returned in ax).
     1512%define BS3_SYSCALL_GET_TR          000dh
     1513;; Set the LDT register (value in dx).
     1514%define BS3_SYSCALL_SET_LDTR        000eh
     1515;; Get the LDT register (value returned in ax).
     1516%define BS3_SYSCALL_GET_LDTR        000fh
    15091517;; The last system call value.
    1510 %define BS3_SYSCALL_LAST            BS3_SYSCALL_GET_CRX
     1518%define BS3_SYSCALL_LAST            BS3_SYSCALL_GET_LDTR
    15111519;; @}
    15121520
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette