Changeset 11808 in vbox
- Timestamp:
- Aug 29, 2008 11:29:35 AM (16 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/ssm.h
r8155 r11808 432 432 SSMR3DECL(int) SSMR3HandleSetStatus(PSSMHANDLE pSSM, int iStatus); 433 433 SSMR3DECL(SSMAFTER) SSMR3HandleGetAfter(PSSMHANDLE pSSM); 434 SSMR3DECL(int) SSMR3SetGCPtrSize(PSSMHANDLE pSSM, unsigned cbGCPtr); 434 435 435 436 -
trunk/src/VBox/VMM/CPUM.cpp
r11798 r11808 727 727 static DECLCALLBACK(int) cpumR3Save(PVM pVM, PSSMHANDLE pSSM) 728 728 { 729 /* Set the size of RTGCPTR for use of SSMR3Get/PutGCPtr. */ 730 SSMR3SetGCPtrSize(pSSM, sizeof(RTGCPTR)); 731 729 732 /* 730 733 * Save. … … 861 864 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 862 865 } 866 867 /* Set the size of RTGCPTR for SSMR3GetGCPtr. */ 868 if (u32Version == CPUM_SAVED_STATE_VERSION_VER1_6) 869 SSMR3SetGCPtrSize(pSSM, sizeof(RTGCPTR32)); 870 else 871 SSMR3SetGCPtrSize(pSSM, sizeof(RTGCPTR)); 863 872 864 873 /* -
trunk/src/VBox/VMM/SSM.cpp
r11803 r11808 132 132 unsigned uPercentDone; 133 133 134 /** RTGCPTR size in bytes */ 135 unsigned cbGCPtr; 134 136 } SSMHANDLE; 135 137 … … 2784 2786 SSMR3DECL(int) SSMR3GetGCUInt(PSSMHANDLE pSSM, PRTGCUINT pu) 2785 2787 { 2788 Assert(pSSM->cbGCPtr == sizeof(RTGCPTR32) || pSSM->cbGCPtr == sizeof(RTGCPTR64)); 2789 2786 2790 if (pSSM->enmOp == SSMSTATE_LOAD_EXEC || pSSM->enmOp == SSMSTATE_OPEN_READ) 2791 { 2792 if (sizeof(*pu) != pSSM->cbGCPtr) 2793 { 2794 uint32_t val; 2795 Assert(sizeof(*pu) == sizeof(uint64_t) && pSSM->cbGCPtr == sizeof(uint32_t)); 2796 int rc = ssmr3Read(pSSM, &val, pSSM->cbGCPtr); 2797 *pu = val; 2798 return rc; 2799 } 2787 2800 return ssmr3Read(pSSM, pu, sizeof(*pu)); 2801 } 2788 2802 AssertMsgFailed(("Invalid state %d\n", pSSM->enmOp)); 2789 2803 return VERR_SSM_INVALID_STATE; … … 2800 2814 SSMR3DECL(int) SSMR3GetGCSInt(PSSMHANDLE pSSM, PRTGCINT pi) 2801 2815 { 2816 Assert(pSSM->cbGCPtr == sizeof(RTGCPTR32) || pSSM->cbGCPtr == sizeof(RTGCPTR64)); 2817 2802 2818 if (pSSM->enmOp == SSMSTATE_LOAD_EXEC || pSSM->enmOp == SSMSTATE_OPEN_READ) 2819 { 2820 if (sizeof(*pi) != pSSM->cbGCPtr) 2821 { 2822 int32_t val; 2823 Assert(sizeof(*pi) == sizeof(uint64_t) && pSSM->cbGCPtr == sizeof(uint32_t)); 2824 int rc = ssmr3Read(pSSM, &val, pSSM->cbGCPtr); 2825 *pi = val; 2826 return rc; 2827 } 2803 2828 return ssmr3Read(pSSM, pi, sizeof(*pi)); 2829 } 2804 2830 AssertMsgFailed(("Invalid state %d\n", pSSM->enmOp)); 2805 2831 return VERR_SSM_INVALID_STATE; … … 2858 2884 * Loads a GC virtual address item from the current data unit. 2859 2885 * 2886 * Note: only applies to: 2887 * - SSMR3GetGCPtr 2888 * - SSMR3GetGCUIntPtr 2889 * - SSMR3GetGCSInt 2890 * - SSMR3GetGCUInt 2891 * 2892 * Put functions are not affected. 2893 * 2894 * @returns VBox status. 2895 * @param pSSM SSM operation handle. 2896 * @param cbGCPtr Size of RTGCPTR 2897 */ 2898 SSMR3DECL(int) SSMR3SetGCPtrSize(PSSMHANDLE pSSM, unsigned cbGCPtr) 2899 { 2900 Assert(cbGCPtr == sizeof(RTGCPTR32) || cbGCPtr == sizeof(RTGCPTR64)); 2901 pSSM->cbGCPtr = cbGCPtr; 2902 return VINF_SUCCESS; 2903 } 2904 2905 /** 2906 * Loads a GC virtual address item from the current data unit. 2907 * 2860 2908 * @returns VBox status. 2861 2909 * @param pSSM SSM operation handle. … … 2864 2912 SSMR3DECL(int) SSMR3GetGCPtr(PSSMHANDLE pSSM, PRTGCPTR pGCPtr) 2865 2913 { 2914 Assert(pSSM->cbGCPtr == sizeof(RTGCPTR32) || pSSM->cbGCPtr == sizeof(RTGCPTR64)); 2915 2866 2916 if (pSSM->enmOp == SSMSTATE_LOAD_EXEC || pSSM->enmOp == SSMSTATE_OPEN_READ) 2867 return ssmr3Read(pSSM, pGCPtr, sizeof(*pGCPtr)); 2917 { 2918 if (sizeof(*pGCPtr) != pSSM->cbGCPtr) 2919 { 2920 RTGCPTR32 val; 2921 Assert(sizeof(*pGCPtr) == sizeof(uint64_t) && pSSM->cbGCPtr == sizeof(uint32_t)); 2922 int rc = ssmr3Read(pSSM, &val, pSSM->cbGCPtr); 2923 *pGCPtr = val; 2924 return rc; 2925 } 2926 return ssmr3Read(pSSM, pGCPtr, pSSM->cbGCPtr); 2927 } 2868 2928 AssertMsgFailed(("Invalid state %d\n", pSSM->enmOp)); 2869 2929 return VERR_SSM_INVALID_STATE; … … 2880 2940 SSMR3DECL(int) SSMR3GetGCUIntPtr(PSSMHANDLE pSSM, PRTGCUINTPTR pGCPtr) 2881 2941 { 2942 Assert(pSSM->cbGCPtr == sizeof(RTGCPTR32) || pSSM->cbGCPtr == sizeof(RTGCPTR64)); 2943 2882 2944 if (pSSM->enmOp == SSMSTATE_LOAD_EXEC || pSSM->enmOp == SSMSTATE_OPEN_READ) 2883 return ssmr3Read(pSSM, pGCPtr, sizeof(*pGCPtr)); 2945 { 2946 if (sizeof(*pGCPtr) != pSSM->cbGCPtr) 2947 { 2948 RTGCUINTPTR32 val; 2949 Assert(sizeof(*pGCPtr) == sizeof(uint64_t) && pSSM->cbGCPtr == sizeof(uint32_t)); 2950 int rc = ssmr3Read(pSSM, &val, pSSM->cbGCPtr); 2951 *pGCPtr = val; 2952 return rc; 2953 } 2954 return ssmr3Read(pSSM, pGCPtr, pSSM->cbGCPtr); 2955 } 2884 2956 AssertMsgFailed(("Invalid state %d\n", pSSM->enmOp)); 2885 2957 return VERR_SSM_INVALID_STATE;
Note:
See TracChangeset
for help on using the changeset viewer.