1a9643ea8Slogwang /*-
2*22ce4affSfengbojiang * SPDX-License-Identifier: MIT-CMU
3*22ce4affSfengbojiang *
4a9643ea8Slogwang * Mach Operating System
5a9643ea8Slogwang * Copyright (c) 1991,1990 Carnegie Mellon University
6a9643ea8Slogwang * All Rights Reserved.
7a9643ea8Slogwang *
8a9643ea8Slogwang * Permission to use, copy, modify and distribute this software and its
9a9643ea8Slogwang * documentation is hereby granted, provided that both the copyright
10a9643ea8Slogwang * notice and this permission notice appear in all copies of the
11a9643ea8Slogwang * software, derivative works or modified versions, and any portions
12a9643ea8Slogwang * thereof, and that both notices appear in supporting documentation.
13a9643ea8Slogwang *
14a9643ea8Slogwang * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS
15a9643ea8Slogwang * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
16a9643ea8Slogwang * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
17a9643ea8Slogwang *
18a9643ea8Slogwang * Carnegie Mellon requests users of this software to return to
19a9643ea8Slogwang *
20a9643ea8Slogwang * Software Distribution Coordinator or [email protected]
21a9643ea8Slogwang * School of Computer Science
22a9643ea8Slogwang * Carnegie Mellon University
23a9643ea8Slogwang * Pittsburgh PA 15213-3890
24a9643ea8Slogwang *
25a9643ea8Slogwang * any improvements or extensions that they make and grant Carnegie the
26a9643ea8Slogwang * rights to redistribute these changes.
27a9643ea8Slogwang */
28a9643ea8Slogwang /*
29a9643ea8Slogwang * Author: David B. Golub, Carnegie Mellon University
30a9643ea8Slogwang * Date: 7/90
31a9643ea8Slogwang */
32a9643ea8Slogwang
33a9643ea8Slogwang #include <sys/cdefs.h>
34a9643ea8Slogwang __FBSDID("$FreeBSD$");
35a9643ea8Slogwang
36a9643ea8Slogwang #include <sys/param.h>
37a9643ea8Slogwang
38a9643ea8Slogwang #include <ddb/ddb.h>
39a9643ea8Slogwang #include <ddb/db_access.h>
40a9643ea8Slogwang #include <ddb/db_command.h>
41a9643ea8Slogwang #include <ddb/db_sym.h>
42a9643ea8Slogwang
43a9643ea8Slogwang /*
44a9643ea8Slogwang * Write to file.
45a9643ea8Slogwang */
46a9643ea8Slogwang /*ARGSUSED*/
47a9643ea8Slogwang void
db_write_cmd(db_expr_t address,bool have_addr,db_expr_t count,char * modif)48a9643ea8Slogwang db_write_cmd(db_expr_t address, bool have_addr, db_expr_t count,
49a9643ea8Slogwang char * modif)
50a9643ea8Slogwang {
51a9643ea8Slogwang db_addr_t addr;
52a9643ea8Slogwang db_expr_t old_value;
53a9643ea8Slogwang db_expr_t new_value;
54a9643ea8Slogwang int size;
55a9643ea8Slogwang bool wrote_one = false;
56a9643ea8Slogwang
57a9643ea8Slogwang addr = (db_addr_t) address;
58a9643ea8Slogwang
59a9643ea8Slogwang switch (modif[0]) {
60a9643ea8Slogwang case 'b':
61a9643ea8Slogwang size = 1;
62a9643ea8Slogwang break;
63a9643ea8Slogwang case 'h':
64a9643ea8Slogwang size = 2;
65a9643ea8Slogwang break;
66a9643ea8Slogwang case 'l':
67a9643ea8Slogwang case '\0':
68a9643ea8Slogwang size = 4;
69a9643ea8Slogwang break;
70a9643ea8Slogwang default:
71a9643ea8Slogwang db_error("Unknown size\n");
72a9643ea8Slogwang return;
73a9643ea8Slogwang }
74a9643ea8Slogwang
75a9643ea8Slogwang while (db_expression(&new_value)) {
76a9643ea8Slogwang old_value = db_get_value(addr, size, false);
77a9643ea8Slogwang db_printsym(addr, DB_STGY_ANY);
78a9643ea8Slogwang db_printf("\t\t%#8lr\t=\t%#8lr\n", (long)old_value,(long)new_value);
79a9643ea8Slogwang db_put_value(addr, size, new_value);
80a9643ea8Slogwang addr += size;
81a9643ea8Slogwang
82a9643ea8Slogwang wrote_one = true;
83a9643ea8Slogwang }
84a9643ea8Slogwang
85a9643ea8Slogwang if (!wrote_one)
86a9643ea8Slogwang db_error("Nothing written.\n");
87a9643ea8Slogwang
88a9643ea8Slogwang db_next = addr;
89a9643ea8Slogwang db_prev = addr - size;
90a9643ea8Slogwang
91a9643ea8Slogwang db_skip_to_eol();
92a9643ea8Slogwang }
93