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