* Loads a symbol table for an external file into the kernel debugger.
* The symbol table data is an array of characters. It is assumed that
* the caller and the kernel debugger agree on its format.
+
+ * This has never and will never be supported on MacOS X. The only reason I don't remove
+ * it entirely is that it is an exported symbol.
*/
kern_return_t
host_load_symbol_table(
pointer_t symtab,
mach_msg_type_number_t symtab_count)
{
-#if !MACH_DEBUG || !MACH_KDB
return KERN_FAILURE;
-#else
- kern_return_t result;
- vm_offset_t symtab_start;
- vm_offset_t symtab_end;
- vm_map_t map;
- vm_map_copy_t symtab_copy_object;
-
- if (host_priv == HOST_PRIV_NULL)
- return (KERN_INVALID_ARGUMENT);
-
- /*
- * Copy the symbol table array into the kernel.
- * We make a copy of the copy object, and clear
- * the old one, so that returning error will not
- * deallocate the data twice.
- */
- symtab_copy_object = (vm_map_copy_t) symtab;
- result = vm_map_copyout(
- kernel_map,
- &symtab_start,
- vm_map_copy_copy(symtab_copy_object));
- if (result != KERN_SUCCESS)
- return (result);
-
- symtab_end = symtab_start + symtab_count;
-
- /*
- * Add the symbol table.
- * Do not keep a reference for the task map. XXX
- */
- if (task == TASK_NULL)
- map = VM_MAP_NULL;
- else
- map = task->map;
- if (!X_db_sym_init((char *)symtab_start,
- (char *)symtab_end,
- name,
- (char *)map))
- {
- /*
- * Not enough room for symbol table - failure.
- */
- (void) vm_deallocate(kernel_map,
- symtab_start,
- symtab_count);
- return (KERN_FAILURE);
- }
-
- /*
- * Wire down the symbol table
- */
- (void) vm_map_wire(kernel_map,
- symtab_start,
- round_page(symtab_end),
- VM_PROT_READ|VM_PROT_WRITE, FALSE);
-
- /*
- * Discard the original copy object
- */
- vm_map_copy_discard(symtab_copy_object);
-
- return (KERN_SUCCESS);
-#endif /* MACH_DEBUG && MACH_KDB */
}