commit: build fixes for gdbinit and config-dependent elc files
Ben Wing
ben at xemacs.org
Thu Feb 4 01:30:10 EST 2010
changeset: 4939:349f01075eb7
user: Ben Wing <ben at xemacs.org>
date: Wed Jan 20 19:48:26 2010 -0600
files: ChangeLog Makefile.in.in configure configure.ac etc/gdbinit.in src/.gdbinit.in.in src/ChangeLog src/Makefile.in.in
description:
build fixes for gdbinit and config-dependent elc files
-------------------- ChangeLog entries follow: --------------------
ChangeLog addition:
2010-01-20 Ben Wing <ben at 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 at 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.
diff -r 299dce99bdad -r 349f01075eb7 ChangeLog
--- a/ChangeLog Tue Jan 19 11:25:37 2010 -0600
+++ b/ChangeLog Wed Jan 20 19:48:26 2010 -0600
@@ -30,6 +30,22 @@
2010-01-16 Aidan Kehoe <kehoea at parhasard.net>
* configure: Regenerate, now we no longer look for rint().
+
+2010-01-20 Ben Wing <ben at 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.
2010-01-13 Jerry James <james at xemacs.org>
diff -r 299dce99bdad -r 349f01075eb7 Makefile.in.in
--- a/Makefile.in.in Tue Jan 19 11:25:37 2010 -0600
+++ b/Makefile.in.in Wed Jan 20 19:48:26 2010 -0600
@@ -1,4 +1,4 @@
-## Copyright (C) 2003, 2005 Ben Wing.
+## Copyright (C) 2003, 2005, 2010 Ben Wing.
## DIST: This is the distribution Makefile for XEmacs. configure can
## DIST: make most of the changes to this file you might want, so try
@@ -243,7 +243,7 @@
## instead, we have written out explicit code in the `install' targets.
COPYDIR = ${srcdir}/etc ${srcdir}/lisp
COPYDESTS = ${etcdir} ${lispdir}
-GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/config.h lwlib/config.h src/sheap-adjust.h src/xemacs.def etc/PROBLEMS
+GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/config.h lwlib/config.h src/sheap-adjust.h src/xemacs.def etc/PROBLEMS src/.gdbinit
## MAKE_SUBDIR will always be of the form lib-src ... src, where
## `...' includes various other directories that may be inserted by
@@ -282,9 +282,15 @@
depend ${srcdir}/src/depend:
cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) depend
+.PHONY: config-changed
+config-changed:
+ cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@
+
+.PHONY: check
check:
cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@
+.PHONY: check-features
check-features: all
cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@
@@ -355,6 +361,9 @@
src/xemacs.def: $(srcdir)/src/xemacs.def.in.in
./config.status && touch $@
+src/.gdbinit: ${srcdir}/src/.gdbinit.in.in
+ ./config.status && touch $@
+
etc/PROBLEMS: $(srcdir)/PROBLEMS
cp $^ $@
@@ -367,7 +376,6 @@
## On AIX, use tar xBf.
.PHONY: install-only install install-arch-dep install-arch-indep gzip.el mkdir
-.PHONY: check check-features
## We delete each directory in ${COPYDESTS} before we copy into it;
## that way, we can reinstall over directories that have been put in
diff -r 299dce99bdad -r 349f01075eb7 configure
--- a/configure Tue Jan 19 11:25:37 2010 -0600
+++ b/configure Wed Jan 20 19:48:26 2010 -0600
@@ -20329,7 +20329,7 @@
fi
-internal_makefile_list="Makefile.in"
+internal_makefile_list="Makefile.in src/.gdbinit.in"
SUBDIR_MAKEFILES=''
test -d lock || mkdir lock
for dir in $MAKE_SUBDIR; do
@@ -20376,9 +20376,9 @@
fi
-if test -f "$srcdir/etc/gdbinit.in"; then
- test "$verbose" = "yes" && echo "creating src/.gdbinit.in"
- cp $srcdir/etc/gdbinit.in src/.gdbinit.in
+if test -f "$srcdir/etc/gdbinit.in.in"; then
+ test "$verbose" = "yes" && echo "creating src/.gdbinit.in.in"
+ cp $srcdir/etc/gdbinit.in.in src/.gdbinit.in.in
fi
if test -f "$srcdir/etc/dbxrc.in"; then
diff -r 299dce99bdad -r 349f01075eb7 configure.ac
--- a/configure.ac Tue Jan 19 11:25:37 2010 -0600
+++ b/configure.ac Wed Jan 20 19:48:26 2010 -0600
@@ -5258,7 +5258,7 @@
dnl Compute lists of Makefiles and subdirs
AC_SUBST(SRC_SUBDIR_DEPS)
-internal_makefile_list="Makefile.in"
+internal_makefile_list="Makefile.in src/.gdbinit.in"
SUBDIR_MAKEFILES=''
test -d lock || mkdir lock
for dir in $MAKE_SUBDIR; do
@@ -5308,11 +5308,8 @@
dnl Unlike TAGS, debugger init files depend on config.h.
dnl Regenerate them locally on every configure.
-dnl Create a .gdbinit useful for debugging XEmacs
-if test -f "$srcdir/etc/gdbinit.in"; then
- test "$verbose" = "yes" && echo "creating src/.gdbinit.in"
- cp $srcdir/etc/gdbinit.in src/.gdbinit.in
-fi
+dnl .gdbinit is now handled like xemacs.def or other src files, and
+dnl its source is in src/.gdbinit.in.in.
dnl Create a .dbxrc useful for debugging XEmacs
if test -f "$srcdir/etc/dbxrc.in"; then
diff -r 299dce99bdad -r 349f01075eb7 etc/gdbinit.in
--- a/etc/gdbinit.in Tue Jan 19 11:25:37 2010 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,552 +0,0 @@
-## 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.
-
-## 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=../lisp/:..
- set env EMACSBOOTSTRAPMODULEPATH=../modules/:..
-end
-
-define run-temacs
- environment-to-run-temacs
- run -nd -no-packages -batch -l ../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 -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../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 ../lisp/loadup.el run-temacs -q -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../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 ../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 ../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 ../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
-
diff -r 299dce99bdad -r 349f01075eb7 src/.gdbinit.in.in
--- /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
+
diff -r 299dce99bdad -r 349f01075eb7 src/ChangeLog
--- a/src/ChangeLog Tue Jan 19 11:25:37 2010 -0600
+++ b/src/ChangeLog Wed Jan 20 19:48:26 2010 -0600
@@ -68,6 +68,18 @@
Remove `extern Lisp_Object' decls that duplicate lisp.h,
since they have different C vs. C++ linkage.
+2010-01-20 Ben Wing <ben at 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.
+
2010-01-20 Ben Wing <ben at xemacs.org>
* lrecord.h:
diff -r 299dce99bdad -r 349f01075eb7 src/Makefile.in.in
--- a/src/Makefile.in.in Tue Jan 19 11:25:37 2010 -0600
+++ b/src/Makefile.in.in Wed Jan 20 19:48:26 2010 -0600
@@ -3,7 +3,7 @@
## Copyright (C) 1994, 1995 Board of Trustees, University of Illinois
## Copyright (C) 1996, 1997 Sun Microsystems, Inc.
## Copyright (C) 1998, 1999 J. Kean Johnston.
-## Copyright (C) 2001, 2002, 2003, 2005 Ben Wing.
+## Copyright (C) 2001, 2002, 2003, 2005, 2010 Ben Wing.
## This file is part of XEmacs.
@@ -917,6 +917,19 @@
testdir = $(SRC)/../tests/automated
batch_test_emacs = $(BATCH_PACKAGES) -l $(testdir)/test-harness.el -f batch-test-emacs $(testdir)
+# `config-changed' is useful if you are building both Unicode-internal
+# and old-Mule workspaces using --srcdir and don't run configure before
+# switching from one to the other. If you rerun configure, update-elc.el
+# notices this and automatically removes the two files below, but not
+# if you just switch directories and `make'. In that case, do
+# `make config-changed' to avoid an error.
+
+.PHONY: remove-config-dependent-elcs config-changed
+remove-config-dependent-elcs:
+ rm $(LISP)/mule/chinese.elc $(LISP)/mule/general-late.elc
+config-changed: remove-config-dependent-elcs all
+
+
.PHONY: check check-temacs check-features
check:
$(DO_XEMACS) $(batch_test_emacs)
More information about the XEmacs-Patches
mailing list