Lines Matching defs:context

92 static kern_return_t init_context(KXLDContext *context, u_int ndependencies);
93 static kern_return_t init_kext_objects(KXLDContext *context, u_char *file,
96 static KXLDObject * get_object_for_file(KXLDContext *context,
98 static u_char * allocate_kext(KXLDContext *context, void *callback_data,
100 static void clear_context(KXLDContext *context);
110 KXLDContext * context = NULL;
121 context = kxld_alloc(sizeof(*context));
122 require_action(context, finish, rval=KERN_RESOURCE_SHORTAGE);
123 bzero(context, sizeof(*context));
125 context->flags = flags;
126 context->allocate_callback = allocate_callback;
127 context->cputype = cputype;
128 context->cpusubtype = cpusubtype;
132 context->kext = kxld_alloc(kxld_kext_sizeof());
133 require_action(context->kext, finish, rval=KERN_RESOURCE_SHORTAGE);
134 bzero(context->kext, kxld_kext_sizeof());
140 context->section_order = s_section_order;
153 context->section_order = kxld_dict_find(s_order_dict, &cputype);
158 if (!context->section_order) {
178 context->section_order = section_order;
185 *_context = context;
186 context = NULL;
189 if (context) kxld_destroy_context(context);
201 kxld_destroy_context(KXLDContext *context)
207 check(context);
209 kxld_kext_deinit(context->kext);
211 for (i = 0; i < context->objects.maxitems; ++i) {
212 object = kxld_array_get_slot(&context->objects, i);
215 kxld_array_deinit(&context->objects);
217 for (i = 0; i < context->dependencies.maxitems; ++i) {
218 dep = kxld_array_get_slot(&context->dependencies, i);
221 kxld_array_deinit(&context->dependencies);
223 kxld_dict_deinit(&context->defined_symbols_by_name);
224 kxld_dict_deinit(&context->defined_cxx_symbols_by_value);
225 kxld_dict_deinit(&context->obsolete_symbols_by_name);
226 kxld_dict_deinit(&context->vtables_by_name);
228 kxld_free(context->kext, kxld_kext_sizeof());
229 kxld_free(context, sizeof(*context));
238 KXLDContext * context,
258 require_action(context, finish, rval=KERN_INVALID_ARGUMENT);
266 rval = init_context(context, ndependencies);
269 rval = init_kext_objects(context, file, size, name,
273 linked_object = allocate_kext(context, callback_data,
277 rval = kxld_kext_relocate(context->kext, vmaddr,
278 &context->vtables_by_name,
279 &context->defined_symbols_by_name,
280 &context->obsolete_symbols_by_name,
281 &context->defined_cxx_symbols_by_value);
284 rval = kxld_kext_export_linked_object(context->kext,
297 clear_context(context);
306 init_context(KXLDContext *context, u_int ndependencies)
312 rval = kxld_array_init(&context->objects,
316 rval = kxld_array_init(&context->dependencies,
320 rval = kxld_dict_init(&context->defined_symbols_by_name,
324 rval = kxld_dict_init(&context->defined_cxx_symbols_by_value,
328 rval = kxld_dict_init(&context->obsolete_symbols_by_name,
332 rval = kxld_dict_init(&context->vtables_by_name, kxld_dict_string_hash,
344 init_kext_objects(KXLDContext *context, u_char *file, u_long size,
358 kext = kxld_array_get_item(&context->dependencies, i);
362 kext_object = get_object_for_file(context, dependencies[i].kext,
367 interface_object = get_object_for_file(context,
378 &context->defined_symbols_by_name,
379 &context->obsolete_symbols_by_name,
380 &context->defined_cxx_symbols_by_value);
385 &context->defined_cxx_symbols_by_value);
391 for (i = 0; i < context->dependencies.nitems; ++i) {
392 kext = kxld_array_get_item(&context->dependencies, i);
395 &context->defined_cxx_symbols_by_value,
396 &context->defined_symbols_by_name,
397 &context->vtables_by_name);
404 kext_object = get_object_for_file(context, file, size, name);
407 rval = kxld_kext_init(context->kext, kext_object, /* interface */ NULL);
410 rval = kxld_kext_export_symbols(context->kext,
412 &context->defined_cxx_symbols_by_value);
423 get_object_for_file(KXLDContext *context, u_char *file, u_long size,
431 for (i = 0; i < context->objects.nitems; ++i) {
432 object = kxld_array_get_item(&context->objects, i);
436 context->section_order, context->cputype, context->cpusubtype, context->flags);
456 allocate_kext(KXLDContext *context, void *callback_data,
468 kxld_kext_get_vmsize(context->kext, &header_size, &vmsize);
469 vmaddr = context->allocate_callback(vmsize, &flags, callback_data);
484 kxld_kext_set_linked_object_size(context->kext, vmsize);
502 clear_context(KXLDContext *context)
508 check(context);
510 kxld_kext_clear(context->kext);
512 for (i = 0; i < context->objects.nitems; ++i) {
513 object = kxld_array_get_item(&context->objects, i);
516 kxld_array_reset(&context->objects);
518 for (i = 0; i < context->dependencies.nitems; ++i) {
519 dep = kxld_array_get_item(&context->dependencies, i);
522 kxld_array_reset(&context->dependencies);
524 kxld_dict_clear(&context->defined_symbols_by_name);
525 kxld_dict_clear(&context->defined_cxx_symbols_by_value);
526 kxld_dict_clear(&context->obsolete_symbols_by_name);
527 kxld_dict_clear(&context->vtables_by_name);