diff src/.gdbinit.in.in @ 4939:349f01075eb7

build fixes for gdbinit and config-dependent elc files -------------------- ChangeLog entries follow: -------------------- ChangeLog addition: 2010-01-20 Ben Wing <ben@xemacs.org> * Makefile.in.in: * Makefile.in.in (GENERATED_HEADERS): * Makefile.in.in (.PHONY): * Makefile.in.in (src/.gdbinit): * configure: * configure.ac (TAB): etc/gdbinit.in has been moved to src/.gdbinit.in.in. Reflect this -- generate src/.gdbinit.in from src/.gdbinit.in.in, and use the normal mechanism for doing so instead of copying it specially. Add target for `config-changed' and pass down to `src'. Move some PHONY declarations to just before the actual targets. src/ChangeLog addition: 2010-01-20 Ben Wing <ben@xemacs.org> * .gdbinit.in.in: Moved here from etc/.gdbinit.in. Put @srcdir@ in various places rather than just `..' whenever Makefile.in.in does so. Fixes various strange crashes and errors than occur when using `..'. * Makefile.in.in (config-changed): Add target, useful when building both Unicode-internal and old-Mule workspaces using --srcdir and don't run configure before switching from one to the other.
author Ben Wing <ben@xemacs.org>
date Wed, 20 Jan 2010 19:48:26 -0600
parents etc/gdbinit.in@7ef913bf3c9a
children de60897044f4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/.gdbinit.in.in	Wed Jan 20 19:48:26 2010 -0600
@@ -0,0 +1,553 @@
+## gdb init file for XEmacs              -*- ksh -*-
+## This is the source for src/.gdbinit.  Edit it, and rerun configure.
+## (Running config.status is not enough.)
+## The generated file depends on src/config.h (currently only in one place).
+
+## To insert comments that will remain in the generated file, we use the
+## imake XCOMM convention.  Lines beginning with "XCOMM " exactly (no
+## leading whitespace, one trailing ASCII space, case sensitive) will be
+## transformed to gdb command file comments in the generated file.
+
+XCOMM gdb init file for XEmacs
+XCOMM AUTOMATICALLY GENERATED FROM etc/gdbinit.in BY configure -- DO NOT EDIT.
+XCOMM See etc/gdbinit.in for licensing information and usage hints.
+XCOMM Copyright (C) 1998 Free Software Foundation, Inc.
+XCOMM Copyright (C) 2010 Ben Wing.
+
+## This file is part of XEmacs.
+
+## XEmacs is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by the
+## Free Software Foundation; either version 2, or (at your option) any
+## later version.
+
+## XEmacs is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+## for more details.
+
+## You should have received a copy of the GNU General Public License
+## along with XEmacs; see the file COPYING.  If not, write to
+## the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+## Boston, MA  02110-1301  USA
+
+## Author: Martin Buchholz
+
+## Other contributors you could ask for help: Ivan Golubev, Jerry James,
+## Stephen Turnbull.
+
+## Some useful commands for debugging emacs with gdb 4.16 or better.
+##
+## Since this file is called `.gdbinit', it will be read by gdb
+## automatically when gdb is run in the build directory, which is where
+## developers usually debug their xemacs.  You can also source this
+## file from your ~/.gdbinit, if you like.
+##
+## Configure xemacs with --debug, and compile with -g.
+##
+## See also the question of the XEmacs FAQ, titled
+## "How to Debug an XEmacs problem with a debugger".
+##
+## This can be used to debug XEmacs no matter how the following are
+## specified:
+
+## USE_UNION_TYPE
+
+## (the above all have configure equivalents)
+
+## Some functions defined here require a running process, but most
+## don't.  Considerable effort has been expended to this end.
+
+## See the dbg_ C support code in src/alloc.c that allows the functions
+## defined in this file to work correctly.
+
+#define NOT_C_CODE
+#include "config.h"
+
+set print union off
+set print pretty off
+
+#ifdef VDB_POSIX
+handle SIGSEGV SIGBUS nostop noprint
+#endif
+
+set $Lisp_Type_Int = -2
+set $Lisp_Type_Record = 0
+set $Lisp_Type_Char = 2
+
+define decode_object
+  set $obj = (unsigned long) $arg0
+  if $obj & 1
+  ## It's an int
+    set $val = $obj >> 1
+    set $type = $Lisp_Type_Int
+  else
+    set $type = $obj & dbg_typemask
+    if $type == $Lisp_Type_Char
+      set $val = ($obj & dbg_valmask) >> dbg_gctypebits
+    else
+      ## It's a record pointer
+      set $val = $obj
+    end
+  end
+
+  if $type == $Lisp_Type_Record
+    set $lheader = ((struct lrecord_header *) $val)
+    set $lrecord_type = ($lheader->type)
+    set $imp = ((struct lrecord_implementation *) lrecord_implementations_table[(int) $lrecord_type])
+  else
+    set $lrecord_type = -1
+    set $lheader = -1
+    set $imp = -1
+  end
+end
+
+document decode_object
+Usage: decode_object lisp_object
+Extract implementation information from a Lisp Object.
+Defines variables $val, $type and $imp.
+end
+
+define xint
+decode_object $arg0
+print ((long) $val)
+end
+
+define xtype
+  decode_object $arg0
+  if $type == $Lisp_Type_Int
+    echo int\n
+  else
+  if $type == $Lisp_Type_Char
+    echo char\n
+  else
+    printf "record type: %s\n", $imp->name
+  end
+  end
+end
+
+document xtype
+Usage: xtype lisp_object
+Print the Lisp type of a lisp object.
+end
+
+define lisp-shadows
+  run -batch -vanilla -f list-load-path-shadows
+end
+
+document lisp-shadows
+Usage: lisp-shadows
+Run xemacs to check for lisp shadows
+end
+
+define environment-to-run-temacs
+  unset env EMACSLOADPATH
+  set env EMACSBOOTSTRAPLOADPATH=@srcdir@/../lisp/:@srcdir@/..
+  set env EMACSBOOTSTRAPMODULEPATH=../modules/:..
+end
+
+define run-temacs
+  environment-to-run-temacs
+  run -nd -no-packages -batch -l @srcdir@/../lisp/loadup.el run-temacs -q
+end
+
+document run-temacs
+Usage: run-temacs
+Run temacs interactively, like xemacs.
+Use this with debugging tools (like purify) that cannot deal with dumping,
+or when temacs builds successfully, but xemacs does not.
+end
+
+define check-xemacs
+  run -vanilla -batch -l @srcdir@/../tests/automated/test-harness.el -f batch-test-emacs @srcdir@/../tests/automated
+end
+
+document check-xemacs
+Usage: check-xemacs
+Run the test suite.  Equivalent to 'make check'.
+end
+
+define check-temacs
+  environment-to-run-temacs
+  run -nd -no-packages -batch -l @srcdir@/../lisp/loadup.el run-temacs -q -batch -l @srcdir@/../tests/automated/test-harness.el -f batch-test-emacs @srcdir@/../tests/automated
+end
+
+document check-temacs
+Usage: check-temacs
+Run the test suite on temacs.  Equivalent to 'make check-temacs'.
+Use this with debugging tools (like purify) that cannot deal with dumping,
+or when temacs builds successfully, but xemacs does not.
+end
+
+define update-elc
+  environment-to-run-temacs
+  run -nd -no-packages -batch -l @srcdir@/../lisp/update-elc.el
+end
+
+document update-elc
+Usage: update-elc
+Run the core lisp byte compilation part of the build procedure.
+Use when debugging temacs, not xemacs!
+Use this when temacs builds successfully, but xemacs does not.
+end
+
+define update-elc-2
+  environment-to-run-temacs
+  run -no-packages -batch -no-autoloads -l update-elc-2.el -f batch-update-elc-2 @srcdir@/../lisp
+end
+
+document update-elc-2
+Usage: update-elc-2
+Run the post-dump core lisp byte compilation part of the build procedure.
+end
+
+define dmp
+  environment-to-run-temacs
+  run -nd -no-packages -batch -l @srcdir@/../lisp/loadup.el dump
+end
+
+document dmp
+Usage: dmp
+Run the dumping part of the build procedure.
+Use when debugging temacs, not xemacs!
+Use this when temacs builds successfully, but xemacs does not.
+end
+
+define ldp
+  printf "%s", "Lisp => "
+  call debug_print($arg0)
+end
+
+document ldp
+Usage: ldp lisp_object
+Print a Lisp Object value using the Lisp printer.
+Requires a running xemacs process.
+end
+
+define lbt
+call debug_backtrace()
+end
+
+document lbt
+Usage: lbt
+Print the current Lisp stack trace.
+Requires a running xemacs process.
+end
+
+
+define leval
+ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil)))
+end
+
+document leval
+Usage: leval "SEXP"
+Eval a lisp expression.
+Requires a running xemacs process.
+
+Example:
+(gdb) leval "(+ 1 2)"
+Lisp ==> 3
+end
+
+
+define wtype
+print $arg0->core.widget_class->core_class.class_name
+end
+
+define xtname
+print XrmQuarkToString(((Object)($arg0))->object.xrm_name)
+end
+
+## GDB's command language makes you want to ...
+
+define pptype
+  set $type_ptr = ($arg0 *) $val
+  print $type_ptr
+  print *$type_ptr
+end
+
+define pstructtype
+  set $type_ptr = (struct $arg0 *) $val
+  print $type_ptr
+  print *$type_ptr
+end
+
+define pobj
+  decode_object $arg0
+  if $type == $Lisp_Type_Int
+    printf "Integer: %d\n", $val
+  else
+  if $type == $Lisp_Type_Char
+    if $val > 32 && $val < 128
+      printf "Char: %c\n", $val
+    else
+      printf "Char: %d\n", $val
+    end
+  else
+  if $lrecord_type == lrecord_type_string
+    pptype Lisp_String
+  else
+  if $lrecord_type == lrecord_type_cons
+    pptype Lisp_Cons
+  else
+  if $lrecord_type == lrecord_type_symbol
+    pptype Lisp_Symbol
+    printf "Symbol name: %s\n", ((Lisp_String *)$type_ptr->name)->data_
+  else
+  if $lrecord_type == lrecord_type_vector
+    pptype Lisp_Vector
+    printf "Vector of length %d\n", $type_ptr->size
+    ##print *($type_ptr->data) @ $type_ptr->size
+  else
+  if $lrecord_type == lrecord_type_bit_vector
+    pptype Lisp_Bit_Vector
+  else
+  if $lrecord_type == lrecord_type_buffer
+    pstructtype buffer
+  else
+  if $lrecord_type == lrecord_type_char_table
+    pptype Lisp_Char_Table
+  else
+  if $lrecord_type == lrecord_type_char_table_entry
+    pptype Lisp_Char_Table_Entry
+  else
+  if $lrecord_type == lrecord_type_charset
+    pptype Lisp_Charset
+  else
+  if $lrecord_type == lrecord_type_coding_system
+    pptype Lisp_Coding_System
+  else
+  if $lrecord_type == lrecord_type_color_instance
+    pptype Lisp_Color_Instance
+  else
+  if $lrecord_type == lrecord_type_command_builder
+    pptype command_builder
+  else
+  if $lrecord_type == lrecord_type_compiled_function
+    pptype Lisp_Compiled_Function
+  else
+  if $lrecord_type == lrecord_type_console
+    pstructtype console
+  else
+  if $lrecord_type == lrecord_type_database
+    pptype Lisp_Database
+  else
+  if $lrecord_type == lrecord_type_device
+    pstructtype device
+  else
+  if $lrecord_type == lrecord_type_event
+    pptype Lisp_Event
+  else
+  if $lrecord_type == lrecord_type_extent
+    pstructtype extent
+  else
+  if $lrecord_type == lrecord_type_extent_auxiliary
+    pstructtype extent_auxiliary
+  else
+  if $lrecord_type == lrecord_type_extent_info
+    pstructtype extent_info
+  else
+  if $lrecord_type == lrecord_type_face
+    pptype Lisp_Face
+  else
+  if $lrecord_type == lrecord_type_float
+    pptype Lisp_Float
+  else
+  if $lrecord_type == lrecord_type_font_instance
+    pptype Lisp_Font_Instance
+  else
+  if $lrecord_type == lrecord_type_frame
+    pstructtype frame
+  else
+  if $lrecord_type == lrecord_type_glyph
+    pptype Lisp_Glyph
+  else
+  if $lrecord_type == lrecord_type_gui_item
+    pptype Lisp_Gui_Item
+  else
+  if $lrecord_type == lrecord_type_hash_table
+    pptype Lisp_Hash_Table
+  else
+  if $lrecord_type == lrecord_type_image_instance
+    pptype Lisp_Image_Instance
+  else
+  if $lrecord_type == lrecord_type_keymap
+    pptype Lisp_Keymap
+  else
+  if $lrecord_type == lrecord_type_lcrecord_list
+    pstructtype lcrecord_list
+  else
+  if $lrecord_type == lrecord_type_ldap
+    pptype Lisp_LDAP
+  else
+  if $lrecord_type == lrecord_type_lstream
+    pstructtype lstream
+  else
+  if $lrecord_type == lrecord_type_marker
+    pptype Lisp_Marker
+  else
+  if $lrecord_type == lrecord_type_opaque
+    pptype Lisp_Opaque
+  else
+  if $lrecord_type == lrecord_type_opaque_ptr
+    pptype Lisp_Opaque_Ptr
+  else
+  if $lrecord_type == lrecord_type_popup_data
+    pptype popup_data
+  else
+  if $lrecord_type == lrecord_type_process
+    pptype Lisp_Process
+  else
+  if $lrecord_type == lrecord_type_range_table
+    pptype Lisp_Range_Table
+  else
+  if $lrecord_type == lrecord_type_specifier
+    pptype Lisp_Specifier
+  else
+  if $lrecord_type == lrecord_type_subr
+    pptype Lisp_Subr
+  else
+  if $lrecord_type == lrecord_type_symbol_value_buffer_local
+    pstructtype symbol_value_buffer_local
+  else
+  if $lrecord_type == lrecord_type_symbol_value_forward
+    pstructtype symbol_value_forward
+  else
+  if $lrecord_type == lrecord_type_symbol_value_lisp_magic
+    pstructtype symbol_value_lisp_magic
+  else
+  if $lrecord_type == lrecord_type_symbol_value_varalias
+    pstructtype symbol_value_varalias
+  else
+  if $lrecord_type == lrecord_type_timeout
+    pptype Lisp_Timeout
+  else
+  if $lrecord_type == lrecord_type_toolbar_button
+    pstructtype toolbar_button
+  else
+  if $lrecord_type == lrecord_type_tooltalk_message
+    pptype Lisp_Tooltalk_Message
+  else
+  if $lrecord_type == lrecord_type_tooltalk_pattern
+    pptype Lisp_Tooltalk_Pattern
+  else
+  if $lrecord_type == lrecord_type_weak_list
+    pstructtype weak_list
+  else
+  if $lrecord_type == lrecord_type_window
+    pstructtype window
+  else
+  if $lrecord_type == lrecord_type_window_configuration
+    pstructtype window_config
+  else
+  if $lrecord_type == lrecord_type_fc_pattern
+    pstructtype fc_pattern
+  else
+  if $lrecord_type == lrecord_type_fc_config
+    pstructtype fc_config
+  else
+    echo Unknown Lisp Object type\n
+    print $arg0
+  ## Barf, gag, retch
+  end
+  end 
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  ## Repeat after me... gdb sux, gdb sux, gdb sux...
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  ## Are we having fun yet??
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+  end
+end
+
+document pobj
+Usage: pobj lisp_object
+Print the internal C representation of a Lisp Object.
+end
+
+## -------------------------------------------------------------
+## functions to test the debugging support itself.
+## If you change this file, make sure the following still work...
+## -------------------------------------------------------------
+define test_xtype
+  printf "Vemacs_major_version: "
+  xtype Vemacs_major_version
+  printf "Vhelp_char: "
+  xtype Vhelp_char
+  printf "Qnil: "
+  xtype Qnil
+  printf "Qunbound: "
+  xtype Qunbound
+  printf "Vobarray: "
+  xtype Vobarray
+  printf "Vall_weak_lists: "
+  xtype Vall_weak_lists
+  printf "Vxemacs_codename: "
+  xtype Vxemacs_codename
+end
+
+define test_pobj
+  printf "Vemacs_major_version: "
+  pobj Vemacs_major_version
+  printf "Vhelp_char: "
+  pobj Vhelp_char
+  printf "Qnil: "
+  pobj Qnil
+  printf "Qunbound: "
+  pobj Qunbound
+  printf "Vobarray: "
+  pobj Vobarray
+  printf "Vall_weak_lists: "
+  pobj Vall_weak_lists
+  printf "Vxemacs_codename: "
+  pobj Vxemacs_codename
+end
+