VirtualBox

Changeset 81010 in vbox


Ignore:
Timestamp:
Sep 25, 2019 5:22:00 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
133608
Message:

EFI/Firmware/PeCoffExtraActionLibDebug: Merge code from VBoxPeCoffExtraActionLib into here so we get the load addresses in VBox.log and support for the UDK debugger at the same time

Location:
trunk/src/VBox/Devices/EFI/Firmware/SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Firmware/SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLib.c

    r80721 r81010  
    99#include <PeCoffExtraActionLib.h>
    1010
     11#ifdef VBOX
     12#include "VBoxPkg.h"
     13#include "../../../../DevEFI.h"
     14
     15
     16
     17static void vboxImageEvtU64(uint32_t uCmd, uint64_t uValue)
     18{
     19    RTUINT64U u; /* 64-bit shift builtins. */
     20    u.u = uValue;
     21    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_MAKE(uCmd, u.au16[3]));
     22    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_MAKE(uCmd, u.au16[2]));
     23    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_MAKE(uCmd, u.au16[1]));
     24    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_MAKE(uCmd, u.au16[0]));
     25}
     26
     27static void vboxImageEvtString(uint32_t uCmd, const char *pszName)
     28{
     29    unsigned char uch;
     30    while ((uch = *pszName++) != '\0')
     31        ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_MAKE(uCmd, uch));
     32}
     33
     34static void vboxImageEvtEmitOne(PE_COFF_LOADER_IMAGE_CONTEXT const *pImageCtx, uint32_t uEvt)
     35{
     36    ASMOutU32(EFI_PORT_IMAGE_EVENT, uEvt);
     37    if (pImageCtx->DestinationAddress)
     38        vboxImageEvtU64(EFI_IMAGE_EVT_CMD_ADDR0, pImageCtx->DestinationAddress);
     39    else
     40        vboxImageEvtU64(EFI_IMAGE_EVT_CMD_ADDR0, pImageCtx->ImageAddress);
     41    vboxImageEvtU64(EFI_IMAGE_EVT_CMD_SIZE0, pImageCtx->ImageSize);
     42    if (pImageCtx->PdbPointer)
     43        vboxImageEvtString(EFI_IMAGE_EVT_CMD_NAME, pImageCtx->PdbPointer);
     44    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_CMD_COMPLETE);
     45}
     46#endif
     47
     48
     49#ifdef VBOX_SOURCE_DEBUG_ENABLE
    1150/**
    1251  Check if the hardware breakpoint in Drx is enabled by checking the Lx and Gx bit in Dr7.
     
    190229  SetInterruptState (InterruptState);
    191230}
     231#endif
    192232
    193233/**
     
    204244  )
    205245{
     246#ifdef VBOX_SOURCE_DEBUG_ENABLE
    206247  PeCoffLoaderExtraActionCommon (ImageContext, IMAGE_LOAD_SIGNATURE);
     248#endif
     249
     250#ifdef VBOX
     251# if ARCH_BITS == 32
     252  vboxImageEvtEmitOne(ImageContext, EFI_IMAGE_EVT_CMD_START_LOAD32);
     253# else
     254  vboxImageEvtEmitOne(ImageContext, EFI_IMAGE_EVT_CMD_START_LOAD64);
     255# endif
     256#endif
    207257}
    208258
     
    221271  )
    222272{
     273#ifdef VBOX_SOURCE_DEBUG_ENABLE
    223274  PeCoffLoaderExtraActionCommon (ImageContext, IMAGE_UNLOAD_SIGNATURE);
    224 }
     275#endif
     276
     277#ifdef VBOX
     278# if ARCH_BITS == 32
     279  vboxImageEvtEmitOne(ImageContext, EFI_IMAGE_EVT_CMD_START_UNLOAD32);
     280# else
     281  vboxImageEvtEmitOne(ImageContext, EFI_IMAGE_EVT_CMD_START_UNLOAD64);
     282# endif
     283#endif
     284}
     285
     286#ifdef VBOX
     287VOID
     288EFIAPI
     289VBoxPeCoffLoaderMoveImageExtraAction(
     290  IN PHYSICAL_ADDRESS OldBase,
     291  IN PHYSICAL_ADDRESS NewBase
     292  )
     293{
     294#if ARCH_BITS == 32
     295    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_CMD_START_RELOC32);
     296#else
     297    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_CMD_START_RELOC64);
     298#endif
     299    vboxImageEvtU64(EFI_IMAGE_EVT_CMD_ADDR0, NewBase);
     300    vboxImageEvtU64(EFI_IMAGE_EVT_CMD_ADDR1, OldBase);
     301    ASMOutU32(EFI_PORT_IMAGE_EVENT, EFI_IMAGE_EVT_CMD_COMPLETE);
     302}
     303#endif
  • trunk/src/VBox/Devices/EFI/Firmware/SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf

    r80721 r81010  
    3939  MdePkg/MdePkg.dec
    4040  SourceLevelDebugPkg/SourceLevelDebugPkg.dec
     41  VBoxPkg/VBoxPkg.dec
    4142
    4243[LibraryClasses]
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