Commit | Line | Data |
---|---|---|
aaef169d | 1 | # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, |
5df4f04c | 2 | # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
0d5f855c | 3 | # Free Software Foundation, Inc. |
e3efab9c GM |
4 | # |
5 | # This file is part of GNU Emacs. | |
6 | # | |
7 | # GNU Emacs is free software; you can redistribute it and/or modify | |
8 | # it under the terms of the GNU General Public License as published by | |
684d6f5b | 9 | # the Free Software Foundation; either version 3, or (at your option) |
e3efab9c GM |
10 | # any later version. |
11 | # | |
12 | # GNU Emacs is distributed in the hope that it will be useful, | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | # GNU General Public License for more details. | |
16 | # | |
17 | # You should have received a copy of the GNU General Public License | |
18 | # along with GNU Emacs; see the file COPYING. If not, write to the | |
4fc5845f LK |
19 | # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
20 | # Boston, MA 02110-1301, USA. | |
e3efab9c | 21 | |
7faa0236 RS |
22 | # Force loading of symbols, enough to give us gdb_valbits etc. |
23 | set main | |
24 | ||
39d10e52 RS |
25 | # Find lwlib source files too. |
26 | dir ../lwlib | |
892d8fcd | 27 | #dir /gd/gnu/lesstif-0.89.9/lib/Xm |
39d10e52 | 28 | |
056515d8 KH |
29 | # Don't enter GDB when user types C-g to quit. |
30 | # This has one unfortunate effect: you can't type C-c | |
31 | # at the GDB to stop Emacs, when using X. | |
32 | # However, C-z works just as well in that case. | |
33 | handle 2 noprint pass | |
34 | ||
19b9d1de NR |
35 | # Make it work like SIGINT normally does. |
36 | handle SIGTSTP nopass | |
37 | ||
6a7d16fe KS |
38 | # Pass on user signals |
39 | handle SIGUSR1 noprint pass | |
40 | handle SIGUSR2 noprint pass | |
41 | ||
3266f62b GM |
42 | # Don't pass SIGALRM to Emacs. This makes problems when |
43 | # debugging. | |
44 | handle SIGALRM ignore | |
45 | ||
0e73312b | 46 | # $valmask and $tagmask are mask values set up by the xreload macro below. |
6b61353c | 47 | |
0e73312b RS |
48 | # Use $bugfix so that the value isn't a constant. |
49 | # Using a constant runs into GDB bugs sometimes. | |
6b61353c | 50 | define xgetptr |
0e73312b | 51 | set $bugfix = $arg0 |
cf07311b | 52 | set $ptr = (gdb_use_union ? (gdb_use_lsb ? $bugfix.u.val << gdb_gctypebits : $bugfix.u.val) : $bugfix & $valmask) | gdb_data_seg_bits |
6b61353c KH |
53 | end |
54 | ||
55 | define xgetint | |
0e73312b RS |
56 | set $bugfix = $arg0 |
57 | set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits | |
6b61353c KH |
58 | end |
59 | ||
60 | define xgettype | |
0e73312b RS |
61 | set $bugfix = $arg0 |
62 | set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits) | |
6b61353c | 63 | end |
b74f15c6 | 64 | |
a6ffc6a2 | 65 | # Set up something to print out s-expressions. |
4fccedb5 EZ |
66 | # We save and restore print_output_debug_flag to prevent the w32 port |
67 | # from calling OutputDebugString, which causes GDB to display each | |
68 | # character twice (yuk!). | |
a6ffc6a2 | 69 | define pr |
4fccedb5 EZ |
70 | set $output_debug = print_output_debug_flag |
71 | set print_output_debug_flag = 0 | |
6b61353c | 72 | set debug_print ($) |
4fccedb5 | 73 | set print_output_debug_flag = $output_debug |
a6ffc6a2 | 74 | end |
a6ffc6a2 JB |
75 | document pr |
76 | Print the emacs s-expression which is $. | |
77 | Works only when an inferior emacs is executing. | |
78 | end | |
79 | ||
6c5d0c52 KS |
80 | # Print out s-expressions |
81 | define pp | |
82 | set $tmp = $arg0 | |
4fccedb5 EZ |
83 | set $output_debug = print_output_debug_flag |
84 | set print_output_debug_flag = 0 | |
1609a963 | 85 | set safe_debug_print ($tmp) |
4fccedb5 | 86 | set print_output_debug_flag = $output_debug |
6c5d0c52 KS |
87 | end |
88 | document pp | |
89 | Print the argument as an emacs s-expression | |
90 | Works only when an inferior emacs is executing. | |
91 | end | |
92 | ||
8a386286 NR |
93 | # Print out s-expressions from tool bar |
94 | define pp1 | |
95 | set $tmp = $arg0 | |
4fccedb5 EZ |
96 | set $output_debug = print_output_debug_flag |
97 | set print_output_debug_flag = 0 | |
1609a963 | 98 | set safe_debug_print ($tmp) |
4fccedb5 | 99 | set print_output_debug_flag = $output_debug |
8a386286 NR |
100 | end |
101 | document pp1 | |
5cd35d2c | 102 | Print the argument as an emacs s-expression. |
8a386286 NR |
103 | Works only when an inferior emacs is executing. |
104 | For use on tool bar when debugging in Emacs | |
105 | where the variable name would not otherwise | |
106 | be recorded in the GUD buffer. | |
107 | end | |
108 | ||
1609a963 KS |
109 | # Print value of lisp variable |
110 | define pv | |
111 | set $tmp = "$arg0" | |
4fccedb5 EZ |
112 | set $output_debug = print_output_debug_flag |
113 | set print_output_debug_flag = 0 | |
1609a963 | 114 | set safe_debug_print ( find_symbol_value (intern ($tmp))) |
4fccedb5 | 115 | set print_output_debug_flag = $output_debug |
1609a963 KS |
116 | end |
117 | document pv | |
118 | Print the value of the lisp variable given as argument. | |
119 | Works only when an inferior emacs is executing. | |
120 | end | |
121 | ||
122 | # Print value of lisp variable | |
123 | define pv1 | |
124 | set $tmp = "$arg0" | |
4fccedb5 EZ |
125 | set $output_debug = print_output_debug_flag |
126 | set print_output_debug_flag = 0 | |
1609a963 | 127 | set safe_debug_print (find_symbol_value (intern ($tmp))) |
4fccedb5 | 128 | set print_output_debug_flag = $output_debug |
1609a963 KS |
129 | end |
130 | document pv1 | |
131 | Print the value of the lisp variable given as argument. | |
132 | Works only when an inferior emacs is executing. | |
5cd35d2c NR |
133 | For use when debugging in Emacs where the variable |
134 | name would not otherwise be recorded in the GUD buffer. | |
1609a963 KS |
135 | end |
136 | ||
decf4020 KS |
137 | # Print out current buffer point and boundaries |
138 | define ppt | |
139 | set $b = current_buffer | |
140 | set $t = $b->text | |
141 | printf "BUF PT: %d", $b->pt | |
142 | if ($b->pt != $b->pt_byte) | |
143 | printf "[%d]", $b->pt_byte | |
144 | end | |
145 | printf " of 1..%d", $t->z | |
146 | if ($t->z != $t->z_byte) | |
147 | printf "[%d]", $t->z_byte | |
148 | end | |
149 | if ($b->begv != 1 || $b->zv != $t->z) | |
150 | printf " NARROW=%d..%d", $b->begv, $b->zv | |
151 | if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte) | |
152 | printf " [%d..%d]", $b->begv_byte, $b->zv_byte | |
153 | end | |
154 | end | |
155 | printf " GAP: %d", $t->gpt | |
156 | if ($t->gpt != $t->gpt_byte) | |
157 | printf "[%d]", $t->gpt_byte | |
158 | end | |
159 | printf " SZ=%d\n", $t->gap_size | |
160 | end | |
161 | document ppt | |
2d5ed88d EZ |
162 | Print current buffer's point and boundaries. |
163 | Prints values of point, beg, end, narrow, and gap for current buffer. | |
decf4020 KS |
164 | end |
165 | ||
be996d82 EZ |
166 | define pitmethod |
167 | set $itmethod = $arg0 | |
168 | # output $itmethod | |
169 | if ($itmethod == 0) | |
170 | printf "GET_FROM_BUFFER" | |
171 | end | |
172 | if ($itmethod == 1) | |
173 | printf "GET_FROM_DISPLAY_VECTOR" | |
174 | end | |
175 | if ($itmethod == 2) | |
176 | printf "GET_FROM_STRING" | |
177 | end | |
178 | if ($itmethod == 3) | |
179 | printf "GET_FROM_C_STRING" | |
180 | end | |
181 | if ($itmethod == 4) | |
182 | printf "GET_FROM_IMAGE" | |
183 | end | |
184 | if ($itmethod == 5) | |
185 | printf "GET_FROM_STRETCH" | |
186 | end | |
187 | if ($itmethod < 0 || $itmethod > 5) | |
188 | output $itmethod | |
189 | end | |
190 | end | |
191 | document pitmethod | |
192 | Pretty print it->method given as first arg | |
193 | end | |
194 | ||
afca296c KS |
195 | # Print out iterator given as first arg |
196 | define pitx | |
197 | set $it = $arg0 | |
198 | printf "cur=%d", $it->current.pos.charpos | |
199 | if ($it->current.pos.charpos != $it->current.pos.bytepos) | |
200 | printf "[%d]", $it->current.pos.bytepos | |
201 | end | |
82d59cb0 KS |
202 | printf " pos=%d", $it->position.charpos |
203 | if ($it->position.charpos != $it->position.bytepos) | |
204 | printf "[%d]", $it->position.bytepos | |
205 | end | |
afca296c KS |
206 | printf " start=%d", $it->start.pos.charpos |
207 | if ($it->start.pos.charpos != $it->start.pos.bytepos) | |
208 | printf "[%d]", $it->start.pos.bytepos | |
209 | end | |
2fde1500 KS |
210 | printf " end=%d", $it->end_charpos |
211 | printf " stop=%d", $it->stop_charpos | |
212 | printf " face=%d", $it->face_id | |
213 | if ($it->multibyte_p) | |
214 | printf " MB" | |
215 | end | |
216 | if ($it->header_line_p) | |
217 | printf " HL" | |
218 | end | |
219 | if ($it->n_overlay_strings > 0) | |
338fa84a | 220 | printf " nov=%d", $it->n_overlay_strings |
2fde1500 KS |
221 | end |
222 | if ($it->sp != 0) | |
223 | printf " sp=%d", $it->sp | |
224 | end | |
2d20eee3 EZ |
225 | # IT_CHARACTER |
226 | if ($it->what == 0) | |
afca296c | 227 | if ($it->len == 1 && $it->c >= ' ' && it->c < 255) |
501b66fa | 228 | printf " ch='%c'", $it->c |
afca296c | 229 | else |
501b66fa | 230 | printf " ch=[%d,%d]", $it->c, $it->len |
2fde1500 KS |
231 | end |
232 | else | |
1e99743b | 233 | printf " " |
be996d82 EZ |
234 | # output $it->what |
235 | if ($it->what == 0) | |
236 | printf "IT_CHARACTER" | |
237 | end | |
238 | if ($it->what == 1) | |
239 | printf "IT_COMPOSITION" | |
240 | end | |
241 | if ($it->what == 2) | |
242 | printf "IT_IMAGE" | |
243 | end | |
244 | if ($it->what == 3) | |
245 | printf "IT_STRETCH" | |
246 | end | |
247 | if ($it->what == 4) | |
248 | printf "IT_EOB" | |
249 | end | |
250 | if ($it->what == 5) | |
251 | printf "IT_TRUNCATION" | |
252 | end | |
253 | if ($it->what == 6) | |
254 | printf "IT_CONTINUATION" | |
255 | end | |
256 | if ($it->what < 0 || $it->what > 6) | |
257 | output $it->what | |
258 | end | |
afca296c | 259 | end |
2d20eee3 EZ |
260 | if ($it->method != 0) |
261 | # !GET_FROM_BUFFER | |
2fde1500 | 262 | printf " next=" |
be996d82 | 263 | pitmethod $it->method |
2d20eee3 EZ |
264 | if ($it->method == 2) |
265 | # GET_FROM_STRING | |
501b66fa KS |
266 | printf "[%d]", $it->current.string_pos.charpos |
267 | end | |
2d20eee3 EZ |
268 | if ($it->method == 4) |
269 | # GET_FROM_IMAGE | |
1e99743b KS |
270 | printf "[%d]", $it->image_id |
271 | end | |
2fde1500 | 272 | end |
afca296c | 273 | printf "\n" |
2fde1500 KS |
274 | if ($it->region_beg_charpos >= 0) |
275 | printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos | |
276 | end | |
afca296c KS |
277 | printf "vpos=%d hpos=%d", $it->vpos, $it->hpos, |
278 | printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y | |
2fde1500 | 279 | printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x |
28c1e1ca | 280 | printf " w=%d", $it->pixel_width |
afca296c KS |
281 | printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent |
282 | printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent | |
283 | printf "\n" | |
0058964e | 284 | set $i = 0 |
82d59cb0 | 285 | while ($i < $it->sp && $i < 4) |
0058964e KS |
286 | set $e = $it->stack[$i] |
287 | printf "stack[%d]: ", $i | |
be996d82 | 288 | pitmethod $e->method |
0058964e KS |
289 | printf "[%d]", $e->position.charpos |
290 | printf "\n" | |
291 | set $i = $i + 1 | |
292 | end | |
afca296c KS |
293 | end |
294 | document pitx | |
295 | Pretty print a display iterator. | |
296 | Take one arg, an iterator object or pointer. | |
297 | end | |
298 | ||
299 | define pit | |
300 | pitx it | |
301 | end | |
302 | document pit | |
303 | Pretty print the display iterator it. | |
304 | end | |
305 | ||
306 | define prowx | |
307 | set $row = $arg0 | |
308 | printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width | |
309 | printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height | |
310 | printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height | |
311 | printf " vis=%d", $row->visible_height | |
312 | printf " L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2] | |
313 | printf "\n" | |
314 | printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos | |
315 | if ($row->enabled_p) | |
316 | printf " ENA" | |
317 | end | |
318 | if ($row->displays_text_p) | |
319 | printf " DISP" | |
320 | end | |
321 | if ($row->mode_line_p) | |
322 | printf " MODEL" | |
323 | end | |
324 | if ($row->continued_p) | |
325 | printf " CONT" | |
326 | end | |
327 | if ($row-> truncated_on_left_p) | |
328 | printf " TRUNC:L" | |
329 | end | |
330 | if ($row-> truncated_on_right_p) | |
331 | printf " TRUNC:R" | |
332 | end | |
333 | if ($row->starts_in_middle_of_char_p) | |
334 | printf " STARTMID" | |
335 | end | |
336 | if ($row->ends_in_middle_of_char_p) | |
337 | printf " ENDMID" | |
338 | end | |
339 | if ($row->ends_in_newline_from_string_p) | |
340 | printf " ENDNLFS" | |
341 | end | |
342 | if ($row->ends_at_zv_p) | |
343 | printf " ENDZV" | |
344 | end | |
345 | if ($row->overlapped_p) | |
346 | printf " OLAPD" | |
347 | end | |
348 | if ($row->overlapping_p) | |
349 | printf " OLAPNG" | |
350 | end | |
351 | printf "\n" | |
352 | end | |
353 | document prowx | |
354 | Pretty print information about glyph_row. | |
355 | Takes one argument, a row object or pointer. | |
356 | end | |
357 | ||
358 | define prow | |
359 | prowx row | |
360 | end | |
361 | document prow | |
362 | Pretty print information about glyph_row in row. | |
363 | end | |
364 | ||
365 | ||
366 | define pcursorx | |
367 | set $cp = $arg0 | |
368 | printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos | |
369 | end | |
370 | document pcursorx | |
89955f2e | 371 | Pretty print a window cursor. |
afca296c KS |
372 | end |
373 | ||
374 | define pcursor | |
375 | printf "output: " | |
376 | pcursorx output_cursor | |
377 | printf "\n" | |
378 | end | |
379 | document pcursor | |
89955f2e | 380 | Pretty print the output_cursor. |
afca296c KS |
381 | end |
382 | ||
383 | define pwinx | |
384 | set $w = $arg0 | |
385 | xgetint $w->sequence_number | |
386 | if ($w->mini_p != Qnil) | |
387 | printf "Mini " | |
388 | end | |
389 | printf "Window %d ", $int | |
390 | xgetptr $w->buffer | |
391 | set $tem = (struct buffer *) $ptr | |
392 | xgetptr $tem->name | |
393 | printf "%s", ((struct Lisp_String *) $ptr)->data | |
394 | printf "\n" | |
395 | xgetptr $w->start | |
396 | set $tem = (struct Lisp_Marker *) $ptr | |
397 | printf "start=%d end:", $tem->charpos | |
398 | if ($w->window_end_valid != Qnil) | |
399 | xgetint $w->window_end_pos | |
400 | printf "pos=%d", $int | |
401 | xgetint $w->window_end_vpos | |
402 | printf " vpos=%d", $int | |
403 | else | |
404 | printf "invalid" | |
405 | end | |
406 | printf " vscroll=%d", $w->vscroll | |
407 | if ($w->force_start != Qnil) | |
408 | printf " FORCE_START" | |
409 | end | |
410 | if ($w->must_be_updated_p) | |
411 | printf " MUST_UPD" | |
412 | end | |
413 | printf "\n" | |
414 | printf "cursor: " | |
415 | pcursorx $w->cursor | |
416 | printf " phys: " | |
417 | pcursorx $w->phys_cursor | |
418 | if ($w->phys_cursor_on_p) | |
419 | printf " ON" | |
420 | else | |
421 | printf " OFF" | |
422 | end | |
423 | printf " blk=" | |
424 | if ($w->last_cursor_off_p != $w->cursor_off_p) | |
425 | if ($w->last_cursor_off_p) | |
426 | printf "ON->" | |
427 | else | |
428 | printf "OFF->" | |
429 | end | |
430 | end | |
431 | if ($w->cursor_off_p) | |
432 | printf "ON" | |
433 | else | |
434 | printf "OFF" | |
435 | end | |
436 | printf "\n" | |
437 | end | |
438 | document pwinx | |
439 | Pretty print a window structure. | |
89955f2e | 440 | Takes one argument, a pointer to a window structure. |
afca296c KS |
441 | end |
442 | ||
443 | define pwin | |
444 | pwinx w | |
445 | end | |
446 | document pwin | |
447 | Pretty print window structure w. | |
448 | end | |
449 | ||
1e99743b KS |
450 | define pgx |
451 | set $g = $arg0 | |
be996d82 EZ |
452 | # CHAR_GLYPH |
453 | if ($g->type == 0) | |
1e99743b KS |
454 | if ($g->u.ch >= ' ' && $g->u.ch < 127) |
455 | printf "CHAR[%c]", $g->u.ch | |
456 | else | |
457 | printf "CHAR[0x%x]", $g->u.ch | |
458 | end | |
459 | end | |
be996d82 EZ |
460 | # COMPOSITE_GLYPH |
461 | if ($g->type == 1) | |
5b28ce35 | 462 | printf "COMP[%d (%d..%d)]", $g->u.cmp.id, $g->u.cmp.from, $g->u.cmp.to |
1e99743b | 463 | end |
be996d82 EZ |
464 | # IMAGE_GLYPH |
465 | if ($g->type == 2) | |
1e99743b KS |
466 | printf "IMAGE[%d]", $g->u.img_id |
467 | end | |
be996d82 EZ |
468 | # STRETCH_GLYPH |
469 | if ($g->type == 3) | |
1e99743b KS |
470 | printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent |
471 | end | |
472 | xgettype ($g->object) | |
473 | if ($type == Lisp_String) | |
474 | printf " str=%x[%d]", $g->object, $g->charpos | |
475 | else | |
476 | printf " pos=%d", $g->charpos | |
477 | end | |
478 | printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent | |
be996d82 EZ |
479 | # If not DEFAULT_FACE_ID |
480 | if ($g->face_id != 0) | |
1e99743b KS |
481 | printf " face=%d", $g->face_id |
482 | end | |
483 | if ($g->voffset) | |
484 | printf " vof=%d", $g->voffset | |
485 | end | |
486 | if ($g->multibyte_p) | |
487 | printf " MB" | |
488 | end | |
489 | if ($g->padding_p) | |
490 | printf " PAD" | |
491 | end | |
492 | if ($g->glyph_not_available_p) | |
493 | printf " N/A" | |
494 | end | |
495 | if ($g->overlaps_vertically_p) | |
496 | printf " OVL" | |
497 | end | |
498 | if ($g->left_box_line_p) | |
499 | printf " [" | |
500 | end | |
501 | if ($g->right_box_line_p) | |
502 | printf " ]" | |
503 | end | |
504 | if ($g->slice.x || $g->slice.y || $g->slice.width || $g->slice.height) | |
505 | printf " slice=%d,%d,%d,%d" ,$g->slice.x, $g->slice.y, $g->slice.width, $g->slice.height | |
506 | end | |
507 | printf "\n" | |
508 | end | |
509 | document pgx | |
510 | Pretty print a glyph structure. | |
89955f2e | 511 | Takes one argument, a pointer to a glyph structure. |
1e99743b KS |
512 | end |
513 | ||
514 | define pg | |
515 | set $pgidx = 0 | |
516 | pgx glyph | |
517 | end | |
518 | document pg | |
519 | Pretty print glyph structure glyph. | |
520 | end | |
521 | ||
522 | define pgi | |
523 | set $pgidx = $arg0 | |
524 | pgx (&glyph[$pgidx]) | |
525 | end | |
526 | document pgi | |
527 | Pretty print glyph structure glyph[I]. | |
528 | Takes one argument, a integer I. | |
529 | end | |
530 | ||
531 | define pgn | |
532 | set $pgidx = $pgidx + 1 | |
533 | pgx (&glyph[$pgidx]) | |
534 | end | |
535 | document pgn | |
536 | Pretty print next glyph structure. | |
537 | end | |
538 | ||
539 | define pgrowx | |
540 | set $row = $arg0 | |
541 | set $area = 0 | |
542 | set $xofs = $row->x | |
543 | while ($area < 3) | |
544 | set $used = $row->used[$area] | |
545 | if ($used > 0) | |
546 | set $gl0 = $row->glyphs[$area] | |
547 | set $pgidx = 0 | |
548 | printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used | |
549 | while ($pgidx < $used) | |
550 | printf "%3d %4d: ", $pgidx, $xofs | |
551 | pgx $gl0[$pgidx] | |
552 | set $xofs = $xofs + $gl0[$pgidx]->pixel_width | |
553 | set $pgidx = $pgidx + 1 | |
554 | end | |
555 | end | |
556 | set $area = $area + 1 | |
557 | end | |
558 | end | |
559 | document pgrowx | |
560 | Pretty print all glyphs in a row structure. | |
561 | Takes one argument, a pointer to a row structure. | |
562 | end | |
563 | ||
564 | define pgrow | |
565 | pgrowx row | |
566 | end | |
567 | document pgrow | |
568 | Pretty print all glyphs in row structure row. | |
569 | end | |
afca296c | 570 | |
be996d82 EZ |
571 | define pgrowit |
572 | pgrowx it->glyph_row | |
573 | end | |
574 | document pgrowit | |
575 | Pretty print all glyphs in it->glyph_row. | |
576 | end | |
577 | ||
a6ffc6a2 | 578 | define xtype |
6b61353c KH |
579 | xgettype $ |
580 | output $type | |
581 | echo \n | |
582 | if $type == Lisp_Misc | |
583 | xmisctype | |
584 | else | |
585 | if $type == Lisp_Vectorlike | |
586 | xvectype | |
587 | end | |
588 | end | |
a6ffc6a2 | 589 | end |
e065a56e | 590 | document xtype |
ba1e23bf | 591 | Print the type of $, assuming it is an Emacs Lisp value. |
3fe8bda5 | 592 | If the first type printed is Lisp_Vector or Lisp_Misc, |
6b61353c | 593 | a second line gives the more precise type. |
3fe8bda5 RS |
594 | end |
595 | ||
596 | define xvectype | |
6b61353c KH |
597 | xgetptr $ |
598 | set $size = ((struct Lisp_Vector *) $ptr)->size | |
fc80da24 | 599 | output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag |
6b61353c | 600 | echo \n |
3fe8bda5 RS |
601 | end |
602 | document xvectype | |
89955f2e NR |
603 | Print the size or vector subtype of $. |
604 | This command assumes that $ is a vector or pseudovector. | |
3fe8bda5 RS |
605 | end |
606 | ||
607 | define xmisctype | |
6b61353c KH |
608 | xgetptr $ |
609 | output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type) | |
610 | echo \n | |
3fe8bda5 RS |
611 | end |
612 | document xmisctype | |
2d5ed88d | 613 | Assume that $ is some misc type and print its specific type. |
e065a56e | 614 | end |
a6ffc6a2 JB |
615 | |
616 | define xint | |
6b61353c KH |
617 | xgetint $ |
618 | print $int | |
a6ffc6a2 | 619 | end |
e065a56e | 620 | document xint |
2d5ed88d | 621 | Print $ as an Emacs Lisp integer. This gets the sign right. |
e065a56e | 622 | end |
a6ffc6a2 JB |
623 | |
624 | define xptr | |
6b61353c KH |
625 | xgetptr $ |
626 | print (void *) $ptr | |
a6ffc6a2 | 627 | end |
e065a56e | 628 | document xptr |
2d5ed88d | 629 | Print the pointer portion of an Emacs Lisp value in $. |
e065a56e | 630 | end |
a6ffc6a2 | 631 | |
a6ffc6a2 | 632 | define xmarker |
6b61353c KH |
633 | xgetptr $ |
634 | print (struct Lisp_Marker *) $ptr | |
a6ffc6a2 | 635 | end |
e065a56e | 636 | document xmarker |
2d5ed88d EZ |
637 | Print $ as a marker pointer. |
638 | This command assumes that $ is an Emacs Lisp marker value. | |
e065a56e | 639 | end |
a6ffc6a2 | 640 | |
a6a3acf0 | 641 | define xoverlay |
6b61353c KH |
642 | xgetptr $ |
643 | print (struct Lisp_Overlay *) $ptr | |
a6a3acf0 KH |
644 | end |
645 | document xoverlay | |
89955f2e NR |
646 | Print $ as a overlay pointer. |
647 | This command assumes that $ is an Emacs Lisp overlay value. | |
a6a3acf0 KH |
648 | end |
649 | ||
650 | define xmiscfree | |
6b61353c KH |
651 | xgetptr $ |
652 | print (struct Lisp_Free *) $ptr | |
a6a3acf0 KH |
653 | end |
654 | document xmiscfree | |
89955f2e NR |
655 | Print $ as a misc free-cell pointer. |
656 | This command assumes that $ is an Emacs Lisp Misc value. | |
a6a3acf0 KH |
657 | end |
658 | ||
659 | define xintfwd | |
6b61353c KH |
660 | xgetptr $ |
661 | print (struct Lisp_Intfwd *) $ptr | |
a6a3acf0 KH |
662 | end |
663 | document xintfwd | |
89955f2e NR |
664 | Print $ as an integer forwarding pointer. |
665 | This command assumes that $ is an Emacs Lisp Misc value. | |
a6a3acf0 KH |
666 | end |
667 | ||
668 | define xboolfwd | |
6b61353c KH |
669 | xgetptr $ |
670 | print (struct Lisp_Boolfwd *) $ptr | |
a6a3acf0 KH |
671 | end |
672 | document xboolfwd | |
89955f2e NR |
673 | Print $ as a boolean forwarding pointer. |
674 | This command assumes that $ is an Emacs Lisp Misc value. | |
a6a3acf0 KH |
675 | end |
676 | ||
677 | define xobjfwd | |
6b61353c KH |
678 | xgetptr $ |
679 | print (struct Lisp_Objfwd *) $ptr | |
a6a3acf0 KH |
680 | end |
681 | document xobjfwd | |
89955f2e NR |
682 | Print $ as an object forwarding pointer. |
683 | This command assumes that $ is an Emacs Lisp Misc value. | |
a6a3acf0 KH |
684 | end |
685 | ||
029c56f6 | 686 | define xbufobjfwd |
6b61353c KH |
687 | xgetptr $ |
688 | print (struct Lisp_Buffer_Objfwd *) $ptr | |
a6a3acf0 | 689 | end |
029c56f6 | 690 | document xbufobjfwd |
89955f2e NR |
691 | Print $ as a buffer-local object forwarding pointer. |
692 | This command assumes that $ is an Emacs Lisp Misc value. | |
a6a3acf0 KH |
693 | end |
694 | ||
a0371857 | 695 | define xkbobjfwd |
6b61353c KH |
696 | xgetptr $ |
697 | print (struct Lisp_Kboard_Objfwd *) $ptr | |
cd39e946 | 698 | end |
a0371857 | 699 | document xkbobjfwd |
89955f2e NR |
700 | Print $ as a kboard-local object forwarding pointer. |
701 | This command assumes that $ is an Emacs Lisp Misc value. | |
cd39e946 KH |
702 | end |
703 | ||
029c56f6 | 704 | define xbuflocal |
6b61353c KH |
705 | xgetptr $ |
706 | print (struct Lisp_Buffer_Local_Value *) $ptr | |
a6a3acf0 | 707 | end |
029c56f6 | 708 | document xbuflocal |
89955f2e NR |
709 | Print $ as a buffer-local-value pointer. |
710 | This command assumes that $ is an Emacs Lisp Misc value. | |
a6a3acf0 KH |
711 | end |
712 | ||
a6ffc6a2 | 713 | define xsymbol |
cfcde636 KS |
714 | set $sym = $ |
715 | xgetptr $sym | |
6b61353c | 716 | print (struct Lisp_Symbol *) $ptr |
cfcde636 | 717 | xprintsym $sym |
6b61353c | 718 | echo \n |
a6ffc6a2 | 719 | end |
e065a56e JB |
720 | document xsymbol |
721 | Print the name and address of the symbol $. | |
ba1e23bf | 722 | This command assumes that $ is an Emacs Lisp symbol value. |
e065a56e | 723 | end |
a6ffc6a2 JB |
724 | |
725 | define xstring | |
6b61353c KH |
726 | xgetptr $ |
727 | print (struct Lisp_String *) $ptr | |
0001e968 | 728 | xprintstr $ |
6b61353c | 729 | echo \n |
a6ffc6a2 | 730 | end |
a6ffc6a2 | 731 | document xstring |
e065a56e | 732 | Print the contents and address of the string $. |
ba1e23bf | 733 | This command assumes that $ is an Emacs Lisp string value. |
a6ffc6a2 JB |
734 | end |
735 | ||
736 | define xvector | |
6b61353c KH |
737 | xgetptr $ |
738 | print (struct Lisp_Vector *) $ptr | |
fc80da24 | 739 | output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag) |
ef15f270 | 740 | echo \n |
a6ffc6a2 | 741 | end |
a6ffc6a2 | 742 | document xvector |
e065a56e | 743 | Print the contents and address of the vector $. |
ba1e23bf | 744 | This command assumes that $ is an Emacs Lisp vector value. |
a6ffc6a2 JB |
745 | end |
746 | ||
14a8902a | 747 | define xprocess |
6b61353c KH |
748 | xgetptr $ |
749 | print (struct Lisp_Process *) $ptr | |
750 | output *$ | |
751 | echo \n | |
14a8902a RS |
752 | end |
753 | document xprocess | |
89955f2e NR |
754 | Print the address of the struct Lisp_process to which $ points. |
755 | This command assumes that $ is a Lisp_Object. | |
14a8902a RS |
756 | end |
757 | ||
ec558adc | 758 | define xframe |
6b61353c KH |
759 | xgetptr $ |
760 | print (struct frame *) $ptr | |
28c1e1ca KS |
761 | xgetptr $->name |
762 | set $ptr = (struct Lisp_String *) $ptr | |
763 | xprintstr $ptr | |
764 | echo \n | |
a6ffc6a2 | 765 | end |
ec558adc | 766 | document xframe |
2d5ed88d EZ |
767 | Print $ as a frame pointer. |
768 | This command assumes $ is an Emacs Lisp frame value. | |
e065a56e | 769 | end |
a6ffc6a2 | 770 | |
14a8902a | 771 | define xcompiled |
6b61353c KH |
772 | xgetptr $ |
773 | print (struct Lisp_Vector *) $ptr | |
774 | output ($->contents[0])@($->size & 0xff) | |
14a8902a RS |
775 | end |
776 | document xcompiled | |
89955f2e NR |
777 | Print $ as a compiled function pointer. |
778 | This command assumes that $ is an Emacs Lisp compiled value. | |
14a8902a RS |
779 | end |
780 | ||
781 | define xwindow | |
6b61353c KH |
782 | xgetptr $ |
783 | print (struct window *) $ptr | |
25d34643 RS |
784 | set $window = (struct window *) $ptr |
785 | xgetint $window->total_cols | |
786 | set $width=$int | |
787 | xgetint $window->total_lines | |
788 | set $height=$int | |
789 | xgetint $window->left_col | |
790 | set $left=$int | |
791 | xgetint $window->top_line | |
792 | set $top=$int | |
793 | printf "%dx%d+%d+%d\n", $width, $height, $left, $top | |
14a8902a RS |
794 | end |
795 | document xwindow | |
796 | Print $ as a window pointer, assuming it is an Emacs Lisp window value. | |
797 | Print the window's position as "WIDTHxHEIGHT+LEFT+TOP". | |
798 | end | |
799 | ||
029c56f6 | 800 | define xwinconfig |
6b61353c KH |
801 | xgetptr $ |
802 | print (struct save_window_data *) $ptr | |
a6a3acf0 | 803 | end |
029c56f6 | 804 | document xwinconfig |
89955f2e NR |
805 | Print $ as a window configuration pointer. |
806 | This command assumes that $ is an Emacs Lisp window configuration value. | |
a6a3acf0 KH |
807 | end |
808 | ||
14a8902a | 809 | define xsubr |
6b61353c KH |
810 | xgetptr $ |
811 | print (struct Lisp_Subr *) $ptr | |
812 | output *$ | |
813 | echo \n | |
a6a3acf0 | 814 | end |
14a8902a RS |
815 | document xsubr |
816 | Print the address of the subr which the Lisp_Object $ points to. | |
817 | end | |
818 | ||
819 | define xchartable | |
6b61353c KH |
820 | xgetptr $ |
821 | print (struct Lisp_Char_Table *) $ptr | |
822 | printf "Purpose: " | |
823 | xprintsym $->purpose | |
824 | printf " %d extra slots", ($->size & 0x1ff) - 68 | |
825 | echo \n | |
14a8902a RS |
826 | end |
827 | document xchartable | |
828 | Print the address of the char-table $, and its purpose. | |
829 | This command assumes that $ is an Emacs Lisp char-table value. | |
830 | end | |
831 | ||
832 | define xboolvector | |
6b61353c KH |
833 | xgetptr $ |
834 | print (struct Lisp_Bool_Vector *) $ptr | |
fc80da24 | 835 | output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8) |
6b61353c | 836 | echo \n |
14a8902a RS |
837 | end |
838 | document xboolvector | |
839 | Print the contents and address of the bool-vector $. | |
840 | This command assumes that $ is an Emacs Lisp bool-vector value. | |
841 | end | |
842 | ||
843 | define xbuffer | |
6b61353c KH |
844 | xgetptr $ |
845 | print (struct buffer *) $ptr | |
846 | xgetptr $->name | |
847 | output ((struct Lisp_String *) $ptr)->data | |
848 | echo \n | |
14a8902a RS |
849 | end |
850 | document xbuffer | |
2d5ed88d EZ |
851 | Set $ as a buffer pointer and the name of the buffer. |
852 | This command assumes $ is an Emacs Lisp buffer value. | |
a6a3acf0 KH |
853 | end |
854 | ||
3266f62b | 855 | define xhashtable |
6b61353c KH |
856 | xgetptr $ |
857 | print (struct Lisp_Hash_Table *) $ptr | |
3266f62b GM |
858 | end |
859 | document xhashtable | |
89955f2e NR |
860 | Set $ as a hash table pointer. |
861 | This command assumes that $ is an Emacs Lisp hash table value. | |
3266f62b GM |
862 | end |
863 | ||
a6ffc6a2 | 864 | define xcons |
6b61353c KH |
865 | xgetptr $ |
866 | print (struct Lisp_Cons *) $ptr | |
867 | output/x *$ | |
868 | echo \n | |
a6ffc6a2 | 869 | end |
e065a56e | 870 | document xcons |
2d5ed88d | 871 | Print the contents of $ as an Emacs Lisp cons. |
e065a56e | 872 | end |
a6ffc6a2 | 873 | |
6f493884 | 874 | define nextcons |
b4483658 | 875 | p $.u.cdr |
6b61353c | 876 | xcons |
6f493884 RS |
877 | end |
878 | document nextcons | |
879 | Print the contents of the next cell in a list. | |
89955f2e | 880 | This command assumes that the last thing you printed was a cons cell contents |
6f493884 RS |
881 | (type struct Lisp_Cons) or a pointer to one. |
882 | end | |
a6ffc6a2 | 883 | define xcar |
6b61353c KH |
884 | xgetptr $ |
885 | xgettype $ | |
886 | print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0) | |
a6ffc6a2 | 887 | end |
e065a56e | 888 | document xcar |
2d5ed88d | 889 | Assume that $ is an Emacs Lisp pair and print its car. |
e065a56e | 890 | end |
a6ffc6a2 JB |
891 | |
892 | define xcdr | |
6b61353c KH |
893 | xgetptr $ |
894 | xgettype $ | |
b4483658 | 895 | print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0) |
a6ffc6a2 | 896 | end |
e065a56e | 897 | document xcdr |
2d5ed88d | 898 | Assume that $ is an Emacs Lisp pair and print its cdr. |
e065a56e | 899 | end |
a6ffc6a2 | 900 | |
28c1e1ca KS |
901 | define xlist |
902 | xgetptr $ | |
903 | set $cons = (struct Lisp_Cons *) $ptr | |
904 | xgetptr Qnil | |
905 | set $nil = $ptr | |
906 | set $i = 0 | |
907 | while $cons != $nil && $i < 10 | |
908 | p/x $cons->car | |
909 | xpr | |
910 | xgetptr $cons->u.cdr | |
911 | set $cons = (struct Lisp_Cons *) $ptr | |
912 | set $i = $i + 1 | |
913 | printf "---\n" | |
914 | end | |
915 | if $cons == $nil | |
916 | printf "nil\n" | |
917 | else | |
918 | printf "...\n" | |
919 | p $ptr | |
920 | end | |
921 | end | |
922 | document xlist | |
923 | Print $ assuming it is a list. | |
924 | end | |
925 | ||
df86e57e | 926 | define xfloat |
6b61353c | 927 | xgetptr $ |
b4483658 | 928 | print ((struct Lisp_Float *) $ptr)->u.data |
df86e57e JB |
929 | end |
930 | document xfloat | |
931 | Print $ assuming it is a lisp floating-point number. | |
932 | end | |
933 | ||
b2367490 | 934 | define xscrollbar |
6b61353c KH |
935 | xgetptr $ |
936 | print (struct scrollbar *) $ptr | |
b2367490 JB |
937 | output *$ |
938 | echo \n | |
939 | end | |
dec5f4e3 | 940 | document xscrollbar |
b2367490 JB |
941 | Print $ as a scrollbar pointer. |
942 | end | |
943 | ||
28c1e1ca KS |
944 | define xpr |
945 | xtype | |
946 | if $type == Lisp_Int | |
947 | xint | |
948 | end | |
949 | if $type == Lisp_Symbol | |
950 | xsymbol | |
951 | end | |
952 | if $type == Lisp_String | |
953 | xstring | |
954 | end | |
955 | if $type == Lisp_Cons | |
956 | xcons | |
957 | end | |
958 | if $type == Lisp_Float | |
959 | xfloat | |
960 | end | |
961 | if $type == Lisp_Misc | |
962 | set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type) | |
963 | if $misc == Lisp_Misc_Free | |
964 | xmiscfree | |
965 | end | |
966 | if $misc == Lisp_Misc_Boolfwd | |
967 | xboolfwd | |
968 | end | |
969 | if $misc == Lisp_Misc_Marker | |
970 | xmarker | |
971 | end | |
972 | if $misc == Lisp_Misc_Intfwd | |
973 | xintfwd | |
974 | end | |
975 | if $misc == Lisp_Misc_Boolfwd | |
976 | xboolfwd | |
977 | end | |
978 | if $misc == Lisp_Misc_Objfwd | |
979 | xobjfwd | |
980 | end | |
981 | if $misc == Lisp_Misc_Buffer_Objfwd | |
982 | xbufobjfwd | |
983 | end | |
984 | if $misc == Lisp_Misc_Buffer_Local_Value | |
985 | xbuflocal | |
986 | end | |
987 | # if $misc == Lisp_Misc_Some_Buffer_Local_Value | |
988 | # xvalue | |
989 | # end | |
990 | if $misc == Lisp_Misc_Overlay | |
991 | xoverlay | |
992 | end | |
993 | if $misc == Lisp_Misc_Kboard_Objfwd | |
994 | xkbobjfwd | |
995 | end | |
996 | # if $misc == Lisp_Misc_Save_Value | |
997 | # xsavevalue | |
998 | # end | |
999 | end | |
1000 | if $type == Lisp_Vectorlike | |
1001 | set $size = ((struct Lisp_Vector *) $ptr)->size | |
1002 | if ($size & PVEC_FLAG) | |
1003 | set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK) | |
1004 | if $vec == PVEC_NORMAL_VECTOR | |
1005 | xvector | |
1006 | end | |
1007 | if $vec == PVEC_PROCESS | |
1008 | xprocess | |
1009 | end | |
1010 | if $vec == PVEC_FRAME | |
1011 | xframe | |
1012 | end | |
1013 | if $vec == PVEC_COMPILED | |
1014 | xcompiled | |
1015 | end | |
1016 | if $vec == PVEC_WINDOW | |
1017 | xwindow | |
1018 | end | |
1019 | if $vec == PVEC_WINDOW_CONFIGURATION | |
1020 | xwinconfig | |
1021 | end | |
1022 | if $vec == PVEC_SUBR | |
1023 | xsubr | |
1024 | end | |
1025 | if $vec == PVEC_CHAR_TABLE | |
1026 | xchartable | |
1027 | end | |
1028 | if $vec == PVEC_BOOL_VECTOR | |
1029 | xboolvector | |
1030 | end | |
1031 | if $vec == PVEC_BUFFER | |
1032 | xbuffer | |
1033 | end | |
1034 | if $vec == PVEC_HASH_TABLE | |
1035 | xhashtable | |
1036 | end | |
1037 | else | |
1038 | xvector | |
1039 | end | |
1040 | end | |
1041 | end | |
1042 | document xpr | |
1043 | Print $ as a lisp object of any type. | |
1044 | end | |
1045 | ||
0001e968 | 1046 | define xprintstr |
d3332249 | 1047 | set $data = (char *) $arg0->data |
0001e968 SM |
1048 | output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte) |
1049 | end | |
1050 | ||
24b4d1bc | 1051 | define xprintsym |
6b61353c KH |
1052 | xgetptr $arg0 |
1053 | set $sym = (struct Lisp_Symbol *) $ptr | |
1054 | xgetptr $sym->xname | |
1055 | set $sym_name = (struct Lisp_String *) $ptr | |
0001e968 | 1056 | xprintstr $sym_name |
24b4d1bc GM |
1057 | end |
1058 | document xprintsym | |
1059 | Print argument as a symbol. | |
1060 | end | |
1061 | ||
d5fb9ac8 KH |
1062 | define xcoding |
1063 | set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits) | |
1064 | set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits) | |
1065 | set $name = $tmp->contents[$arg0 * 2] | |
1066 | print $name | |
1067 | pr | |
1068 | print $tmp->contents[$arg0 * 2 + 1] | |
1069 | pr | |
1070 | end | |
1071 | document xcoding | |
8f924df7 | 1072 | Print the name and attributes of coding system that has ID (argument). |
d5fb9ac8 KH |
1073 | end |
1074 | ||
1075 | define xcharset | |
1076 | set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits) | |
1077 | set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits) | |
af800dc0 | 1078 | p $tmp->contents[charset_table[$arg0].hash_index * 2] |
d5fb9ac8 KH |
1079 | pr |
1080 | end | |
1081 | document xcharset | |
8f924df7 | 1082 | Print the name of charset that has ID (argument). |
d5fb9ac8 KH |
1083 | end |
1084 | ||
9e067dbc KH |
1085 | define xfontset |
1086 | xgetptr $ | |
1087 | set $tbl = (struct Lisp_Char_Table *) $ptr | |
1088 | print $tbl | |
1089 | xgetint $tbl->extras[0] | |
1090 | printf " ID:%d", $int | |
1091 | xgettype $tbl->extras[1] | |
1092 | xgetptr $tbl->extras[1] | |
1093 | if $type == Lisp_String | |
1094 | set $ptr = (struct Lisp_String *) $ptr | |
1095 | printf " Name:" | |
1096 | xprintstr $ptr | |
1097 | else | |
1098 | xgetptr $tbl->extras[2] | |
1099 | set $ptr = (struct Lisp_Char_Table *) $ptr | |
1100 | xgetptr $ptr->extras[1] | |
1101 | set $ptr = (struct Lisp_String *) $ptr | |
1102 | printf " Realized from:" | |
1103 | xprintstr $ptr | |
1104 | end | |
1105 | echo \n | |
1106 | end | |
1107 | ||
322081f1 KH |
1108 | define xfont |
1109 | xgetptr $ | |
1110 | set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF) | |
1111 | if $size == FONT_SPEC_MAX | |
1112 | print (struct font_spec *) $ptr | |
1113 | else | |
1114 | if $size == FONT_ENTITY_MAX | |
1115 | print (struct font_entity *) $ptr | |
1116 | else | |
1117 | print (struct font *) $ptr | |
1118 | end | |
1119 | end | |
1120 | end | |
1121 | document xfont | |
1122 | Print $ assuming it is a list font (font-spec, font-entity, or font-object). | |
1123 | end | |
1124 | ||
24b4d1bc GM |
1125 | define xbacktrace |
1126 | set $bt = backtrace_list | |
177c0ea7 | 1127 | while $bt |
6b61353c | 1128 | xgettype (*$bt->function) |
3176a27e | 1129 | if $type == Lisp_Symbol |
6b61353c | 1130 | xprintsym (*$bt->function) |
c51842ec | 1131 | printf " (0x%x)\n", $bt->args |
3176a27e | 1132 | else |
cf07311b SM |
1133 | xgetptr *$bt->function |
1134 | printf "0x%x ", $ptr | |
3176a27e | 1135 | if $type == Lisp_Vectorlike |
6b61353c KH |
1136 | xgetptr (*$bt->function) |
1137 | set $size = ((struct Lisp_Vector *) $ptr)->size | |
fc80da24 | 1138 | output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag |
3176a27e GM |
1139 | else |
1140 | printf "Lisp type %d", $type | |
1141 | end | |
1142 | echo \n | |
1143 | end | |
24b4d1bc GM |
1144 | set $bt = $bt->next |
1145 | end | |
1146 | end | |
1147 | document xbacktrace | |
1148 | Print a backtrace of Lisp function calls from backtrace_list. | |
177c0ea7 | 1149 | Set a breakpoint at Fsignal and call this to see from where |
3176a27e | 1150 | an error was signaled. |
24b4d1bc GM |
1151 | end |
1152 | ||
28c1e1ca KS |
1153 | define which |
1154 | set debug_print (which_symbols ($arg0)) | |
1155 | end | |
1156 | document which | |
89955f2e | 1157 | Print symbols which references a given lisp object |
28c1e1ca KS |
1158 | either as its symbol value or symbol function. |
1159 | end | |
1160 | ||
1161 | define xbytecode | |
1162 | set $bt = byte_stack_list | |
1163 | while $bt | |
1164 | xgettype ($bt->byte_string) | |
1165 | printf "0x%x => ", $bt->byte_string | |
1166 | which $bt->byte_string | |
1167 | set $bt = $bt->next | |
1168 | end | |
1169 | end | |
1170 | document xbytecode | |
1171 | Print a backtrace of the byte code stack. | |
1172 | end | |
1173 | ||
338fa84a KS |
1174 | # Show Lisp backtrace after normal backtrace. |
1175 | define hookpost-backtrace | |
1176 | set $bt = backtrace_list | |
1177 | if $bt | |
1178 | echo \n | |
1179 | echo Lisp Backtrace:\n | |
1180 | xbacktrace | |
1181 | end | |
1182 | end | |
1183 | ||
24b4d1bc | 1184 | define xreload |
6b61353c KH |
1185 | set $tagmask = (((long)1 << gdb_gctypebits) - 1) |
1186 | set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1 | |
24b4d1bc GM |
1187 | end |
1188 | document xreload | |
1189 | When starting Emacs a second time in the same gdb session under | |
6b61353c | 1190 | FreeBSD 2.2.5, gdb 4.13, $valmask have lost |
be9e8331 DL |
1191 | their values. (The same happens on current (2000) versions of GNU/Linux |
1192 | with gdb 5.0.) | |
c71ea231 | 1193 | This function reloads them. |
24b4d1bc | 1194 | end |
6b61353c | 1195 | xreload |
24b4d1bc | 1196 | |
6c5d0c52 KS |
1197 | # Flush display (X only) |
1198 | define ff | |
1199 | set x_flush (0) | |
1200 | end | |
1201 | document ff | |
1202 | Flush pending X window display updates to screen. | |
1203 | Works only when an inferior emacs is executing. | |
1204 | end | |
1205 | ||
1206 | ||
be9e8331 DL |
1207 | define hook-run |
1208 | xreload | |
1209 | end | |
1210 | ||
e869a29d RS |
1211 | # Call xreload if a new Emacs executable is loaded. |
1212 | define hookpost-run | |
1213 | xreload | |
1214 | end | |
1215 | ||
e065a56e | 1216 | set print pretty on |
df86e57e | 1217 | set print sevenbit-strings |
a6ffc6a2 | 1218 | |
e5d77022 | 1219 | show environment DISPLAY |
6f5d1a4f | 1220 | show environment TERM |
e5d77022 | 1221 | |
c2c50958 | 1222 | # People get bothered when they see messages about non-existent functions... |
dd878ee1 | 1223 | xgetptr Vsystem_type |
ea5f3ad4 EZ |
1224 | # $ptr is NULL in temacs |
1225 | if ($ptr != 0) | |
1226 | set $tem = (struct Lisp_Symbol *) $ptr | |
1227 | xgetptr $tem->xname | |
1228 | set $tem = (struct Lisp_String *) $ptr | |
1229 | set $tem = (char *) $tem->data | |
1230 | ||
1231 | # Don't let abort actually run, as it will make stdio stop working and | |
1232 | # therefore the `pr' command above as well. | |
1233 | if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd' | |
1234 | # The windows-nt build replaces abort with its own function. | |
1235 | break w32_abort | |
1236 | else | |
1237 | break abort | |
1238 | end | |
feaf060a | 1239 | end |
dd878ee1 | 1240 | |
feaf060a EZ |
1241 | # x_error_quitter is defined only on X. But window-system is set up |
1242 | # only at run time, during Emacs startup, so we need to defer setting | |
1243 | # the breakpoint. init_sys_modes is the first function called on | |
1244 | # every platform after init_display, where window-system is set. | |
1245 | tbreak init_sys_modes | |
1246 | commands | |
1247 | silent | |
4fd9de39 | 1248 | xgetptr Vinitial_window_system |
913645cd EZ |
1249 | set $tem = (struct Lisp_Symbol *) $ptr |
1250 | xgetptr $tem->xname | |
1251 | set $tem = (struct Lisp_String *) $ptr | |
1252 | set $tem = (char *) $tem->data | |
feaf060a EZ |
1253 | # If we are running in synchronous mode, we want a chance to look |
1254 | # around before Emacs exits. Perhaps we should put the break | |
1255 | # somewhere else instead... | |
913645cd | 1256 | if $tem[0] == 'x' && $tem[1] == '\0' |
2d90e492 | 1257 | break x_error_quitter |
913645cd | 1258 | end |
feaf060a | 1259 | continue |
dd878ee1 | 1260 | end |
5df4f04c | 1261 |