forked from Imagelibrary/binutils-gdb
This removes gdb_string.h. This patch is purely mechanical. I
created it by running the two commands:
git rm common/gdb_string.h
perl -pi -e's/"gdb_string.h"/<string.h>/;' *.[chyl] */*.[chyl]
2013-11-18 Tom Tromey <tromey@redhat.com>
* common/gdb_string.h: Remove.
* aarch64-tdep.c: Use string.h, not gdb_string.h.
* ada-exp.y: Use string.h, not gdb_string.h.
* ada-lang.c: Use string.h, not gdb_string.h.
* ada-lex.l: Use string.h, not gdb_string.h.
* ada-typeprint.c: Use string.h, not gdb_string.h.
* ada-valprint.c: Use string.h, not gdb_string.h.
* aix-thread.c: Use string.h, not gdb_string.h.
* alpha-linux-tdep.c: Use string.h, not gdb_string.h.
* alpha-mdebug-tdep.c: Use string.h, not gdb_string.h.
* alpha-nat.c: Use string.h, not gdb_string.h.
* alpha-osf1-tdep.c: Use string.h, not gdb_string.h.
* alpha-tdep.c: Use string.h, not gdb_string.h.
* alphanbsd-tdep.c: Use string.h, not gdb_string.h.
* amd64-dicos-tdep.c: Use string.h, not gdb_string.h.
* amd64-linux-nat.c: Use string.h, not gdb_string.h.
* amd64-linux-tdep.c: Use string.h, not gdb_string.h.
* amd64-nat.c: Use string.h, not gdb_string.h.
* amd64-sol2-tdep.c: Use string.h, not gdb_string.h.
* amd64fbsd-tdep.c: Use string.h, not gdb_string.h.
* amd64obsd-tdep.c: Use string.h, not gdb_string.h.
* arch-utils.c: Use string.h, not gdb_string.h.
* arm-linux-nat.c: Use string.h, not gdb_string.h.
* arm-linux-tdep.c: Use string.h, not gdb_string.h.
* arm-tdep.c: Use string.h, not gdb_string.h.
* arm-wince-tdep.c: Use string.h, not gdb_string.h.
* armbsd-tdep.c: Use string.h, not gdb_string.h.
* armnbsd-nat.c: Use string.h, not gdb_string.h.
* armnbsd-tdep.c: Use string.h, not gdb_string.h.
* armobsd-tdep.c: Use string.h, not gdb_string.h.
* avr-tdep.c: Use string.h, not gdb_string.h.
* ax-gdb.c: Use string.h, not gdb_string.h.
* ax-general.c: Use string.h, not gdb_string.h.
* bcache.c: Use string.h, not gdb_string.h.
* bfin-tdep.c: Use string.h, not gdb_string.h.
* breakpoint.c: Use string.h, not gdb_string.h.
* build-id.c: Use string.h, not gdb_string.h.
* buildsym.c: Use string.h, not gdb_string.h.
* c-exp.y: Use string.h, not gdb_string.h.
* c-lang.c: Use string.h, not gdb_string.h.
* c-typeprint.c: Use string.h, not gdb_string.h.
* c-valprint.c: Use string.h, not gdb_string.h.
* charset.c: Use string.h, not gdb_string.h.
* cli-out.c: Use string.h, not gdb_string.h.
* cli/cli-cmds.c: Use string.h, not gdb_string.h.
* cli/cli-decode.c: Use string.h, not gdb_string.h.
* cli/cli-dump.c: Use string.h, not gdb_string.h.
* cli/cli-interp.c: Use string.h, not gdb_string.h.
* cli/cli-logging.c: Use string.h, not gdb_string.h.
* cli/cli-script.c: Use string.h, not gdb_string.h.
* cli/cli-setshow.c: Use string.h, not gdb_string.h.
* cli/cli-utils.c: Use string.h, not gdb_string.h.
* coffread.c: Use string.h, not gdb_string.h.
* common/common-utils.c: Use string.h, not gdb_string.h.
* common/filestuff.c: Use string.h, not gdb_string.h.
* common/linux-procfs.c: Use string.h, not gdb_string.h.
* common/linux-ptrace.c: Use string.h, not gdb_string.h.
* common/signals.c: Use string.h, not gdb_string.h.
* common/vec.h: Use string.h, not gdb_string.h.
* core-regset.c: Use string.h, not gdb_string.h.
* corefile.c: Use string.h, not gdb_string.h.
* corelow.c: Use string.h, not gdb_string.h.
* cp-abi.c: Use string.h, not gdb_string.h.
* cp-support.c: Use string.h, not gdb_string.h.
* cp-valprint.c: Use string.h, not gdb_string.h.
* cris-tdep.c: Use string.h, not gdb_string.h.
* d-lang.c: Use string.h, not gdb_string.h.
* dbxread.c: Use string.h, not gdb_string.h.
* dcache.c: Use string.h, not gdb_string.h.
* demangle.c: Use string.h, not gdb_string.h.
* dicos-tdep.c: Use string.h, not gdb_string.h.
* disasm.c: Use string.h, not gdb_string.h.
* doublest.c: Use string.h, not gdb_string.h.
* dsrec.c: Use string.h, not gdb_string.h.
* dummy-frame.c: Use string.h, not gdb_string.h.
* dwarf2-frame.c: Use string.h, not gdb_string.h.
* dwarf2loc.c: Use string.h, not gdb_string.h.
* dwarf2read.c: Use string.h, not gdb_string.h.
* elfread.c: Use string.h, not gdb_string.h.
* environ.c: Use string.h, not gdb_string.h.
* eval.c: Use string.h, not gdb_string.h.
* event-loop.c: Use string.h, not gdb_string.h.
* exceptions.c: Use string.h, not gdb_string.h.
* exec.c: Use string.h, not gdb_string.h.
* expprint.c: Use string.h, not gdb_string.h.
* f-exp.y: Use string.h, not gdb_string.h.
* f-lang.c: Use string.h, not gdb_string.h.
* f-typeprint.c: Use string.h, not gdb_string.h.
* f-valprint.c: Use string.h, not gdb_string.h.
* fbsd-nat.c: Use string.h, not gdb_string.h.
* findcmd.c: Use string.h, not gdb_string.h.
* findvar.c: Use string.h, not gdb_string.h.
* fork-child.c: Use string.h, not gdb_string.h.
* frame.c: Use string.h, not gdb_string.h.
* frv-linux-tdep.c: Use string.h, not gdb_string.h.
* frv-tdep.c: Use string.h, not gdb_string.h.
* gdb.c: Use string.h, not gdb_string.h.
* gdb_bfd.c: Use string.h, not gdb_string.h.
* gdbarch.c: Use string.h, not gdb_string.h.
* gdbtypes.c: Use string.h, not gdb_string.h.
* gnu-nat.c: Use string.h, not gdb_string.h.
* gnu-v2-abi.c: Use string.h, not gdb_string.h.
* gnu-v3-abi.c: Use string.h, not gdb_string.h.
* go-exp.y: Use string.h, not gdb_string.h.
* go-lang.c: Use string.h, not gdb_string.h.
* go32-nat.c: Use string.h, not gdb_string.h.
* hppa-hpux-tdep.c: Use string.h, not gdb_string.h.
* hppa-linux-nat.c: Use string.h, not gdb_string.h.
* hppanbsd-tdep.c: Use string.h, not gdb_string.h.
* hppaobsd-tdep.c: Use string.h, not gdb_string.h.
* i386-cygwin-tdep.c: Use string.h, not gdb_string.h.
* i386-dicos-tdep.c: Use string.h, not gdb_string.h.
* i386-linux-nat.c: Use string.h, not gdb_string.h.
* i386-linux-tdep.c: Use string.h, not gdb_string.h.
* i386-nto-tdep.c: Use string.h, not gdb_string.h.
* i386-sol2-tdep.c: Use string.h, not gdb_string.h.
* i386-tdep.c: Use string.h, not gdb_string.h.
* i386bsd-tdep.c: Use string.h, not gdb_string.h.
* i386gnu-nat.c: Use string.h, not gdb_string.h.
* i386nbsd-tdep.c: Use string.h, not gdb_string.h.
* i386obsd-tdep.c: Use string.h, not gdb_string.h.
* i387-tdep.c: Use string.h, not gdb_string.h.
* ia64-libunwind-tdep.c: Use string.h, not gdb_string.h.
* ia64-linux-nat.c: Use string.h, not gdb_string.h.
* inf-child.c: Use string.h, not gdb_string.h.
* inf-ptrace.c: Use string.h, not gdb_string.h.
* inf-ttrace.c: Use string.h, not gdb_string.h.
* infcall.c: Use string.h, not gdb_string.h.
* infcmd.c: Use string.h, not gdb_string.h.
* inflow.c: Use string.h, not gdb_string.h.
* infrun.c: Use string.h, not gdb_string.h.
* interps.c: Use string.h, not gdb_string.h.
* iq2000-tdep.c: Use string.h, not gdb_string.h.
* irix5-nat.c: Use string.h, not gdb_string.h.
* jv-exp.y: Use string.h, not gdb_string.h.
* jv-lang.c: Use string.h, not gdb_string.h.
* jv-typeprint.c: Use string.h, not gdb_string.h.
* jv-valprint.c: Use string.h, not gdb_string.h.
* language.c: Use string.h, not gdb_string.h.
* linux-fork.c: Use string.h, not gdb_string.h.
* linux-nat.c: Use string.h, not gdb_string.h.
* lm32-tdep.c: Use string.h, not gdb_string.h.
* m2-exp.y: Use string.h, not gdb_string.h.
* m2-typeprint.c: Use string.h, not gdb_string.h.
* m32c-tdep.c: Use string.h, not gdb_string.h.
* m32r-linux-nat.c: Use string.h, not gdb_string.h.
* m32r-linux-tdep.c: Use string.h, not gdb_string.h.
* m32r-rom.c: Use string.h, not gdb_string.h.
* m32r-tdep.c: Use string.h, not gdb_string.h.
* m68hc11-tdep.c: Use string.h, not gdb_string.h.
* m68k-tdep.c: Use string.h, not gdb_string.h.
* m68kbsd-tdep.c: Use string.h, not gdb_string.h.
* m68klinux-nat.c: Use string.h, not gdb_string.h.
* m68klinux-tdep.c: Use string.h, not gdb_string.h.
* m88k-tdep.c: Use string.h, not gdb_string.h.
* macrocmd.c: Use string.h, not gdb_string.h.
* main.c: Use string.h, not gdb_string.h.
* mdebugread.c: Use string.h, not gdb_string.h.
* mem-break.c: Use string.h, not gdb_string.h.
* memattr.c: Use string.h, not gdb_string.h.
* memory-map.c: Use string.h, not gdb_string.h.
* mep-tdep.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-break.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-disas.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-env.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-stack.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-var.c: Use string.h, not gdb_string.h.
* mi/mi-cmds.c: Use string.h, not gdb_string.h.
* mi/mi-console.c: Use string.h, not gdb_string.h.
* mi/mi-getopt.c: Use string.h, not gdb_string.h.
* mi/mi-interp.c: Use string.h, not gdb_string.h.
* mi/mi-main.c: Use string.h, not gdb_string.h.
* mi/mi-parse.c: Use string.h, not gdb_string.h.
* microblaze-rom.c: Use string.h, not gdb_string.h.
* microblaze-tdep.c: Use string.h, not gdb_string.h.
* mingw-hdep.c: Use string.h, not gdb_string.h.
* minidebug.c: Use string.h, not gdb_string.h.
* minsyms.c: Use string.h, not gdb_string.h.
* mips-irix-tdep.c: Use string.h, not gdb_string.h.
* mips-linux-tdep.c: Use string.h, not gdb_string.h.
* mips-tdep.c: Use string.h, not gdb_string.h.
* mips64obsd-tdep.c: Use string.h, not gdb_string.h.
* mipsnbsd-tdep.c: Use string.h, not gdb_string.h.
* mipsread.c: Use string.h, not gdb_string.h.
* mn10300-linux-tdep.c: Use string.h, not gdb_string.h.
* mn10300-tdep.c: Use string.h, not gdb_string.h.
* monitor.c: Use string.h, not gdb_string.h.
* moxie-tdep.c: Use string.h, not gdb_string.h.
* mt-tdep.c: Use string.h, not gdb_string.h.
* nbsd-tdep.c: Use string.h, not gdb_string.h.
* nios2-linux-tdep.c: Use string.h, not gdb_string.h.
* nto-procfs.c: Use string.h, not gdb_string.h.
* nto-tdep.c: Use string.h, not gdb_string.h.
* objc-lang.c: Use string.h, not gdb_string.h.
* objfiles.c: Use string.h, not gdb_string.h.
* opencl-lang.c: Use string.h, not gdb_string.h.
* osabi.c: Use string.h, not gdb_string.h.
* osdata.c: Use string.h, not gdb_string.h.
* p-exp.y: Use string.h, not gdb_string.h.
* p-lang.c: Use string.h, not gdb_string.h.
* p-typeprint.c: Use string.h, not gdb_string.h.
* parse.c: Use string.h, not gdb_string.h.
* posix-hdep.c: Use string.h, not gdb_string.h.
* ppc-linux-nat.c: Use string.h, not gdb_string.h.
* ppc-sysv-tdep.c: Use string.h, not gdb_string.h.
* ppcfbsd-tdep.c: Use string.h, not gdb_string.h.
* ppcnbsd-tdep.c: Use string.h, not gdb_string.h.
* ppcobsd-tdep.c: Use string.h, not gdb_string.h.
* printcmd.c: Use string.h, not gdb_string.h.
* procfs.c: Use string.h, not gdb_string.h.
* prologue-value.c: Use string.h, not gdb_string.h.
* python/py-auto-load.c: Use string.h, not gdb_string.h.
* python/py-gdb-readline.c: Use string.h, not gdb_string.h.
* ravenscar-thread.c: Use string.h, not gdb_string.h.
* regcache.c: Use string.h, not gdb_string.h.
* registry.c: Use string.h, not gdb_string.h.
* remote-fileio.c: Use string.h, not gdb_string.h.
* remote-m32r-sdi.c: Use string.h, not gdb_string.h.
* remote-mips.c: Use string.h, not gdb_string.h.
* remote-sim.c: Use string.h, not gdb_string.h.
* remote.c: Use string.h, not gdb_string.h.
* reverse.c: Use string.h, not gdb_string.h.
* rs6000-aix-tdep.c: Use string.h, not gdb_string.h.
* ser-base.c: Use string.h, not gdb_string.h.
* ser-go32.c: Use string.h, not gdb_string.h.
* ser-mingw.c: Use string.h, not gdb_string.h.
* ser-pipe.c: Use string.h, not gdb_string.h.
* ser-tcp.c: Use string.h, not gdb_string.h.
* ser-unix.c: Use string.h, not gdb_string.h.
* serial.c: Use string.h, not gdb_string.h.
* sh-tdep.c: Use string.h, not gdb_string.h.
* sh64-tdep.c: Use string.h, not gdb_string.h.
* shnbsd-tdep.c: Use string.h, not gdb_string.h.
* skip.c: Use string.h, not gdb_string.h.
* sol-thread.c: Use string.h, not gdb_string.h.
* solib-dsbt.c: Use string.h, not gdb_string.h.
* solib-frv.c: Use string.h, not gdb_string.h.
* solib-osf.c: Use string.h, not gdb_string.h.
* solib-spu.c: Use string.h, not gdb_string.h.
* solib-target.c: Use string.h, not gdb_string.h.
* solib.c: Use string.h, not gdb_string.h.
* somread.c: Use string.h, not gdb_string.h.
* source.c: Use string.h, not gdb_string.h.
* sparc-nat.c: Use string.h, not gdb_string.h.
* sparc-sol2-tdep.c: Use string.h, not gdb_string.h.
* sparc-tdep.c: Use string.h, not gdb_string.h.
* sparc64-tdep.c: Use string.h, not gdb_string.h.
* sparc64fbsd-tdep.c: Use string.h, not gdb_string.h.
* sparc64nbsd-tdep.c: Use string.h, not gdb_string.h.
* sparcnbsd-tdep.c: Use string.h, not gdb_string.h.
* spu-linux-nat.c: Use string.h, not gdb_string.h.
* spu-multiarch.c: Use string.h, not gdb_string.h.
* spu-tdep.c: Use string.h, not gdb_string.h.
* stabsread.c: Use string.h, not gdb_string.h.
* stack.c: Use string.h, not gdb_string.h.
* std-regs.c: Use string.h, not gdb_string.h.
* symfile.c: Use string.h, not gdb_string.h.
* symmisc.c: Use string.h, not gdb_string.h.
* symtab.c: Use string.h, not gdb_string.h.
* target.c: Use string.h, not gdb_string.h.
* thread.c: Use string.h, not gdb_string.h.
* tilegx-linux-nat.c: Use string.h, not gdb_string.h.
* tilegx-tdep.c: Use string.h, not gdb_string.h.
* top.c: Use string.h, not gdb_string.h.
* tracepoint.c: Use string.h, not gdb_string.h.
* tui/tui-command.c: Use string.h, not gdb_string.h.
* tui/tui-data.c: Use string.h, not gdb_string.h.
* tui/tui-disasm.c: Use string.h, not gdb_string.h.
* tui/tui-file.c: Use string.h, not gdb_string.h.
* tui/tui-layout.c: Use string.h, not gdb_string.h.
* tui/tui-out.c: Use string.h, not gdb_string.h.
* tui/tui-regs.c: Use string.h, not gdb_string.h.
* tui/tui-source.c: Use string.h, not gdb_string.h.
* tui/tui-stack.c: Use string.h, not gdb_string.h.
* tui/tui-win.c: Use string.h, not gdb_string.h.
* tui/tui-windata.c: Use string.h, not gdb_string.h.
* tui/tui-winsource.c: Use string.h, not gdb_string.h.
* typeprint.c: Use string.h, not gdb_string.h.
* ui-file.c: Use string.h, not gdb_string.h.
* ui-out.c: Use string.h, not gdb_string.h.
* user-regs.c: Use string.h, not gdb_string.h.
* utils.c: Use string.h, not gdb_string.h.
* v850-tdep.c: Use string.h, not gdb_string.h.
* valarith.c: Use string.h, not gdb_string.h.
* valops.c: Use string.h, not gdb_string.h.
* valprint.c: Use string.h, not gdb_string.h.
* value.c: Use string.h, not gdb_string.h.
* varobj.c: Use string.h, not gdb_string.h.
* vax-tdep.c: Use string.h, not gdb_string.h.
* vaxnbsd-tdep.c: Use string.h, not gdb_string.h.
* vaxobsd-tdep.c: Use string.h, not gdb_string.h.
* windows-nat.c: Use string.h, not gdb_string.h.
* xcoffread.c: Use string.h, not gdb_string.h.
* xml-support.c: Use string.h, not gdb_string.h.
* xstormy16-tdep.c: Use string.h, not gdb_string.h.
* xtensa-linux-nat.c: Use string.h, not gdb_string.h.
296 lines
9.1 KiB
C
296 lines
9.1 KiB
C
/* GDB routines for supporting auto-loaded scripts.
|
||
|
||
Copyright (C) 2010-2013 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/>. */
|
||
|
||
#include "defs.h"
|
||
#include <string.h>
|
||
#include "top.h"
|
||
#include "exceptions.h"
|
||
#include "gdbcmd.h"
|
||
#include "objfiles.h"
|
||
#include "python.h"
|
||
#include "cli/cli-cmds.h"
|
||
#include "auto-load.h"
|
||
|
||
#ifdef HAVE_PYTHON
|
||
|
||
#include "python-internal.h"
|
||
|
||
/* The section to look for Python auto-loaded scripts (in file formats that
|
||
support sections).
|
||
Each entry in this section is a byte of value 1, and then the nul-terminated
|
||
name of the script. The script name may include a directory.
|
||
The leading byte is to allow upward compatible extensions. */
|
||
#define GDBPY_AUTO_SECTION_NAME ".debug_gdb_scripts"
|
||
|
||
/* User-settable option to enable/disable auto-loading of Python scripts:
|
||
set auto-load python-scripts on|off
|
||
This is true if we should auto-load associated Python scripts when an
|
||
objfile is opened, false otherwise. */
|
||
static int auto_load_python_scripts = 1;
|
||
|
||
static void gdbpy_load_auto_script_for_objfile (struct objfile *objfile,
|
||
FILE *file,
|
||
const char *filename);
|
||
|
||
/* "show" command for the auto_load_python_scripts configuration variable. */
|
||
|
||
static void
|
||
show_auto_load_python_scripts (struct ui_file *file, int from_tty,
|
||
struct cmd_list_element *c, const char *value)
|
||
{
|
||
fprintf_filtered (file, _("Auto-loading of Python scripts is %s.\n"), value);
|
||
}
|
||
|
||
/* Definition of script language for Python scripts. */
|
||
|
||
static const struct script_language script_language_python
|
||
= { GDBPY_AUTO_FILE_NAME, gdbpy_load_auto_script_for_objfile };
|
||
|
||
/* Wrapper of source_python_script_for_objfile for script_language_python. */
|
||
|
||
static void
|
||
gdbpy_load_auto_script_for_objfile (struct objfile *objfile, FILE *file,
|
||
const char *filename)
|
||
{
|
||
int is_safe;
|
||
struct auto_load_pspace_info *pspace_info;
|
||
|
||
is_safe = file_is_auto_load_safe (filename,
|
||
_("auto-load: Loading Python script \"%s\" "
|
||
"by extension for objfile \"%s\".\n"),
|
||
filename, objfile_name (objfile));
|
||
|
||
/* Add this script to the hash table too so "info auto-load python-scripts"
|
||
can print it. */
|
||
pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
|
||
maybe_add_script (pspace_info, is_safe, filename, filename,
|
||
&script_language_python);
|
||
|
||
if (is_safe)
|
||
source_python_script_for_objfile (objfile, file, filename);
|
||
}
|
||
|
||
/* Load scripts specified in OBJFILE.
|
||
START,END delimit a buffer containing a list of nul-terminated
|
||
file names.
|
||
SOURCE_NAME is used in error messages.
|
||
|
||
Scripts are found per normal "source -s" command processing.
|
||
First the script is looked for in $cwd. If not found there the
|
||
source search path is used.
|
||
|
||
The section contains a list of path names of files containing
|
||
python code to load. Each path is null-terminated. */
|
||
|
||
static void
|
||
source_section_scripts (struct objfile *objfile, const char *source_name,
|
||
const char *start, const char *end)
|
||
{
|
||
const char *p;
|
||
struct auto_load_pspace_info *pspace_info;
|
||
|
||
pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
|
||
|
||
for (p = start; p < end; ++p)
|
||
{
|
||
const char *file;
|
||
FILE *stream;
|
||
char *full_path;
|
||
int opened, in_hash_table;
|
||
struct cleanup *back_to;
|
||
|
||
if (*p != 1)
|
||
{
|
||
warning (_("Invalid entry in %s section"), GDBPY_AUTO_SECTION_NAME);
|
||
/* We could try various heuristics to find the next valid entry,
|
||
but it's safer to just punt. */
|
||
break;
|
||
}
|
||
file = ++p;
|
||
|
||
while (p < end && *p != '\0')
|
||
++p;
|
||
if (p == end)
|
||
{
|
||
char *buf = alloca (p - file + 1);
|
||
|
||
memcpy (buf, file, p - file);
|
||
buf[p - file] = '\0';
|
||
warning (_("Non-null-terminated path in %s: %s"),
|
||
source_name, buf);
|
||
/* Don't load it. */
|
||
break;
|
||
}
|
||
if (p == file)
|
||
{
|
||
warning (_("Empty path in %s"), source_name);
|
||
continue;
|
||
}
|
||
|
||
opened = find_and_open_script (file, 1 /*search_path*/,
|
||
&stream, &full_path);
|
||
|
||
back_to = make_cleanup (null_cleanup, NULL);
|
||
if (opened)
|
||
{
|
||
make_cleanup_fclose (stream);
|
||
make_cleanup (xfree, full_path);
|
||
|
||
if (!file_is_auto_load_safe (full_path,
|
||
_("auto-load: Loading Python script "
|
||
"\"%s\" from section \"%s\" of "
|
||
"objfile \"%s\".\n"),
|
||
full_path, GDBPY_AUTO_SECTION_NAME,
|
||
objfile_name (objfile)))
|
||
opened = 0;
|
||
}
|
||
else
|
||
{
|
||
full_path = NULL;
|
||
|
||
/* We don't throw an error, the program is still debuggable. */
|
||
if (script_not_found_warning_print (pspace_info))
|
||
warning (_("Missing auto-load scripts referenced in section %s\n\
|
||
of file %s\n\
|
||
Use `info auto-load python [REGEXP]' to list them."),
|
||
GDBPY_AUTO_SECTION_NAME, objfile_name (objfile));
|
||
}
|
||
|
||
/* If one script isn't found it's not uncommon for more to not be
|
||
found either. We don't want to print an error message for each
|
||
script, too much noise. Instead, we print the warning once and tell
|
||
the user how to find the list of scripts that weren't loaded.
|
||
|
||
IWBN if complaints.c were more general-purpose. */
|
||
|
||
in_hash_table = maybe_add_script (pspace_info, opened, file, full_path,
|
||
&script_language_python);
|
||
|
||
/* If this file is not currently loaded, load it. */
|
||
if (opened && !in_hash_table)
|
||
source_python_script_for_objfile (objfile, stream, full_path);
|
||
|
||
do_cleanups (back_to);
|
||
}
|
||
}
|
||
|
||
/* Load scripts specified in section SECTION_NAME of OBJFILE. */
|
||
|
||
static void
|
||
auto_load_section_scripts (struct objfile *objfile, const char *section_name)
|
||
{
|
||
bfd *abfd = objfile->obfd;
|
||
asection *scripts_sect;
|
||
bfd_byte *data = NULL;
|
||
|
||
scripts_sect = bfd_get_section_by_name (abfd, section_name);
|
||
if (scripts_sect == NULL)
|
||
return;
|
||
|
||
if (!bfd_get_full_section_contents (abfd, scripts_sect, &data))
|
||
warning (_("Couldn't read %s section of %s"),
|
||
section_name, bfd_get_filename (abfd));
|
||
else
|
||
{
|
||
struct cleanup *cleanups;
|
||
char *p = (char *) data;
|
||
|
||
cleanups = make_cleanup (xfree, p);
|
||
source_section_scripts (objfile, section_name, p,
|
||
p + bfd_get_section_size (scripts_sect));
|
||
do_cleanups (cleanups);
|
||
}
|
||
}
|
||
|
||
/* Load any Python auto-loaded scripts for OBJFILE. */
|
||
|
||
void
|
||
gdbpy_load_auto_scripts_for_objfile (struct objfile *objfile)
|
||
{
|
||
if (auto_load_python_scripts)
|
||
{
|
||
auto_load_objfile_script (objfile, &script_language_python);
|
||
auto_load_section_scripts (objfile, GDBPY_AUTO_SECTION_NAME);
|
||
}
|
||
}
|
||
|
||
/* Wrapper for "info auto-load python-scripts". */
|
||
|
||
static void
|
||
info_auto_load_python_scripts (char *pattern, int from_tty)
|
||
{
|
||
auto_load_info_scripts (pattern, from_tty, &script_language_python);
|
||
}
|
||
|
||
int
|
||
gdbpy_initialize_auto_load (void)
|
||
{
|
||
struct cmd_list_element *cmd;
|
||
const char *cmd_name;
|
||
|
||
add_setshow_boolean_cmd ("python-scripts", class_support,
|
||
&auto_load_python_scripts, _("\
|
||
Set the debugger's behaviour regarding auto-loaded Python scripts."), _("\
|
||
Show the debugger's behaviour regarding auto-loaded Python scripts."), _("\
|
||
If enabled, auto-loaded Python scripts are loaded when the debugger reads\n\
|
||
an executable or shared library.\n\
|
||
This options has security implications for untrusted inferiors."),
|
||
NULL, show_auto_load_python_scripts,
|
||
auto_load_set_cmdlist_get (),
|
||
auto_load_show_cmdlist_get ());
|
||
|
||
add_setshow_boolean_cmd ("auto-load-scripts", class_support,
|
||
&auto_load_python_scripts, _("\
|
||
Set the debugger's behaviour regarding auto-loaded Python scripts, "
|
||
"deprecated."),
|
||
_("\
|
||
Show the debugger's behaviour regarding auto-loaded Python scripts, "
|
||
"deprecated."),
|
||
NULL, NULL, show_auto_load_python_scripts,
|
||
&setlist, &showlist);
|
||
cmd_name = "auto-load-scripts";
|
||
cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
|
||
deprecate_cmd (cmd, "set auto-load python-scripts");
|
||
|
||
/* It is needed because lookup_cmd updates the CMD_NAME pointer. */
|
||
cmd_name = "auto-load-scripts";
|
||
cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
|
||
deprecate_cmd (cmd, "show auto-load python-scripts");
|
||
|
||
add_cmd ("python-scripts", class_info, info_auto_load_python_scripts,
|
||
_("Print the list of automatically loaded Python scripts.\n\
|
||
Usage: info auto-load python-scripts [REGEXP]"),
|
||
auto_load_info_cmdlist_get ());
|
||
|
||
cmd = add_info ("auto-load-scripts", info_auto_load_python_scripts, _("\
|
||
Print the list of automatically loaded Python scripts, deprecated."));
|
||
deprecate_cmd (cmd, "info auto-load python-scripts");
|
||
|
||
return 0;
|
||
}
|
||
|
||
#else /* ! HAVE_PYTHON */
|
||
|
||
void
|
||
gdbpy_load_auto_scripts_for_objfile (struct objfile *objfile)
|
||
{
|
||
}
|
||
|
||
#endif /* ! HAVE_PYTHON */
|