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