Merge branch 'spaghettisalat/ecl-develop' into develop

This commit is contained in:
Daniel Kochmanski 2018-05-08 19:40:55 +02:00
commit 11f31beafb
13 changed files with 180 additions and 192 deletions

View file

@ -29,6 +29,7 @@
* Pending changes since 16.1.3
** Enhancements
- improvements to C backend interface by Marius Gerbershagen
- better handling of fifo files (see man 7 fifo)
- unicode names are always linked for unicode builds (~--with-unicode-names~ removed)
- numerous bytecodes compiler enhancements

View file

@ -60,6 +60,8 @@ ECL_RT =
ECL_DEFSYS =
# Profiling
ECL_PROFILE =
# Use the DbgHelp.lib shared library to provide C Backtrace support
ECL_USE_DBGHELP = $(ECL_DEBUG)
!if "$(YASM)" == ""
!if "$(ECL_WIN64)" != ""
@ -78,7 +80,9 @@ TAR_DIR = %CD%\ecl-$(ECL_VERSION)
#
CC = cl
LIBS = eclgc.lib eclgmp.lib user32.lib ws2_32.lib shell32.lib
CLIBS = user32.lib ws2_32.lib shell32.lib
STATICLIBS = eclgc.lib eclgmp.lib
LIBS = $(STATICLIBS) $(CLIBS)
RM = del
RMDIR = rmdir /Q /S
MKDIR = mkdir
@ -123,6 +127,10 @@ SHARED_LDFLAGS = /LD
GCFLAGS = nodebug=1
!endif
!if "$(ECL_USE_DBGHELP)" != ""
CLIBS = $(CLIBS) DbgHelp.lib
!endif
CFLAGS = /EHsc /DGC_DLL /DGC_BUILD /nologo /D_CRT_SECURE_NO_DEPRECATE $(CFLAGS_CONFIG)
LDFLAGS = /link /incremental:no /nologo /nodefaultlib:libcmt /nodefaultlib:libcmtd /nodefaultlib:libc /nodefaultlib:libcd $(LDFLAGS_CONFIG)
@ -263,9 +271,9 @@ compile.lsp: bare.lsp $(srcdir)/compile.lsp.in Makefile
"@LDFLAGS@" "$(LDFLAGS)" \
"@SHARED_LDFLAGS@" "$(SHARED_LDFLAGS)" \
"@BUNDLE_LDFLAGS@" "$(SHARED_LDFLAGS)" \
"@CLIBS@" "user32.lib ws2_32.lib shell32.lib" \
"@STATICLIBS@" "eclgmp.lib eclgc.lib" \
"@LIBS@" "user32.lib ws2_32.lib shell32.lib" \
"@CLIBS@" "$(CLIBS)" \
"@STATICLIBS@" "$(STATICLIBS)" \
"@LIBS@" "$(LIBS)" \
"@CORE_LIBS@" "" \
"@FASL_LIBS@" "" \
"@OBJEXT@" "obj" \
@ -305,8 +313,8 @@ cmp/cmpdefs.lsp: $(srcdir)/cmp/cmpdefs.lsp Makefile
"@LDFLAGS@" "$(LDFLAGS)" \
"@SHARED_LDFLAGS@" "$(SHARED_LDFLAGS)" \
"@BUNDLE_LDFLAGS@" "$(SHARED_LDFLAGS)" \
"@CLIBS@" "user32.lib ws2_32.lib shell32.lib" \
"@STATICLIBS@" "eclgmp.lib eclgc.lib" \
"@CLIBS@" "$(CLIBS)" \
"@STATICLIBS@" "$(STATICLIBS)" \
"@OBJEXT@" "obj" \
"@SHAREDPREFIX@" "" \
"@SHAREDEXT@" "dll" \
@ -340,6 +348,7 @@ eclmin.lib: eclgmp.lib eclgc.lib lsp/config.lsp
$(MAKE) ECL_VERSION_NUMBER=$(ECL_VERSION_NUMBER) \
ECL_THREADS=$(ECL_THREADS) ECL_UNICODE=$(ECL_UNICODE) \
ECL_SSE=$(ECL_SSE) ECL_WIN64=$(ECL_WIN64) \
ECL_USE_DBGHELP=$(ECL_USE_DBGHELP) \
"ECL_CFLAGS=$(CFLAGS) -DGC_BUILD"
cd ..
eclgc.lib:
@ -448,6 +457,7 @@ clean_ecl:
-$(MAKE) ECL_VERSION_NUMBER=$(ECL_VERSION_NUMBER) \
ECL_THREADS=$(ECL_THREADS) ECL_UNICODE=$(ECL_UNICODE) \
ECL_SSE=$(ECL_SSE) ECL_WIN64=$(ECL_WIN64) \
ECL_USE_DBGHELP=$(ECL_USE_DBGHELP) \
"ECL_CFLAGS=$(CFLAGS) -DGC_BUILD" clean
cd ..
clean_lisp:

