xref: /illumos-gate/usr/src/cmd/sgs/demo_rdb/common/help.c (revision d9328cd43f1300af79f6fc8a3ad4760137618c63)
1*d9328cd4SRobert Mustacchi /*
2*d9328cd4SRobert Mustacchi  * CDDL HEADER START
3*d9328cd4SRobert Mustacchi  *
4*d9328cd4SRobert Mustacchi  * The contents of this file are subject to the terms of the
5*d9328cd4SRobert Mustacchi  * Common Development and Distribution License (the "License").
6*d9328cd4SRobert Mustacchi  * You may not use this file except in compliance with the License.
7*d9328cd4SRobert Mustacchi  *
8*d9328cd4SRobert Mustacchi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*d9328cd4SRobert Mustacchi  * or http://www.opensolaris.org/os/licensing.
10*d9328cd4SRobert Mustacchi  * See the License for the specific language governing permissions
11*d9328cd4SRobert Mustacchi  * and limitations under the License.
12*d9328cd4SRobert Mustacchi  *
13*d9328cd4SRobert Mustacchi  * When distributing Covered Code, include this CDDL HEADER in each
14*d9328cd4SRobert Mustacchi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*d9328cd4SRobert Mustacchi  * If applicable, add the following below this CDDL HEADER, with the
16*d9328cd4SRobert Mustacchi  * fields enclosed by brackets "[]" replaced with your own identifying
17*d9328cd4SRobert Mustacchi  * information: Portions Copyright [yyyy] [name of copyright owner]
18*d9328cd4SRobert Mustacchi  *
19*d9328cd4SRobert Mustacchi  * CDDL HEADER END
20*d9328cd4SRobert Mustacchi  */
21*d9328cd4SRobert Mustacchi 
22*d9328cd4SRobert Mustacchi /*
23*d9328cd4SRobert Mustacchi  * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
24*d9328cd4SRobert Mustacchi  */
25*d9328cd4SRobert Mustacchi 
26*d9328cd4SRobert Mustacchi #include <stdio.h>
27*d9328cd4SRobert Mustacchi #include <libelf.h>
28*d9328cd4SRobert Mustacchi #include <string.h>
29*d9328cd4SRobert Mustacchi 
30*d9328cd4SRobert Mustacchi #include "rdb.h"
31*d9328cd4SRobert Mustacchi 
32*d9328cd4SRobert Mustacchi typedef struct {
33*d9328cd4SRobert Mustacchi 	char	*ht_key;		/* HELP keyword for topic */
34*d9328cd4SRobert Mustacchi 	char	*ht_desc;		/* description of topic */
35*d9328cd4SRobert Mustacchi 	void	(*ht_func)();		/* detailed info on topic */
36*d9328cd4SRobert Mustacchi } help_topics;
37*d9328cd4SRobert Mustacchi 
38*d9328cd4SRobert Mustacchi static void
break_help()39*d9328cd4SRobert Mustacchi break_help()
40*d9328cd4SRobert Mustacchi {
41*d9328cd4SRobert Mustacchi 	(void) printf("Break Help:\n"
42*d9328cd4SRobert Mustacchi 	    "\tbreak            - list breakpoints\n"
43*d9328cd4SRobert Mustacchi 	    "\tbreak <address>  - set break point at <address\n");
44*d9328cd4SRobert Mustacchi }
45*d9328cd4SRobert Mustacchi 
46*d9328cd4SRobert Mustacchi static void
delete_help()47*d9328cd4SRobert Mustacchi delete_help()
48*d9328cd4SRobert Mustacchi {
49*d9328cd4SRobert Mustacchi 	(void) printf("Delete Help:\n"
50*d9328cd4SRobert Mustacchi 	    "\tdelete <address> - delete breakpoint at <address>\n");
51*d9328cd4SRobert Mustacchi }
52*d9328cd4SRobert Mustacchi 
53*d9328cd4SRobert Mustacchi static void
dis_help()54*d9328cd4SRobert Mustacchi dis_help()
55*d9328cd4SRobert Mustacchi {
56*d9328cd4SRobert Mustacchi 	(void) printf("Disassemble Help:\n"
57*d9328cd4SRobert Mustacchi 	    "\tdis -\t\t\tdisassemble from current PC\n"
58*d9328cd4SRobert Mustacchi 	    "\tdis <address> [count] -\tdisassemble from address for\n"
59*d9328cd4SRobert Mustacchi 	    "\t\t\t\t<count> instructions\n");
60*d9328cd4SRobert Mustacchi }
61*d9328cd4SRobert Mustacchi 
62*d9328cd4SRobert Mustacchi static void
echo_help()63*d9328cd4SRobert Mustacchi echo_help()
64*d9328cd4SRobert Mustacchi {
65*d9328cd4SRobert Mustacchi 	(void) printf("Echo Help:\n"
66*d9328cd4SRobert Mustacchi 	    "\tEcho '<quoted string>'\n"
67*d9328cd4SRobert Mustacchi 	    "\t\tthe echo command can be used to display output to\n"
68*d9328cd4SRobert Mustacchi 	    "\t\tthe main terminal.  This is useful when running\n"
69*d9328cd4SRobert Mustacchi 	    "\t\tcommand scripts and wanting to display status\n"
70*d9328cd4SRobert Mustacchi 	    "\n"
71*d9328cd4SRobert Mustacchi 	    "\t\tcurrently only <quoted strings> may be displayed\n");
72*d9328cd4SRobert Mustacchi }
73*d9328cd4SRobert Mustacchi 
74*d9328cd4SRobert Mustacchi static void
print_help()75*d9328cd4SRobert Mustacchi print_help()
76*d9328cd4SRobert Mustacchi {
77*d9328cd4SRobert Mustacchi 	(void) printf("Print Help:\n"
78*d9328cd4SRobert Mustacchi 	    "\tprint <address> [count [format]]\n"
79*d9328cd4SRobert Mustacchi 	    "\t\tcount  - number of units to print (default 4)\n"
80*d9328cd4SRobert Mustacchi 	    "\t\tformat - how to display data:\n"
81*d9328cd4SRobert Mustacchi 	    "\t\t\t\tX - Hex Words (default)\n"
82*d9328cd4SRobert Mustacchi 	    "\t\t\t\tb - unsigned hex bytes\n"
83*d9328cd4SRobert Mustacchi 	    "\t\t\t\ts - string\n"
84*d9328cd4SRobert Mustacchi 	    "\tprint <varname>\n"
85*d9328cd4SRobert Mustacchi 	    "\t\thelp varname for more info\n");
86*d9328cd4SRobert Mustacchi }
87*d9328cd4SRobert Mustacchi 
88*d9328cd4SRobert Mustacchi static void
step_help()89*d9328cd4SRobert Mustacchi step_help()
90*d9328cd4SRobert Mustacchi {
91*d9328cd4SRobert Mustacchi 	(void) printf("Step Help:\n");
92*d9328cd4SRobert Mustacchi 	(void) printf("\tstep -		step one instruction.\n");
93*d9328cd4SRobert Mustacchi 	(void) printf("\tstep count [silent] -	step count instructions\n");
94*d9328cd4SRobert Mustacchi 	(void) printf("\t\t\t\tif silent is specified to not disassemble\n"
95*d9328cd4SRobert Mustacchi 	    "\t\t\t\tinstr. during stepping\n");
96*d9328cd4SRobert Mustacchi }
97*d9328cd4SRobert Mustacchi 
98*d9328cd4SRobert Mustacchi static void
value_help()99*d9328cd4SRobert Mustacchi value_help()
100*d9328cd4SRobert Mustacchi {
101*d9328cd4SRobert Mustacchi 	(void) printf("Value Help:\n"
102*d9328cd4SRobert Mustacchi 	    "\tvalue <symbol name> -\tdisplay the value associated with\n"
103*d9328cd4SRobert Mustacchi 	    "\t\t\t\tsymbol <symbol name>.\n");
104*d9328cd4SRobert Mustacchi }
105*d9328cd4SRobert Mustacchi 
106*d9328cd4SRobert Mustacchi static void
varname_help()107*d9328cd4SRobert Mustacchi varname_help()
108*d9328cd4SRobert Mustacchi {
109*d9328cd4SRobert Mustacchi 	(void) printf("Variable Name Help:\n"
110*d9328cd4SRobert Mustacchi 	    "\tVariable names are in the form of $<name> and are used\n"
111*d9328cd4SRobert Mustacchi 	    "\tto access special information.  Possible varnames\n"
112*d9328cd4SRobert Mustacchi 	    "\tare:\n"
113*d9328cd4SRobert Mustacchi 	    "\t\tcommon:\n"
114*d9328cd4SRobert Mustacchi 	    "\t\t\t$regs - display all registers\n"
115*d9328cd4SRobert Mustacchi 	    "\t\tsparc:\n"
116*d9328cd4SRobert Mustacchi 	    "\t\t\t$ins -   display IN registers\n"
117*d9328cd4SRobert Mustacchi 	    "\t\t\t$globs - display GLOBAL registers\n"
118*d9328cd4SRobert Mustacchi 	    "\t\t\t$outs -  display OUT registers\n"
119*d9328cd4SRobert Mustacchi 	    "\t\t\t$locs -  display LOCAL registers\n"
120*d9328cd4SRobert Mustacchi 	    "\t\t\t$specs -  display SPECIAL registers\n"
121*d9328cd4SRobert Mustacchi 	    "\t\ti86pc:\n");
122*d9328cd4SRobert Mustacchi }
123*d9328cd4SRobert Mustacchi 
124*d9328cd4SRobert Mustacchi static const help_topics	htops[] = {
125*d9328cd4SRobert Mustacchi 	{
126*d9328cd4SRobert Mustacchi 		"break",
127*d9328cd4SRobert Mustacchi 		"Set and display breakpoints",
128*d9328cd4SRobert Mustacchi 		break_help
129*d9328cd4SRobert Mustacchi 	},
130*d9328cd4SRobert Mustacchi 	{
131*d9328cd4SRobert Mustacchi 		"cont",
132*d9328cd4SRobert Mustacchi 		"continue execution of process",
133*d9328cd4SRobert Mustacchi 		0
134*d9328cd4SRobert Mustacchi 	},
135*d9328cd4SRobert Mustacchi 	{
136*d9328cd4SRobert Mustacchi 		"delete",
137*d9328cd4SRobert Mustacchi 		"delete breakpoints",
138*d9328cd4SRobert Mustacchi 		delete_help
139*d9328cd4SRobert Mustacchi 	},
140*d9328cd4SRobert Mustacchi 	{
141*d9328cd4SRobert Mustacchi 		"dis",
142*d9328cd4SRobert Mustacchi 		"Help on the Disassemble Command",
143*d9328cd4SRobert Mustacchi 		dis_help
144*d9328cd4SRobert Mustacchi 	},
145*d9328cd4SRobert Mustacchi 	{
146*d9328cd4SRobert Mustacchi 		"echo",
147*d9328cd4SRobert Mustacchi 		"Help on the Echo Command",
148*d9328cd4SRobert Mustacchi 		echo_help
149*d9328cd4SRobert Mustacchi 	},
150*d9328cd4SRobert Mustacchi 	{
151*d9328cd4SRobert Mustacchi 		"event",
152*d9328cd4SRobert Mustacchi 		"event [on|off] to enable or disable event information",
153*d9328cd4SRobert Mustacchi 		0
154*d9328cd4SRobert Mustacchi 	},
155*d9328cd4SRobert Mustacchi 	{
156*d9328cd4SRobert Mustacchi 		"getmaps",
157*d9328cd4SRobert Mustacchi 		"Read Link_Map structure from run-time linker",
158*d9328cd4SRobert Mustacchi 		0
159*d9328cd4SRobert Mustacchi 	},
160*d9328cd4SRobert Mustacchi 	{
161*d9328cd4SRobert Mustacchi 		"linkmaps",
162*d9328cd4SRobert Mustacchi 		"Display link-map information",
163*d9328cd4SRobert Mustacchi 		0
164*d9328cd4SRobert Mustacchi 	},
165*d9328cd4SRobert Mustacchi 	{
166*d9328cd4SRobert Mustacchi 		"maps",
167*d9328cd4SRobert Mustacchi 		"Display memory mapping information",
168*d9328cd4SRobert Mustacchi 		0
169*d9328cd4SRobert Mustacchi 	},
170*d9328cd4SRobert Mustacchi 	{
171*d9328cd4SRobert Mustacchi 		"objpad",
172*d9328cd4SRobert Mustacchi 		"Set object padding for ld.so.1 mmap'ed objects",
173*d9328cd4SRobert Mustacchi 		0
174*d9328cd4SRobert Mustacchi 	},
175*d9328cd4SRobert Mustacchi 	{
176*d9328cd4SRobert Mustacchi 		"pltskip",
177*d9328cd4SRobert Mustacchi 		"Enables and disables stepping through PLT's",
178*d9328cd4SRobert Mustacchi 		0
179*d9328cd4SRobert Mustacchi 	},
180*d9328cd4SRobert Mustacchi 	{
181*d9328cd4SRobert Mustacchi 		"print",
182*d9328cd4SRobert Mustacchi 		"Display memory at <address>",
183*d9328cd4SRobert Mustacchi 		print_help
184*d9328cd4SRobert Mustacchi 	},
185*d9328cd4SRobert Mustacchi 	{
186*d9328cd4SRobert Mustacchi 		"step",
187*d9328cd4SRobert Mustacchi 		"Help on the Step Command",
188*d9328cd4SRobert Mustacchi 		step_help
189*d9328cd4SRobert Mustacchi 	},
190*d9328cd4SRobert Mustacchi 	{
191*d9328cd4SRobert Mustacchi 		"value",
192*d9328cd4SRobert Mustacchi 		"Help on the Value Command",
193*d9328cd4SRobert Mustacchi 		value_help
194*d9328cd4SRobert Mustacchi 	},
195*d9328cd4SRobert Mustacchi 	{
196*d9328cd4SRobert Mustacchi 		"varname",
197*d9328cd4SRobert Mustacchi 		"Help on $variable values",
198*d9328cd4SRobert Mustacchi 		varname_help
199*d9328cd4SRobert Mustacchi 	},
200*d9328cd4SRobert Mustacchi 	{
201*d9328cd4SRobert Mustacchi 		"where",
202*d9328cd4SRobert Mustacchi 		"Display stack trace",
203*d9328cd4SRobert Mustacchi 		0
204*d9328cd4SRobert Mustacchi 	},
205*d9328cd4SRobert Mustacchi 	{
206*d9328cd4SRobert Mustacchi 		0,
207*d9328cd4SRobert Mustacchi 		0,
208*d9328cd4SRobert Mustacchi 		0
209*d9328cd4SRobert Mustacchi 	}
210*d9328cd4SRobert Mustacchi };
211*d9328cd4SRobert Mustacchi 
212*d9328cd4SRobert Mustacchi void
rdb_help(const char * topic)213*d9328cd4SRobert Mustacchi rdb_help(const char *topic) {
214*d9328cd4SRobert Mustacchi 	int	i;
215*d9328cd4SRobert Mustacchi 
216*d9328cd4SRobert Mustacchi 	if (topic) {
217*d9328cd4SRobert Mustacchi 		for (i = 0; htops[i].ht_key; i++) {
218*d9328cd4SRobert Mustacchi 			if (strcmp(htops[i].ht_key, topic) == 0) {
219*d9328cd4SRobert Mustacchi 				if (htops[i].ht_func)
220*d9328cd4SRobert Mustacchi 					htops[i].ht_func();
221*d9328cd4SRobert Mustacchi 				else
222*d9328cd4SRobert Mustacchi 					(void) printf("no additional help "
223*d9328cd4SRobert Mustacchi 					    "available for %s\n",
224*d9328cd4SRobert Mustacchi 					    htops[i].ht_key);
225*d9328cd4SRobert Mustacchi 				return;
226*d9328cd4SRobert Mustacchi 			}
227*d9328cd4SRobert Mustacchi 		}
228*d9328cd4SRobert Mustacchi 		(void) printf("Help not available for topic: %s\n", topic);
229*d9328cd4SRobert Mustacchi 	}
230*d9328cd4SRobert Mustacchi 
231*d9328cd4SRobert Mustacchi 	(void) printf("The following commands are available\n");
232*d9328cd4SRobert Mustacchi 
233*d9328cd4SRobert Mustacchi 	for (i = 0; htops[i].ht_key; i++) {
234*d9328cd4SRobert Mustacchi 		(void) printf("\t%10s\t%s", htops[i].ht_key, htops[i].ht_desc);
235*d9328cd4SRobert Mustacchi 		if (htops[i].ht_func)
236*d9328cd4SRobert Mustacchi 			(void) putchar('*');
237*d9328cd4SRobert Mustacchi 		(void) putchar('\n');
238*d9328cd4SRobert Mustacchi 	}
239*d9328cd4SRobert Mustacchi 	(void) printf("\n(*) more help is available by typing "
240*d9328cd4SRobert Mustacchi 	    "'help <topic>'\n\n");
241*d9328cd4SRobert Mustacchi }
242