set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
end
+# Access the name of a symbol
+define xsymname
+ if (CHECK_LISP_OBJECT_TYPE)
+ set $bugfix = $arg0.i
+ else
+ set $bugfix = $arg0
+ end
+ set $symname = ((struct Lisp_Symbol *) ((char *)lispsym + $bugfix))->name
+end
+
# Set up something to print out s-expressions.
# We save and restore print_output_debug_flag to prevent the w32 port
# from calling OutputDebugString, which causes GDB to display each
define xprintsym
xgetptr $arg0
- set $sym = (struct Lisp_Symbol *) $ptr
- xgetptr $sym->name
+ xsymname $ptr
+ xgetptr $symname
set $sym_name = (struct Lisp_String *) $ptr
xprintstr $sym_name
end
commands
silent
xgetptr globals.f_Vinitial_window_system
- set $tem = (struct Lisp_Symbol *) $ptr
- xgetptr $tem->name
+ xsymname $ptr
+ xgetptr $symname
set $tem = (struct Lisp_String *) $ptr
set $tem = (char *) $tem->data
# If we are running in synchronous mode, we want a chance to look
2015-01-08 Eli Zaretskii <eliz@gnu.org>
+ * .gdbinit (xsymname): New subroutine.
+ (xprintsym, initial-tbreak): Use it to access the name of a symbol
+ in a way that doesn't cause GDB to barf when it tries to
+ dereference a NULL pointer.
+
* xdisp.c (next_element_from_c_string): Use Lisp integer zero as
the object.
(set_cursor_from_row, try_cursor_movement, dump_glyph)