View file

@ -35,6 +35,12 @@ ECL_SSE_FLAG=0
ECL_SSE_OBJ=
!endif
!if "$(ECL_USE_DBGHELP)" != ""
ECL_USE_DBGHELP_FLAG=1
!else
ECL_USE_DBGHELP_FLAG=0
!endif
# Programs used by "make":
#
TRUE_CC = cl
@ -60,12 +66,14 @@ libdir=$(prefix)\lib\ecl
# Files
HDIR = $(top_srcdir)\h
HFILES = ..\ecl\config.h ..\ecl\atomic_ops.h $(HDIR)\ecl.h $(HDIR)\ecl-cmp.h\
$(HDIR)\object.h $(HDIR)\cs.h $(HDIR)\stacks.h\
$(HDIR)\external.h $(HDIR)\cons.h $(HDIR)\legacy.h\
HFILES = ..\ecl\config.h ..\ecl\config-internal.h ..\ecl\atomic_ops.h \
$(HDIR)\ecl.h $(HDIR)\ecl-cmp.h \
$(HDIR)\object.h $(HDIR)\cs.h $(HDIR)\stacks.h \
$(HDIR)\external.h $(HDIR)\cons.h $(HDIR)\legacy.h \
$(HDIR)\number.h $(HDIR)\page.h \
$(HDIR)\internal.h $(HDIR)\ecl-inl.h $(HDIR)\bytecodes.h \
$(HDIR)\impl\math_dispatch.h
$(HDIR)\impl\math_dispatch.h $(HDIR)\cache.h $(HDIR)\stack-resize.h \
$(HDIR)\ecl-atomic-ops.h
OBJS = main.obj symbol.obj package.obj cons.obj list.obj\
apply.obj eval.obj \
@ -153,21 +161,23 @@ clean:
# Build rules
$(DPP): $(srcdir)/dpp.c $(srcdir)/symbols_list2.h ../ecl/config.h
$(DPP): $(srcdir)/dpp.c $(srcdir)/symbols_list2.h ../ecl/config.h ../ecl/config-internal.h
$(TRUE_CC) -I.. -I./ $(srcdir)/dpp.c -o $@
$(HFILES): ../ecl/config.h.msvc6 Makefile
$(HFILES): ../ecl/config.h.msvc6 ../ecl/config-internal.h.msvc6 Makefile
-mkdir ..\ecl\impl
cut.exe "@ECL_FPE_CODE@" "$(srcdir:\=/)/arch/$(ECL_FPE_CODE)" \
"@ECL_VERSION_NUMBER@" "$(ECL_VERSION_NUMBER)" \
"@ECL_THREADS@" "$(ECL_THREADS_FLAG)" \
"@ECL_UNICODE@" "$(ECL_UNICODE_FLAG)" \
"@ECL_SSE2@" "$(ECL_SSE_FLAG)" \
"@ECL_USE_DBGHELP@" "$(ECL_USE_DBGHELP_FLAG)" \
< ..\ecl\config.h.msvc6 > ..\ecl\config.h
cut.exe "@ECL_FPE_CODE@" "$(srcdir:\=/)/arch/$(ECL_FPE_CODE)" \
"@ECL_VERSION_NUMBER@" "$(ECL_VERSION_NUMBER)" \
"@ECL_THREADS@" "$(ECL_THREADS_FLAG)" \
"@ECL_UNICODE@" "$(ECL_UNICODE_FLAG)" \
"@ECL_SSE2@" "$(ECL_SSE_FLAG)" \
"@ECL_USE_DBGHELP@" "$(ECL_USE_DBGHELP_FLAG)" \
< ..\ecl\config-internal.h.msvc6 > ..\ecl\config-internal.h
xcopy /SYI $(top_srcdir)\h\*.h ..\ecl
-mkdir ..\ecl\atomic_ops

