From ad83cdacb6808377e2ef4f96e60ffb68dbf01cd9 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 8 Jan 2015 15:53:09 +0200 Subject: [PATCH] Fix GDB accesses to the 'nil's name. src/.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. --- src/.gdbinit | 18 ++++++++++++++---- src/ChangeLog | 5 +++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/.gdbinit b/src/.gdbinit index 0f2138284a0..1a2a973e694 100644 --- a/src/.gdbinit +++ b/src/.gdbinit @@ -70,6 +70,16 @@ define xgettype 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 @@ -1073,8 +1083,8 @@ end 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 @@ -1258,8 +1268,8 @@ tbreak init_sys_modes 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 diff --git a/src/ChangeLog b/src/ChangeLog index 21bdc81d797..4365222ff7b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2015-01-08 Eli Zaretskii + * .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) -- 2.39.2