VirtualBox

Ignore:
Timestamp:
Sep 27, 2013 11:03:53 AM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
89360
Message:

EFI: EFI image load events, EFI debug points, always disabled frame-pointer optimizations on MSFT. Some cleanups.

Location:
trunk/src/VBox/Devices/EFI/Firmware
Files:
6 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/Include/X64/ProcessorBind.h

    r48674 r48727  
    122122  #endif
    123123
     124  #if !defined(UINT8_MAX) || !defined(VBOX) /* collides with iprt/stdint.h */
    124125  #define UINT8_MAX 0xff
     126  #endif
    125127
    126128#else
  • trunk/src/VBox/Devices/EFI/Firmware/Makefile.kmk

    r48674 r48727  
    186186include $(FILE_KBUILD_SUB_FOOTER)
    187187
     188#
     189# Incomplete list of dependencies relative.
     190#
     191VBOX_EFI_DEPENDENCIES = \
     192        $(VBOX_PATH_EFI_FIRMWARE)/../DevEFI.h \
     193       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c \
     194       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf \
     195       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.c \
     196       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf \
     197       $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/VBoxPkg.dec \
     198       \
     199       $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkg.dec \
    188200
    189201#
     
    270282                -e 's,^DEFINE VS2010_BIN[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_BIN = $(PATH_TOOL_$(VBOX_VCC_TOOL))/bin,' \
    271283                -e 's,^DEFINE VS2010_DLL[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_DLL = DEF(VS2010_BIN),' \
     284                -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\)$(DOLLAR),\1 /Oy-,' \
    272285                --output $@ $<
     286#               -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\) /O1ib2 \(.*\)$(DOLLAR),\1 /Osi /GF /Gy \2 /Oy-,'
    273287else
    274288 $(error Unexpected VBOX_EFI_TOOL_CHAIN value "$(VBOX_EFI_TOOL_CHAIN)")
     
    280294                $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt \
    281295                $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/tools_def.txt \
    282                 $$(VBoxEfiResetVector-x86_1_TARGET)
     296                $$(VBoxEfiResetVector-x86_1_TARGET) \
     297                $(VBOX_EFI_DEPENDENCIES) \
     298                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgIa32.dsc \
     299                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgIa32.fdf
    283300        + $(VBOX_EFI_BUILD_CMD) \
    284301                --vbox-target-conf "$(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt" \
     
    326343                -e 's,^DEFINE VS2010_BIN[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_BIN = $(PATH_TOOL_$(VBOX_VCC_TOOL))/bin,' \
    327344                -e 's,^DEFINE VS2010_DLL[[:space:]]*=.*$(DOLLAR),DEFINE VS2010_DLL = DEF(VS2010_BIN),' \
    328                 -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\) /X \(.*\)$(DOLLAR),\1 \2,' \
     345                -e 's,^\([^=]*_VS2010[a-zA-Z_0-9]*_CC_FLAGS[[:space:]]*=.*\) /X \(.*\)$(DOLLAR),\1 \2 /Oy-,' \
    329346                --output $@ $<
    330347else
     
    336353                $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt \
    337354                $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt \
    338                 $$(VBoxEfiResetVector-amd64_1_TARGET)
     355                $$(VBoxEfiResetVector-amd64_1_TARGET) \
     356                $(VBOX_EFI_DEPENDENCIES) \
     357                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgX64.dsc \
     358                $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgX64.fdf
    339359        + $(VBOX_EFI_BUILD_CMD) \
    340360                --vbox-target-conf "$(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt" \
  • trunk/src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseLib/BaseLib.inf

    r48674 r48727  
    299299  X86DisablePaging32.c
    300300
     301# VBox - enable this for non-optimized IA32 builds.
     302#  # Compiler helper (C RunTime) functions
     303#  ../../../StdLib/LibC/CRT/Ia32/llmul.c          | MSFT    # __allmul
     304#  ../../../StdLib/LibC/CRT/Ia32/llshl.c          | MSFT    # __allshl
     305#  ../../../StdLib/LibC/CRT/Ia32/ulldiv.c         | MSFT    # __aulldiv
     306#  ../../../StdLib/LibC/CRT/Ia32/ullrem.c         | MSFT    # __aullrem
     307#  ../../../StdLib/LibC/CRT/Ia32/ullshr.c         | MSFT    # __aullshr
     308#  ../../../StdLib/LibC/CRT/Ia32/lldiv.c          | MSFT    # __alldiv
     309#  ../../../StdLib/LibC/CRT/Ia32/llrem.c          | MSFT    # __allrem
     310#  ../../../StdLib/LibC/CRT/Ia32/lldvrm.c         | MSFT    # __alldvrm
     311#  ../../../StdLib/LibC/CRT/Ia32/ulldvrm.c        | MSFT    # __aulldvrm
     312# VBox - end
     313
    301314[Sources.X64]
    302315  X64/Thunk16.asm
     
    490503  gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength
    491504  gEfiMdePkgTokenSpaceGuid.PcdVerifyNodeInList
     505
     506# VBox - enable this for non-optimized IA32 builds.
     507#[BuildOptions]
     508# MSFT:*_*_*_CC_FLAGS = /GL-
     509# VBox - end
  • trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc

    r48674 r48727  
    114114  SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
    115115
     116!ifdef $(VBOX)
     117  PeCoffExtraActionLib|VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf
     118  DebugAgentLib|VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf
     119!else
    116120!ifdef $(SOURCE_DEBUG_ENABLE)
    117121  PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
     
    121125  DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
    122126!endif
     127!endif
    123128
    124129  ResetSystemLib|OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf
     
    134139  ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
    135140  ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf
     141!ifdef $(VBOX)
    136142!ifdef $(SOURCE_DEBUG_ENABLE)
    137143  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     144!endif
    138145!endif
    139146  HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
     
    177184  PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
    178185  ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
     186!ifdef $(VBOX)
    179187!ifdef $(SOURCE_DEBUG_ENABLE)
    180188  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     189!endif
    181190!endif
    182191
     
    193202  PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
    194203  ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
     204!ifdef $(VBOX)
    195205!ifdef $(SOURCE_DEBUG_ENABLE)
    196206  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
     207!endif
    197208!endif
    198209
  • trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc

    r48674 r48727  
    114114  LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
    115115
     116!ifdef $(VBOX)
     117  PeCoffExtraActionLib|VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf
     118  DebugAgentLib|VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf
     119!else
    116120!ifdef $(SOURCE_DEBUG_ENABLE)
    117121  PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
     
    121125  DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
    122126!endif
     127!endif
    123128
    124129  ResetSystemLib|OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf
     
    134139  ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
    135140  ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf
     141!ifdef $(VBOX)
    136142!ifdef $(SOURCE_DEBUG_ENABLE)
    137143  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     144!endif
    138145!endif
    139146  HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
     
    177184  PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
    178185  ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
     186!ifdef $(VBOX)
    179187!ifdef $(SOURCE_DEBUG_ENABLE)
    180188  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
     189!endif
    181190!endif
    182191
     
    193202  PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
    194203  ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
     204!ifdef $(VBOX)
    195205!ifdef $(SOURCE_DEBUG_ENABLE)
    196206  DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
     207!endif
    197208!endif
    198209
  • trunk/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c

    r48674 r48727  
    7979}
    8080
     81/**
     82 * Adds a character to the panic message.
     83 *
     84 * @param   ch          The ASCII char to add.
     85 */
     86static void
     87VBoxPanicMsgChar(int ch)
     88{
     89    ASMOutU16(EFI_PANIC_PORT, EFI_PANIC_CMD_MSG_FROM_CHAR(ch));
     90}
     91
     92/**
     93 * Adds a string to the panic message.
     94 *
     95 * @param   pszString   The string to add.
     96 */
     97static void
     98VBoxPanicMsgString(const char *pszString)
     99{
     100    char ch;
     101    while ((ch = *pszString++) != '\0')
     102        VBoxPanicMsgChar(ch);
     103}
     104
     105/**
     106 * Adds a unsigned decimal number to the panic message.
     107 *
     108 * @param   uValue      The value.
     109 */
     110static void
     111VBoxPanicMsgDecimalU32(uint32_t uValue)
     112{
     113    char     szTmp[32];
     114    unsigned off = sizeof(szTmp) - 1;
     115
     116    szTmp[off] = '\0';
     117    do
     118    {
     119        char chDigit = uValue % 10;
     120        uValue /= 10;
     121        szTmp[--off] = chDigit + '0';
     122    } while (uValue != 0 && off > 0);
     123
     124    VBoxPanicMsgString(&szTmp[off]);
     125}
    81126
    82127VOID EFIAPI
     
    85130    RTCCUINTREG SavedFlags = ASMIntDisableFlags();
    86131
    87     VBoxPrintString("EFI Assertion failed! File=");
    88     VBoxPrintString(FileName ? FileName : "<NULL>");
    89     VBoxPrintString(" line=0x");
    90     VBoxPrintHex(LineNumber, sizeof(LineNumber));
    91     VBoxPrintString("\nDescription: ");
    92     VBoxPrintString(Description ? Description : "<NULL>");
    93 
    94     ASMOutU8(EFI_PANIC_PORT, 2); /** @todo fix this. */
     132    ASMOutU8(EFI_PANIC_PORT, EFI_PANIC_CMD_START_MSG);
     133    VBoxPanicMsgString("EFI Assertion failed!"
     134                       "\nFile:  ");
     135    VBoxPanicMsgString(FileName ? FileName : "<NULL>");
     136    VBoxPanicMsgString("\nLine:  ");
     137    VBoxPanicMsgDecimalU32((uint32_t)LineNumber);
     138    VBoxPanicMsgString("\nEDescription: ");
     139    VBoxPanicMsgString(Description ? Description : "<NULL>");
     140    ASMOutU8(EFI_PANIC_PORT, EFI_PANIC_CMD_END_MSG);
    95141
    96142    ASMSetFlags(SavedFlags);
    97143}
    98144
    99 CHAR16* VBoxDebugDevicePath2Str(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
     145CHAR16 *VBoxDebugDevicePath2Str(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
    100146{
    101147#if 0
     
    116162}
    117163
    118 CHAR16* VBoxDebugHandleDevicePath2Str(IN EFI_HANDLE hHandle)
     164CHAR16 *VBoxDebugHandleDevicePath2Str(IN EFI_HANDLE hHandle)
    119165{
    120166#if 0
     
    143189#endif
    144190}
    145 CHAR16* VBoxDebugPrintDevicePath(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
     191CHAR16 *VBoxDebugPrintDevicePath(IN EFI_DEVICE_PATH_PROTOCOL  *pDevicePath)
    146192{
    147193#if 0
  • trunk/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVariable/InitVariable.c

    r48674 r48727  
    5858    UINT32 idxBuffer = 0;
    5959    for (idxBuffer = 0; idxBuffer < cbBuffer; ++idxBuffer)
    60         pu8Buffer[idxBuffer] = ASMInU8(EFI_VARIABLE_OP);
     60        pu8Buffer[idxBuffer] = ASMInU8(EFI_PORT_VARIABLE_OP);
    6161    return idxBuffer;
    6262}
     
    6464DECLINLINE(void) VBoxWriteNVRAMU32Param(UINT32 u32CodeParam, UINT32 u32Param)
    6565{
    66     ASMOutU32(EFI_VARIABLE_OP, u32CodeParam);
    67     ASMOutU32(EFI_VARIABLE_PARAM, u32Param);
     66    ASMOutU32(EFI_PORT_VARIABLE_OP, u32CodeParam);
     67    ASMOutU32(EFI_PORT_VARIABLE_PARAM, u32Param);
    6868}
    6969
     
    7272    UINT32 idxParam = 0;
    7373    for (idxParam = 0; idxParam < cbParam; ++idxParam)
    74         ASMOutU8(EFI_VARIABLE_PARAM, pbParam[idxParam]);
     74        ASMOutU8(EFI_PORT_VARIABLE_PARAM, pbParam[idxParam]);
    7575    return idxParam;
    7676}
     
    8181    UINTN cwcName = StrLen(pwszName);
    8282
    83     ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
     83    ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
    8484    for (i = 0; i <= cwcName; i++)
    85         ASMOutU16(EFI_VARIABLE_PARAM, pwszName[i]);
     85        ASMOutU16(EFI_PORT_VARIABLE_PARAM, pwszName[i]);
    8686}
    8787
    8888DECLINLINE(UINT32) VBoxWriteNVRAMGuidParam(const EFI_GUID *pGuid)
    8989{
    90     ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
     90    ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
    9191    return VBoxWriteNVRAMByteArrayParam((UINT8 *)pGuid, sizeof(EFI_GUID));
    9292}
     
    9999    VBoxWriteNVRAMU32Param(EFI_VM_VARIABLE_OP_START, u32Operation);
    100100
    101     while ((u32Rc = ASMInU32(EFI_VARIABLE_OP)) == EFI_VARIABLE_OP_STATUS_BSY)
     101    while ((u32Rc = ASMInU32(EFI_PORT_VARIABLE_OP)) == EFI_VARIABLE_OP_STATUS_BSY)
    102102    {
    103103#if 0
     
    166166         */
    167167        UINT32 VarLen;
    168         ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE_LENGTH);
    169         VarLen = ASMInU32(EFI_VARIABLE_OP);
     168        ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE_LENGTH);
     169        VarLen = ASMInU32(EFI_PORT_VARIABLE_OP);
    170170        LogFlowFuncMarkVar(*DataSize, "%d");
    171171        LogFlowFuncMarkVar(VarLen, "%d");
     
    177177             */
    178178            *DataSize = VarLen;
    179             ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
     179            ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
    180180            VBoxReadNVRAM((UINT8 *)Data, VarLen);
    181181
    182182            if (Attributes)
    183183            {
    184                 ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_ATTRIBUTE);
    185                 *Attributes = ASMInU32(EFI_VARIABLE_OP);
     184                ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_ATTRIBUTE);
     185                *Attributes = ASMInU32(EFI_PORT_VARIABLE_OP);
    186186                LogFlowFuncMarkVar(Attributes, "%x");
    187187            }
     
    271271         */
    272272        UINT32      cwcName;
    273         ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_LENGTH_UTF16);
    274         cwcName = ASMInU32(EFI_VARIABLE_OP);
     273        ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_LENGTH_UTF16);
     274        cwcName = ASMInU32(EFI_PORT_VARIABLE_OP);
    275275        if ((cwcName + 1) * 2 <= *VariableNameSize) /* ASSUMES byte size is specified */
    276276        {
     
    280280             * Read back the result.
    281281             */
    282             ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
     282            ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
    283283            VBoxReadNVRAM((UINT8 *)VendorGuid, sizeof(EFI_GUID));
    284284
    285             ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
     285            ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_UTF16);
    286286            for (i = 0; i < cwcName; i++)
    287                 VariableName[i] = ASMInU16(EFI_VARIABLE_OP);
     287                VariableName[i] = ASMInU16(EFI_PORT_VARIABLE_OP);
    288288            VariableName[i] = '\0';
    289289
     
    356356    VBoxWriteNVRAMU32Param(EFI_VM_VARIABLE_OP_VALUE_LENGTH, (UINT32)DataSize);
    357357    /* fill value bytes */
    358     ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
     358    ASMOutU32(EFI_PORT_VARIABLE_OP, EFI_VM_VARIABLE_OP_VALUE);
    359359    VBoxWriteNVRAMByteArrayParam(Data, (UINT32)DataSize);
    360360    /* start fetch operation */
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