Changeset 106723 in vbox for trunk/include/iprt/formats
- Timestamp:
- Oct 27, 2024 1:07:28 AM (3 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/formats/pecoff.h
r106636 r106723 715 715 /** This structure is used by AMD64 and "Itanic". 716 716 * MIPS uses a different one. ARM, SH3, SH4 and PPC on WinCE also uses a different one. */ 717 typedef struct _IMAGE_ RUNTIME_FUNCTION_ENTRY717 typedef struct _IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY 718 718 { 719 719 uint32_t BeginAddress; 720 720 uint32_t EndAddress; 721 721 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; 723 AssertCompileSize(IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY, 12); 724 typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY *PIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY; 725 typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY const *PCIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY; 726 727 /** The IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY::Flag values. */ 728 typedef 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. */ 736 typedef 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. */ 745 typedef 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; 765 AssertCompileSize(IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY, 8); 766 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY; 767 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY const *PCIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY; 768 769 /** UnwindData word \#0. */ 770 typedef 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. */ 781 typedef 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. */ 789 typedef 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 796 typedef 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; 813 AssertCompileSize(IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA, 4); 814 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA; 815 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA *PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA; 816 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA const *PCIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA; 817 818 #ifdef RT_ARCH_ARM64 819 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY; 820 typedef PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY; 821 typedef PCIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY PCIMAGE_RUNTIME_FUNCTION_ENTRY; 822 #else 823 typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY; 824 typedef PIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY; 825 typedef PCIMAGE_AMD64_RUNTIME_FUNCTION_ENTRY PCIMAGE_RUNTIME_FUNCTION_ENTRY; 826 #endif 726 827 727 828 /**
Note:
See TracChangeset
for help on using the changeset viewer.