View file

@ -210,3 +210,8 @@
# define ECL_MATHERR_CLEAR
# define ECL_MATHERR_TEST
#endif
#define ECL_WINDOWS_BACKTRACE @ECL_USE_DBGHELP@
#if !ECL_WINDOWS_BACKTRACE
#undef ECL_WINDOWS_BACKTRACE
#endif

16
src/aclocal.m4 vendored
View file

@ -831,22 +831,6 @@ AC_MSG_CHECKING([Linker flags])
AC_MSG_RESULT([${LDFLAGS}])
])
dnl --------------------------------------------------------------
dnl Determine whether GCC supports backtraces
dnl
AC_DEFUN([ECL_GCC_BACKTRACE],[
if test "x${cross_compiling}" != "xyes"; then
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
void *foo() { return __builtin_return_address(1); }
int main() {
return (foo() == 0);
}]])],
[AC_DEFINE([HAVE___BUILTIN_RETURN_ADDRESS], [], [HAVE___BUILTIN_RETURN_ADDRESS])],
[])
fi
])
dnl ----------------------------------------------------------------------
dnl Choose the type of code to detect floating point exceptions and
dnl raise them.

View file

@ -54,7 +54,7 @@ ecl_internal_error(const char *s)
strerror(saved_errno));
}
fflush(stderr);
si_dump_c_backtrace(ecl_make_fixnum(32));
_ecl_dump_c_backtrace();
#ifdef SIGIOT
signal(SIGIOT, SIG_DFL); /* avoid getting into a loop with abort */
#endif

View file

