VirtualBox

Changeset 59934 in vbox for trunk


Ignore:
Timestamp:
Mar 4, 2016 8:32:23 PM (9 years ago)
Author:
vboxsync
Message:

bs3kit: Added missing bs3-mode-SwitchTo*_Weird.asm files and some fixes to the other switching stuff.

Location:
trunk/src/VBox/ValidationKit/bootsectors/bs3kit
Files:
10 added
1 deleted
8 edited

Legend:

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

    r59895 r59934  
    198198        bs3-mode-SwitchToPE16_V86.asm \
    199199        bs3-mode-SwitchToPE32.asm \
     200        bs3-mode-SwitchToPE32_16.asm \
     201        bs3-mode-SwitchToPEV86.asm \
    200202        bs3-mode-SwitchToPP16.asm \
     203        bs3-mode-SwitchToPP16_32.asm \
     204        bs3-mode-SwitchToPP16_V86.asm \
    201205        bs3-mode-SwitchToPP32.asm \
     206        bs3-mode-SwitchToPP32_16.asm \
     207        bs3-mode-SwitchToPPV86.asm \
    202208        bs3-mode-SwitchToPAE16.asm \
     209        bs3-mode-SwitchToPAE16_32.asm \
     210        bs3-mode-SwitchToPAE16_V86.asm \
    203211        bs3-mode-SwitchToPAE32.asm \
     212        bs3-mode-SwitchToPAE32_16.asm \
     213        bs3-mode-SwitchToPAEV86.asm \
    204214        bs3-mode-SwitchToLM64.asm \
    205215        bs3-mode-SwitchToLM32.asm \
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo16Bit.asm

    r59885 r59934  
    5959%else
    6060        push    xAX
     61        push    xBX
    6162        xPUSHF
    6263        cli
     
    7778
    7879        ; Load 16-bit segment registers.
    79         ;; @todo support non-standard stacks?
    8080        add     ax, BS3_SEL_R0_SS16 - BS3_SEL_R0_CS16
    8181        mov     ss, ax
     
    8484        mov     ds, ax
    8585        mov     es, ax
     86
     87        ; Thunk the stack if necessary.
     88        mov     ebx, esp
     89        shr     ebx, 16
     90        jz      .stack_ok
     91int3 ; This is for later, just remove this int3 once needed.
     92        test    ax, X86_SEL_RPL
     93        jnz     .stack_rpl_must_be_0_for_custom_stacks
     94        shl     bx, X86_SEL_SHIFT
     95        add     bx, BS3_SEL_TILED
     96        mov     ss, bx
     97        movzx   esp, sp
     98.stack_ok:
    8699
    87100        ; Update globals.
     
    93106        add     sp, 4
    94107 %endif
     108        pop     ebx
     109 %if TMPL_BITS == 64
     110        add     sp, 4
     111 %endif
    95112        pop     eax
    96113 %if TMPL_BITS == 64
    97114        add     sp, 4
    98115 %endif
    99         ret     sCB - 2                 ; Return and pop 2 or 6 bytes of "parameters" (unused return value)
     116        ret     (TMPL_BITS - 16) / 8    ; Return and pop 2 or 6 bytes of "parameters" (unused return value)
     117
     118.stack_rpl_must_be_0_for_custom_stacks:
     119        int3
     120        jmp     .stack_rpl_must_be_0_for_custom_stacks
    100121TMPL_BEGIN_TEXT
    101122%endif
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo16BitV86.asm

    r59895 r59934  
    6363        push    ecx
    6464        push    ebx
    65 %if TMPL_BITS == 16
     65 %if TMPL_BITS == 16
    6666        push    ds
    6767
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo32Bit.asm

    r59885 r59934  
    2828
    2929
     30%if TMPL_BITS == 16
     31BS3_EXTERN_CMN Bs3SelProtFar32ToFlat32
     32%endif
    3033%if TMPL_BITS != 32
    3134BS3_EXTERN_DATA16 g_bBs3CurrentMode
     
    4750        push    eax
    4851        pushfd
     52        push    edx
    4953 %else
    5054        pushfq
     
    5357        cli
    5458
    55 %if TMPL_BITS == 16
     59 %if TMPL_BITS == 16
    5660        ; Check for v8086 mode, we need to exit it to enter 32-bit mode.
    5761        mov     ax, seg g_bBs3CurrentMode
     
    6266        jne     .not_v8086
    6367
     68        ; Calc flat stack into edx.
     69        mov     dx, ss
     70        movzx   edx, dx
     71        shl     edx, 4
     72        add     dx, sp
     73        adc     edx, 0                  ; edx = flat stack address corresponding to ss:sp
     74
     75        ; Switch to 16-bit ring0 and go on to do the far jump to 32-bit code.
    6476        mov     ax, BS3_SYSCALL_TO_RING0
    6577        int     BS3_TRAP_SYSCALL
     
    6779        mov     xAX, BS3_SEL_R0_CS32
    6880        jmp     .do_far_jump
    69 %endif
     81 %endif
    7082
    7183.not_v8086:
     84 %if TMPL_BITS == 16
     85        ; Calc flat stack into edx.
     86        push    ecx
     87        push    ebx
     88        push    ss
     89        push    word 0
     90        push    sp
     91        call    Bs3SelProtFar32ToFlat32
     92        add     sp, 6
     93        shl     edx, 16
     94        mov     dx, ax                  ; edx = flat stack address corresponding to ss:sp
     95        pop     ebx
     96        pop     ecx
     97 %endif
     98
    7299        ; Calc ring addend.
    73100        mov     ax, cs
     
    92119        add     eax, BS3_SEL_R0_SS32 - BS3_SEL_R0_CS32
    93120        mov     ss, ax
     121 %if TMPL_BITS == 16
     122        mov     esp, edx                ; Load flat stack address.
     123 %endif
    94124
    95125        add     eax, BS3_SEL_R0_DS32 - BS3_SEL_R0_SS32
     
    103133 %if TMPL_BITS == 16
    104134        ; Adjust the return address.
    105         movsx   eax, word [esp + 4*2 + 2]
     135        movsx   eax, word [esp + 4*3 + 2]
    106136        add     eax, BS3_ADDR_BS3TEXT16
    107         mov     [esp + 4*2], eax
     137        mov     [esp + 4*3], eax
    108138 %endif
    109139
    110140        ; Restore and return.
     141        BS3_ONLY_16BIT_STMT pop     edx
    111142        popfd
    112143        pop     eax
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo64Bit.asm

    r59885 r59934  
    55
    66;
    7 ; Copyright (C) 2007-2015 Oracle Corporation
     7; Copyright (C) 2007-2016 Oracle Corporation
    88;
    99; This file is part of VirtualBox Open Source Edition (OSE), as
     
    4242        ret
    4343
    44 %elif BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
    45 .again: int3                            ; Makes no sense to go to 64-bit mode from real or v8086 mode.
    46         jmp     .again
    47 
    4844%else
    4945 %if TMPL_BITS == 16
     
    5955        cli
    6056
     57 %if TMPL_BITS == 16
     58        ; Check that this is LM16
     59        mov     ax, seg g_bBs3CurrentMode
     60        cmp     byte [g_bBs3CurrentMode], BS3_MODE_LM16
     61        je      .ok_lm16
     62        int3
     63 .ok_lm16:
     64 %endif
     65
    6166        ; Calc ring addend.
    6267        mov     ax, cs
     
    6772        ; setup far return.
    6873        push    sAX
    69 %if TMPL_BITS == 16
     74 %if TMPL_BITS == 16
    7075        push    dword .sixty_four_bit
    7176        o32 retf
    72 %else
     77 %else
    7378        push    .sixty_four_bit
    7479        retf
    75 %endif
     80 %endif
    7681
    7782BS3_SET_BITS 64
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPE16_32.asm

    r59885 r59934  
    4646%else
    4747        ;
    48         ; Make sure we're the 16-bit segment and then call Bs3SwitchToPE16.
     48        ; Make sure we're in the 16-bit segment and then call Bs3SwitchToPE16.
    4949        ;
    5050 %if TMPL_BITS != 16
     
    6161        ; Switch to 32-bit mode.
    6262        ;
    63         extern  TMPL_NM(Bs3SwitchTo32Bit)
    64         call    TMPL_NM(Bs3SwitchTo32Bit)
     63        extern  _Bs3SwitchTo32Bit_c16
     64 %if TMPL_BITS == 16
     65        jmp     _Bs3SwitchTo32Bit_c16
     66 %else
     67        call    _Bs3SwitchTo32Bit_c16
    6568        BS3_SET_BITS 32
    66 
    67         ;
    68         ; Fix the return address and return.
    69         ;
    70  %if TMPL_BITS == 16
    71         push    word [esp]
    72  %elif TMPL_BITS == 64
    73         pop     dword [esp + 4]
     69  %if TMPL_BITS == 32
     70        ret
     71  %else
     72        ret     4                       ; Return and pop 4 bytes of "parameters" (unused return address).
     73  %endif
    7474 %endif
    75         ret
    7675%endif
    7776BS3_PROC_END_MODE   Bs3SwitchToPE16_32
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPE16_V86.asm

    r59904 r59934  
    2929
    3030;;
    31 ; Switch to 16-bit unpaged protected mode from any other mode.
     31; Switch to 16-bit unpaged protected mode with 16-bit sys+tss from any other mode.
    3232;
    3333; @cproto   BS3_DECL(void) Bs3SwitchToPE16(void);
     
    3535; @uses     Nothing (except high 32-bit register parts).
    3636;
    37 ; @remarks  Obviously returns to 16-bit mode, even if the caller was
    38 ;           in 32-bit or 64-bit mode.
     37; @remarks  Obviously returns to 16-bit v8086 mode, even if the caller was
     38;           in 16-bit, 32-bit or 64-bit mode.
    3939;
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
     
    6565
    6666        ;
    67         ; Switch to v8086 mode.
     67        ; Switch to v8086 mode (return address is already 16-bit).
    6868        ;
    69         extern  TMPL_NM(Bs3SwitchToV86)
    70         jmp     TMPL_NM(Bs3SwitchToV86)
     69        extern  _Bs3SwitchToV86_pe16
     70        jmp     _Bs3SwitchToV86_pe16
    7171%endif
    7272BS3_PROC_END_MODE   Bs3SwitchToPE16_V86
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToRM.asm

    r59863 r59934  
    2828
    2929BS3_EXTERN_SYSTEM16 Bs3Gdt
     30%if TMPL_MODE == BS3_MODE_PE16
     31BS3_EXTERN_DATA16 g_uBs3CpuDetected
     32%endif
    3033TMPL_BEGIN_TEXT
    3134
     
    6063        cli
    6164
    62  %if TMPL_BITS != 16
     65 %if TMPL_MODE == BS3_MODE_PE16
     66        ;
     67        ; On 80286 we must reset the CPU to get back to real mode.
     68        ;
     69        mov     ax, seg g_uBs3CpuDetected
     70        mov     ds, ax
     71        cmp     byte [g_uBs3CpuDetected], BS3CPU_80286
     72        jne     .is_386_or_better
     73.implement_this_later:
     74        int3
     75        jmp     .implement_this_later
     76
     77        jmp     .reload_cs
     78
     79 %elif TMPL_BITS != 16
     80        ;
    6381        ; Must be in 16-bit segment when calling Bs3SwitchTo16Bit.
     82        ;
    6483        jmp     .sixteen_bit_segment wrt FLAT
    6584BS3_BEGIN_TEXT16
     
    7594        ; Exit to real mode.
    7695        ;
     96.is_386_or_better:
    7797        mov     eax, cr0
    7898        and     eax, X86_CR0_NO_PE_NO_PG
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