VirtualBox

Changeset 97613 in vbox


Ignore:
Timestamp:
Nov 19, 2022 11:48:14 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154657
Message:

ValKit/bs3kit: Added a Bs3Trap64InitEx variant that allows more use of IST when needed (i.e. when putting garbage in ESP[31:16] when having a 16-bit stack). bugref:9898

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-Trap64Init.c

    r96407 r97613  
    4545BS3_CMN_DEF(void, Bs3Trap64Init,(void))
    4646{
    47      X86TSS64 BS3_FAR *pTss;
    48      unsigned iIdt;
     47    Bs3Trap64InitEx(false);
     48}
     49
     50#undef Bs3Trap64InitEx
     51BS3_CMN_DEF(void, Bs3Trap64InitEx,(bool fMoreIstUsage))
     52{
     53    static const uint8_t s_aAssignments[] =
     54    {
     55        /* [X86_XCPT_DE] = */   3,
     56        /* [X86_XCPT_DB] = */   2,
     57        /* [X86_XCPT_NMI] = */  0,
     58        /* [X86_XCPT_BP] = */   2,
     59        /* [X86_XCPT_OF] = */   3,
     60        /* [X86_XCPT_BR] = */   3,
     61        /* [X86_XCPT_UD] = */   4,
     62        /* [X86_XCPT_NM] = */   3,
     63        /* [X86_XCPT_DF] = */   1,
     64        /*        [0x09] = */   0,
     65        /* [X86_XCPT_TS] = */   1,
     66        /* [X86_XCPT_NP] = */   5,
     67        /* [X86_XCPT_SS] = */   5,
     68        /* [X86_XCPT_GP] = */   6,
     69        /* [X86_XCPT_PF] = */   7,
     70        /*        [0x0f] = */   0,
     71        /* [X86_XCPT_MF] = */   0,
     72        /* [X86_XCPT_AC] = */   3,
     73        /* [X86_XCPT_MC] = */   0,
     74        /* [X86_XCPT_XF] = */   0,
     75        /* [X86_XCPT_VE] = */   0,
     76        /* [X86_XCPT_CP] = */   6,
     77    };
     78    X86TSS64 BS3_FAR *pTss;
     79    unsigned iIdt;
    4980
    5081    /*
     
    5485    for (iIdt = 0; iIdt < BS3_TRAP_SYSCALL; iIdt++)
    5586        Bs3Trap64SetGate(iIdt, AMD64_SEL_TYPE_SYS_INT_GATE, 0 /*bDpl*/,
    56                          BS3_SEL_R0_CS64, g_Bs3Trap64GenericEntriesFlatAddr + iIdt * 8, iIdt == X86_XCPT_DF /*bIst*/);
     87                         BS3_SEL_R0_CS64, g_Bs3Trap64GenericEntriesFlatAddr + iIdt * 8,
     88                         !fMoreIstUsage ? iIdt == X86_XCPT_DF : iIdt < RT_ELEMENTS(s_aAssignments) ? s_aAssignments[iIdt] : 0);
    5789    for (iIdt = BS3_TRAP_SYSCALL + 1; iIdt < 256; iIdt++)
    5890        Bs3Trap64SetGate(iIdt, AMD64_SEL_TYPE_SYS_INT_GATE, 0 /*bDpl*/,
    59                          BS3_SEL_R0_CS64, g_Bs3Trap64GenericEntriesFlatAddr + iIdt * 8, 0 /*bIst*/);
     91                         BS3_SEL_R0_CS64, g_Bs3Trap64GenericEntriesFlatAddr + iIdt * 8, 0);
    6092
    6193    /*
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk

    r97576 r97613  
    167167$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3Trap32Init)
    168168$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3Trap32SetGate)
     169$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3Trap64InitEx)
    169170$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3Trap64Init)
    170171$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3Trap64SetGate)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h

    r97576 r97613  
    221221#define Bs3Trap32SetGate BS3_CMN_MANGLER(Bs3Trap32SetGate)
    222222#define Bs3Trap64Init BS3_CMN_MANGLER(Bs3Trap64Init)
     223#define Bs3Trap64InitEx BS3_CMN_MANGLER(Bs3Trap64InitEx)
    223224#define Bs3Trap64SetGate BS3_CMN_MANGLER(Bs3Trap64SetGate)
    224225#define Bs3TrapDefaultHandler BS3_CMN_MANGLER(Bs3TrapDefaultHandler)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h

    r97576 r97613  
    221221#undef Bs3Trap32SetGate
    222222#undef Bs3Trap64Init
     223#undef Bs3Trap64InitEx
    223224#undef Bs3Trap64SetGate
    224225#undef Bs3TrapDefaultHandler
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r97576 r97613  
    32923292
    32933293/**
     3294 * Initializes 64-bit trap handling, extended version.
     3295 *
     3296 * @remarks Does not install 64-bit trap handling, just initializes the
     3297 *          structures.
     3298 * @param   fMoreIstUsage   Use the interrupt stacks for more CPU exceptions.
     3299 *                          Default (false) is to only IST1 for the double fault
     3300 *                          handler and the rest uses IST0.
     3301 */
     3302BS3_CMN_PROTO_STUB(void, Bs3Trap64InitEx,(bool fMoreIstUsage));
     3303
     3304/**
    32943305 * Modifies the real-mode / V86 IVT entry specified by @a iIvt.
    32953306 *
Note: See TracChangeset for help on using the changeset viewer.

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