123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- # 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_RESTRICT)
- printf "MOD_RESTRICT "
- end
- if ($arg0->modifiers & MOD_ATOMIC)
- printf "MOD_ATOMIC "
- end
- if ($arg0->modifiers & MOD_SIGNED)
- printf "MOD_SIGNED "
- end
- if ($arg0->modifiers & MOD_UNSIGNED)
- printf "MOD_UNSIGNED "
- 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_TOPLEVEL)
- printf "MOD_TOPLEVEL "
- end
- if ($arg0->modifiers & MOD_ASSIGNED)
- printf "MOD_ASSIGNED "
- 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
|