| |
| # Don't forget to rebuild sparse with uncommented debug options |
| # in the Makefile. Also, gcc 3 is known to screw up with the |
| # cpp macros in the debugging info. |
| |
| |
| # If a gdb_show_* function is running at a non-zero recursion |
| # level, only a short summary is shown, preventing further |
| # recursion. Also note that gdb has only one, global, scope |
| # for variables, so we need to be careful with recursions. |
| |
| |
| set $showing_token = 0 |
| set $showing_ident = 0 |
| set $showing_symbol = 0 |
| |
| set $ntabs = 0 |
| |
| define gdb_tabs |
| set $tmp = $ntabs |
| while ($tmp--) |
| printf "\t" |
| end |
| end |
| |
| |
| # Ptr list handling |
| define ptr_entry |
| set $ptr = $arg0 |
| set $index = $arg1 |
| set $entry = &($arg2) |
| |
| set *($entry) = (void *) (~3UL & (unsigned long)$ptr->list[$index]) |
| end |
| |
| |
| # Ptr list looping skeleton |
| define gdb_ptr_list_for_each |
| |
| set $my_head = (struct ptr_list *) $arg0 |
| set $my_list = $my_head |
| |
| |
| if ($my_head) |
| while (1) |
| set $my_nr = 0 |
| while ($my_nr < $my_list->nr) |
| |
| # Put your iterator code here |
| set $my_nr++ |
| end |
| |
| if (($my_list = $my_list->next) == $my_head) |
| loop_break |
| end |
| end |
| end |
| end |
| |
| # Show symbols in a symbol_list. Non-recursive |
| define gdb_ptr_list_for_each_show_symbol |
| |
| set $my_head = (struct ptr_list *) $arg0 |
| set $my_list = $my_head |
| |
| |
| if ($my_head) |
| while (1) |
| set $my_nr = 0 |
| while ($my_nr < ($my_list)->nr) |
| set $my_symbol = (struct symbol *) ((~3UL) & (unsigned long)($my_list)->list[$my_nr]) |
| gdb_show_symbol($my_symbol) |
| |
| set $my_nr++ |
| end |
| |
| set $my_list = ($my_list)->next |
| if ($my_list == $my_head) |
| loop_break |
| end |
| end |
| end |
| end |
| |
| |
| #define gdb_show_statement |
| |
| |
| # Recursive |
| define gdb_show_ctype |
| printf "modifiers: " |
| if ($arg0->modifiers & MOD_AUTO) |
| printf "MOD_AUTO " |
| end |
| if ($arg0->modifiers & MOD_REGISTER) |
| printf "MOD_REGISTER " |
| end |
| if ($arg0->modifiers & MOD_STATIC) |
| printf "MOD_STATIC " |
| end |
| if ($arg0->modifiers & MOD_EXTERN) |
| printf "MOD_EXTERN " |
| end |
| if ($arg0->modifiers & MOD_CONST) |
| printf "MOD_CONST " |
| end |
| if ($arg0->modifiers & MOD_VOLATILE) |
| printf "MOD_VOLATILE " |
| end |
| if ($arg0->modifiers & MOD_SIGNED) |
| printf "MOD_SIGNED " |
| end |
| if ($arg0->modifiers & MOD_UNSIGNED) |
| printf "MOD_UNSIGNED " |
| end |
| if ($arg0->modifiers & MOD_CHAR) |
| printf "MOD_CHAR " |
| end |
| if ($arg0->modifiers & MOD_SHORT) |
| printf "MOD_SHORT " |
| end |
| if ($arg0->modifiers & MOD_LONG) |
| printf "MOD_LONG " |
| end |
| if ($arg0->modifiers & MOD_LONGLONG) |
| printf "MOD_LONGLONG " |
| end |
| if ($arg0->modifiers & MOD_LONGLONGLONG) |
| printf "MOD_LONGLONGLONG " |
| end |
| if ($arg0->modifiers & MOD_TYPEDEF) |
| printf "MOD_TYPEDEF " |
| end |
| if ($arg0->modifiers & MOD_INLINE) |
| printf "MOD_INLINE " |
| end |
| if ($arg0->modifiers & MOD_ADDRESSABLE) |
| printf "MOD_ADDRESSABLE " |
| end |
| if ($arg0->modifiers & MOD_NOCAST) |
| printf "MOD_NOCAST " |
| end |
| if ($arg0->modifiers & MOD_NODEREF) |
| printf "MOD_NODEREF " |
| end |
| if ($arg0->modifiers & MOD_ACCESSED) |
| printf "MOD_ACCESSED " |
| end |
| if ($arg0->modifiers & MOD_TOPLEVEL) |
| printf "MOD_TOPLEVEL " |
| end |
| if ($arg0->modifiers & MOD_ASSIGNED) |
| printf "MOD_ASSIGNED " |
| end |
| if ($arg0->modifiers & MOD_TYPE) |
| printf "MOD_TYPE " |
| end |
| if ($arg0->modifiers & MOD_SAFE) |
| printf "MOD_SAFE " |
| end |
| if ($arg0->modifiers & MOD_USERTYPE) |
| printf "MOD_USERTYPE " |
| end |
| if ($arg0->modifiers & MOD_EXPLICITLY_SIGNED) |
| printf "MOD_EXPLICITLY_SIGNED" |
| end |
| if ($arg0->modifiers & MOD_BITWISE) |
| printf "MOD_BITWISE " |
| end |
| if (!$arg0->modifiers) |
| printf "0" |
| end |
| |
| printf ", alignment = %d", $arg0->alignment |
| if ($arg0->as) |
| printf ", address_space = %d", $arg0->as |
| end |
| printf "\n" |
| |
| |
| set $ntabs++ |
| if ($arg0->base_type) |
| gdb_tabs |
| printf "base_type = " |
| gdb_show_symbol($arg0->base_type) |
| end |
| |
| set $ntabs-- |
| |
| |
| end |
| |
| define gdb_show_symbol |
| printf "(%x) type = ", $arg0 |
| output $arg0->type |
| printf ", namespace = " |
| output $arg0->namespace |
| if ($arg0->ident) |
| printf ", ident = %s\n", show_ident($arg0->ident) |
| else |
| printf ", ident = NULL\n" |
| end |
| |
| # print "zz" |
| |
| gdb_tabs |
| printf "dump:\n" |
| call show_symbol($arg0) |
| |
| set $ntabs++ |
| if ($arg0->namespace == NS_SYMBOL) |
| gdb_tabs |
| printf "ctype = " |
| gdb_show_ctype(&($arg0->ctype)) |
| end |
| set $ntabs-- |
| end |
| |
| |
| # non-recursive |
| define gdb_show_symbols_next_id |
| set $sym = $arg0 |
| printf "{\n" |
| set $ntabs++ |
| while ($sym) |
| gdb_tabs |
| printf "symbol = " |
| gdb_show_symbol($sym) |
| set $sym = $sym->next_id |
| end |
| set $ntabs-- |
| gdb_tabs |
| printf "}\n" |
| end |
| |
| define gdb_show_ident |
| if ($arg0) |
| printf "(%p) '%s'\n", $arg0, show_ident($arg0) |
| else |
| printf "NULL\n" |
| end |
| |
| if (! $showing_ident) |
| set $showing_ident = 1 |
| set $ntabs++ |
| |
| set $ident = $arg0 |
| |
| if ($ident->symbols) |
| gdb_tabs |
| printf "symbols = " |
| gdb_show_symbols_next_id($ident->symbols) |
| end |
| |
| set $ntabs-- |
| set $showing_ident = 0 |
| end |
| end |
| |
| define gdb_show_token |
| printf "%p: '%s', type = ", $arg0, show_token($arg0) |
| output (enum token_type) ($arg0)->pos.type |
| printf "\n" |
| |
| if (! $showing_token) |
| set $showing_token = 1 |
| set $ntabs++ |
| |
| set $token = $arg0 |
| |
| if ($token->pos.type == TOKEN_IDENT) |
| gdb_tabs |
| printf "ident = " |
| gdb_show_ident $token.ident |
| end |
| |
| if ($token->pos.type == TOKEN_MACRO_ARGUMENT) |
| gdb_tabs |
| printf "argnum = %d\n", $token->argnum |
| end |
| |
| if ($token->pos.type == TOKEN_SPECIAL) |
| gdb_tabs |
| printf "special = \"%s\"\n", show_special($token.special) |
| end |
| |
| set $ntabs-- |
| set $showing_token = 0 |
| end |
| end |
| |
| # non-recursive |
| define gdb_show_tokens |
| set $t = $arg0 |
| printf "{\n" |
| set $ntabs++ |
| while ($t != &eof_token_entry) |
| gdb_tabs |
| printf "token = " |
| gdb_show_token($t) |
| set $t = ($t)->next |
| end |
| set $ntabs-- |
| gdb_tabs |
| printf "}\n" |
| end |
| |