1 2# Don't forget to rebuild sparse with uncommented debug options 3# in the Makefile. Also, gcc 3 is known to screw up with the 4# cpp macros in the debugging info. 5 6 7# If a gdb_show_* function is running at a non-zero recursion 8# level, only a short summary is shown, preventing further 9# recursion. Also note that gdb has only one, global, scope 10# for variables, so we need to be careful with recursions. 11 12 13set $showing_token = 0 14set $showing_ident = 0 15set $showing_symbol = 0 16 17set $ntabs = 0 18 19define gdb_tabs 20 set $tmp = $ntabs 21 while ($tmp--) 22 printf "\t" 23 end 24end 25 26 27# Ptr list handling 28define ptr_entry 29 set $ptr = $arg0 30 set $index = $arg1 31 set $entry = &($arg2) 32 33 set *($entry) = (void *) (~3UL & (unsigned long)$ptr->list[$index]) 34end 35 36 37# Ptr list looping skeleton 38define gdb_ptr_list_for_each 39 40 set $my_head = (struct ptr_list *) $arg0 41 set $my_list = $my_head 42 43 44 if ($my_head) 45 while (1) 46 set $my_nr = 0 47 while ($my_nr < $my_list->nr) 48 49 # Put your iterator code here 50 set $my_nr++ 51 end 52 53 if (($my_list = $my_list->next) == $my_head) 54 loop_break 55 end 56 end 57 end 58end 59 60# Show symbols in a symbol_list. Non-recursive 61define gdb_ptr_list_for_each_show_symbol 62 63 set $my_head = (struct ptr_list *) $arg0 64 set $my_list = $my_head 65 66 67 if ($my_head) 68 while (1) 69 set $my_nr = 0 70 while ($my_nr < ($my_list)->nr) 71 set $my_symbol = (struct symbol *) ((~3UL) & (unsigned long)($my_list)->list[$my_nr]) 72 gdb_show_symbol($my_symbol) 73 74 set $my_nr++ 75 end 76 77 set $my_list = ($my_list)->next 78 if ($my_list == $my_head) 79 loop_break 80 end 81 end 82 end 83end 84 85 86#define gdb_show_statement 87 88 89# Recursive 90define gdb_show_ctype 91 printf "modifiers: " 92 if ($arg0->modifiers & MOD_AUTO) 93 printf "MOD_AUTO " 94 end 95 if ($arg0->modifiers & MOD_REGISTER) 96 printf "MOD_REGISTER " 97 end 98 if ($arg0->modifiers & MOD_STATIC) 99 printf "MOD_STATIC " 100 end 101 if ($arg0->modifiers & MOD_EXTERN) 102 printf "MOD_EXTERN " 103 end 104 if ($arg0->modifiers & MOD_CONST) 105 printf "MOD_CONST " 106 end 107 if ($arg0->modifiers & MOD_VOLATILE) 108 printf "MOD_VOLATILE " 109 end 110 if ($arg0->modifiers & MOD_SIGNED) 111 printf "MOD_SIGNED " 112 end 113 if ($arg0->modifiers & MOD_UNSIGNED) 114 printf "MOD_UNSIGNED " 115 end 116 if ($arg0->modifiers & MOD_CHAR) 117 printf "MOD_CHAR " 118 end 119 if ($arg0->modifiers & MOD_SHORT) 120 printf "MOD_SHORT " 121 end 122 if ($arg0->modifiers & MOD_LONG) 123 printf "MOD_LONG " 124 end 125 if ($arg0->modifiers & MOD_LONGLONG) 126 printf "MOD_LONGLONG " 127 end 128 if ($arg0->modifiers & MOD_LONGLONGLONG) 129 printf "MOD_LONGLONGLONG " 130 end 131 if ($arg0->modifiers & MOD_TYPEDEF) 132 printf "MOD_TYPEDEF " 133 end 134 if ($arg0->modifiers & MOD_INLINE) 135 printf "MOD_INLINE " 136 end 137 if ($arg0->modifiers & MOD_ADDRESSABLE) 138 printf "MOD_ADDRESSABLE " 139 end 140 if ($arg0->modifiers & MOD_NOCAST) 141 printf "MOD_NOCAST " 142 end 143 if ($arg0->modifiers & MOD_NODEREF) 144 printf "MOD_NODEREF " 145 end 146 if ($arg0->modifiers & MOD_ACCESSED) 147 printf "MOD_ACCESSED " 148 end 149 if ($arg0->modifiers & MOD_TOPLEVEL) 150 printf "MOD_TOPLEVEL " 151 end 152 if ($arg0->modifiers & MOD_ASSIGNED) 153 printf "MOD_ASSIGNED " 154 end 155 if ($arg0->modifiers & MOD_TYPE) 156 printf "MOD_TYPE " 157 end 158 if ($arg0->modifiers & MOD_SAFE) 159 printf "MOD_SAFE " 160 end 161 if ($arg0->modifiers & MOD_USERTYPE) 162 printf "MOD_USERTYPE " 163 end 164 if ($arg0->modifiers & MOD_EXPLICITLY_SIGNED) 165 printf "MOD_EXPLICITLY_SIGNED" 166 end 167 if ($arg0->modifiers & MOD_BITWISE) 168 printf "MOD_BITWISE " 169 end 170 if (!$arg0->modifiers) 171 printf "0" 172 end 173 174 printf ", alignment = %d", $arg0->alignment 175 if ($arg0->as) 176 printf ", address_space = %d", $arg0->as 177 end 178 printf "\n" 179 180 181 set $ntabs++ 182 if ($arg0->base_type) 183 gdb_tabs 184 printf "base_type = " 185 gdb_show_symbol($arg0->base_type) 186 end 187 188 set $ntabs-- 189 190 191end 192 193define gdb_show_symbol 194 printf "(%x) type = ", $arg0 195 output $arg0->type 196 printf ", namespace = " 197 output $arg0->namespace 198 if ($arg0->ident) 199 printf ", ident = %s\n", show_ident($arg0->ident) 200 else 201 printf ", ident = NULL\n" 202 end 203 204# print "zz" 205 206 gdb_tabs 207 printf "dump:\n" 208 call show_symbol($arg0) 209 210 set $ntabs++ 211 if ($arg0->namespace == NS_SYMBOL) 212 gdb_tabs 213 printf "ctype = " 214 gdb_show_ctype(&($arg0->ctype)) 215 end 216 set $ntabs-- 217end 218 219 220# non-recursive 221define gdb_show_symbols_next_id 222 set $sym = $arg0 223 printf "{\n" 224 set $ntabs++ 225 while ($sym) 226 gdb_tabs 227 printf "symbol = " 228 gdb_show_symbol($sym) 229 set $sym = $sym->next_id 230 end 231 set $ntabs-- 232 gdb_tabs 233 printf "}\n" 234end 235 236define gdb_show_ident 237 if ($arg0) 238 printf "(%p) '%s'\n", $arg0, show_ident($arg0) 239 else 240 printf "NULL\n" 241 end 242 243 if (! $showing_ident) 244 set $showing_ident = 1 245 set $ntabs++ 246 247 set $ident = $arg0 248 249 if ($ident->symbols) 250 gdb_tabs 251 printf "symbols = " 252 gdb_show_symbols_next_id($ident->symbols) 253 end 254 255 set $ntabs-- 256 set $showing_ident = 0 257 end 258end 259 260define gdb_show_token 261 printf "%p: '%s', type = ", $arg0, show_token($arg0) 262 output (enum token_type) ($arg0)->pos.type 263 printf "\n" 264 265 if (! $showing_token) 266 set $showing_token = 1 267 set $ntabs++ 268 269 set $token = $arg0 270 271 if ($token->pos.type == TOKEN_IDENT) 272 gdb_tabs 273 printf "ident = " 274 gdb_show_ident $token.ident 275 end 276 277 if ($token->pos.type == TOKEN_MACRO_ARGUMENT) 278 gdb_tabs 279 printf "argnum = %d\n", $token->argnum 280 end 281 282 if ($token->pos.type == TOKEN_SPECIAL) 283 gdb_tabs 284 printf "special = \"%s\"\n", show_special($token.special) 285 end 286 287 set $ntabs-- 288 set $showing_token = 0 289 end 290end 291 292# non-recursive 293define gdb_show_tokens 294 set $t = $arg0 295 printf "{\n" 296 set $ntabs++ 297 while ($t != &eof_token_entry) 298 gdb_tabs 299 printf "token = " 300 gdb_show_token($t) 301 set $t = ($t)->next 302 end 303 set $ntabs-- 304 gdb_tabs 305 printf "}\n" 306end 307 308