DB_COMMAND(9)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1, nixpkgs unstable

πŸ’… DB_COMMAND(9) πŸ’…

okay bestie, welcome to the Kernel Developer's Manual corner where ddb gets its command set extended. This page is all about the DB_* macros that add commands, aliases, and command tables so ddb can do more iconic things. 🫢✨


✨ NAME ✨

DB_COMMAND, DB_COMMAND_FLAGS, DB_SHOW_COMMAND, DB_SHOW_COMMAND_FLAGS, DB_SHOW_ALL_COMMAND, DB_TABLE_COMMAND, DB_TABLE_COMMAND_FLAGS, DB_ALIAS, DB_ALIAS_FLAGS, DB_SHOW_ALIAS, DB_SHOW_ALIAS_FLAGS, DB_SHOW_ALL_ALIAS, DB_TABLE_ALIAS, DB_TABLE_ALIAS_FLAGS DB_DECLARE_TABLE, DB_DEFINE_TABLE, β€” Extends the ddb command set πŸ‘‘

🌸 SYNOPSIS 🌸

#include <ddb/ddb.h>

DB_COMMAND(command_name, command_function);

DB_COMMAND_FLAGS(command_name, command_function, flags);

DB_SHOW_COMMAND(command_name, command_function);

DB_SHOW_COMMAND_FLAGS(command_name, command_function, flags);

DB_SHOW_ALL_COMMAND(command_name, command_function);

DB_TABLE_COMMAND(table, command_name, command_function);

DB_TABLE_COMMAND_FLAGS(table, command_name, command_function, flags);

DB_ALIAS(alias_name, command_function);

DB_ALIAS_FLAGS(alias_name, command_function, flags);

DB_SHOW_ALIAS(alias_name, command_function);

DB_SHOW_ALIAS_FLAGS(alias_name, command_function, flags);

DB_SHOW_ALL_ALIAS(alias_name, command_function);

DB_TABLE_ALIAS(table, alias_name, command_function);

DB_TABLE_ALIAS_FLAGS(table, alias_name, command_function, flags);

DB_DEFINE_TABLE(parent, name, table);

DB_DECLARE_TABLE(table);

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so the big vibe here: these macros are how you extend the ddb command set. They register commands, subcommands, aliases, and whole command tables. Let’s break it down, bestie. πŸ’…

  • DB_COMMAND() β€” adds command_name to the list of top-level commands. Invoking command_name from ddb will call command_function. ✨
  • DB_SHOW_COMMAND() and DB_SHOW_ALL_COMMAND() β€” roughly equivalent to DB_COMMAND(), but in these cases command_name is a sub-command of the ddb show command and show all command, respectively. πŸŽ€
  • DB_TABLE_COMMAND() β€” also similar to DB_COMMAND(), but it adds the new command as a sub-command of the ddb command table. πŸ› οΈ
  • DB_ALIAS(), DB_SHOW_ALIAS(), DB_SHOW_ALL_ALIAS(), and DB_TABLE_ALIAS() β€” register the existing command_function under the alternative command name alias_name. πŸ¦‹
  • The _FLAGS variants of these commands β€” let the programmer specify a value for the flag field of the command structure. The possible flag values are defined alongside struct db_command in <ddb/ddb.h>. πŸ”₯

The general command syntax is command[/modifier] address[,count], and it translates into these parameters for command_function:

  • addr β€” the address passed to the command as an argument. πŸ’–
  • have_addr β€” a boolean value that is true if the addr field is valid. βœ…
  • count β€” the number of quad words starting at offset addr that the command must process. πŸ”’
  • modif β€” a pointer to the string of modifiers. That is, a series of symbols used to pass some options to the command. For example, the examine command will display words in decimal form if it is passed the modifier "d". 🧚

DB_DEFINE_TABLE() β€” adds a new command name as a sub-command of the existing command table parent. The new command defines a table named table which contains sub-commands. New commands and aliases can be added to this table by passing table as the first argument to one of the DB_TABLE_ macros. πŸ‘‘

🌈 EXAMPLES 🌈

In your module, the command is declared as:

DB_COMMAND(mycmd, my_cmd_func)
{
        if (have_addr)
                db_printf("Calling my command with address %p\n", addr);
}

An alias for this command is declared as:

DB_ALIAS(mycmd2, my_cmd_func);

Then, when in ddb:

db> mycmd 0x1000
Calling my command with address 0x1000
db> mycmd2 0x2500
Calling my command with address 0x2500
db>

πŸŽ€ SEE ALSO πŸŽ€

ddb(4) β€” go read it, bestie. πŸ“šπŸ’œ

πŸ’ AUTHORS πŸ’

This manual page was written by Guillaume Ballet <gballet@gmail.com>. Give them their flowers. πŸ’πŸ‘‘


signed off in Debian on July 5, 2023 β€” stay iconic, bestie πŸ’–πŸ’‹

πŸ“¦ where this page comes from