void dumpo( addr_t addr ) { struct pvm_object_storage *o = (struct pvm_object_storage *)addr; printf("Flags: '"); print_object_flags(o); printf("'\n"); printf("Da size: %ld\n", (long)(o->_da_size) ); if(o->_flags & PHANTOM_OBJECT_STORAGE_FLAG_IS_STRING) { printf("String: '"); struct data_area_4_string *da = (struct data_area_4_string *)&(o->da); int len = da->length; unsigned const char *sp = da->data; while( len-- ) { putchar(*sp++); } printf("'\n"); } if(o->_flags & PHANTOM_OBJECT_STORAGE_FLAG_IS_CLASS) { struct data_area_4_class *da = (struct data_area_4_class *)&(o->da); printf("Is class: '"); pvm_object_print( da->class_name ); printf("'\n"); } else { // Don't dump class class printf("Class: { "); dumpo( (addr_t)(o->_class.data) ); printf("}\n"); //pvm_object_print( o->_class ); } }
static inline void verify_p( pvm_object_storage_t *p ) { debug_catch_object( "V", p ); if( p && ! pvm_object_is_allocated_light(p)) { dumpo((addr_t)p); //pvm_object_is_allocated_assert(p); panic("freed object accessed"); } }
static int debug_18(struct pvm_object me , struct data_area_4_thread *tc ) { (void) me; DEBUG_INFO; //struct data_area_4_tty *da = pvm_data_area( me, tty ); int n_param = POP_ISTACK; CHECK_PARAM_COUNT(n_param, 1); struct pvm_object o = POP_ARG; //pvm_object_print( o ); printf("\n\nobj dump: "); dumpo((addr_t)(o.data)); printf("\n\n"); SYS_FREE_O(o); SYSCALL_RETURN_NOTHING; }
void pvm_object_dump(struct pvm_object o ) { dumpo((addr_t)o.data); }