|
|
1.1 root 1: /*
2: * Mach Operating System
3: * Copyright (c) 1991,1990,1989 Carnegie Mellon University
4: * All Rights Reserved.
5: *
6: * Permission to use, copy, modify and distribute this software and its
7: * documentation is hereby granted, provided that both the copyright
8: * notice and this permission notice appear in all copies of the
9: * software, derivative works or modified versions, and any portions
10: * thereof, and that both notices appear in supporting documentation.
11: *
12: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
13: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
14: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
15: *
16: * Carnegie Mellon requests users of this software to return to
17: *
18: * Software Distribution Coordinator or [email protected]
19: * School of Computer Science
20: * Carnegie Mellon University
21: * Pittsburgh PA 15213-3890
22: *
23: * any improvements or extensions that they make and grant Carnegie Mellon
24: * the rights to redistribute these changes.
25: */
26:
27: #include "mach_kdb.h"
28: #if MACH_KDB
29:
30: #include <mach_debug.h>
31:
32: #if MACH_DEBUG
33:
34: #include <mach/mach_types.h> /* vm_address_t */
35: #include <mach/std_types.h> /* pointer_t */
36: #include <mach/vm_param.h>
37: #include <vm/vm_map.h>
38: #include <vm/vm_kern.h>
39: #include <kern/host.h>
40: #include <kern/task.h>
41: #include <ddb/db_sym.h>
42:
43:
44:
45: /*
46: * Loads a symbol table for an external file into the kernel debugger.
47: * The symbol table data is an array of characters. It is assumed that
48: * the caller and the kernel debugger agree on its format.
49: */
50: kern_return_t
51: host_load_symbol_table(host, task, name, symtab, symtab_count)
52: host_t host;
53: task_t task;
54: char * name;
55: pointer_t symtab;
56: unsigned int symtab_count;
57: {
58: kern_return_t result;
59: vm_offset_t symtab_start;
60: vm_offset_t symtab_end;
61: vm_map_t map;
62: vm_map_copy_t symtab_copy_object;
63:
64: if (host == HOST_NULL)
65: return (KERN_INVALID_ARGUMENT);
66:
67: /*
68: * Copy the symbol table array into the kernel.
69: * We make a copy of the copy object, and clear
70: * the old one, so that returning error will not
71: * deallocate the data twice.
72: */
73: symtab_copy_object = (vm_map_copy_t) symtab;
74: result = vm_map_copyout(
75: kernel_map,
76: &symtab_start,
77: vm_map_copy_copy(symtab_copy_object));
78: if (result != KERN_SUCCESS)
79: return (result);
80:
81: symtab_end = symtab_start + symtab_count;
82:
83: /*
84: * Add the symbol table.
85: * Do not keep a reference for the task map. XXX
86: */
87: if (task == TASK_NULL)
88: map = VM_MAP_NULL;
89: else
90: map = task->map;
91: if (!X_db_sym_init((char *)symtab_start,
92: (char *)symtab_end,
93: name,
94: (char *)map))
95: {
96: /*
97: * Not enough room for symbol table - failure.
98: */
99: (void) vm_deallocate(kernel_map,
100: symtab_start,
101: symtab_count);
102: return (KERN_FAILURE);
103: }
104:
105: /*
106: * Wire down the symbol table
107: */
108: (void) vm_map_pageable(kernel_map,
109: symtab_start,
110: round_page(symtab_end),
111: VM_PROT_READ|VM_PROT_WRITE);
112:
113: /*
114: * Discard the original copy object
115: */
116: vm_map_copy_discard(symtab_copy_object);
117:
118: return (KERN_SUCCESS);
119: }
120:
121: #endif /* MACH_DEBUG */
122:
123: #endif MACH_KDB
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.