VirtualBox

Changeset 60019 in vbox


Ignore:
Timestamp:
Mar 14, 2016 11:33:59 AM (9 years ago)
Author:
vboxsync
Message:

bs3kit: Fixes and updates.

Location:
trunk/src/VBox/ValidationKit/bootsectors/bs3kit
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/VBoxBs3ObjConverter.cpp

    r60009 r60019  
    15751575                            return false;
    15761576
    1577                         /* If the symbol doesn't start with an underscore, add an underscore
    1578                            prefixed alias to ease access from 16-bit and 32-bit code. */
    1579                         if (*pszName != '_')
     1577                        /* If the symbol doesn't start with an underscore and is a _c64 or _lm64 symbol,
     1578                           add an underscore prefixed alias to ease access from 16-bit and 32-bit code. */
     1579                        size_t cchName = strlen(pszName);
     1580                        if (   *pszName != '_'
     1581                            && (   (cchName > 4 && strcmp(&pszName[cchName - 4], "_c64")  == 0)
     1582                                || (cchName > 5 && strcmp(&pszName[cchName - 5], "_lm64") == 0) ) )
    15801583                        {
    15811584                            char   szCdeclName[512];
    1582                             size_t cchName = strlen(pszName);
    15831585                            if (cchName > sizeof(szCdeclName) - 2)
    15841586                                cchName = sizeof(szCdeclName) - 2;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PrintChr.asm

    r60000 r60019  
    6565.do_vga_bios_call:
    6666        mov     al, [xBP + xCB*2]       ; Load the char
     67        cmp     al, 0ah                 ; \n
     68        je      .newline
    6769        mov     bx, 0ff00h
    6870        mov     ah, 0eh
     71        int     10h
     72        jmp     .return
     73.newline:
     74        mov     ax, 0e0dh               ; cmd + '\r'.
     75        mov     bx, 0ff00h
     76        int     10h
     77        mov     ax, 0e0ah               ; cmd + '\n'.
     78        mov     bx, 0ff00h
    6979        int     10h
    7080        jmp     .return
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo16BitV86.asm

    r59984 r60019  
    9797        or      byte [BS3_DATA16_WRT(g_bBs3CurrentMode)], BS3_MODE_CODE_V86
    9898
    99  %if TMPL_BITS != 16
    100         ; Set GS.
    101         mov     ax, gs
    102         mov     [xSP + 4*4 + 20h], ax
    103  %endif
    104 
    10599        ; Thunk return SS:ESP to real-mode address via 32-bit flat.
    106         lea     eax, [esp + 4*4 + 24h]
     100        lea     eax, [esp + 4*4 + 24h + xCB]
    107101        push    ss
    108102        push    eax
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestFailed.c

    r59865 r60019  
    4343
    4444    /*
    45      * VMMDev first.
     45     * VMMDev first.  We postpone newline processing here so we can strip one
     46     * trailing newline.
    4647     */
    4748    if (BS3_DATA_NM(g_fbBs3VMMDevTesting))
    48         ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, ch);
     49    {
     50        if (*pfNewLine && ch != '\0')
     51            ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, '\n');
     52        if (ch != '\n')
     53            ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, ch);
     54    }
    4955
    5056    /*
     
    5359    if (ch != 0)
    5460    {
    55         if (ch != '\n')
    56         {
    57             Bs3PrintChr(ch);
    58             *pfNewLine = false;
    59         }
    60         else
    61         {
    62             Bs3PrintStr("\r\n");
    63             *pfNewLine = true;
    64         }
     61        Bs3PrintChr(ch);
     62        *pfNewLine = ch == '\n';
    6563    }
    6664    /* We're called with '\0' to indicate end-of-string. Supply trailing
    6765       newline if necessary. */
    6866    else if (!*pfNewLine)
    69         Bs3PrintStr("\r\n");
     67        Bs3PrintChr('\n');
    7068
    7169    return 1;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestInit.c

    r59941 r60019  
    5757     */
    5858    Bs3PrintStr(pszTest);
    59     Bs3PrintStr(": TESTING...\r\n");
     59    Bs3PrintStr(": TESTING...\n");
    6060
    6161    /*
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestSkipped.c

    r59865 r60019  
    3131#include "bs3kit-template-header.h"
    3232#include "bs3-cmn-test.h"
     33#include <iprt/asm-amd64-x86.h>
    3334
    3435
     
    3839BS3_DECL(void) Bs3TestSkippedV(const char *pszFormat, va_list va)
    3940{
    40     /* Just mark it as skipped and deal with it when the sub-test is done. */
    41     BS3_DATA_NM(g_fbBs3SubTestSkipped) = true;
     41    if (BS3_DATA_NM(g_cusBs3TestErrors) == BS3_DATA_NM(g_cusBs3SubTestAtErrors))
     42    {
     43        /* Just mark it as skipped and deal with it when the sub-test is done. */
     44        BS3_DATA_NM(g_fbBs3SubTestSkipped) = true;
    4245
    43     /* The reason why it was skipp is optional. */
    44     if (pszFormat)
    45     {
    46         bool fNewLine = false;
    47         Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &fNewLine);
     46        /* Tell VMMDev */
     47        if (BS3_DATA_NM(g_fbBs3VMMDevTesting))
     48            ASMOutU32(VMMDEV_TESTING_IOPORT_CMD, VMMDEV_TESTING_CMD_SKIPPED);
     49
     50        /* The reason why it was skipped is optional. */
     51        if (pszFormat)
     52        {
     53            bool fNewLine = false;
     54            Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &fNewLine);
     55        }
     56        else if (BS3_DATA_NM(g_fbBs3VMMDevTesting))
     57            ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, 0);
    4858    }
    4959}
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-instantiate-common.h

    r60003 r60019  
    11
    22
     3/*
     4 * Instantiating common code (c16, c32, c64).
     5 */
     6#define BS3_INSTANTIATING_CMN
    37
    48#ifdef BS3_CMN_INSTANTIATE_FILE1
     
    2933#endif
    3034
     35#undef BS3_INSTANTIATING_CMN
     36
     37
     38/*
     39 * Instantiating code for each individual mode (rm, pe16, pe16_32, ..).
     40 */
     41#define BS3_INSTANTIATING_MODE
     42
     43#ifdef BS3_MODE_INSTANTIATE_FILE1
     44
     45# define BS3_MODE_INSTANTIATE_FILE1_B <BS3_MODE_INSTANTIATE_FILE1>
     46
     47# if ARCH_BITS == 16 /* 16-bit */
     48
     49#  define TMPL_MODE BS3_MODE_RM
     50#  include <bs3kit/bs3kit-template-header.h>
     51#  include BS3_MODE_INSTANTIATE_FILE1_B
     52#  include <bs3kit/bs3kit-template-footer.h>
     53
     54#  define TMPL_MODE BS3_MODE_PE16
     55#  include <bs3kit/bs3kit-template-header.h>
     56#  include BS3_MODE_INSTANTIATE_FILE1_B
     57#  include <bs3kit/bs3kit-template-footer.h>
     58
     59#  define TMPL_MODE BS3_MODE_PE16_V86
     60#  include <bs3kit/bs3kit-template-header.h>
     61#  include BS3_MODE_INSTANTIATE_FILE1_B
     62#  include <bs3kit/bs3kit-template-footer.h>
     63
     64#  define TMPL_MODE BS3_MODE_PE32_16
     65#  include <bs3kit/bs3kit-template-header.h>
     66#  include BS3_MODE_INSTANTIATE_FILE1_B
     67#  include <bs3kit/bs3kit-template-footer.h>
     68
     69#  define TMPL_MODE BS3_MODE_PEV86
     70#  include <bs3kit/bs3kit-template-header.h>
     71#  include BS3_MODE_INSTANTIATE_FILE1_B
     72#  include <bs3kit/bs3kit-template-footer.h>
     73
     74#  define TMPL_MODE BS3_MODE_PP16
     75#  include <bs3kit/bs3kit-template-header.h>
     76#  include BS3_MODE_INSTANTIATE_FILE1_B
     77#  include <bs3kit/bs3kit-template-footer.h>
     78
     79#  define TMPL_MODE BS3_MODE_PP16_V86
     80#  include <bs3kit/bs3kit-template-header.h>
     81#  include BS3_MODE_INSTANTIATE_FILE1_B
     82#  include <bs3kit/bs3kit-template-footer.h>
     83
     84#  define TMPL_MODE BS3_MODE_PP32_16
     85#  include <bs3kit/bs3kit-template-header.h>
     86#  include BS3_MODE_INSTANTIATE_FILE1_B
     87#  include <bs3kit/bs3kit-template-footer.h>
     88
     89#  define TMPL_MODE BS3_MODE_PPV86
     90#  include <bs3kit/bs3kit-template-header.h>
     91#  include BS3_MODE_INSTANTIATE_FILE1_B
     92#  include <bs3kit/bs3kit-template-footer.h>
     93
     94#  define TMPL_MODE BS3_MODE_PAE16
     95#  include <bs3kit/bs3kit-template-header.h>
     96#  include BS3_MODE_INSTANTIATE_FILE1_B
     97#  include <bs3kit/bs3kit-template-footer.h>
     98
     99#  define TMPL_MODE BS3_MODE_PAE16_V86
     100#  include <bs3kit/bs3kit-template-header.h>
     101#  include BS3_MODE_INSTANTIATE_FILE1_B
     102#  include <bs3kit/bs3kit-template-footer.h>
     103
     104#  define TMPL_MODE BS3_MODE_PAE32_16
     105#  include <bs3kit/bs3kit-template-header.h>
     106#  include BS3_MODE_INSTANTIATE_FILE1_B
     107#  include <bs3kit/bs3kit-template-footer.h>
     108
     109#  define TMPL_MODE BS3_MODE_PAEV86
     110#  include <bs3kit/bs3kit-template-header.h>
     111#  include BS3_MODE_INSTANTIATE_FILE1_B
     112#  include <bs3kit/bs3kit-template-footer.h>
     113
     114#  define TMPL_MODE BS3_MODE_LM16
     115#  include <bs3kit/bs3kit-template-header.h>
     116#  include BS3_MODE_INSTANTIATE_FILE1_B
     117#  include <bs3kit/bs3kit-template-footer.h>
     118
     119# endif
     120
     121# if ARCH_BITS == 32 /* 32-bit  */
     122
     123#  define TMPL_MODE BS3_MODE_PE16_32
     124#  include <bs3kit/bs3kit-template-header.h>
     125#  include BS3_MODE_INSTANTIATE_FILE1_B
     126#  include <bs3kit/bs3kit-template-footer.h>
     127
     128#  define TMPL_MODE BS3_MODE_PE32
     129#  include <bs3kit/bs3kit-template-header.h>
     130#  include BS3_MODE_INSTANTIATE_FILE1_B
     131#  include <bs3kit/bs3kit-template-footer.h>
     132
     133#  define TMPL_MODE BS3_MODE_PP16_32
     134#  include <bs3kit/bs3kit-template-header.h>
     135#  include BS3_MODE_INSTANTIATE_FILE1_B
     136#  include <bs3kit/bs3kit-template-footer.h>
     137
     138#  define TMPL_MODE BS3_MODE_PP32
     139#  include <bs3kit/bs3kit-template-header.h>
     140#  include BS3_MODE_INSTANTIATE_FILE1_B
     141#  include <bs3kit/bs3kit-template-footer.h>
     142
     143#  define TMPL_MODE BS3_MODE_PAE16_32
     144#  include <bs3kit/bs3kit-template-header.h>
     145#  include BS3_MODE_INSTANTIATE_FILE1_B
     146#  include <bs3kit/bs3kit-template-footer.h>
     147
     148#  define TMPL_MODE BS3_MODE_PAE32
     149#  include <bs3kit/bs3kit-template-header.h>
     150#  include BS3_MODE_INSTANTIATE_FILE1_B
     151#  include <bs3kit/bs3kit-template-footer.h>
     152
     153#  define TMPL_MODE BS3_MODE_LM32
     154#  include <bs3kit/bs3kit-template-header.h>
     155#  include BS3_MODE_INSTANTIATE_FILE1_B
     156#  include <bs3kit/bs3kit-template-footer.h>
     157
     158# endif
     159
     160# if ARCH_BITS == 64 /* 64-bit. */
     161#  define TMPL_MODE BS3_MODE_LM64
     162#  include <bs3kit/bs3kit-template-header.h>
     163#  include BS3_MODE_INSTANTIATE_FILE1_B
     164#  include <bs3kit/bs3kit-template-footer.h>
     165# endif
     166
     167#endif
     168
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForLM64.asm

    r59949 r60019  
    5252;
    5353BS3_PROC_BEGIN_MODE Bs3PagingGetRootForLM64
    54         BS3_ONLY_16BIT_STMT push    ds
    55         BS3_ONLY_16BIT_STMT push    BS3DATA16
    56         BS3_ONLY_16BIT_STMT pop     ds
    5754        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootLM)]
    58         BS3_ONLY_16BIT_STMT pop     ds
    5955        cmp     eax, 0ffffffffh
    6056        je      .init_root
     
    6460        push    xBP
    6561        mov     xBP, xSP
    66         BS3_ONLY_16BIT_STMT push    ds
     62        BS3_ONLY_16BIT_STMT push    es
     63        push    sDX
     64        push    sCX
     65        push    sBX
     66%if TMPL_BITS == 64
     67        push    r8
     68        push    r9
     69        push    r10
     70        push    r11
     71%endif
    6772
    6873%ifdef TMPL_RM
     
    9499        ; Load the value and return.
    95100        ;
    96         BS3_ONLY_16BIT_STMT push    BS3DATA16
    97         BS3_ONLY_16BIT_STMT pop     ds
    98101        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootLM)]
    99102
    100         BS3_ONLY_16BIT_STMT pop     ds
     103%if TMPL_BITS == 64
     104        pop     r11
     105        pop     r10
     106        pop     r9
     107        pop     r8
     108%endif
     109        pop     sBX
     110        pop     sCX
     111        pop     sDX
     112        BS3_ONLY_16BIT_STMT pop     es
    101113        leave
    102114        ret
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForPAE32.asm

    r59949 r60019  
    5252;
    5353BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPAE32
    54         BS3_ONLY_16BIT_STMT push    ds
    55         BS3_ONLY_16BIT_STMT push    BS3DATA16
    56         BS3_ONLY_16BIT_STMT pop     ds
    5754        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootPAE)]
    58         BS3_ONLY_16BIT_STMT pop     ds
    5955        cmp     eax, 0ffffffffh
    6056        je      .init_root
     
    6460        push    xBP
    6561        mov     xBP, xSP
    66         BS3_ONLY_16BIT_STMT push    ds
     62        BS3_ONLY_16BIT_STMT push    es
     63        push    sDX
     64        push    sCX
     65        push    sBX
     66%if TMPL_BITS == 64
     67        push    r8
     68        push    r9
     69        push    r10
     70        push    r11
     71%endif
    6772
    6873%ifdef TMPL_RM
     
    95100        ; Load the value and return.
    96101        ;
    97         BS3_ONLY_16BIT_STMT push    BS3DATA16
    98         BS3_ONLY_16BIT_STMT pop     ds
    99102        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootPAE)]
    100103
    101         BS3_ONLY_16BIT_STMT pop     ds
     104%if TMPL_BITS == 64
     105        pop     r11
     106        pop     r10
     107        pop     r9
     108        pop     r8
     109%endif
     110        pop     sBX
     111        pop     sCX
     112        pop     sDX
     113        BS3_ONLY_16BIT_STMT pop     es
    102114        leave
    103115        ret
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForPP32.asm

    r59949 r60019  
    5252;
    5353BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPP32
    54         BS3_ONLY_16BIT_STMT push    ds
    55         BS3_ONLY_16BIT_STMT push    BS3DATA16
    56         BS3_ONLY_16BIT_STMT pop     ds
    5754        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootPP)]
    58         BS3_ONLY_16BIT_STMT pop     ds
    5955        cmp     eax, 0ffffffffh
    6056        je      .init_root
     
    6460        push    xBP
    6561        mov     xBP, xSP
    66         BS3_ONLY_16BIT_STMT push    ds
     62        BS3_ONLY_16BIT_STMT push    es
     63        push    sDX
     64        push    sCX
     65        push    sBX
     66%if TMPL_BITS == 64
     67        push    r8
     68        push    r9
     69        push    r10
     70        push    r11
     71%endif
    6772
    6873%ifdef TMPL_RM
     
    95100        ; Load the value and return.
    96101        ;
    97         BS3_ONLY_16BIT_STMT push    BS3DATA16
    98         BS3_ONLY_16BIT_STMT pop     ds
    99102        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootPP)]
    100103
    101         BS3_ONLY_16BIT_STMT pop     ds
     104%if TMPL_BITS == 64
     105        pop     r11
     106        pop     r10
     107        pop     r9
     108        pop     r8
     109%endif
     110        pop     sBX
     111        pop     sCX
     112        pop     sDX
     113        BS3_ONLY_16BIT_STMT pop     es
    102114        leave
    103115        ret
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPAEV86.asm

    r59938 r60019  
    4646%else
    4747        ;
    48         ; Convert the return address and jump to the 16-bit code segment.
    49         ;
    50  %if TMPL_BITS != 16
    51         shl     xPRE [xSP], TMPL_BITS - 16
    52         add     xSP, (TMPL_BITS - 16) / 8
    53         jmp     .sixteen_bit_segment
    54 BS3_BEGIN_TEXT16
    55         BS3_SET_BITS TMPL_BITS
    56 .sixteen_bit_segment:
    57  %endif
    58 
    59         ;
    6048        ; Switch to 32-bit PAE32 and from there to V8086.
    6149        ;
     
    6553
    6654        ;
    67         ; Switch to v8086 mode (return address is already 16-bit).
     55        ; Switch to v8086 mode after adjusting the return address.
    6856        ;
     57 %if TMPL_BITS == 16
     58        push    word [esp]
     59        mov     word [esp + 2], 0
     60 %elif TMPL_BITS == 64
     61        pop     dword [esp + 4]
     62 %endif
    6963        extern  _Bs3SwitchTo16BitV86_c32
    7064        jmp     _Bs3SwitchTo16BitV86_c32
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPEV86.asm

    r59938 r60019  
    4646%else
    4747        ;
    48         ; Convert the return address and jump to the 16-bit code segment.
    49         ;
    50  %if TMPL_BITS != 16
    51         shl     xPRE [xSP], TMPL_BITS - 16
    52         add     xSP, (TMPL_BITS - 16) / 8
    53         jmp     .sixteen_bit_segment
    54 BS3_BEGIN_TEXT16
    55         BS3_SET_BITS TMPL_BITS
    56 .sixteen_bit_segment:
    57  %endif
    58 
    59         ;
    6048        ; Switch to 32-bit PE32 and from there to V8086.
    6149        ;
     
    6553
    6654        ;
    67         ; Switch to v8086 mode (return address is already 16-bit).
     55        ; Switch to v8086 mode after adjusting the return address.
    6856        ;
     57 %if TMPL_BITS == 16
     58        push    word [esp]
     59        mov     word [esp + 2], 0
     60 %elif TMPL_BITS == 64
     61        pop     dword [esp + 4]
     62 %endif
    6963        extern  _Bs3SwitchTo16BitV86_c32
    7064        jmp     _Bs3SwitchTo16BitV86_c32
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPPV86.asm

    r59938 r60019  
    4646%else
    4747        ;
    48         ; Convert the return address and jump to the 16-bit code segment.
    49         ;
    50  %if TMPL_BITS != 16
    51         shl     xPRE [xSP], TMPL_BITS - 16
    52         add     xSP, (TMPL_BITS - 16) / 8
    53         jmp     .sixteen_bit_segment
    54 BS3_BEGIN_TEXT16
    55         BS3_SET_BITS TMPL_BITS
    56 .sixteen_bit_segment:
    57  %endif
    58 
    59         ;
    6048        ; Switch to 32-bit PP32 and from there to V8086.
    6149        ;
     
    6553
    6654        ;
    67         ; Switch to v8086 mode (return address is already 16-bit).
     55        ; Switch to v8086 mode after adjusting the return address.
    6856        ;
     57 %if TMPL_BITS == 16
     58        push    word [esp]
     59        mov     word [esp + 2], 0
     60 %elif TMPL_BITS == 64
     61        pop     dword [esp + 4]
     62 %endif
    6963        extern  _Bs3SwitchTo16BitV86_c32
    7064        jmp     _Bs3SwitchTo16BitV86_c32
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToRM.asm

    r60000 r60019  
    7070        ;
    7171 %if TMPL_MODE == BS3_MODE_PE16
    72         mov     ax, BS3_SEL_DATA16
    73         mov     ds, ax                  ; Bs3EnterMode_rm will set ds, so no need to preserve it
    7472        cmp     byte [BS3_DATA16_WRT(g_uBs3CpuDetected)], BS3CPU_80286
    7573        ja      .do_386_prologue
     
    8684 %if TMPL_MODE == BS3_MODE_PE16
    8785        push    word 0
     86 %elif BS3_MODE_IS_64BIT_SYS(TMPL_MODE)
     87        push    sDX
     88        push    sCX
    8889 %endif
    8990.done_prologue:
     
    169170 %endif
    170171
     172 %if BS3_MODE_IS_64BIT_SYS(TMPL_MODE)
     173        ;
     174        ; Clear the long mode enable bit.
     175        ;
     176        mov     ecx, MSR_K6_EFER
     177        rdmsr
     178        and     eax, ~MSR_K6_EFER_LME
     179        wrmsr
     180 %endif
     181
    171182        ;
    172183        ; Call routine for doing mode specific setups.
     
    185196 %endif
    186197.do_386_epilogue:
     198 %if BS3_MODE_IS_64BIT_SYS(TMPL_MODE)
     199        pop     ecx
     200        TMPL_ONLY_64BIT_STMT pop eax
     201        pop     edx
     202        TMPL_ONLY_64BIT_STMT pop eax
     203 %endif
    187204        popfd
    188         TMPL_ONLY_64BIT_STMT pop ebx
     205        TMPL_ONLY_64BIT_STMT pop eax
    189206        pop     ebx
    190207        TMPL_ONLY_64BIT_STMT pop eax
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModes.c

    r60002 r60019  
    189189    for (i = 0; i < cEntries; i++)
    190190    {
    191         uint8_t bErrNo;
     191        const char *pszFmtStr = "Error #%u (%#x) in %s!\n";
     192        bool        fSkipped  = true;
     193        uint8_t     bErrNo;
    192194        Bs3TestSub(paEntries[i].pszSubTest);
    193195
     196#define CHECK_RESULT(a_szModeName) \
     197            do { \
     198                if (bErrNo != BS3TESTDOMODE_SKIPPED) \
     199                { \
     200                    Bs3Printf("bErrNo=%#x %s\n", bErrNo, a_szModeName); \
     201                    fSkipped = false; \
     202                    if (bErrNo != 0) \
     203                        Bs3TestFailedF(pszFmtStr, bErrNo, bErrNo, a_szModeName); \
     204                } \
     205            } while (0)
     206
    194207        if (paEntries[i].pfnDoRM)
    195208        {
    196209            bErrNo = TMPL_NM(Bs3TestCallDoerInRM)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoRM));
    197             if (bErrNo != 0)
    198                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_rm));
     210            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_rm));
    199211        }
    200212
    201213        if (bCpuType < BS3CPU_80286)
     214        {
     215            if (fSkipped)
     216                Bs3TestSkipped(NULL);
    202217            continue;
     218        }
    203219
    204220        /*
     
    208224        {
    209225            bErrNo = TMPL_NM(Bs3TestCallDoerInPE16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPE16));
    210             if (bErrNo != 0)
    211                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pe16));
     226            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe16));
    212227        }
    213228        if (bCpuType < BS3CPU_80386)
     229        {
     230            if (fSkipped)
     231                Bs3TestSkipped(NULL);
    214232            continue;
     233        }
    215234
    216235        if (paEntries[i].pfnDoPE16_32)
    217236        {
    218237            bErrNo = TMPL_NM(Bs3TestCallDoerInPE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPE16_32));
    219             if (bErrNo != 0)
    220                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pe16_32));
     238            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe16_32));
    221239        }
    222240
     
    224242        {
    225243            bErrNo = TMPL_NM(Bs3TestCallDoerInPE16_V86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPE16_V86));
    226             if (bErrNo != 0)
    227                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pe16_v86));
     244            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe16_v86));
    228245        }
    229246
     
    231248        {
    232249            bErrNo = TMPL_NM(Bs3TestCallDoerInPE32)(CONV_TO_FLAT(paEntries[i].pfnDoPE32));
    233             if (bErrNo != 0)
    234                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pe32));
     250            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe32));
    235251        }
    236252
     
    238254        {
    239255            bErrNo = TMPL_NM(Bs3TestCallDoerInPE32_16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPE32_16));
    240             if (bErrNo != 0)
    241                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pe32_16));
     256            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe32_16));
    242257        }
    243258
     
    245260        {
    246261            bErrNo = TMPL_NM(Bs3TestCallDoerInPEV86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPEV86));
    247             if (bErrNo != 0)
    248                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pev86));
     262            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pev86));
    249263        }
    250264
     
    255269        {
    256270            bErrNo = TMPL_NM(Bs3TestCallDoerInPP16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPP16));
    257             if (bErrNo != 0)
    258                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pp16));
     271            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp16));
    259272        }
    260273
     
    262275        {
    263276            bErrNo = TMPL_NM(Bs3TestCallDoerInPP16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPP16_32));
    264             if (bErrNo != 0)
    265                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pp16_32));
     277            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp16_32));
    266278        }
    267279
     
    269281        {
    270282            bErrNo = TMPL_NM(Bs3TestCallDoerInPP16_V86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPP16_V86));
    271             if (bErrNo != 0)
    272                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pp16_v86));
     283            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp16_v86));
    273284        }
    274285
     
    276287        {
    277288            bErrNo = TMPL_NM(Bs3TestCallDoerInPP32)(CONV_TO_FLAT(paEntries[i].pfnDoPP32));
    278             if (bErrNo != 0)
    279                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pp32));
     289            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp32));
    280290        }
    281291
     
    283293        {
    284294            bErrNo = TMPL_NM(Bs3TestCallDoerInPP32_16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPP32_16));
    285             if (bErrNo != 0)
    286                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pp32_16));
     295            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp32_16));
    287296        }
    288297
     
    290299        {
    291300            bErrNo = TMPL_NM(Bs3TestCallDoerInPPV86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPPV86));
    292             if (bErrNo != 0)
    293                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_ppv86));
     301            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_ppv86));
    294302        }
    295303
     
    298306         */
    299307        if (!fHavePae)
     308        {
     309            if (fSkipped)
     310                Bs3TestSkipped(NULL);
    300311            continue;
     312        }
    301313
    302314        if (paEntries[i].pfnDoPAE16)
    303315        {
    304316            bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAE16));
    305             if (bErrNo != 0)
    306                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pae16));
     317            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae16));
    307318        }
    308319
     
    310321        {
    311322            bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE16_32));
    312             if (bErrNo != 0)
    313                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pae16_32));
     323            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae16_32));
    314324        }
    315325
     
    317327        {
    318328            bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16_V86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAE16_V86));
    319             if (bErrNo != 0)
    320                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pae16_v86));
     329            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae16_v86));
    321330        }
    322331
     
    324333        {
    325334            bErrNo = TMPL_NM(Bs3TestCallDoerInPAE32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE32));
    326             if (bErrNo != 0)
    327                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pae32));
     335            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae32));
    328336        }
    329337
     
    331339        {
    332340            bErrNo = TMPL_NM(Bs3TestCallDoerInPAE32_16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAE32_16));
    333             if (bErrNo != 0)
    334                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_pae32_16));
     341            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae32_16));
    335342        }
    336343
     
    338345        {
    339346            bErrNo = TMPL_NM(Bs3TestCallDoerInPAEV86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAEV86));
    340             if (bErrNo != 0)
    341                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_paev86));
     347            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_paev86));
    342348        }
    343349
     
    346352         */
    347353        if (!fHaveLongMode)
     354        {
     355            if (fSkipped)
     356                Bs3TestSkipped(NULL);
    348357            continue;
     358        }
    349359
    350360        if (paEntries[i].pfnDoLM16)
    351361        {
    352362            bErrNo = TMPL_NM(Bs3TestCallDoerInLM16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoLM16));
    353             if (bErrNo != 0)
    354                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_lm16));
     363            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_lm16));
    355364        }
    356365
     
    358367        {
    359368            bErrNo = TMPL_NM(Bs3TestCallDoerInLM32)(CONV_TO_FLAT(paEntries[i].pfnDoLM32));
    360             if (bErrNo != 0)
    361                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_lm32));
     369            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_lm32));
    362370        }
    363371
     
    365373        {
    366374            bErrNo = TMPL_NM(Bs3TestCallDoerInLM64)(CONV_TO_FLAT(paEntries[i].pfnDoLM64));
    367             if (bErrNo != 0)
    368                 Bs3TestFailedF("Error #%u (%#x) in %s!\n", bErrNo, bErrNo, BS3_DATA_NM(g_szBs3ModeName_lm64));
    369         }
     375            CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_lm64));
     376        }
     377
     378        if (fSkipped)
     379            Bs3TestSkipped("skipped\n");
    370380    }
    371 for (;;) { }
     381    Bs3TestSubDone();
    372382}
    373383
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesHlp.asm

    r60000 r60019  
    156156        ret
    157157
     158;
     159; For checking that the mode switching macros doesn't screw up GPRs.
     160; Note! Does not work on pre 286 hardware!
     161;
     162%ifdef BS3_STRICT
     163 %macro STRICT_SAVE_REGS 0
     164        movzx   esp, sp
     165        sub     esp, BS3REGCTX_size
     166        mov     [esp + BS3REGCTX.rax], eax
     167        mov     dword [esp + BS3REGCTX.rax+4], 0xdead0000
     168        mov     [esp + BS3REGCTX.rcx], ecx
     169        mov     dword [esp + BS3REGCTX.rcx+4], 0xdead0001
     170        mov     [esp + BS3REGCTX.rdx], edx
     171        mov     dword [esp + BS3REGCTX.rdx+4], 0xdead0002
     172        mov     [esp + BS3REGCTX.rbx], ebx
     173        mov     dword [esp + BS3REGCTX.rbx+4], 0xdead0003
     174        mov     [esp + BS3REGCTX.rbp], ebp
     175        mov     [esp + BS3REGCTX.rsp], esp
     176        mov     [esp + BS3REGCTX.rsi], esi
     177        mov     [esp + BS3REGCTX.rdi], edi
     178 %endmacro
     179
     180 %macro STRICT_CHECK_REGS 0
     181%%_esp: cmp     [esp + BS3REGCTX.rsp], esp
     182        jne     %%_esp
     183%%_eax: cmp     [esp + BS3REGCTX.rax], eax
     184        jne     %%_eax
     185%%_ecx: mov     [esp + BS3REGCTX.rcx], ecx
     186        jne     %%_ecx
     187%%_edx: cmp     [esp + BS3REGCTX.rdx], edx
     188        jne     %%_edx
     189%%_ebx: cmp     [esp + BS3REGCTX.rbx], ebx
     190        jne     %%_ebx
     191%%_ebp: cmp     [esp + BS3REGCTX.rbp], ebp
     192        jne     %%_ebp
     193%%_esi: cmp     [esp + BS3REGCTX.rsi], esi
     194        jne     %%_esi
     195%%_edi: cmp     [esp + BS3REGCTX.rdi], edi
     196        jne     %%_edi
     197        add     esp, BS3REGCTX_size
     198 %endmacro
     199%else
     200
     201 %macro STRICT_SAVE_REGS 0
     202 %endmacro
     203 %macro STRICT_CHECK_REGS 0
     204 %endmacro
     205%endif
    158206
    159207
     
    174222
    175223        ; Mode switch, make the call, switch back.
     224        STRICT_SAVE_REGS
    176225        call    TMPL_NM(Bs3SwitchToRM)
    177226        BS3_SET_BITS 16
     227        STRICT_CHECK_REGS
     228
    178229        mov     cx, BS3_MODE_RM
    179230        push    cx
    180231        call    ax
    181         add     sp, 2
     232
     233        STRICT_SAVE_REGS
    182234        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_rm)
    183235        BS3_SET_BITS TMPL_BITS
     236        STRICT_CHECK_REGS
    184237        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    185238TMPL_BEGIN_TEXT
     
    203256
    204257        ; Mode switch, make the call, switch back.
     258        STRICT_SAVE_REGS
    205259        call    TMPL_NM(Bs3SwitchToPE16)
    206260        BS3_SET_BITS 16
     261        STRICT_CHECK_REGS
     262
    207263        push    BS3_MODE_PE16
    208264        call    ax
     265
     266        STRICT_SAVE_REGS
    209267        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16)
    210268        BS3_SET_BITS TMPL_BITS
     
    223281
    224282        ; Mode switch, make the call, switch back.
     283        STRICT_SAVE_REGS
    225284        call    TMPL_NM(Bs3SwitchToPE16_32)
    226285        BS3_SET_BITS 32
     286        STRICT_CHECK_REGS
     287
    227288        push    BS3_MODE_RM
    228289        call    eax
     290
     291        STRICT_SAVE_REGS
    229292        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_32)
    230293        BS3_SET_BITS TMPL_BITS
     294        STRICT_CHECK_REGS
    231295        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    232296BS3_PROC_END_MODE   Bs3TestCallDoerInPE16_32
     
    242306
    243307        ; Mode switch, make the call, switch back.
     308        STRICT_SAVE_REGS
    244309        call    TMPL_NM(Bs3SwitchToPE16_V86)
    245310        BS3_SET_BITS 16
     311        STRICT_CHECK_REGS
     312
    246313        push    BS3_MODE_PE16_V86
    247314        call    ax
     315
     316        STRICT_SAVE_REGS
    248317        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_v86)
    249318        BS3_SET_BITS TMPL_BITS
     319        STRICT_CHECK_REGS
    250320        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    251321BS3_PROC_END_MODE   Bs3TestCallDoerInPE16_V86
     
    261331
    262332        ; Mode switch, make the call, switch back.
     333        STRICT_SAVE_REGS
    263334        call    TMPL_NM(Bs3SwitchToPE32)
    264335        BS3_SET_BITS 32
     336        STRICT_CHECK_REGS
     337
    265338        push    BS3_MODE_PE32
    266339        call    eax
     340
     341        STRICT_SAVE_REGS
    267342        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe32)
    268343        BS3_SET_BITS TMPL_BITS
     344        STRICT_CHECK_REGS
    269345        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    270346BS3_PROC_END_MODE   Bs3TestCallDoerInPE32
     
    282358
    283359        ; Mode switch, make the call, switch back.
     360        STRICT_SAVE_REGS
    284361        call    TMPL_NM(Bs3SwitchToPE32_16)
    285362        BS3_SET_BITS 16
     363        STRICT_CHECK_REGS
     364
    286365        push    BS3_MODE_PE32_16
    287366        call    ax
     367
     368        STRICT_SAVE_REGS
    288369        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe32_16)
    289370        BS3_SET_BITS TMPL_BITS
     371        STRICT_CHECK_REGS
    290372        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    291373TMPL_BEGIN_TEXT
     
    304386
    305387        ; Mode switch, make the call, switch back.
     388        STRICT_SAVE_REGS
    306389        call    TMPL_NM(Bs3SwitchToPEV86)
    307390        BS3_SET_BITS 16
     391        STRICT_CHECK_REGS
     392
    308393        push    BS3_MODE_PEV86
    309394        call    ax
     395
     396        STRICT_SAVE_REGS
    310397        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pev86)
    311398        BS3_SET_BITS TMPL_BITS
     399        STRICT_CHECK_REGS
    312400        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    313401TMPL_BEGIN_TEXT
     
    332420
    333421        ; Mode switch, make the call, switch back.
     422        STRICT_SAVE_REGS
    334423        call    TMPL_NM(Bs3SwitchToPP16)
    335424        BS3_SET_BITS 16
     425        STRICT_CHECK_REGS
     426
    336427        push    BS3_MODE_PP16
    337428        call    ax
     429
     430        STRICT_SAVE_REGS
    338431        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16)
    339432        BS3_SET_BITS TMPL_BITS
     433        STRICT_CHECK_REGS
    340434        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    341435TMPL_BEGIN_TEXT
     
    352446
    353447        ; Mode switch, make the call, switch back.
     448        STRICT_SAVE_REGS
    354449        call    TMPL_NM(Bs3SwitchToPP16_32)
    355450        BS3_SET_BITS 32
     451        STRICT_CHECK_REGS
     452
    356453        push    BS3_MODE_PP16_32
    357454        call    eax
     455
     456        STRICT_SAVE_REGS
    358457        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16_32)
    359458        BS3_SET_BITS TMPL_BITS
     459        STRICT_CHECK_REGS
    360460        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    361461BS3_PROC_END_MODE   Bs3TestCallDoerInPP16_32
     
    371471
    372472        ; Mode switch, make the call, switch back.
     473        STRICT_SAVE_REGS
    373474        call    TMPL_NM(Bs3SwitchToPP16_V86)
    374475        BS3_SET_BITS 16
     476        STRICT_CHECK_REGS
     477
    375478        push    BS3_MODE_PP16_V86
    376479        call    ax
     480
     481        STRICT_SAVE_REGS
    377482        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16_v86)
    378483        BS3_SET_BITS TMPL_BITS
     484        STRICT_CHECK_REGS
    379485        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    380486BS3_PROC_END_MODE   Bs3TestCallDoerInPP16_V86
     
    390496
    391497        ; Mode switch, make the call, switch back.
     498        STRICT_SAVE_REGS
    392499        call    TMPL_NM(Bs3SwitchToPP32)
    393500        BS3_SET_BITS 32
     501        STRICT_CHECK_REGS
     502
    394503        push    BS3_MODE_PP32
    395504        call    eax
     505
     506        STRICT_SAVE_REGS
    396507        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp32)
    397508        BS3_SET_BITS TMPL_BITS
     509        STRICT_CHECK_REGS
    398510        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    399511BS3_PROC_END_MODE   Bs3TestCallDoerInPP32
     
    411523
    412524        ; Mode switch, make the call, switch back.
     525        STRICT_SAVE_REGS
    413526        call    TMPL_NM(Bs3SwitchToPP32_16)
    414527        BS3_SET_BITS 16
     528        STRICT_CHECK_REGS
     529
    415530        push    BS3_MODE_PP32_16
    416531        call    ax
     532
     533        STRICT_SAVE_REGS
    417534        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp32_16)
    418535        BS3_SET_BITS TMPL_BITS
     536        STRICT_CHECK_REGS
    419537        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    420538TMPL_BEGIN_TEXT
     
    433551
    434552        ; Mode switch, make the call, switch back.
     553        STRICT_SAVE_REGS
    435554        call    TMPL_NM(Bs3SwitchToPPV86)
    436555        BS3_SET_BITS 16
     556        STRICT_CHECK_REGS
     557
    437558        push    BS3_MODE_PPV86
    438559        call    ax
     560
     561        STRICT_SAVE_REGS
    439562        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_ppv86)
    440563        BS3_SET_BITS TMPL_BITS
     564        STRICT_CHECK_REGS
    441565        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    442566TMPL_BEGIN_TEXT
     
    461585
    462586        ; Mode switch, make the call, switch back.
     587        STRICT_SAVE_REGS
    463588        call    TMPL_NM(Bs3SwitchToPAE16)
    464589        BS3_SET_BITS 16
     590        STRICT_CHECK_REGS
     591
    465592        push    BS3_MODE_PAE16
    466593        call    ax
     594
     595        STRICT_SAVE_REGS
    467596        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16)
    468597        BS3_SET_BITS TMPL_BITS
     598        STRICT_CHECK_REGS
    469599        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    470600TMPL_BEGIN_TEXT
     
    481611
    482612        ; Mode switch, make the call, switch back.
     613        STRICT_SAVE_REGS
    483614        call    TMPL_NM(Bs3SwitchToPAE16_32)
    484615        BS3_SET_BITS 32
     616        STRICT_CHECK_REGS
     617
    485618        push    BS3_MODE_PAE16_32
    486619        call    eax
     620
     621        STRICT_SAVE_REGS
    487622        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16_32)
    488623        BS3_SET_BITS TMPL_BITS
     624        STRICT_CHECK_REGS
    489625        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    490626BS3_PROC_END_MODE   Bs3TestCallDoerInPAE16_32
     
    500636
    501637        ; Mode switch, make the call, switch back.
     638        STRICT_SAVE_REGS
    502639        call    TMPL_NM(Bs3SwitchToPAE16_V86)
    503640        BS3_SET_BITS 16
     641        STRICT_CHECK_REGS
     642
    504643        push    BS3_MODE_PAE16_V86
    505644        call    ax
     645
     646        STRICT_SAVE_REGS
    506647        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16_v86)
    507648        BS3_SET_BITS TMPL_BITS
     649        STRICT_CHECK_REGS
    508650        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    509651BS3_PROC_END_MODE   Bs3TestCallDoerInPAE16_V86
     
    519661
    520662        ; Mode switch, make the call, switch back.
     663        STRICT_SAVE_REGS
    521664        call    TMPL_NM(Bs3SwitchToPAE32)
    522665        BS3_SET_BITS 32
     666        STRICT_CHECK_REGS
     667
    523668        push    BS3_MODE_PAE16_32
    524669        call    eax
     670
     671        STRICT_SAVE_REGS
    525672        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae32)
    526673        BS3_SET_BITS TMPL_BITS
     674        STRICT_CHECK_REGS
    527675        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    528676BS3_PROC_END_MODE   Bs3TestCallDoerInPAE32
     
    540688
    541689        ; Mode switch, make the call, switch back.
     690        STRICT_SAVE_REGS
    542691        call    TMPL_NM(Bs3SwitchToPAE32_16)
    543692        BS3_SET_BITS 16
     693        STRICT_CHECK_REGS
     694
    544695        push    BS3_MODE_PAE32_16
    545696        call    ax
     697
     698        STRICT_SAVE_REGS
    546699        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae32_16)
    547700        BS3_SET_BITS TMPL_BITS
     701        STRICT_CHECK_REGS
    548702        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    549703TMPL_BEGIN_TEXT
     
    562716
    563717        ; Mode switch, make the call, switch back.
     718        STRICT_SAVE_REGS
    564719        call    TMPL_NM(Bs3SwitchToPAEV86)
    565720        BS3_SET_BITS 16
     721        STRICT_CHECK_REGS
     722
    566723        push    BS3_MODE_PAEV86
    567724        call    ax
     725
     726        STRICT_SAVE_REGS
    568727        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_paev86)
    569728        BS3_SET_BITS TMPL_BITS
     729        STRICT_CHECK_REGS
    570730        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    571731TMPL_BEGIN_TEXT
     
    590750
    591751        ; Mode switch, make the call, switch back.
     752        STRICT_SAVE_REGS
    592753        call    TMPL_NM(Bs3SwitchToLM16)
    593754        BS3_SET_BITS 16
     755        STRICT_CHECK_REGS
     756
    594757        push    BS3_MODE_LM16
    595758        call    ax
     759
     760        STRICT_SAVE_REGS
    596761        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm16)
    597762        BS3_SET_BITS TMPL_BITS
     763        STRICT_CHECK_REGS
    598764        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    599765TMPL_BEGIN_TEXT
     
    610776
    611777        ; Mode switch, make the call, switch back.
     778        STRICT_SAVE_REGS
    612779        call    TMPL_NM(Bs3SwitchToLM32)
    613780        BS3_SET_BITS 32
     781        STRICT_CHECK_REGS
     782
    614783        and     esp, ~03h
    615784        push    BS3_MODE_LM32
    616785        call    eax
     786
     787        STRICT_SAVE_REGS
    617788        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm32)
    618789        BS3_SET_BITS TMPL_BITS
     790        STRICT_CHECK_REGS
    619791        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    620792BS3_PROC_END_MODE   Bs3TestCallDoerInLM32
     
    630802
    631803        ; Mode switch, make the call, switch back.
     804        STRICT_SAVE_REGS
    632805        call    TMPL_NM(Bs3SwitchToLM64)
    633806        BS3_SET_BITS 64
     807        STRICT_CHECK_REGS
     808
    634809        and     rsp, ~0fh
    635810        sub     rsp, 18h
    636811        push    BS3_MODE_LM64
    637812        BS3_CALL rax, 1
     813
     814        STRICT_SAVE_REGS
    638815        call    RT_CONCAT3(Bs3SwitchTo,TMPL_MODE_UNAME,_lm64)
    639816        BS3_SET_BITS TMPL_BITS
     817        STRICT_CHECK_REGS
    640818        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    641819BS3_PROC_END_MODE   Bs3TestCallDoerInLM64
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TrapSystemCallHandler.asm

    r60000 r60019  
    203203%endif
    204204
    205         ; Print the character.
     205        ; Print the character, turning '\n' into '\r\n'.
     206        cmp     cl, 0ah                 ; \n
     207        je      .print_chr_newline
     208        mov     ah, 0eh
     209        mov     al, cl
    206210        mov     bx, 0ff00h
    207         mov     al, cl
    208         mov     ah, 0eh
    209211        int     10h
    210 
     212        jmp     .print_chr_done
     213
     214.print_chr_newline:
     215        mov     ax, 0e0dh               ; cmd + \r
     216        mov     bx, 0ff00h
     217        int     10h
     218        mov     ax, 0e0ah               ; cmd + \n
     219        mov     bx, 0ff00h
     220        int     10h
     221
     222.print_chr_done:
    211223%ifndef TMPL_CMN_R86
    212224        ; Switch back (20h param scratch area not required).
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-shutdown.c

    r58812 r60019  
    2020Bs3PrintStr("Bs3PrintX32:");
    2121Bs3PrintX32(UINT32_C(0xfdb97531));
    22 Bs3PrintStr("\r\n");
     22Bs3PrintStr("\n");
    2323
    2424Bs3Printf("Bs3Printf: RX32=%#'RX32 string='%s' d=%d p=%p\n", UINT32_C(0xfdb97531), "my string", 42, Main_pe16);
     
    2727Bs3PrintStr("pvTmp2=");
    2828Bs3PrintX32((uintptr_t)pvTmp2);
    29 Bs3PrintStr("\r\n");
     29Bs3PrintStr("\n");
    3030
    3131pvTmp3 = Bs3MemAlloc(BS3MEMKIND_REAL, _4K);
    3232Bs3PrintStr("pvTmp3=");
    3333Bs3PrintX32((uintptr_t)pvTmp3);
    34 Bs3PrintStr("\r\n");
     34Bs3PrintStr("\n");
    3535Bs3MemFree(pvTmp2, _4K);
    3636
     
    3838Bs3PrintStr("pvTmp4=");
    3939Bs3PrintX32((uintptr_t)pvTmp4);
    40 Bs3PrintStr("\r\n");
    41 Bs3PrintStr("\r\n");
     40Bs3PrintStr("\n");
     41Bs3PrintStr("\n");
    4242
    4343pvTmp1 = Bs3MemAlloc(BS3MEMKIND_REAL, 31);
    4444Bs3PrintStr("pvTmp1=");
    4545Bs3PrintX32((uintptr_t)pvTmp1);
    46 Bs3PrintStr("\r\n");
     46Bs3PrintStr("\n");
    4747
    4848pvTmp2 = Bs3MemAlloc(BS3MEMKIND_REAL, 17);
    4949Bs3PrintStr("pvTmp2=");
    5050Bs3PrintX32((uintptr_t)pvTmp2);
    51 Bs3PrintStr("\r\n");
     51Bs3PrintStr("\n");
    5252
    5353Bs3MemFree(pvTmp1, 31);
     
    5555Bs3PrintStr("pvTmp3=");
    5656Bs3PrintX32((uintptr_t)pvTmp3);
    57 Bs3PrintStr("\r\n");
     57Bs3PrintStr("\n");
    5858
    5959
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-footer.h

    r59863 r60019  
    7575#undef TMPL_MODE
    7676#undef TMPL_MODE_STR
     77#undef TMPL_MODE_LNAME
     78#undef TMPL_MODE_UNAME
    7779#undef TMPL_16BIT
    7880#undef TMPL_32BIT
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r60002 r60019  
    14671467 *
    14681468 * @returns 0 on success or directly Bs3TestFailed calls, non-zero to indicate
    1469  *          where the test when wrong.
     1469 *          where the test when wrong. Special value BS3TESTDOMODE_SKIPPED
     1470 *          should be returned to indicate that the test has been skipped.
    14701471 * @param   bMode       The current CPU mode.
    14711472 */
     
    14751476/** Far pointer to a test (for 32-bit and 64-bit code, will be flatten). */
    14761477typedef FNBS3TESTDOMODE BS3_FAR_CODE  *FPFNBS3TESTDOMODE;
     1478
     1479/** Special FNBS3TESTDOMODE return code for indicating a skipped mode test.  */
     1480#define BS3TESTDOMODE_SKIPPED       UINT8_MAX
    14771481
    14781482/**
     
    15491553    }
    15501554
    1551 /** A set of standard protypes to go with #BS3TESTMODEENTRY_CMN.
    1552  * @remark May need to \#pragma alias the c64 variant.  */
     1555/** A set of standard protypes to go with #BS3TESTMODEENTRY_CMN. */
    15531556#define BS3TESTMODE_PROTOTYPES_CMN(a_BaseNm) \
    15541557    FNBS3TESTDOMODE                 RT_CONCAT(a_BaseNm, _c16); \
     
    15841587    }
    15851588
    1586 /** A set of standard protypes to go with #BS3TESTMODEENTRY_MODE.
    1587  * @remark May need to \#pragma alias the lm64 variant.  */
     1589/** A set of standard protypes to go with #BS3TESTMODEENTRY_MODE. */
    15881590#define BS3TESTMODE_PROTOTYPES_MODE(a_BaseNm) \
    15891591    FNBS3TESTDOMODE                 RT_CONCAT(a_BaseNm, _rm); \
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