1996-09-04 23:59:26 +00:00
|
|
|
/* Simple interpreter interface for GDB, the GNU debugger.
|
2000-06-12 12:28:24 +00:00
|
|
|
Copyright (C) 1996, 2000 Free Software Foundation
|
1996-09-04 23:59:26 +00:00
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
|
|
This program 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 of the License, or
|
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program 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 this program; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
|
|
2001-06-03 23:32:27 +00:00
|
|
|
As a special exception, the Free Software Foundation gives permission
|
|
|
|
|
for additional uses of the text contained in its release of GUILE.
|
|
|
|
|
|
|
|
|
|
The exception is that, if you link the GUILE library with other files
|
|
|
|
|
to produce an executable, this does not by itself cause the
|
|
|
|
|
resulting executable to be covered by the GNU General Public License.
|
|
|
|
|
Your use of that executable is in no way restricted on account of
|
|
|
|
|
linking the GUILE library code into it.
|
|
|
|
|
|
|
|
|
|
This exception does not however invalidate any other reasons why
|
|
|
|
|
the executable file might be covered by the GNU General Public License.
|
|
|
|
|
|
|
|
|
|
This exception applies only to the code released by the
|
|
|
|
|
Free Software Foundation under the name GUILE. If you copy
|
|
|
|
|
code from other Free Software Foundation releases into a copy of
|
|
|
|
|
GUILE, as the General Public License permits, the exception does
|
|
|
|
|
not apply to the code that you add in this way. To avoid misleading
|
|
|
|
|
anyone as to the status of such modified files, you must delete
|
|
|
|
|
this exception notice from them.
|
|
|
|
|
|
|
|
|
|
If you write modifications of your own for GUILE, it is your choice
|
|
|
|
|
whether to permit this exception to apply to your modifications.
|
|
|
|
|
If you do not wish that, delete this exception notice.
|
|
|
|
|
|
1996-09-04 23:59:26 +00:00
|
|
|
The author can be reached at djurfeldt@nada.kth.se
|
|
|
|
|
Mikael Djurfeldt, SANS/NADA KTH, 10044 STOCKHOLM, SWEDEN */
|
|
|
|
|
|
* __scm.h, alist.c, alist.h, append.c, append.h, appinit.c,
arbiters.c, arbiters.h, async.c, async.h, boolean.c, boolean.h,
chars.c, chars.h, continuations.c, continuations.h, debug.c,
debug.h, dynwind.c, dynwind.h, eq.c, eq.h, error.c, eval.c,
eval.h, extchrs.c, extchrs.h, fdsocket.c, fdsocket.h, filesys.c,
filesys.h, fports.c, fports.h, gc.c, gdb_interface.h, gdbint.c,
gdbint.h, genio.c, genio.h, gscm.c, gscm.h, gsubr.c, gsubr.h,
hash.c, hash.h, hashtab.c, hashtab.h, init.c, ioext.c, ioext.h,
kw.c, kw.h, libguile.h, mallocs.c, mallocs.h, markers.c,
markers.h, mbstrings.c, mbstrings.h, numbers.c, numbers.h,
objprop.c, objprop.h, options.c, options.h, pairs.c, pairs.h,
ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c,
procprop.h, procs.c, procs.h, ramap.c, ramap.h, read.c, read.h,
root.c, scmsigs.c, scmsigs.h, sequences.c, sequences.h, simpos.c,
simpos.h, smob.c, socket.c, socket.h, srcprop.c, srcprop.h,
stackchk.c, stackchk.h, stime.c, stime.h, strings.c, strings.h,
strop.c, strop.h, strorder.c, strorder.h, strports.c, strports.h,
struct.c, struct.h, symbols.c, symbols.h, tag.c, tag.h, unif.c,
unif.h, variable.c, variable.h, vectors.c, vectors.h, version.c,
version.h, vports.c, vports.h, weaks.c, weaks.h: Use SCM_P to
declare functions with prototypes. (Patch thanks to Marius
Vollmer.)
More prototype-related changes from Marius Vollmer:
* gdb_interface.h: Wrapped header file in #ifdef/#endif
* gscm.h (gscm_run_scm): Added prototype for `initfn' paramter.
* ports.h (ptobfuns): Added prototypes. This means some casting in
fports.c.
* fports.c: Added casts for initializations, since the functions
are defined to take FILE * as their stream argument, not SCM.
* fdsocket.c, fdsocket.h: Made `init_addr_buffer' static.
* genio.c (scm_gen_puts): Changed `unsigned char *str_data' parameter
to `char *str_data' to conform to prototype.
1996-10-14 01:28:01 +00:00
|
|
|
#ifndef GDB_INTERFACE_H
|
|
|
|
|
#define GDB_INTERFACE_H
|
|
|
|
|
|
1996-09-04 23:59:26 +00:00
|
|
|
/* This is the header file for GDB's interpreter interface. The
|
|
|
|
|
interpreter must supply definitions of all symbols declared in this
|
|
|
|
|
file.
|
|
|
|
|
|
|
|
|
|
Before including this file, you must #define GDB_TYPE to be the
|
|
|
|
|
data type used for communication with the interpreter. */
|
|
|
|
|
|
|
|
|
|
/* The following macro can be used to anchor the symbols of the
|
|
|
|
|
interface in your main program. This is necessary if the interface
|
|
|
|
|
is defined in a library, such as Guile. */
|
|
|
|
|
|
2001-06-26 17:53:09 +00:00
|
|
|
#ifndef __MINGW32__
|
1996-09-04 23:59:26 +00:00
|
|
|
#define GDB_INTERFACE \
|
|
|
|
|
void *gdb_interface[] = { \
|
|
|
|
|
&gdb_options, \
|
|
|
|
|
&gdb_language, \
|
|
|
|
|
&gdb_result, \
|
|
|
|
|
&gdb_output, \
|
|
|
|
|
&gdb_output_length, \
|
1997-02-21 23:02:01 +00:00
|
|
|
(void *) gdb_maybe_valid_type_p, \
|
|
|
|
|
(void *) gdb_read, \
|
|
|
|
|
(void *) gdb_eval, \
|
|
|
|
|
(void *) gdb_print, \
|
|
|
|
|
(void *) gdb_binding \
|
1997-06-22 20:49:31 +00:00
|
|
|
}
|
2001-06-26 17:53:09 +00:00
|
|
|
#else /* __MINGW32__ */
|
|
|
|
|
/* Because the following functions are imported from a DLL (some kind of
|
|
|
|
|
shared library) these are NO static initializers. That is why you need to
|
|
|
|
|
define them and assign the functions and data items at run time. */
|
|
|
|
|
#define GDB_INTERFACE \
|
|
|
|
|
void *gdb_interface[] = \
|
|
|
|
|
{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
|
|
|
|
|
#define GDB_INTERFACE_INIT \
|
|
|
|
|
do { \
|
|
|
|
|
gdb_interface[0] = &gdb_options; \
|
|
|
|
|
gdb_interface[1] = &gdb_language; \
|
|
|
|
|
gdb_interface[2] = &gdb_result; \
|
|
|
|
|
gdb_interface[3] = &gdb_output; \
|
|
|
|
|
gdb_interface[4] = &gdb_output_length; \
|
|
|
|
|
gdb_interface[5] = (void *) gdb_maybe_valid_type_p; \
|
|
|
|
|
gdb_interface[6] = (void *) gdb_read; \
|
|
|
|
|
gdb_interface[7] = (void *) gdb_eval; \
|
|
|
|
|
gdb_interface[8] = (void *) gdb_print; \
|
|
|
|
|
gdb_interface[9] = (void *) gdb_binding; \
|
|
|
|
|
} while (0);
|
|
|
|
|
#endif /* __MINGW32__ */
|
1996-09-04 23:59:26 +00:00
|
|
|
|
|
|
|
|
/* GDB_OPTIONS is a set of flags informing gdb what features are present
|
|
|
|
|
in the interface. Currently only one option is supported: */
|
|
|
|
|
|
|
|
|
|
/* GDB_HAVE_BINDINGS: Set this bit if your interpreter can create new
|
|
|
|
|
top level bindings on demand (through gdb_top_level_binding) */
|
|
|
|
|
|
|
|
|
|
#define GDB_HAVE_BINDINGS 1
|
|
|
|
|
|
|
|
|
|
extern unsigned short gdb_options;
|
|
|
|
|
|
|
|
|
|
/* GDB_LANGUAGE holds the name of the preferred language mode for this
|
|
|
|
|
interpreter. For lisp interpreters, the suggested mode is "lisp/c". */
|
|
|
|
|
|
|
|
|
|
extern char *gdb_language;
|
|
|
|
|
|
|
|
|
|
/* GDB_RESULT is used for passing results from the interpreter to GDB */
|
|
|
|
|
|
|
|
|
|
extern GDB_TYPE gdb_result;
|
|
|
|
|
|
|
|
|
|
/* The interpreter passes strings to GDB in GDB_OUTPUT and
|
|
|
|
|
GDB_OUTPUT_LENGTH. GDB_OUTPUT should hold the pointer to the
|
|
|
|
|
string. GDB_OUTPUT_LENGTH should hold its length. The string
|
|
|
|
|
doesn't need to be terminated by '\0'. */
|
|
|
|
|
|
|
|
|
|
extern char *gdb_output;
|
|
|
|
|
|
|
|
|
|
extern int gdb_output_length;
|
|
|
|
|
|
|
|
|
|
/* Return TRUE if the interpreter regards VALUE's type as valid. A
|
|
|
|
|
lazy implementation is allowed to pass TRUE always. FALSE should
|
|
|
|
|
only be returned when it is certain that VALUE is not valid.
|
|
|
|
|
|
|
|
|
|
In the "lisp/c" language mode, this is used to heuristically
|
|
|
|
|
discriminate lisp values from C values during printing. */
|
|
|
|
|
|
2000-03-02 20:54:43 +00:00
|
|
|
extern int gdb_maybe_valid_type_p (GDB_TYPE value);
|
1996-09-04 23:59:26 +00:00
|
|
|
|
|
|
|
|
/* Parse expression in string STR. Store result in GDB_RESULT, then
|
|
|
|
|
return 0 to indicate success. On error, return -1 to indicate
|
|
|
|
|
failure. An error string can be passed in GDB_OUTPUT and
|
|
|
|
|
GDB_OUTPUT_LENGTH. Be careful to set GDB_OUTPUT_LENGTH to zero if
|
|
|
|
|
no message is passed. Please note that the resulting value should
|
|
|
|
|
be protected against garbage collection. */
|
|
|
|
|
|
2000-03-02 20:54:43 +00:00
|
|
|
extern int gdb_read (char *str);
|
1996-09-04 23:59:26 +00:00
|
|
|
|
|
|
|
|
/* Evaluate expression EXP. Store result in GDB_RESULT, then return 0
|
|
|
|
|
to indicate success. On error, return -1 to indicate failure. Any
|
|
|
|
|
output (both on success and failure) can be passed in GDB_OUTPUT
|
|
|
|
|
and GDB_OUTPUT_LENGTH. Be careful to set GDB_OUTPUT_LENGTH to zero
|
|
|
|
|
if no output is passed. Please note that the resulting lisp object
|
|
|
|
|
should be protected against garbage collection. */
|
|
|
|
|
|
2000-03-02 20:54:43 +00:00
|
|
|
extern int gdb_eval (GDB_TYPE exp);
|
1996-09-04 23:59:26 +00:00
|
|
|
|
|
|
|
|
/* Print VALUE. Store output in GDB_OUTPUT and GDB_OUTPUT_LENGTH.
|
|
|
|
|
Return 0 to indicate success. On error, return -1 to indicate
|
|
|
|
|
failure. GDB will not look at GDB_OUTPUT or GDB_OUTPUT_LENGTH on
|
|
|
|
|
failure. Note that this function should be robust against strange
|
|
|
|
|
values. It could in fact be passed any kind of value. */
|
|
|
|
|
|
2000-03-02 20:54:43 +00:00
|
|
|
extern int gdb_print (GDB_TYPE value);
|
1996-09-04 23:59:26 +00:00
|
|
|
|
|
|
|
|
/* Bind NAME to VALUE in interpreter. (GDB has previously obtained
|
|
|
|
|
NAME by passing a string to gdb_read.) Return 0 to indicate
|
|
|
|
|
success or -1 to indicate failure. This feature is optional. GDB
|
|
|
|
|
will only call this function if the GDB_HAVE_BINDINGS flag is set
|
|
|
|
|
in gdb_options. Note that GDB may call this function many times
|
|
|
|
|
for the same name.
|
|
|
|
|
|
|
|
|
|
For scheme interpreters, this function should introduce top-level
|
|
|
|
|
bindings. */
|
|
|
|
|
|
2000-03-02 20:54:43 +00:00
|
|
|
extern int gdb_binding (GDB_TYPE name, GDB_TYPE value);
|
1996-09-04 23:59:26 +00:00
|
|
|
|
* __scm.h, alist.c, alist.h, append.c, append.h, appinit.c,
arbiters.c, arbiters.h, async.c, async.h, boolean.c, boolean.h,
chars.c, chars.h, continuations.c, continuations.h, debug.c,
debug.h, dynwind.c, dynwind.h, eq.c, eq.h, error.c, eval.c,
eval.h, extchrs.c, extchrs.h, fdsocket.c, fdsocket.h, filesys.c,
filesys.h, fports.c, fports.h, gc.c, gdb_interface.h, gdbint.c,
gdbint.h, genio.c, genio.h, gscm.c, gscm.h, gsubr.c, gsubr.h,
hash.c, hash.h, hashtab.c, hashtab.h, init.c, ioext.c, ioext.h,
kw.c, kw.h, libguile.h, mallocs.c, mallocs.h, markers.c,
markers.h, mbstrings.c, mbstrings.h, numbers.c, numbers.h,
objprop.c, objprop.h, options.c, options.h, pairs.c, pairs.h,
ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c,
procprop.h, procs.c, procs.h, ramap.c, ramap.h, read.c, read.h,
root.c, scmsigs.c, scmsigs.h, sequences.c, sequences.h, simpos.c,
simpos.h, smob.c, socket.c, socket.h, srcprop.c, srcprop.h,
stackchk.c, stackchk.h, stime.c, stime.h, strings.c, strings.h,
strop.c, strop.h, strorder.c, strorder.h, strports.c, strports.h,
struct.c, struct.h, symbols.c, symbols.h, tag.c, tag.h, unif.c,
unif.h, variable.c, variable.h, vectors.c, vectors.h, version.c,
version.h, vports.c, vports.h, weaks.c, weaks.h: Use SCM_P to
declare functions with prototypes. (Patch thanks to Marius
Vollmer.)
More prototype-related changes from Marius Vollmer:
* gdb_interface.h: Wrapped header file in #ifdef/#endif
* gscm.h (gscm_run_scm): Added prototype for `initfn' paramter.
* ports.h (ptobfuns): Added prototypes. This means some casting in
fports.c.
* fports.c: Added casts for initializations, since the functions
are defined to take FILE * as their stream argument, not SCM.
* fdsocket.c, fdsocket.h: Made `init_addr_buffer' static.
* genio.c (scm_gen_puts): Changed `unsigned char *str_data' parameter
to `char *str_data' to conform to prototype.
1996-10-14 01:28:01 +00:00
|
|
|
#endif /* GDB_INTERFACE_H */
|
2000-03-19 19:01:16 +00:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Local Variables:
|
|
|
|
|
c-file-style: "gnu"
|
|
|
|
|
End:
|
|
|
|
|
*/
|