mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 19:14:52 +08:00
ed3ef33944
* NEWS: Mention Guile scripting. * Makefile.in (SUBDIR_GUILE_OBS): New variable. (SUBDIR_GUILE_SRCS, SUBDIR_GUILE_DEPS): New variables (SUBDIR_GUILE_LDFLAGS, SUBDIR_GUILE_CFLAGS): New variables. (INTERNAL_CPPFLAGS): Add GUILE_CPPFLAGS. (CLIBS): Add GUILE_LIBS. (install-guile): New rule. (guile.o): New rule. (scm-arch.o, scm-auto-load.o, scm-block.o): New rules. (scm-breakpoint.o, scm-disasm.o, scm-exception.o): New rules. (scm-frame.o, scm-iterator.o, scm-lazy-string.o): New rules. (scm-math.o, scm-objfile.o, scm-ports.o): New rules. (scm-pretty-print.o, scm-safe-call.o, scm-gsmob.o): New rules. (scm-string.o, scm-symbol.o, scm-symtab.o): New rules. (scm-type.o, scm-utils.o, scm-value.o): New rules. * configure.ac: New option --with-guile. * configure: Regenerate. * config.in: Regenerate. * auto-load.c: Remove #include "python/python.h". Add #include "gdb/section-scripts.h". (source_section_scripts): Handle Guile scripts. (_initialize_auto_load): Add name of Guile objfile script to scripts-directory help text. * breakpoint.c (condition_command): Tweak comment to include Scheme. * breakpoint.h (gdbscm_breakpoint_object): Add forward decl. (struct breakpoint): New member scm_bp_object. * defs.h (enum command_control_type): New value guile_control. * cli/cli-cmds.c: Remove #include "python/python.h". Add #include "extension.h". (show_user): Update comment. (_initialize_cli_cmds): Update help text for "show user". Update help text for max-user-call-depth. * cli/cli-script.c: Remove #include "python/python.h". Add #include "extension.h". (multi_line_command_p): Add guile_control. (print_command_lines): Handle guile_control. (execute_control_command, recurse_read_control_structure): Ditto. (process_next_line): Recognize "guile" commands. * disasm.c (gdb_disassemble_info): Make non-static. * disasm.h: #include "dis-asm.h". (struct gdbarch): Add forward decl. (gdb_disassemble_info): Declare. * extension.c: #include "guile/guile.h". (extension_languages): Add guile. (get_ext_lang_defn): Handle EXT_LANG_GDB. * extension.h (enum extension_language): New value EXT_LANG_GUILE. * gdbtypes.c (get_unsigned_type_max): New function. (get_signed_type_minmax): New function. * gdbtypes.h (get_unsigned_type_max): Declare. (get_signed_type_minmax): Declare. * guile/README: New file. * guile/guile-internal.h: New file. * guile/guile.c: New file. * guile/guile.h: New file. * guile/scm-arch.c: New file. * guile/scm-auto-load.c: New file. * guile/scm-block.c: New file. * guile/scm-breakpoint.c: New file. * guile/scm-disasm.c: New file. * guile/scm-exception.c: New file. * guile/scm-frame.c: New file. * guile/scm-gsmob.c: New file. * guile/scm-iterator.c: New file. * guile/scm-lazy-string.c: New file. * guile/scm-math.c: New file. * guile/scm-objfile.c: New file. * guile/scm-ports.c: New file. * guile/scm-pretty-print.c: New file. * guile/scm-safe-call.c: New file. * guile/scm-string.c: New file. * guile/scm-symbol.c: New file. * guile/scm-symtab.c: New file. * guile/scm-type.c: New file. * guile/scm-utils.c: New file. * guile/scm-value.c: New file. * guile/lib/gdb.scm: New file. * guile/lib/gdb/boot.scm: New file. * guile/lib/gdb/experimental.scm: New file. * guile/lib/gdb/init.scm: New file. * guile/lib/gdb/iterator.scm: New file. * guile/lib/gdb/printing.scm: New file. * guile/lib/gdb/types.scm: New file. * data-directory/Makefile.in (GUILE_SRCDIR): New variable. (VPATH): Add $(GUILE_SRCDIR). (GUILE_DIR): New variable. (GUILE_INSTALL_DIR, GUILE_FILES): New variables. (all): Add stamp-guile dependency. (stamp-guile): New rule. (clean-guile, install-guile, uninstall-guile): New rules. (install-only): Add install-guile dependency. (uninstall): Add uninstall-guile dependency. (clean): Add clean-guile dependency. doc/ * Makefile.in (GDB_DOC_FILES): Add guile.texi. * gdb.texinfo (Auto-loading): Add set/show auto-load guile-scripts. (Extending GDB): New menu entries Guile, Multiple Extension Languages. (Guile docs): Include guile.texi. (objfile-gdbdotext file): Add objfile-gdb.scm. (dotdebug_gdb_scripts section): Mention Guile scripts. (Multiple Extension Languages): New node. * guile.texi: New file. testsuite/ * configure.ac (AC_OUTPUT): Add gdb.guile. * configure: Regenerate. * lib/gdb-guile.exp: New file. * lib/gdb.exp (get_target_charset): New function. * gdb.base/help.exp: Update expected output from "apropos apropos". * gdb.guile/Makefile.in: New file. * gdb.guile/guile.exp: New file. * gdb.guile/scm-arch.c: New file. * gdb.guile/scm-arch.exp: New file. * gdb.guile/scm-block.c: New file. * gdb.guile/scm-block.exp: New file. * gdb.guile/scm-breakpoint.c: New file. * gdb.guile/scm-breakpoint.exp: New file. * gdb.guile/scm-disasm.c: New file. * gdb.guile/scm-disasm.exp: New file. * gdb.guile/scm-equal.c: New file. * gdb.guile/scm-equal.exp: New file. * gdb.guile/scm-error.exp: New file. * gdb.guile/scm-error.scm: New file. * gdb.guile/scm-frame-args.c: New file. * gdb.guile/scm-frame-args.exp: New file. * gdb.guile/scm-frame-args.scm: New file. * gdb.guile/scm-frame-inline.c: New file. * gdb.guile/scm-frame-inline.exp: New file. * gdb.guile/scm-frame.c: New file. * gdb.guile/scm-frame.exp: New file. * gdb.guile/scm-generics.exp: New file. * gdb.guile/scm-gsmob.exp: New file. * gdb.guile/scm-iterator.c: New file. * gdb.guile/scm-iterator.exp: New file. * gdb.guile/scm-math.c: New file. * gdb.guile/scm-math.exp: New file. * gdb.guile/scm-objfile-script-gdb.in: New file. * gdb.guile/scm-objfile-script.c: New file. * gdb.guile/scm-objfile-script.exp: New file. * gdb.guile/scm-objfile.c: New file. * gdb.guile/scm-objfile.exp: New file. * gdb.guile/scm-ports.exp: New file. * gdb.guile/scm-pretty-print.c: New file. * gdb.guile/scm-pretty-print.exp: New file. * gdb.guile/scm-pretty-print.scm: New file. * gdb.guile/scm-section-script.c: New file. * gdb.guile/scm-section-script.exp: New file. * gdb.guile/scm-section-script.scm: New file. * gdb.guile/scm-symbol.c: New file. * gdb.guile/scm-symbol.exp: New file. * gdb.guile/scm-symtab-2.c: New file. * gdb.guile/scm-symtab.c: New file. * gdb.guile/scm-symtab.exp: New file. * gdb.guile/scm-type.c: New file. * gdb.guile/scm-type.exp: New file. * gdb.guile/scm-value-cc.cc: New file. * gdb.guile/scm-value-cc.exp: New file. * gdb.guile/scm-value.c: New file. * gdb.guile/scm-value.exp: New file. * gdb.guile/source2.scm: New file. * gdb.guile/types-module.cc: New file. * gdb.guile/types-module.exp: New file.
216 lines
6.7 KiB
C
216 lines
6.7 KiB
C
/* Interface between gdb and its extension languages.
|
||
|
||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||
|
||
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 3 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, see <http://www.gnu.org/licenses/>. */
|
||
|
||
#ifndef EXTENSION_H
|
||
#define EXTENSION_H
|
||
|
||
#include "mi/mi-cmds.h" /* For PRINT_NO_VALUES, etc. */
|
||
|
||
struct breakpoint;
|
||
struct command_line;
|
||
struct frame_info;
|
||
struct language_defn;
|
||
struct objfile;
|
||
struct extension_language_defn;
|
||
struct type;
|
||
struct ui_file;
|
||
struct ui_out;
|
||
struct value;
|
||
struct value_print_options;
|
||
|
||
/* A function to load and process a script file.
|
||
The file has been opened and is ready to be read from the beginning.
|
||
Any exceptions are not caught, and are passed to the caller. */
|
||
typedef void script_sourcer_func (const struct extension_language_defn *,
|
||
FILE *stream, const char *filename);
|
||
|
||
/* A function to load and process a script for an objfile.
|
||
The file has been opened and is ready to be read from the beginning.
|
||
Any exceptions are not caught, and are passed to the caller. */
|
||
typedef void objfile_script_sourcer_func
|
||
(const struct extension_language_defn *,
|
||
struct objfile *, FILE *stream, const char *filename);
|
||
|
||
/* Enum of each extension(/scripting) language. */
|
||
|
||
enum extension_language
|
||
{
|
||
EXT_LANG_NONE,
|
||
EXT_LANG_GDB,
|
||
EXT_LANG_PYTHON,
|
||
EXT_LANG_GUILE
|
||
};
|
||
|
||
/* Extension language frame-filter status return values. */
|
||
|
||
enum ext_lang_bt_status
|
||
{
|
||
/* Return when an error has occurred in processing frame filters,
|
||
or when printing the stack. */
|
||
EXT_LANG_BT_ERROR = -1,
|
||
|
||
/* Return from internal routines to indicate that the function
|
||
succeeded. */
|
||
EXT_LANG_BT_OK = 1,
|
||
|
||
/* Return when the frame filter process is complete, and all
|
||
operations have succeeded. */
|
||
EXT_LANG_BT_COMPLETED = 2,
|
||
|
||
/* Return when the frame filter process is complete, but there
|
||
were no filter registered and enabled to process. */
|
||
EXT_LANG_BT_NO_FILTERS = 3
|
||
};
|
||
|
||
/* Flags to pass to apply_extlang_frame_filter. */
|
||
|
||
enum frame_filter_flags
|
||
{
|
||
/* Set this flag if frame level is to be printed. */
|
||
PRINT_LEVEL = 1,
|
||
|
||
/* Set this flag if frame information is to be printed. */
|
||
PRINT_FRAME_INFO = 2,
|
||
|
||
/* Set this flag if frame arguments are to be printed. */
|
||
PRINT_ARGS = 4,
|
||
|
||
/* Set this flag if frame locals are to be printed. */
|
||
PRINT_LOCALS = 8,
|
||
};
|
||
|
||
/* A choice of the different frame argument printing strategies that
|
||
can occur in different cases of frame filter instantiation. */
|
||
|
||
enum ext_lang_frame_args
|
||
{
|
||
/* Print no values for arguments when invoked from the MI. */
|
||
NO_VALUES = PRINT_NO_VALUES,
|
||
|
||
MI_PRINT_ALL_VALUES = PRINT_ALL_VALUES,
|
||
|
||
/* Print only simple values (what MI defines as "simple") for
|
||
arguments when invoked from the MI. */
|
||
MI_PRINT_SIMPLE_VALUES = PRINT_SIMPLE_VALUES,
|
||
|
||
/* Print only scalar values for arguments when invoked from the CLI. */
|
||
CLI_SCALAR_VALUES,
|
||
|
||
/* Print all values for arguments when invoked from the CLI. */
|
||
CLI_ALL_VALUES
|
||
};
|
||
|
||
/* The possible results of
|
||
extension_language_ops.breakpoint_cond_says_stop. */
|
||
|
||
enum ext_lang_bp_stop
|
||
{
|
||
/* No "stop" condition is set. */
|
||
EXT_LANG_BP_STOP_UNSET,
|
||
|
||
/* A "stop" condition is set, and it says "don't stop". */
|
||
EXT_LANG_BP_STOP_NO,
|
||
|
||
/* A "stop" condition is set, and it says "stop". */
|
||
EXT_LANG_BP_STOP_YES
|
||
};
|
||
|
||
/* Table of type printers associated with the global typedef table. */
|
||
|
||
struct ext_lang_type_printers
|
||
{
|
||
/* Type-printers from Python. */
|
||
void *py_type_printers;
|
||
};
|
||
|
||
/* The interface for gdb's own extension(/scripting) language. */
|
||
extern const struct extension_language_defn extension_language_gdb;
|
||
|
||
extern const struct extension_language_defn *get_ext_lang_defn
|
||
(enum extension_language lang);
|
||
|
||
extern const struct extension_language_defn *get_ext_lang_of_file
|
||
(const char *file);
|
||
|
||
extern int ext_lang_present_p (const struct extension_language_defn *);
|
||
|
||
extern int ext_lang_initialized_p (const struct extension_language_defn *);
|
||
|
||
extern void throw_ext_lang_unsupported
|
||
(const struct extension_language_defn *);
|
||
|
||
/* Accessors for "public" attributes of the extension language definition. */
|
||
|
||
extern enum extension_language ext_lang_kind
|
||
(const struct extension_language_defn *);
|
||
|
||
extern const char *ext_lang_name (const struct extension_language_defn *);
|
||
|
||
extern const char *ext_lang_capitalized_name
|
||
(const struct extension_language_defn *);
|
||
|
||
extern const char *ext_lang_suffix (const struct extension_language_defn *);
|
||
|
||
extern const char *ext_lang_auto_load_suffix
|
||
(const struct extension_language_defn *);
|
||
|
||
extern script_sourcer_func *ext_lang_script_sourcer
|
||
(const struct extension_language_defn *);
|
||
|
||
extern objfile_script_sourcer_func *ext_lang_objfile_script_sourcer
|
||
(const struct extension_language_defn *);
|
||
|
||
extern int ext_lang_auto_load_enabled (const struct extension_language_defn *);
|
||
|
||
/* Wrappers for each extension language API function that iterate over all
|
||
extension languages. */
|
||
|
||
extern void finish_ext_lang_initialization (void);
|
||
|
||
extern void eval_ext_lang_from_control_command (struct command_line *cmd);
|
||
|
||
extern void auto_load_ext_lang_scripts_for_objfile (struct objfile *);
|
||
|
||
extern struct ext_lang_type_printers *start_ext_lang_type_printers (void);
|
||
|
||
extern char *apply_ext_lang_type_printers (struct ext_lang_type_printers *,
|
||
struct type *);
|
||
|
||
extern void free_ext_lang_type_printers (struct ext_lang_type_printers *);
|
||
|
||
extern int apply_ext_lang_val_pretty_printer
|
||
(struct type *type, const gdb_byte *valaddr,
|
||
int embedded_offset, CORE_ADDR address,
|
||
struct ui_file *stream, int recurse,
|
||
const struct value *val, const struct value_print_options *options,
|
||
const struct language_defn *language);
|
||
|
||
extern enum ext_lang_bt_status apply_ext_lang_frame_filter
|
||
(struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
|
||
struct ui_out *out, int frame_low, int frame_high);
|
||
|
||
extern void preserve_ext_lang_values (struct objfile *, htab_t copied_types);
|
||
|
||
extern const struct extension_language_defn *get_breakpoint_cond_ext_lang
|
||
(struct breakpoint *b, enum extension_language skip_lang);
|
||
|
||
extern int breakpoint_ext_lang_cond_says_stop (struct breakpoint *);
|
||
|
||
#endif /* EXTENSION_H */
|