This source file includes following definitions.
- db_write_cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #include <sys/param.h>
34 #include <sys/proc.h>
35
36 #include <uvm/uvm_extern.h>
37
38 #include <machine/db_machdep.h>
39
40 #include <ddb/db_lex.h>
41 #include <ddb/db_access.h>
42 #include <ddb/db_command.h>
43 #include <ddb/db_sym.h>
44 #include <ddb/db_extern.h>
45 #include <ddb/db_output.h>
46
47
48
49
50
51 void
52 db_write_cmd(db_expr_t address, boolean_t have_addr, db_expr_t count,
53 char *modif)
54 {
55 db_addr_t addr;
56 db_expr_t old_value;
57 db_expr_t new_value;
58 int size;
59 boolean_t wrote_one = FALSE;
60
61 addr = (db_addr_t) address;
62
63 switch (modif[0]) {
64 case 'b':
65 size = 1;
66 break;
67 case 'h':
68 size = 2;
69 break;
70 case 'l':
71 case '\0':
72 size = 4;
73 break;
74 default:
75 size = -1;
76 db_error("Unknown size\n");
77
78 }
79
80 while (db_expression(&new_value)) {
81 old_value = db_get_value(addr, size, FALSE);
82 db_printsym(addr, DB_STGY_ANY, db_printf);
83 db_printf("\t\t%#8n\t=\t%#8n\n", old_value, new_value);
84 db_put_value(addr, size, new_value);
85 addr += size;
86
87 wrote_one = TRUE;
88 }
89
90 if (!wrote_one) {
91 db_error("Nothing written.\n");
92
93 }
94
95 db_next = addr;
96 db_prev = addr - size;
97
98 db_skip_to_eol();
99 }
100