20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans/*
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * CDDL HEADER START
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans *
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * The contents of this file are subject to the terms of the
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * Common Development and Distribution License (the "License").
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * You may not use this file except in compliance with the License.
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans *
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * or http://www.opensolaris.org/os/licensing.
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * See the License for the specific language governing permissions
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * and limitations under the License.
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans *
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * When distributing Covered Code, include this CDDL HEADER in each
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * If applicable, add the following below this CDDL HEADER, with the
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * fields enclosed by brackets "[]" replaced with your own identifying
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * information: Portions Copyright [yyyy] [name of copyright owner]
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans *
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * CDDL HEADER END
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans */
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans/*
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans */
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans#include <stdio.h>
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans#include <libelf.h>
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans#include <string.h>
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans#include "rdb.h"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evanstypedef struct {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans char *ht_key; /* HELP keyword for topic */
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans char *ht_desc; /* description of topic */
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans void (*ht_func)(); /* detailed info on topic */
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans} help_topics;
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansbreak_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Break Help:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tbreak - list breakpoints\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tbreak <address> - set break point at <address\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansdelete_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Delete Help:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tdelete <address> - delete breakpoint at <address>\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansdis_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Disassemble Help:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tdis -\t\t\tdisassemble from current PC\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tdis <address> [count] -\tdisassemble from address for\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t\t<count> instructions\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansecho_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Echo Help:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tEcho '<quoted string>'\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tthe echo command can be used to display output to\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tthe main terminal. This is useful when running\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tcommand scripts and wanting to display status\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tcurrently only <quoted strings> may be displayed\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansprint_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Print Help:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tprint <address> [count [format]]\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tcount - number of units to print (default 4)\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tformat - how to display data:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t\tX - Hex Words (default)\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t\tb - unsigned hex bytes\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t\ts - string\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tprint <varname>\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\thelp varname for more info\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstep_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Step Help:\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("\tstep - step one instruction.\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("\tstep count [silent] - step count instructions\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("\t\t\t\tif silent is specified to not disassemble\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t\tinstr. during stepping\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansvalue_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Value Help:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tvalue <symbol name> -\tdisplay the value associated with\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t\tsymbol <symbol name>.\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic void
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansvarname_help()
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans{
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Variable Name Help:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tVariable names are in the form of $<name> and are used\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tto access special information. Possible varnames\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\tare:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tcommon:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t$regs - display all registers\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\tsparc:\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t$ins - display IN registers\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t$globs - display GLOBAL registers\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t$outs - display OUT registers\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t$locs - display LOCAL registers\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\t\t$specs - display SPECIAL registers\n"
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "\t\ti86pc:\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansstatic const help_topics htops[] = {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "break",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Set and display breakpoints",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans break_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "cont",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "continue execution of process",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "delete",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "delete breakpoints",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans delete_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "dis",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Help on the Disassemble Command",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans dis_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "echo",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Help on the Echo Command",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans echo_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "event",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "event [on|off] to enable or disable event information",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "getmaps",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Read Link_Map structure from run-time linker",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "linkmaps",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Display link-map information",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "maps",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Display memory mapping information",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "objpad",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Set object padding for ld.so.1 mmap'ed objects",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "pltskip",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Enables and disables stepping through PLT's",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "print",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Display memory at <address>",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans print_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "step",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Help on the Step Command",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans step_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "value",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Help on the Value Command",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans value_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "varname",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Help on $variable values",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans varname_help
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "where",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "Display stack trace",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans },
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0,
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0,
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans 0
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans }
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans};
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansvoid
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evansrdb_help(const char *topic) {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans int i;
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans if (topic) {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans for (i = 0; htops[i].ht_key; i++) {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans if (strcmp(htops[i].ht_key, topic) == 0) {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans if (htops[i].ht_func)
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans htops[i].ht_func();
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans else
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("no additional help "
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "available for %s\n",
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans htops[i].ht_key);
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans return;
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans }
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans }
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("Help not available for topic: %s\n", topic);
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans }
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("The following commands are available\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans for (i = 0; htops[i].ht_key; i++) {
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("\t%10s\t%s", htops[i].ht_key, htops[i].ht_desc);
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans if (htops[i].ht_func)
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) putchar('*');
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) putchar('\n');
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans }
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans (void) printf("\n(*) more help is available by typing "
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans "'help <topic>'\n\n");
20c1c3551cb3b3117591ae38463d16aada597c48Rod Evans}