void kxld_destroy_context(KXLDContext *context) { KXLDObject *object = NULL; KXLDKext *dep = NULL; u_int i = 0; check(context); kxld_kext_deinit(context->kext); for (i = 0; i < context->objects.maxitems; ++i) { object = kxld_array_get_slot(&context->objects, i); kxld_object_deinit(object); } kxld_array_deinit(&context->objects); for (i = 0; i < context->dependencies.maxitems; ++i) { dep = kxld_array_get_slot(&context->dependencies, i); kxld_kext_deinit(dep); } kxld_array_deinit(&context->dependencies); kxld_dict_deinit(&context->defined_symbols_by_name); kxld_dict_deinit(&context->defined_cxx_symbols_by_value); kxld_dict_deinit(&context->obsolete_symbols_by_name); kxld_dict_deinit(&context->vtables_by_name); kxld_free(context->kext, kxld_kext_sizeof()); kxld_free(context, sizeof(*context)); kxld_print_memory_report(); }
void kxld_vtable_deinit(KXLDVTable *vtable) { check(vtable); kxld_array_deinit(&vtable->entries); bzero(vtable, sizeof(*vtable)); }
void kxld_kext_deinit(KXLDKext *kext) { KXLDVTable *vtable = NULL; u_int i; check(kext); for (i = 0; i < kext->vtables.maxitems; ++i) { vtable = kxld_array_get_slot(&kext->vtables, i); kxld_vtable_deinit(vtable); } kxld_array_deinit(&kext->vtables); kxld_dict_deinit(&kext->vtable_index); bzero(kext, sizeof(*kext)); }