Changeset 23783 in vbox
- Timestamp:
- Oct 14, 2009 11:21:29 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 53521
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/err.h
r23764 r23783 611 611 /** The field contains an invalid padding size. */ 612 612 #define VERR_SSM_FIELD_INVALID_PADDING_SIZE (-1869) 613 /** The field contains a value that is out of range. */ 614 #define VERR_SSM_FIELD_INVALID_VALUE (-1870) 613 615 /** @} */ 614 616 -
trunk/include/VBox/ssm.h
r23780 r23783 147 147 /** Array of SSMFIELDTRANS_HCPTR_NI. */ 148 148 SSMFIELDTRANS_HCPTR_NI_ARRAY, 149 /** Host context (HC) virtual address used to hold a unsigned 32-bit value. */ 150 SSMFIELDTRANS_HCPTR_HACK_U32, 149 151 150 152 /** Ignorable field. See SSMFIELD_ENTRY_IGNORE. */ … … 250 252 /** Same as SSMFIELD_ENTRY_HCPTR_NI, except it's an array of the buggers. */ 251 253 #define SSMFIELD_ENTRY_HCPTR_NI_ARRAY(Type, Field) SSMFIELD_ENTRY_INT(Type, Field, SSMFIELDTRANS_HCPTR_NI_ARRAY) 254 /** Emit a SSMFIELD array entry for a ring-0 or ring-3 pointer type that has 255 * been hacked such that it will never exceed 32-bit. No sign extenending. */ 256 #define SSMFIELD_ENTRY_HCPTR_HACK_U32(Type, Field) SSMFIELD_ENTRY_INT(Type, Field, SSMFIELDTRANS_HCPTR_HACK_U32) 252 257 253 258 /** Emit a SSMFIELD array entry for a field that can be ignored. -
trunk/src/VBox/VMM/SSM.cpp
r23780 r23783 3404 3404 } 3405 3405 3406 case SSMFIELDTRANS_HCPTR_HACK_U32: 3407 AssertMsgReturn(cbField == sizeof(void *), ("%#x (%s)\n", cbField, pCur->pszName), VERR_SSM_FIELD_INVALID_SIZE); 3408 AssertMsgReturn(*(uintptr_t *)pbField <= UINT32_MAX, ("%p (%s)\n", *(uintptr_t *)pbField, pCur->pszName), VERR_SSM_FIELD_INVALID_VALUE); 3409 rc = ssmR3DataWrite(pSSM, pbField, sizeof(uint32_t)); 3410 if ((fFlags & SSMSTRUCT_FLAGS_DONT_IGNORE) && sizeof(void *) != sizeof(uint32_t)) 3411 rc = ssmR3DataWrite(pSSM, s_abZero, sizeof(uint32_t)); 3412 break; 3413 3414 3406 3415 case SSMFIELDTRANS_IGNORE: 3407 3416 if (fFlags & SSMSTRUCT_FLAGS_DONT_IGNORE) … … 3439 3448 rc = ssmR3DataWrite(pSSM, s_abZero, sizeof(void *)); 3440 3449 break; 3450 3441 3451 3442 3452 case SSMFIELDTRANS_PAD_HC: … … 6054 6064 } 6055 6065 6066 case SSMFIELDTRANS_HCPTR_HACK_U32: 6067 AssertMsgReturn(cbField == sizeof(void *), ("%#x (%s)\n", cbField, pCur->pszName), VERR_SSM_FIELD_INVALID_SIZE); 6068 *(uintptr_t *)pbField = 0; 6069 rc = ssmR3DataRead(pSSM, pbField, sizeof(uint32_t)); 6070 if ((fFlags & SSMSTRUCT_FLAGS_DONT_IGNORE) && ssmR3GetHostBits(pSSM) == 64) 6071 { 6072 uint32_t u32; 6073 rc = ssmR3DataRead(pSSM, &u32, sizeof(uint32_t)); 6074 AssertMsgReturn(u32 == 0 || RT_FAILURE(rc), ("%#x\n", u32), VERR_SSM_FIELD_INVALID_VALUE); 6075 } 6076 break; 6077 6078 6056 6079 case SSMFIELDTRANS_IGNORE: 6057 6080 if (fFlags & SSMSTRUCT_FLAGS_DONT_IGNORE) … … 6082 6105 rc = SSMR3Skip(pSSM, ssmR3GetHostBits(pSSM) / 8); 6083 6106 break; 6107 6084 6108 6085 6109 case SSMFIELDTRANS_PAD_HC:
Note:
See TracChangeset
for help on using the changeset viewer.