VirtualBox

Changeset 106723 in vbox for trunk/include/iprt/formats


Ignore:
Timestamp:
Oct 27, 2024 1:07:28 AM (3 months ago)
Author:
vboxsync
Message:

VMM/IEM: Unwind info for win.arm64 (attempt at it, anyway). jiraref:1253

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/formats/pecoff.h

    r106636 r106723  
    715715/** This structure is used by AMD64 and "Itanic".
    716716 * MIPS uses a different one.  ARM, SH3, SH4 and PPC on WinCE also uses a different one.  */
    717 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY
     717typedef struct _IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY
    718718{
    719719    uint32_t    BeginAddress;
    720720    uint32_t    EndAddress;
    721721    uint32_t    UnwindInfoAddress;
    722 } IMAGE_RUNTIME_FUNCTION_ENTRY;
    723 AssertCompileSize(IMAGE_RUNTIME_FUNCTION_ENTRY, 12);
    724 typedef IMAGE_RUNTIME_FUNCTION_ENTRY *PIMAGE_RUNTIME_FUNCTION_ENTRY;
    725 typedef IMAGE_RUNTIME_FUNCTION_ENTRY const *PCIMAGE_RUNTIME_FUNCTION_ENTRY;
     722} IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY;
     723AssertCompileSize(IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY, 12);
     724typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY *PIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY;
     725typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY const *PCIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY;
     726
     727/** The IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY::Flag values. */
     728typedef enum ARM64_FNPDATA_FLAGS
     729{
     730    PdataRefToFullXdata = 0,
     731    PdataPackedUnwindFunction,
     732    PdataPackedUnwindFragment
     733} ARM64_FNPDATA_FLAGS;
     734
     735/** The IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY::CR values. */
     736typedef enum ARM64_FNPDATA_CR
     737{
     738    PdataCrUnchained = 0,
     739    PdataCrUnchainedSavedLr,
     740    PdataCrChainedWithPac,
     741    PdataCrChained
     742} ARM64_FNPDATA_CR;
     743
     744/** This structure is used by ARM64. */
     745typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
     746{
     747    uint32_t    BeginAddress;
     748    RT_GCC_EXTENSION
     749    union
     750    {
     751        uint32_t UnwindData;
     752        RT_GCC_EXTENSION
     753        struct
     754        {
     755            uint32_t Flag           : 2;
     756            uint32_t FunctionLength : 11;
     757            uint32_t RegF           : 3;
     758            uint32_t RegI           : 4;
     759            uint32_t H              : 1;
     760            uint32_t CR             : 2;
     761            uint32_t FrameSize      : 9;
     762        };
     763    };
     764} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
     765AssertCompileSize(IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY, 8);
     766typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
     767typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY const *PCIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
     768
     769/** UnwindData word \#0. */
     770typedef struct IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_BITFIELDS
     771{
     772    uint32_t    FunctionLength              : 18;
     773    uint32_t    Version                     : 2;
     774    uint32_t    ExceptionDataPresent        : 1;
     775    uint32_t    EpilogInHeader              : 1;
     776    uint32_t    EpilogCount                 : 5;
     777    uint32_t    CodeWords                   : 5;
     778} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_BITFIELDS;
     779
     780/** UnwindData word \#1, if present. */
     781typedef struct IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EXTENDED_BITFIELDS
     782{
     783    uint32_t    ExtendedEpilogCount         : 16;
     784    uint32_t    ExtendecodeWords            : 8;
     785    uint32_t    Reserved                    : 8;
     786} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EXTENDED_BITFIELDS;
     787
     788/** UnwindData word \#2 or if no extended fields \#1. */
     789typedef struct IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EPILOG_BITFIELDS
     790{
     791    uint32_t    EpilogStartOffset           : 18;
     792    uint32_t    Reserved                    : 4;
     793    uint32_t    EpilogStartIndex            : 10;
     794} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EPILOG_BITFIELDS;
     795
     796typedef union IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA
     797{
     798    uint32_t    HeaderData;
     799    RT_GCC_EXTENSION
     800    struct /* copy of IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_BITFIELDS above */
     801    {
     802        uint32_t    FunctionLength              : 18;
     803        uint32_t    Version                     : 2;
     804        uint32_t    ExceptionDataPresent        : 1;
     805        uint32_t    EpilogInHeader              : 1;
     806        uint32_t    EpilogCount                 : 5;
     807        uint32_t    CodeWords                   : 5;
     808    };
     809    /* Non-standard, but convenient: */
     810    IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EXTENDED_BITFIELDS ExtendedInfo;
     811    IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EPILOG_BITFIELDS   EpilogInfo;
     812} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA;
     813AssertCompileSize(IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA, 4);
     814typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA;
     815typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA *PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA;
     816typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA const *PCIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA;
     817
     818#ifdef RT_ARCH_ARM64
     819typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY      IMAGE_RUNTIME_FUNCTION_ENTRY;
     820typedef PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY     PIMAGE_RUNTIME_FUNCTION_ENTRY;
     821typedef PCIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY    PCIMAGE_RUNTIME_FUNCTION_ENTRY;
     822#else
     823typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY      IMAGE_RUNTIME_FUNCTION_ENTRY;
     824typedef PIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY     PIMAGE_RUNTIME_FUNCTION_ENTRY;
     825typedef PCIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY    PCIMAGE_RUNTIME_FUNCTION_ENTRY;
     826#endif
    726827
    727828/**
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