comparison src/dbxrc @ 337:fbbf69b4e8a7 r21-0-66

Import from CVS: tag r21-0-66
author cvs
date Mon, 13 Aug 2007 10:51:02 +0200
parents e11d67e05968
children cc15677e0335
comparison
equal deleted inserted replaced
336:fe0a93612022 337:fbbf69b4e8a7
21 # Author: Martin Buchholz 21 # Author: Martin Buchholz
22 22
23 # You can use this file to debug XEmacs using Sun WorkShop's dbx. 23 # You can use this file to debug XEmacs using Sun WorkShop's dbx.
24 # Add the contents of this file to $HOME/.dbxrc or 24 # Add the contents of this file to $HOME/.dbxrc or
25 # Source the contents of this file with something like: 25 # Source the contents of this file with something like:
26 # test -r ./dbxrc && . ./dbxrc 26 # if test -r ./dbxrc; then . ./dbxrc; fi
27 27
28 # Some functions defined here require a running process, but most 28 # Some functions defined here require a running process, but most
29 # don't. Considerable effort has been expended to this end. 29 # don't. Considerable effort has been expended to this end.
30 30
31 # See also the comments in gdbinit. 31 # See also the comments in gdbinit.
56 call debug_print ($1); 56 call debug_print ($1);
57 } 57 }
58 58
59 # A bug in dbx prevents string variables from having values beginning with `-'!! 59 # A bug in dbx prevents string variables from having values beginning with `-'!!
60 function XEmacsInit { 60 function XEmacsInit {
61 eval $(echo $(whatis -t `alloc.c`dbg_constants) | \ 61 function ToInt { eval "$1=\$[(int) $1]"; }
62 perl -e 'print "@{[map {s/=(-\d+)/sprintf(q[=0x%x],$1)/oge; /\w+=[0-9a-fx]+/og} <>]}\n"') 62 ToInt dbg_USE_MINIMAL_TAGBITS
63 ToInt dbg_USE_UNION_TYPE
64 ToInt dbg_USE_INDEXED_LRECORD_IMPLEMENTATION
65 ToInt Lisp_Type_Int
66 ToInt Lisp_Type_Char
67 ToInt Lisp_Type_Cons
68 ToInt Lisp_Type_String
69 ToInt Lisp_Type_Vector
70 ToInt Lisp_Type_Symbol
71 ToInt Lisp_Type_Record
72 ToInt dbg_valbits
73 ToInt dbg_gctypebits
74 function ToLong { eval "$1=\$[(unsigned long) $1]"; }
75 ToLong dbg_valmask
76 ToLong dbg_typemask
63 xemacs_initted=yes 77 xemacs_initted=yes
64 #printvar dbg_valbits dbg_valmask
65 } 78 }
66 79
67 function printvar { 80 function printvar {
68 for i in $*; do eval "echo $i=\$$i"; done 81 for i in $*; do eval "echo $i=\$$i"; done
69 } 82 }
74 Defines variables $val, $type and $imp. 87 Defines variables $val, $type and $imp.
75 end 88 end
76 89
77 # Various dbx bugs cause ugliness in following code 90 # Various dbx bugs cause ugliness in following code
78 function decode_object { 91 function decode_object {
79 test -z "$xemacs_initted" && XEmacsInit 92 if test -z "$xemacs_initted"; then XEmacsInit; fi;
80 obj=$[*(void**)(&$1)] 93 if test $dbg_USE_UNION_TYPE = 1; then
81 test "$obj" = "(nil)" && obj="0x0" 94 # Repeat after me... dbx sux, dbx sux, dbx sux...
95 # Allow both `pobj Qnil' and `pobj 0x82746834' to work
96 case $(whatis $1) in
97 *Lisp_Object*) obj="$[(unsigned long)(($1).i)]";;
98 *) obj="$[(unsigned long)($1)]";;
99 esac
100 else
101 obj="$[(unsigned long)($1)]";
102 fi
82 if test $dbg_USE_MINIMAL_TAGBITS = 1; then 103 if test $dbg_USE_MINIMAL_TAGBITS = 1; then
83 if test $[(int)($obj & 1)] = 1; then 104 if test $[(int)($obj & 1)] = 1; then
84 # It's an int 105 # It's an int
85 val=$[(long)(((unsigned long long)$obj) >> 1)] 106 val=$[(long)(((unsigned long long)$obj) >> 1)]
86 type=$dbg_Lisp_Type_Int 107 type=$Lisp_Type_Int
87 else 108 else
88 type=$[(int)(((void*)$obj) & $dbg_typemask)] 109 type=$[(int)(((void*)$obj) & $dbg_typemask)]
89 if test $type = $dbg_Lisp_Type_Char; then 110 if test $type = $Lisp_Type_Char; then
90 val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)] 111 val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)]
91 else 112 else
92 # It's a record pointer 113 # It's a record pointer
93 val=$[(void*)$obj] 114 val=$[(void*)$obj]
115 if test "$val" = "(nil)"; then type=null_pointer; fi
94 fi 116 fi
95 fi 117 fi
96 else 118 else
97 # not dbg_USE_MINIMAL_TAGBITS 119 # not dbg_USE_MINIMAL_TAGBITS
98 val=$[(void*)($obj & $dbg_valmask)]
99 test "$val" = "(nil)" && val="0x0"
100 type=$[(int)(((unsigned long long)($obj & $dbg_typemask)) >> ($dbg_valbits + 1))] 120 type=$[(int)(((unsigned long long)($obj & $dbg_typemask)) >> ($dbg_valbits + 1))]
101 fi 121 if test "$type" = $Lisp_Type_Int; then
102 122 val=$[(int)($obj & $dbg_valmask)]
103 if test $type = $dbg_Lisp_Type_Record; then 123 elif test "$type" = $Lisp_Type_Char; then
124 val=$[(int)($obj & $dbg_valmask)]
125 else
126 val=$[(void*)($obj & $dbg_valmask)]
127 if test "$val" = "(nil)"; then type=null_pointer; fi
128 fi
129 #val=$[(void*)($obj & $dbg_valmask)]
130 #printvar val type obj
131 fi
132
133 if test $type = $Lisp_Type_Record; then
104 typeset lheader="((struct lrecord_header *) $val)" 134 typeset lheader="((struct lrecord_header *) $val)"
105 if test $dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 1; then 135 if test $dbg_USE_INDEXED_LRECORD_IMPLEMENTATION = 1; then
106 imp=$[(void*)(lrecord_implementations_table[$lheader->type])] 136 imp=$[(void*)(lrecord_implementations_table[$lheader->type])]
107 else 137 else
108 imp=$[(void*)($lheader->implementation)] 138 imp=$[(void*)($lheader->implementation)]
109 fi 139 fi
110 else 140 else
111 imp="0xdeadbeef" 141 imp="0xdeadbeef"
112 fi 142 fi
113 #printvar obj val type imp 143 # printvar obj val type imp
114 } 144 }
115 145
116 function xint { 146 function xint {
117 decode_object "$*" 147 decode_object "$*"
118 print (long) ($val) 148 print (long) ($val)
119 } 149 }
120 150
121 function xtype { 151 function xtype {
122 decode_object "$*" 152 decode_object "$*"
123 if test $type = $dbg_Lisp_Type_Int; then echo "int" 153 if test $type = $Lisp_Type_Int; then echo "int"
124 elif test $type = $dbg_Lisp_Type_Char; then echo "char" 154 elif test $type = $Lisp_Type_Char; then echo "char"
125 elif test $type = $dbg_Lisp_Type_Symbol; then echo "symbol" 155 elif test $type = $Lisp_Type_Symbol; then echo "symbol"
126 elif test $type = $dbg_Lisp_Type_String; then echo "string" 156 elif test $type = $Lisp_Type_String; then echo "string"
127 elif test $type = $dbg_Lisp_Type_Vector; then echo "vector" 157 elif test $type = $Lisp_Type_Vector; then echo "vector"
128 elif test $type = $dbg_Lisp_Type_Cons; then echo "cons" 158 elif test $type = $Lisp_Type_Cons; then echo "cons"
159 elif test $type = null_pointer; then echo "null_pointer"
129 else 160 else
130 echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]" 161 echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]"
131 fi 162 fi
163 }
164
165 function lisp-shadows {
166 run -batch -vanilla -f list-load-path-shadows
167 }
168
169 function environment-to-run-temacs {
170 unset EMACSLOADPATH
171 export EMACSBOOTSTRAPLOADPATH=../lisp/:..
172 export EMACSBOOTSTRAPMODULEPATH=../modules/:..
132 } 173 }
133 174
134 document run-temacs << 'end' 175 document run-temacs << 'end'
135 Usage: run-temacs 176 Usage: run-temacs
136 Run temacs interactively, like xemacs. 177 Run temacs interactively, like xemacs.
137 Use this with debugging tools (like purify) that cannot deal with dumping, 178 Use this with debugging tools (like purify) that cannot deal with dumping,
138 or when temacs builds successfully, but xemacs does not. 179 or when temacs builds successfully, but xemacs does not.
139 end 180 end
140 181
141 function run-temacs { 182 function run-temacs {
142 unset EMACSLOADPATH 183 environment-to-run-temacs
143 export EMACSBOOTSTRAPLOADPATH=../lisp/:..
144 run -batch -l ../lisp/loadup.el run-temacs -q 184 run -batch -l ../lisp/loadup.el run-temacs -q
145 } 185 }
146 186
147 document update-elc << 'end' 187 document update-elc << 'end'
148 Usage: update-elc 188 Usage: update-elc
150 Use when debugging temacs, not xemacs! 190 Use when debugging temacs, not xemacs!
151 Use this when temacs builds successfully, but xemacs does not. 191 Use this when temacs builds successfully, but xemacs does not.
152 end 192 end
153 193
154 function update-elc { 194 function update-elc {
155 unset EMACSLOADPATH 195 environment-to-run-temacs
156 export EMACSBOOTSTRAPLOADPATH=../lisp/:..
157 run -batch -l ../lisp/update-elc.el 196 run -batch -l ../lisp/update-elc.el
158 } 197 }
159 198
160 199
161 function dump-temacs { 200 function dump-temacs {
162 unset EMACSLOADPATH 201 environment-to-run-temacs
163 export EMACSBOOTSTRAPLOADPATH=../lisp/:..
164 run -batch -l ../lisp/loadup.el dump 202 run -batch -l ../lisp/loadup.el dump
165 } 203 }
166 204
167 document dump-temacs << 'end' 205 document dump-temacs << 'end'
168 Usage: dump-temacs 206 Usage: dump-temacs
186 Print the internal C structure of a underlying Lisp Object. 224 Print the internal C structure of a underlying Lisp Object.
187 end 225 end
188 226
189 function pobj { 227 function pobj {
190 decode_object $1 228 decode_object $1
191 if test $type = $dbg_Lisp_Type_Int; then 229 if test $type = $Lisp_Type_Int; then
192 print -f"Integer: %d" $val 230 print -f"Integer: %d" $val
193 elif test $type = $dbg_Lisp_Type_Char; then 231 elif test $type = $Lisp_Type_Char; then
194 if $val < 128; then 232 if test $[$val > 32 && $val < 128] = 1; then
195 print -f"Char: %c" $val 233 print -f"Char: %c" $val
196 else 234 else
197 print -f"Char: %d" $val 235 print -f"Char: %d" $val
198 fi 236 fi
199 elif test $type = $dbg_Lisp_Type_String || lrecord_type_p string; then 237 elif test $type = $Lisp_Type_String || lrecord_type_p string; then
200 pstruct Lisp_String 238 pstruct Lisp_String
201 elif test $type = $dbg_Lisp_Type_Cons || lrecord_type_p cons; then 239 elif test $type = $Lisp_Type_Cons || lrecord_type_p cons; then
202 pstruct Lisp_Cons 240 pstruct Lisp_Cons
203 elif test $type = $dbg_Lisp_Type_Symbol || lrecord_type_p symbol; then 241 elif test $type = $Lisp_Type_Symbol || lrecord_type_p symbol; then
204 pstruct Lisp_Symbol 242 pstruct Lisp_Symbol
205 echo "Symbol name: $[(char *)($xstruct->name->_data)]" 243 echo "Symbol name: $[(char *)($xstruct->name->_data)]"
206 elif test $type = $dbg_Lisp_Type_Vector || lrecord_type_p vector; then 244 elif test $type = $Lisp_Type_Vector || lrecord_type_p vector; then
207 pstruct Lisp_Vector 245 pstruct Lisp_Vector
208 echo "Vector of length $[$xstruct->size]" 246 echo "Vector of length $[$xstruct->size]"
209 elif lrecord_type_p bit_vector; then 247 elif lrecord_type_p bit_vector; then
210 pstruct Lisp_Bit_Vector 248 pstruct Lisp_Bit_Vector
211 elif lrecord_type_p buffer; then 249 elif lrecord_type_p buffer; then
225 elif lrecord_type_p compiled_function; then 263 elif lrecord_type_p compiled_function; then
226 pstruct Lisp_Compiled_Function 264 pstruct Lisp_Compiled_Function
227 elif lrecord_type_p console; then 265 elif lrecord_type_p console; then
228 pstruct console 266 pstruct console
229 elif lrecord_type_p database; then 267 elif lrecord_type_p database; then
230 pstruct database 268 pstruct Lisp_Database
231 elif lrecord_type_p device; then 269 elif lrecord_type_p device; then
232 pstruct device 270 pstruct device
233 elif lrecord_type_p event; then 271 elif lrecord_type_p event; then
234 pstruct Lisp_Event 272 pstruct Lisp_Event
235 elif lrecord_type_p extent; then 273 elif lrecord_type_p extent; then
247 elif lrecord_type_p frame; then 285 elif lrecord_type_p frame; then
248 pstruct frame 286 pstruct frame
249 elif lrecord_type_p glyph; then 287 elif lrecord_type_p glyph; then
250 pstruct Lisp_Glyph 288 pstruct Lisp_Glyph
251 elif lrecord_type_p hashtable; then 289 elif lrecord_type_p hashtable; then
252 pstruct hashtable 290 pstruct Lisp_Hash_Table
253 elif lrecord_type_p image_instance; then 291 elif lrecord_type_p image_instance; then
254 pstruct Lisp_Image_Instance 292 pstruct Lisp_Image_Instance
255 elif lrecord_type_p keymap; then 293 elif lrecord_type_p keymap; then
256 pstruct keymap 294 pstruct Lisp_Keymap
257 elif lrecord_type_p lcrecord_list; then 295 elif lrecord_type_p lcrecord_list; then
258 pstruct lcrecord_list 296 pstruct lcrecord_list
259 elif lrecord_type_p lstream; then 297 elif lrecord_type_p lstream; then
260 pstruct lstream 298 pstruct lstream
261 elif lrecord_type_p marker; then 299 elif lrecord_type_p marker; then
292 pstruct weak_list 330 pstruct weak_list
293 elif lrecord_type_p window; then 331 elif lrecord_type_p window; then
294 pstruct window 332 pstruct window
295 elif lrecord_type_p window_configuration; then 333 elif lrecord_type_p window_configuration; then
296 pstruct window_config 334 pstruct window_config
335 elif test "$type" = "null_pointer"; then
336 echo "Lisp Object is a null pointer!!"
297 else 337 else
298 echo "Unknown Lisp Object type" 338 echo "Unknown Lisp Object type"
299 print $1 339 print $1
300 fi 340 fi
301 } 341 }
305 ldp "(`process.c`struct Lisp_Process*)$1->name" ; 345 ldp "(`process.c`struct Lisp_Process*)$1->name" ;
306 ldp "(`process.c`struct Lisp_Process*)$1->command" ; 346 ldp "(`process.c`struct Lisp_Process*)$1->command" ;
307 } 347 }
308 348
309 dbxenv suppress_startup_message 4.0 349 dbxenv suppress_startup_message 4.0
350 dbxenv mt_watchpoints on
310 351
311 function dp_core { 352 function dp_core {
312 print ((struct x_frame *)(((struct frame*)(Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget->core 353 print ((struct x_frame *)(((struct frame*)(Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget->core
313 } 354 }
314 355
315 # Barf! 356 # Barf!
316 function print_shell { 357 function print_shell {
317 print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget) 358 print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget)
318 } 359 }
360
361 # -------------------------------------------------------------
362 # functions to test the debugging support itself.
363 # If you change this file, make sure the following still work...
364 # -------------------------------------------------------------
365 function test_xtype {
366 function doit { echo -n "$1: "; xtype "$1"; }
367 test_various_objects
368 }
369
370 function test_pobj {
371 function doit { echo '==============================='; echo -n "$1: "; pobj "$1"; }
372 test_various_objects
373 }
374
375 function test_various_objects {
376 doit Vemacs_major_version
377 doit Vhelp_char
378 doit Qnil
379 doit Qunbound
380 doit Vobarray
381 doit Vall_weak_lists
382 doit Vxemacs_codename
383 }