@ -14,112 +14,116 @@
#include <stdlib.h>
#include <ecl/ecl.h>
#ifdef HAVE_DLADDR
# ifdef HAVE_DLFCN_H
# include <dlfcn.h>
# endif
#endif
#if defined(HAVE_BACKTRACE) || defined(HAVE_BACKTRACE_SYMBOLS)
#if defined(HAVE_BACKTRACE) && defined(HAVE_BACKTRACE_SYMBOLS)
# include <execinfo.h>
# define ECL_UNIX_BACKTRACE
#endif
#if !defined(HAVE_BACKTRACE) && defined(HAVE___BUILTIN_RETURN_ADDRESS)
#define HAVE_BACKTRACE
static int
backtrace(void **buffer, int n)
{
int nframes = (n > 32)? 32 : n;
int i;
switch (nframes) {
case 32: buffer[31] = __builtin_return_address(31);
case 31: buffer[30] = __builtin_return_address(30);
case 30: buffer[29] = __builtin_return_address(29);
case 29: buffer[28] = __builtin_return_address(28);
case 28: buffer[27] = __builtin_return_address(27);
case 27: buffer[26] = __builtin_return_address(26);
case 26: buffer[25] = __builtin_return_address(25);
case 25: buffer[24] = __builtin_return_address(24);
case 24: buffer[23] = __builtin_return_address(23);
case 23: buffer[22] = __builtin_return_address(22);
case 22: buffer[21] = __builtin_return_address(21);
case 21: buffer[20] = __builtin_return_address(20);
case 20: buffer[19] = __builtin_return_address(19);
case 19: buffer[18] = __builtin_return_address(18);
case 18: buffer[17] = __builtin_return_address(17);
case 17: buffer[16] = __builtin_return_address(16);
case 16: buffer[15] = __builtin_return_address(15);
case 15: buffer[14] = __builtin_return_address(14);
case 14: buffer[13] = __builtin_return_address(13);
case 13: buffer[12] = __builtin_return_address(12);
case 12: buffer[11] = __builtin_return_address(11);
case 11: buffer[10] = __builtin_return_address(10);
case 10: buffer[9] = __builtin_return_address(9);
case 9: buffer[8] = __builtin_return_address(8);
case 8: buffer[7] = __builtin_return_address(7);
case 7: buffer[6] = __builtin_return_address(6);
case 6: buffer[5] = __builtin_return_address(5);
case 5: buffer[4] = __builtin_return_address(4);
case 4: buffer[3] = __builtin_return_address(3);
case 3: buffer[2] = __builtin_return_address(2);
case 2: buffer[1] = __builtin_return_address(1);
case 1: buffer[0] = __builtin_return_address(0);
}
return nframes;
}
#if defined(ECL_WINDOWS_BACKTRACE)
# include <windows.h>
# include <DbgHelp.h>
#endif
#if !defined(HAVE_BACKTRACE_SYMBOLS)
# if defined(HAVE_BACKTRACE) && defined(HAVE_DLADDR)
# define HAVE_BACKTRACE_SYMBOLS
# define BACKTRACE_SYMBOLS_SIMPLE
static char **
backtrace_symbols(void **buffer, int nframes)
/* Max number of frames dumped by _ecl_dump_c_backtrace */
#define MAX_BACKTRACE_SIZE 128
/* Max length of symbols printed */
#define MAX_SYMBOL_LENGTH 256
void
_ecl_dump_c_backtrace()
{
Dl_info data[1];
int i;
char **strings = malloc(nframes * sizeof(char*));
for (i = 0; i < nframes; i++) {
if (dladdr(buffer[i], data)) {
strings[i] = data->dli_sname;
} else {
strings[i] = "unknown";
#if defined(ECL_UNIX_BACKTRACE) || defined(ECL_WINDOWS_BACKTRACE)
{
void **pointers = malloc(sizeof(void*) * MAX_BACKTRACE_SIZE);
# if defined(ECL_UNIX_BACKTRACE)
int nframes = backtrace(pointers, MAX_BACKTRACE_SIZE);
char **names = backtrace_symbols(pointers, nframes);
# elif defined(ECL_WINDOWS_BACKTRACE)
HANDLE process = GetCurrentProcess();
if (!SymInitialize(process, NULL, TRUE)) {
return;
}
int nframes = CaptureStackBackTrace(0, MAX_BACKTRACE_SIZE, pointers, NULL);
char buffer[sizeof(SYMBOL_INFO) + MAX_SYMBOL_LENGTH * sizeof(TCHAR)];
PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
pSymbol->MaxNameLen = MAX_SYMBOL_LENGTH;
# endif
int i;
fprintf(stderr, "\n;;; ECL C Backtrace\n");
for (i = 0; i < nframes; i++) {
# if defined(ECL_UNIX_BACKTRACE)
fprintf(stderr, ";;; %s\n", names[i]);
# elif defined(ECL_WINDOWS_BACKTRACE)
DWORD64 displacement;
if (SymFromAddr(process, (DWORD64) pointers[i], &displacement, pSymbol)) {
fprintf(stderr, ";;; (%s+0x%llx) [0x%p]\n", pSymbol->Name, displacement, pointers[i]);
} else {
fprintf(stderr, ";;; (unknown) [0x%p]\n", pointers[i]);
}
# endif
}
fflush(stderr);
free(pointers);
# if defined(ECL_UNIX_BACKTRACE)
free(names);
# elif defined(ECL_WINDOWS_BACKTRACE)
SymCleanup(process);
# endif
}
return strings;
#endif /* defined(ECL_UNIX_BACKTRACE) || defined(ECL_WINDOWS_BACKTRACE) */
}
# endif /* HAVE_BACKTRACE && HAVE_DLADDR */
#endif /* !HAVE_BACKTRACE_SYMBOLS */
cl_object
si_dump_c_backtrace(cl_object size)
{
cl_env_ptr the_env = ecl_process_env();
#ifdef HAVE_BACKTRACE_SYMBOLS
#if defined(ECL_UNIX_BACKTRACE) || defined(ECL_WINDOWS_BACKTRACE)
{
void *pointers[32];
int nframes = backtrace(pointers, 32);
cl_index nsize = ecl_to_unsigned_integer(size);
void **pointers = malloc(sizeof(void*) * nsize);
# if defined(ECL_UNIX_BACKTRACE)
int nframes = backtrace(pointers, nsize);
char **names = backtrace_symbols(pointers, nframes);
int i;
fprintf(stderr, "\n;;; ECL C Backtrace\n");
for (i = 0; i < nframes; i++) {
#ifdef BACKTRACE_SYMBOLS_SIMPLE
fprintf(stderr, ";;; %4d %s (%p) \n", i, names[i], pointers[i]);
#else
fprintf(stderr, ";;; %s\n", names[i]);
#endif
# elif defined(ECL_WINDOWS_BACKTRACE)
HANDLE process = GetCurrentProcess();
if (!SymInitialize(process, NULL, TRUE)) {
return;
}
fflush(stderr);
int nframes = CaptureStackBackTrace(0, nsize, pointers, NULL);
char buffer[sizeof(SYMBOL_INFO) + MAX_SYMBOL_LENGTH * sizeof(TCHAR)];
PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
pSymbol->MaxNameLen = MAX_SYMBOL_LENGTH;
# endif
int i;
cl_format(2, ECL_T, make_constant_base_string("~&C Backtrace:~%"));
for (i = 0; i < nframes; i++) {
# if defined(ECL_UNIX_BACKTRACE)
cl_format(3, ECL_T, make_constant_base_string(" > ~a~%"),
make_constant_base_string(names[i]));
# elif defined(ECL_WINDOWS_BACKTRACE)
DWORD64 displacement;
if (SymFromAddr(process, (DWORD64) pointers[i], &displacement, pSymbol)) {
cl_format(5, ECL_T, make_constant_base_string(" > (~a+0x~x) [0x~x]~%"),
make_constant_base_string(pSymbol->Name),
ecl_make_unsigned_integer(displacement),
ecl_make_unsigned_integer((cl_index)pointers[i]));
} else {
cl_format(3, ECL_T, make_constant_base_string(" > (unknown) [0x~x]~%"),
ecl_make_unsigned_integer((cl_index)pointers[i]));
}
# endif
}
free(pointers);
# if defined(ECL_UNIX_BACKTRACE)
free(names);
# elif defined(ECL_WINDOWS_BACKTRACE)
SymCleanup(process);
# endif
}
ecl_return1(the_env, ECL_T);
#else
ecl_return1(the_env, ECL_NIL);
#endif
}
cl_object
si_backtrace(cl_object start, cl_object end)
{
@(return ECL_NIL);
#endif /* defined(ECL_UNIX_BACKTRACE) || defined(ECL_WINDOWS_BACKTRACE) */
}

32
src/configure vendored
View file

@ -1521,8 +1521,7 @@ Optional Packages:
--with-rt Deprecated! include MIT-RT testing environment
(yes|builtin|no, default=NO)
--with-profile Deprecated! include CMUCL's simple profiler
(yes|builtin|no, default=YES if Boehm-Weiser garbage
collector used)
(yes|builtin|no, default=NO)
--with-dffi dynamic foreign function interface
(system|included|auto|no, default=AUTO if libffi
available)
@ -2859,7 +2858,7 @@ fi
if test "${with_profile+set}" = set; then :
withval=$with_profile;
else
with_profile=NO
with_profile=no
fi
@ -9422,33 +9421,6 @@ $as_echo "#define ECL_CXX_CORE 1" >>confdefs.h
fi
if test "x${cross_compiling}" != "xyes"; then
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
void *foo() { return __builtin_return_address(1); }
int main() {
return (foo() == 0);
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
$as_echo "#define HAVE___BUILTIN_RETURN_ADDRESS /**/" >>confdefs.h
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
fi
case "${enable_libatomic}" in
auto|system|included) ;;
*) as_fn_error $? "Invalid value of --enable-libatomic: ${enable_libatomic} " "$LINENO" 5;;

View file

@ -192,8 +192,8 @@ AC_ARG_WITH(rt,
AC_ARG_WITH(profile,
AS_HELP_STRING( [--with-profile],
[Deprecated! include CMUCL's simple profiler]
[(yes|builtin|no, default=YES if Boehm-Weiser garbage collector used)]),
[], [with_profile=NO])
[(yes|builtin|no, default=NO)]),
[], [with_profile=no])
AC_ARG_WITH(dffi,
AS_HELP_STRING( [--with-dffi],
@ -752,7 +752,6 @@ else
boehm_configure_flags="${boehm_configure_flags} --enable-cplusplus"
fi
ECL_GCC_BACKTRACE
ECL_LIBATOMIC_OPS
dnl ----------------------------------------------------------------------

View file

@ -431,9 +431,6 @@
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* HAVE___BUILTIN_RETURN_ADDRESS */
#undef HAVE___BUILTIN_RETURN_ADDRESS
/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
slash. */
#undef LSTAT_FOLLOWS_SLASHED_SYMLINK

View file

@ -161,10 +161,8 @@
/* existence of char **environ */
#undef HAVE_ENVIRON
/* existence of pointer -> function name functions */
#undef HAVE_DLADDR
#undef HAVE_BACKTRACE
#undef HAVE_BACKTRACE_SYMBOLS
#undef HAVE___BUILTIN_RETURN_ADDRESS
#undef HAVE_SCHED_H
/*

View file

@ -632,7 +632,6 @@ extern ECL_API cl_object si_mmap_array(cl_object map);
/* ffi/backtrace.d */
extern ECL_API cl_object si_dump_c_backtrace(cl_object size);
extern ECL_API cl_object si_backtrace(cl_object start, cl_object end);
/* ffi.c */

View file

@ -55,33 +55,33 @@
(defconstant tpl-commands
'(("Top level commands"
((:cf :compile-file) tpl-compile-command :string
":cf Compile file"
":cf Compile file"
":compile-file &string &rest files [Top level command]~@
:cf &string &rest files [Abbreviation]~@
~@
Compile files. With no arguments, uses values from latest :cf~@
command. File extensions are optional.~%")
((:exit :eof) quit :eval
":exit Exit Lisp"
":exit Exit Lisp"
":exit &eval &optional (status 0) [Top level command]~@
~@
Exit Lisp without further confirmation.~%")
((:ld :load) tpl-load-command :string
":ld Load file"
":ld Load file"
":load &string &rest files [Top level command]~@
:ld &string &rest files [Abbreviation]~@
~@
Load files. With no arguments, uses values from latest :ld~@
or :cf command. File extensions are optional.~%")
((:step) tpl-step-command nil
":step Single step form"
":step Single step form"
":step form [Top level command]~@
~@
Evaluate form in single step mode. While stepping, a new break~@
level is invoked before every evaluation. Extra commands are~@
available at this time to control stepping and form evaluation.~%")
((:tr :trace) tpl-trace-command nil
":tr(ace) Trace function"
":tr(ace) Trace function"
":trace &rest functions [Top level command]~@
:tr &rest functions [Abbreviation]~@
~@
@ -90,7 +90,7 @@
~@
See also: :untrace.~%")
((:untr :untrace) tpl-untrace-command nil
":untr(ace) Untrace function"
":untr(ace) Untrace function"
":untrace &rest functions [Top level command]~@
:untr &rest functions [Abbreviation]~@
~@
@ -100,7 +100,7 @@
See also: :trace.~%")
#+threads
((:s :switch) tpl-switch-command nil
":s(witch) Switch to next process to debug"
":s(witch) Switch to next process to debug"
":switch process [Break command]~@
:s processs [Abbreviation]~@
~@
@ -109,7 +109,7 @@
of the process in the debugger waiting list.~%")
#+threads
((:br :break) tpl-interrupt-command nil
":br(eak) Stop a given process"
":br(eak) Stop a given process"
":break process [Break command]~@
:br processs [Abbreviation]~@
~@
@ -118,7 +118,7 @@
of the process in the debugger waiting list (:waiting).~%")
#+threads
((:w :waiting) tpl-waiting-command nil
":w(aiting) Display list of active toplevels"
":w(aiting) Display list of active toplevels"
":waiting [Break command]~@
:w [Abbreviation]~@
~@
@ -126,19 +126,19 @@
)
("Help commands"
((:apropos) tpl-apropos-command nil
":apropos Apropos"
":apropos Apropos"
":apropos string &optional package [Top level command]~@
~@
Finds all available symbols whose print names contain string.~@
If a non NIL package is specified, only symbols in that package are considered.~@
~%")
((:doc document) tpl-document-command nil
":doc(ument) Document"
":doc(ument) Document"
":document symbol [Top level command]~@
~@
Displays documentation about function, print names contain string.~%")
((? :h :help) tpl-help-command nil
":h(elp) or ? Help. Type \":help help\" for more information"
":h(elp) or ? Help. Type \":help help\" for more information"
":help &optional topic [Top level command]~@
:h &optional topic [Abbreviation]~@
~@
@ -168,20 +168,20 @@
(defconstant break-commands
'("Break commands"
((:q :quit) tpl-quit-command nil
":q(uit) Return to some previous break level"
":q(uit) Return to some previous break level"
":quit &optional n [Break command]~@
:q &optional n [Abbreviation]~@
~@
Without argument, return to top level;~@
otherwise return to break level n.~%")
((:pop) (tpl-pop-command) :constant
":pop Pop to previous break level"
":pop Pop to previous break level"
":pop [Break command]~@
~@
Pop to previous break level, or if already in top level,~@
exit Lisp after confirmation.~%")
((:c :continue) continue nil
":c(ontinue) Continue execution"
":c(ontinue) Continue execution"
":continue [Break command]~@
:c [Abbreviation]~@
~@
@ -189,7 +189,7 @@
This command is only available when the break level is continuable~@
(e.g., called from a correctable error or the function break).~%")
((:b :backtrace) tpl-backtrace nil
":b(acktrace) Print backtrace"
":b(acktrace) Print backtrace"
":backtrace &optional n [Break command]~@
:b &optional n [Abbreviation]~@
~@
@ -202,7 +202,7 @@
~@
See also: :function, :previous, :next.~%")
((:f :function) tpl-print-current nil
":f(unction) Show current function"
":f(unction) Show current function"
":function [Break command]~@
:f [Abbreviation]~@
~@
@ -213,7 +213,7 @@
~@
See also: :backtrace, :next, previous, :disassemble, :variables.~%")
((:p :previous) tpl-previous nil
":p(revious) Go to previous function"
":p(revious) Go to previous function"
":previous &optional (n 1) [Break command]~@
:p &optional (n 1) [Abbreviation]~@
~@
@ -222,11 +222,11 @@
~@
See also: :backtrace, :function, :go, :next.~%")
((:d :down) tpl-previous nil
":d(own) Alias to :previous"
":d(own) Alias to :previous"
""
)
((:n :next) tpl-next nil
":n(ext) Go to next function"
":n(ext) Go to next function"
":next &optional (n 1) [Break command]~@
:n &optional (n 1) [Abbreviation]~@
~@
@ -235,18 +235,18 @@
~@
See also: :backtrace, :function, :go, :previous.~%")
((:u :up) tpl-next nil
":u(p) Alias to :next"
":u(p) Alias to :next"
""
)
((:g :go) tpl-go nil
":g(o) Go to next function"
":g(o) Go to next function"
":go &optional (n 1) [Break command]~@
:g &optional (n 1) [Abbreviation]~@
~@
Move to the function at IHS[i].~@
See also: :backtrace, :function, :next, :previous.~%")
((:fs :forward-search) tpl-forward-search :string
":fs Search forward for function"
":fs Search forward for function"
":forward-search &string substring [Break command]~@
:fs &string substring [Abbreviation]~@
~@
@ -255,7 +255,7 @@
~@
See also: :backtrace, :function, :next.~%")
((:bs :backward-search) tpl-backward-search :string
":bs Search backward for function"
":bs Search backward for function"
":backward-search &string substring [Break command]~@
:bs &string substring [Abbreviation]~@
~@
@ -264,7 +264,7 @@
~@
See also: :backtrace, :function, :previous.~%")
((:disassemble) tpl-disassemble-command nil
":disassemble Disassemble current function"
":disassemble Disassemble current function"
":disassemble [Break command]~@
:disassemble [Abbreviation]~@
~@
@ -278,7 +278,7 @@
Show the lisp code of the current function. Only works for interpreted~@
functions.~%")
((:v :variables) tpl-variables-command nil
":v(ariables) Show local variables, functions, blocks, and tags"
":v(ariables) Show local variables, functions, blocks, and tags"
":variables &optional no-values [Break command]~@
:v &optional no-values [Abbreviation]~@
~@
@ -288,7 +288,7 @@
unless the argument is non-null.~%")
#|
((:l :local) tpl-local-command nil
":l(ocal) Return the nth local value on the stack"
":l(ocal) Return the nth local value on the stack"
":local &optional (n 0) [Break command]~@
:l &optional (n 0) [Abbreviation]
~@
@ -297,14 +297,14 @@
level as well as saved in the variable *.~%")
|#
((:hide) tpl-hide nil
":hide Hide function"
":hide Hide function"
":hide function [Break command]~@
~@
Hide function. A hidden function is not displayed in a backtrace.~@
~@
See also: :backtrace, :unhide, :hide-package.~%")
((:unhide) tpl-unhide nil
":unhide Unhide function"
":unhide Unhide function"
":unhide function [Break command]~@
~@
Unhide function. The specified function will be displayed in future~@
@ -312,7 +312,7 @@
~@
See also: :backtrace, :hide, :unhide-package.~%")
((:hp :hide-package) tpl-hide-package nil
":hp Hide package"
":hp Hide package"
":hide-package package [Break command]~@
:hp package [Abbreviation]~@
~@
@ -321,7 +321,7 @@
~@
See also: :backtrace, :unhide-package.~%")
((:unhp :unhide-package) tpl-unhide-package nil
":unhp Unhide package"
":unhp Unhide package"
":unhide-package package [Break command]~@
:unhp package [Abbreviation]~@
~@
@ -330,7 +330,7 @@
~@
See also: :backtrace, :hide-package, :hide, :unhide.~%")
((:unhide-all) tpl-unhide-all nil
":unhide-all Unhide all variables and packages"
":unhide-all Unhide all variables and packages"
":unhide-all [Break command]~@
~@
Unhide all variables and packages. All functions will be displayed~@
@ -339,7 +339,7 @@
See also: :hide, :unhide, :hide-package, :unhide-package.~%")
#|
((:vs :value-stack) tpl-vs-command nil
":vs Show value stack"
":vs Show value stack"
":value-stack &optional n [Break command]~@
:vs &optional n [Abbreviation]~@
~@
@ -350,7 +350,7 @@
See also: :local.~%")
|#
((:bds :binding-stack) tpl-bds-command nil
":bds Show binding stack"
":bds Show binding stack"
":binding-stack &optional variable [Break command]~@
:bds &optional variable [Abbreviation]~@
~@
@ -358,23 +358,23 @@
break level. With a variable name, print nothing, but return the~@
value of the given variable on the binding stack.~%")
((:frs :frame-stack) tpl-frs-command nil
":frs Show frame stack"
":frs Show frame stack"
""
)
((:m :message) tpl-print-message nil
":m(essage) Show error message"
":m(essage) Show error message"
":message [Break command]~@
:m [Abbreviation]~@
~@
Show current error message.~%")
((:hs :help-stack) tpl-help-stack-command nil
":hs Help stack"
":hs Help stack"
":help-stack [Break command]~@
:hs [Abbreviation]~@
~@
Lists the functions to access the LISP system stacks.~%")
((:i :inspect) tpl-inspect-command nil
":i(nspect) Inspect value of local variable"
":i(nspect) Inspect value of local variable"
":inspect var-name [Break command]~@
:i var-name [Abbreviation]~@
~@
@ -383,6 +383,15 @@
then be used regardless of of the symbol's package.~@
~@
See also: :variables.~%")
((:cb :c-backtrace) ext::dump-c-backtrace nil
":c(-)b(acktrace) Print a raw C backtrace"
":c-backtrace n [Break command]~@
:cb n [Abbreviation]~@
~@
Show function call history of the n C functions above and~@
including the current one.~@
~@
See also: :backtrace.~%")
))
(defparameter *lisp-initialized* nil)