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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
<table class="head">
<tr>
<td class="head-ltitle">DB_COMMAND(9)</td>
<td class="head-vol">Kernel Developer's Manual</td>
<td class="head-rtitle">DB_COMMAND(9)</td>
</tr>
</table>
<div class="manual-text">
<section class="Sh">
<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
<p class="Pp"><code class="Nm">DB_COMMAND</code>,
<code class="Nm">DB_COMMAND_FLAGS</code>,
<code class="Nm">DB_SHOW_COMMAND</code>,
<code class="Nm">DB_SHOW_COMMAND_FLAGS</code>,
<code class="Nm">DB_SHOW_ALL_COMMAND</code>,
<code class="Nm">DB_TABLE_COMMAND</code>,
<code class="Nm">DB_TABLE_COMMAND_FLAGS</code>,
<code class="Nm">DB_ALIAS</code>, <code class="Nm">DB_ALIAS_FLAGS</code>,
<code class="Nm">DB_SHOW_ALIAS</code>,
<code class="Nm">DB_SHOW_ALIAS_FLAGS</code>,
<code class="Nm">DB_SHOW_ALL_ALIAS</code>,
<code class="Nm">DB_TABLE_ALIAS</code>,
<code class="Nm">DB_TABLE_ALIAS_FLAGS</code>
<code class="Nm">DB_DECLARE_TABLE</code>,
<code class="Nm">DB_DEFINE_TABLE</code>, — <span class="Nd">Extends
the ddb command set</span></p>
</section>
<section class="Sh">
<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
<p class="Pp"><code class="In">#include
<<a class="In">ddb/ddb.h</a>></code></p>
<p class="Pp"><code class="Fn">DB_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>,
<var class="Fa" style="white-space: nowrap;">flags</var>);</p>
<p class="Pp"><code class="Fn">DB_SHOW_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_SHOW_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>,
<var class="Fa" style="white-space: nowrap;">flags</var>);</p>
<p class="Pp"><code class="Fn">DB_SHOW_ALL_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_TABLE_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
<var class="Fa" style="white-space: nowrap;">command_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_TABLE_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
<var class="Fa" style="white-space: nowrap;">command_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>,
<var class="Fa" style="white-space: nowrap;">flags</var>);</p>
<p class="Pp"><code class="Fn">DB_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>,
<var class="Fa" style="white-space: nowrap;">flags</var>);</p>
<p class="Pp"><code class="Fn">DB_SHOW_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_SHOW_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>,
<var class="Fa" style="white-space: nowrap;">flags</var>);</p>
<p class="Pp"><code class="Fn">DB_SHOW_ALL_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_TABLE_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
<var class="Fa" style="white-space: nowrap;">alias_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>);</p>
<p class="Pp"><code class="Fn">DB_TABLE_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">table</var>,
<var class="Fa" style="white-space: nowrap;">alias_name</var>,
<var class="Fa" style="white-space: nowrap;">command_function</var>,
<var class="Fa" style="white-space: nowrap;">flags</var>);</p>
<p class="Pp"><code class="Fn">DB_DEFINE_TABLE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>,
<var class="Fa" style="white-space: nowrap;">name</var>,
<var class="Fa" style="white-space: nowrap;">table</var>);</p>
<p class="Pp"><code class="Fn">DB_DECLARE_TABLE</code>(<var class="Fa" style="white-space: nowrap;">table</var>);</p>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">The
<a class="permalink" href="#DB_COMMAND"><code class="Fn" id="DB_COMMAND">DB_COMMAND</code></a>()
macro adds <var class="Fa">command_name</var> to the list of top-level
commands. Invoking <var class="Fa">command_name</var> from ddb will call
<var class="Fa">command_function</var>.</p>
<p class="Pp" id="DB_SHOW_COMMAND">The
<a class="permalink" href="#DB_SHOW_COMMAND"><code class="Fn">DB_SHOW_COMMAND</code></a>()
and
<a class="permalink" href="#DB_SHOW_ALL_COMMAND"><code class="Fn" id="DB_SHOW_ALL_COMMAND">DB_SHOW_ALL_COMMAND</code></a>()
macros are roughly equivalent to <code class="Fn">DB_COMMAND</code>() but in
these cases, <var class="Fa">command_name</var> is a sub-command of the ddb
<b class="Sy">show</b> command and <b class="Sy">show all</b> command,
respectively.</p>
<p class="Pp" id="DB_TABLE_COMMAND">The
<a class="permalink" href="#DB_TABLE_COMMAND"><code class="Fn">DB_TABLE_COMMAND</code></a>()
macro is also similar to <code class="Fn">DB_COMMAND</code>() but adds the
new command as a sub-command of the ddb command
<var class="Fa">table</var>.</p>
<p class="Pp" id="DB_ALIAS">The
<a class="permalink" href="#DB_ALIAS"><code class="Fn">DB_ALIAS</code></a>(),
<a class="permalink" href="#DB_SHOW_ALIAS"><code class="Fn" id="DB_SHOW_ALIAS">DB_SHOW_ALIAS</code></a>(),
<a class="permalink" href="#DB_SHOW_ALL_ALIAS"><code class="Fn" id="DB_SHOW_ALL_ALIAS">DB_SHOW_ALL_ALIAS</code></a>(),
and
<a class="permalink" href="#DB_TABLE_ALIAS"><code class="Fn" id="DB_TABLE_ALIAS">DB_TABLE_ALIAS</code></a>()
macros register the existing <var class="Fa">command_function</var> under
the alternative command name <var class="Fa">alias_name</var>.</p>
<p class="Pp">The _FLAGS variants of these commands allow the programmer to
specify a value for the <var class="Fa">flag</var> field of the command
structure. The possible flag values are defined alongside
<var class="Ft">struct db_command</var> in
<code class="In"><<a class="In">ddb/ddb.h</a>></code>.</p>
<p class="Pp">The general command syntax:
<code class="Cm">command</code>[<code class="Li">/</code><var class="Ar">modifier</var>]
<var class="Ar">address</var>[,<var class="Ar">count</var>], translates into
the following parameters for <var class="Fa">command_function</var>:</p>
<div class="Bd-indent">
<dl class="Bl-tag">
<dt><var class="Fa">addr</var></dt>
<dd>The address passed to the command as an argument.</dd>
<dt><var class="Fa">have_addr</var></dt>
<dd>A boolean value that is true if the addr field is valid.</dd>
<dt><var class="Fa">count</var></dt>
<dd>The number of quad words starting at offset <var class="Fa">addr</var>
that the command must process.</dd>
<dt id="examine"><var class="Fa">modif</var></dt>
<dd>A pointer to the string of modifiers. That is, a series of symbols used to
pass some options to the command. For example, the
<a class="permalink" href="#examine"><b class="Sy">examine</b></a> command
will display words in decimal form if it is passed the modifier
"d".</dd>
</dl>
</div>
<p class="Pp" id="DB_DEFINE_TABLE">The
<a class="permalink" href="#DB_DEFINE_TABLE"><code class="Fn">DB_DEFINE_TABLE</code></a>()
macro adds a new command <var class="Fa">name</var> as a sub-command of the
existing command table <var class="Fa">parent</var>. The new command defines
a table named <var class="Fa">table</var> which contains sub-commands. New
commands and aliases can be added to this table by passing
<var class="Fa">table</var> as the first argument to one of the DB_TABLE_
macros.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
<p class="Pp">In your module, the command is declared as:</p>
<div class="Bd Pp Li">
<pre>DB_COMMAND(mycmd, my_cmd_func)
{
if (have_addr)
db_printf("Calling my command with address %p\n", addr);
}</pre>
</div>
<p class="Pp">An alias for this command is declared as:</p>
<div class="Bd Pp Li">
<pre>DB_ALIAS(mycmd2, my_cmd_func);</pre>
</div>
<p class="Pp">Then, when in ddb:</p>
<div class="Bd Pp Li">
<pre></pre>
<div class="Bf Sy">
db> mycmd 0x1000
Calling my command with address 0x1000
db> mycmd2 0x2500
Calling my command with address 0x2500
db></div>
</div>
</section>
<section class="Sh">
<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
ALSO</a></h1>
<p class="Pp"><a class="Xr">ddb(4)</a></p>
</section>
<section class="Sh">
<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
<p class="Pp">This manual page was written by <span class="An">Guillaume
Ballet</span>
<<a class="Mt" href="mailto:gballet@gmail.com">gballet@gmail.com</a>>.</p>
</section>
</div>
<table class="foot">
<tr>
<td class="foot-date">July 5, 2023</td>
<td class="foot-os">FreeBSD 15.0</td>
</tr>
</table>
|