Changeset 55465 in vbox for trunk/include
- Timestamp:
- Apr 28, 2015 12:09:47 AM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 99812
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/include/VBox/vmm/ssm.h ¶
r55048 r55465 225 225 /** The size of the field. */ 226 226 uint32_t cb; 227 /** This field was first saved by this unit version number. */ 228 uint32_t uFirstVer; 227 229 /** Field name. */ 228 230 const char *pszName; … … 231 233 /** Emit a SSMFIELD array entry. 232 234 * @internal */ 233 #define SSMFIELD_ENTRY_INT(Name, off, cb, enmTransformer ) \234 { (PFNSSMFIELDGETPUT)(uintptr_t)(enmTransformer), (off), (cb), Name }235 #define SSMFIELD_ENTRY_INT(Name, off, cb, enmTransformer, uFirstVer) \ 236 { (PFNSSMFIELDGETPUT)(uintptr_t)(enmTransformer), (off), (cb), (uFirstVer), Name } 235 237 /** Emit a SSMFIELD array entry. 236 238 * @internal */ 237 #define SSMFIELD_ENTRY_TF_INT(Type, Field, enmTransformer ) \238 SSMFIELD_ENTRY_INT(#Type "::" #Field, RT_OFFSETOF(Type, Field), RT_SIZEOFMEMB(Type, Field), enmTransformer )239 #define SSMFIELD_ENTRY_TF_INT(Type, Field, enmTransformer, uFirstVer) \ 240 SSMFIELD_ENTRY_INT(#Type "::" #Field, RT_OFFSETOF(Type, Field), RT_SIZEOFMEMB(Type, Field), enmTransformer, uFirstVer) 239 241 /** Emit a SSMFIELD array entry for an old field. 240 242 * @internal */ 241 243 #define SSMFIELD_ENTRY_OLD_INT(Field, cb, enmTransformer) \ 242 SSMFIELD_ENTRY_INT("old::" #Field, UINT32_MAX / 2, (cb), enmTransformer )244 SSMFIELD_ENTRY_INT("old::" #Field, UINT32_MAX / 2, (cb), enmTransformer, 0) 243 245 /** Emit a SSMFIELD array entry for an alignment padding. 244 246 * @internal */ 245 247 #define SSMFIELD_ENTRY_PAD_INT(Type, Field, cb32, cb64, enmTransformer) \ 246 248 SSMFIELD_ENTRY_INT(#Type "::" #Field, RT_OFFSETOF(Type, Field), \ 247 (RT_SIZEOFMEMB(Type, Field) << 16) | (cb32) | ((cb64) << 8), enmTransformer )249 (RT_SIZEOFMEMB(Type, Field) << 16) | (cb32) | ((cb64) << 8), enmTransformer, 0) 248 250 /** Emit a SSMFIELD array entry for an alignment padding. 249 251 * @internal */ 250 252 #define SSMFIELD_ENTRY_PAD_OTHER_INT(Type, Field, cb32, cb64, enmTransformer) \ 251 SSMFIELD_ENTRY_INT(#Type "::" #Field, UINT32_MAX / 2, 0 | (cb32) | ((cb64) << 8), enmTransformer )253 SSMFIELD_ENTRY_INT(#Type "::" #Field, UINT32_MAX / 2, 0 | (cb32) | ((cb64) << 8), enmTransformer, 0) 252 254 253 255 /** Emit a SSMFIELD array entry. */ 254 #define SSMFIELD_ENTRY(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_NO_TRANSFORMATION) 256 #define SSMFIELD_ENTRY(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_NO_TRANSFORMATION, 0) 257 /** Emit a SSMFIELD array entry with first version. */ 258 #define SSMFIELD_ENTRY_VER(Type, Field, uFirstVer) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_NO_TRANSFORMATION, uFirstVer) 255 259 /** Emit a SSMFIELD array entry for a custom made field. This is intended 256 260 * for working around bitfields in old structures. */ 257 #define SSMFIELD_ENTRY_CUSTOM(Field, off, cb) SSMFIELD_ENTRY_INT("custom::" #Field, off, cb, SSMFIELDTRANS_NO_TRANSFORMATION) 261 #define SSMFIELD_ENTRY_CUSTOM(Field, off, cb) SSMFIELD_ENTRY_INT("custom::" #Field, off, cb, \ 262 SSMFIELDTRANS_NO_TRANSFORMATION, 0) 258 263 /** Emit a SSMFIELD array entry for a RTGCPHYS type. */ 259 #define SSMFIELD_ENTRY_GCPHYS(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_GCPHYS )264 #define SSMFIELD_ENTRY_GCPHYS(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_GCPHYS, 0) 260 265 /** Emit a SSMFIELD array entry for a RTGCPTR type. */ 261 #define SSMFIELD_ENTRY_GCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_GCPTR )266 #define SSMFIELD_ENTRY_GCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_GCPTR, 0) 262 267 /** Emit a SSMFIELD array entry for a raw-mode context pointer. */ 263 #define SSMFIELD_ENTRY_RCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_RCPTR )268 #define SSMFIELD_ENTRY_RCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_RCPTR, 0) 264 269 /** Emit a SSMFIELD array entry for a raw-mode context pointer. */ 265 #define SSMFIELD_ENTRY_RCPTR_ARRAY(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_RCPTR_ARRAY )270 #define SSMFIELD_ENTRY_RCPTR_ARRAY(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_RCPTR_ARRAY, 0) 266 271 /** Emit a SSMFIELD array entry for a ring-0 or ring-3 pointer type that is only 267 272 * of interest as a NULL indicator. … … 270 275 * SSMSTRUCT_FLAGS_DONT_IGNORE is set, the pointer will be saved in its 271 276 * entirety, when clear it will be saved as a boolean. */ 272 #define SSMFIELD_ENTRY_HCPTR_NI(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_HCPTR_NI )277 #define SSMFIELD_ENTRY_HCPTR_NI(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_HCPTR_NI, 0) 273 278 /** Same as SSMFIELD_ENTRY_HCPTR_NI, except it's an array of the buggers. */ 274 #define SSMFIELD_ENTRY_HCPTR_NI_ARRAY(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_HCPTR_NI_ARRAY )279 #define SSMFIELD_ENTRY_HCPTR_NI_ARRAY(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_HCPTR_NI_ARRAY, 0) 275 280 /** Emit a SSMFIELD array entry for a ring-0 or ring-3 pointer type that has 276 281 * been hacked such that it will never exceed 32-bit. No sign extending. */ 277 #define SSMFIELD_ENTRY_HCPTR_HACK_U32(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_HCPTR_HACK_U32 )282 #define SSMFIELD_ENTRY_HCPTR_HACK_U32(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_HCPTR_HACK_U32, 0) 278 283 /** Emit a SSMFIELD array entry for loading a 32-bit field into a 64-bit 279 284 * structure member, zero extending the value. */ 280 #define SSMFIELD_ENTRY_U32_ZX_U64(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_U32_ZX_U64 )285 #define SSMFIELD_ENTRY_U32_ZX_U64(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_U32_ZX_U64, 0) 281 286 282 287 /** Emit a SSMFIELD array entry for a field that can be ignored. 283 288 * It is stored as zeros if SSMSTRUCT_FLAGS_DONT_IGNORE is specified to 284 289 * SSMR3PutStructEx. The member is never touched upon restore. */ 285 #define SSMFIELD_ENTRY_IGNORE(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGNORE )290 #define SSMFIELD_ENTRY_IGNORE(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGNORE, 0) 286 291 /** Emit a SSMFIELD array entry for an ignorable RTGCPHYS type. */ 287 #define SSMFIELD_ENTRY_IGN_GCPHYS(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_GCPHYS )292 #define SSMFIELD_ENTRY_IGN_GCPHYS(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_GCPHYS, 0) 288 293 /** Emit a SSMFIELD array entry for an ignorable RTGCPHYS type. */ 289 #define SSMFIELD_ENTRY_IGN_GCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_GCPTR )294 #define SSMFIELD_ENTRY_IGN_GCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_GCPTR, 0) 290 295 /** Emit a SSMFIELD array entry for an ignorable raw-mode context pointer. */ 291 #define SSMFIELD_ENTRY_IGN_RCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_RCPTR )296 #define SSMFIELD_ENTRY_IGN_RCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_RCPTR, 0) 292 297 /** Emit a SSMFIELD array entry for an ignorable ring-3 or/and ring-0 pointer. */ 293 #define SSMFIELD_ENTRY_IGN_HCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_HCPTR )298 #define SSMFIELD_ENTRY_IGN_HCPTR(Type, Field) SSMFIELD_ENTRY_TF_INT(Type, Field, SSMFIELDTRANS_IGN_HCPTR, 0) 294 299 295 300 /** Emit a SSMFIELD array entry for an old field that should be ignored now. … … 335 340 { \ 336 341 (PFNSSMFIELDGETPUT)(uintptr_t)(SSMFIELDTRANS_PAD_HC_AUTO), \ 337 UINT32_MAX / 2, (cb64 << 16) | (cb32) | ((cb64) << 8), "<compiler-padding>" \342 UINT32_MAX / 2, (cb64 << 16) | (cb32) | ((cb64) << 8), 0, "<compiler-padding>" \ 338 343 } 339 344 #else … … 341 346 { \ 342 347 (PFNSSMFIELDGETPUT)(uintptr_t)(SSMFIELDTRANS_PAD_HC_AUTO), \ 343 UINT32_MAX / 2, (cb32 << 16) | (cb32) | ((cb64) << 8), "<compiler-padding>" \348 UINT32_MAX / 2, (cb32 << 16) | (cb32) | ((cb64) << 8), 0, "<compiler-padding>" \ 344 349 } 345 350 #endif … … 351 356 { \ 352 357 (PFNSSMFIELDGETPUT)(uintptr_t)(SSMFIELDTRANS_PAD_MSC32_AUTO), \ 353 UINT32_MAX / 2, ((cb) << 16) | (cb), "<msc32-padding>" \358 UINT32_MAX / 2, ((cb) << 16) | (cb), 0, "<msc32-padding>" \ 354 359 } 355 360 #else … … 357 362 { \ 358 363 (PFNSSMFIELDGETPUT)(uintptr_t)(SSMFIELDTRANS_PAD_MSC32_AUTO), \ 359 UINT32_MAX / 2, (cb), "<msc32-padding>" \364 UINT32_MAX / 2, (cb), 0, "<msc32-padding>" \ 360 365 } 361 366 #endif … … 363 368 /** Emit a SSMFIELD array entry for a field with a custom callback. */ 364 369 #define SSMFIELD_ENTRY_CALLBACK(Type, Field, pfnGetPut) \ 365 { (pfnGetPut), RT_OFFSETOF(Type, Field), RT_SIZEOFMEMB(Type, Field), #Type "::" #Field }370 { (pfnGetPut), RT_OFFSETOF(Type, Field), RT_SIZEOFMEMB(Type, Field), 0, #Type "::" #Field } 366 371 /** Emit the terminating entry of a SSMFIELD array. */ 367 #define SSMFIELD_ENTRY_TERM() { (PFNSSMFIELDGETPUT)(uintptr_t)SSMFIELDTRANS_INVALID, UINT32_MAX, UINT32_MAX, NULL } 372 #define SSMFIELD_ENTRY_TERM() \ 373 { (PFNSSMFIELDGETPUT)(uintptr_t)SSMFIELDTRANS_INVALID, UINT32_MAX, UINT32_MAX, UINT32_MAX, NULL } 368 374 369 375
Note:
See TracChangeset
for help on using the changeset viewer.