2016-01-01 04:33:14 +00:00
|
|
|
# Copyright (C) 2010-2016 Free Software Foundation, Inc.
|
2010-04-23 16:20:13 +00:00
|
|
|
|
|
|
|
# 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/>.
|
|
|
|
|
|
|
|
# This file is part of the GDB testsuite. It tests automagic loading of
|
|
|
|
# scripts specified in the .debug_gdb_scripts section.
|
|
|
|
|
|
|
|
# This test can only be run on targets which support ELF and use gas.
|
|
|
|
# For now pick a sampling of likely targets.
|
|
|
|
if {![istarget *-*-linux*]
|
|
|
|
&& ![istarget *-*-gnu*]
|
|
|
|
&& ![istarget *-*-elf*]
|
|
|
|
&& ![istarget *-*-openbsd*]
|
2011-01-19 20:26:10 +00:00
|
|
|
&& ![istarget arm*-*-eabi*]
|
|
|
|
&& ![istarget arm*-*-symbianelf*]
|
2010-04-23 16:20:13 +00:00
|
|
|
&& ![istarget powerpc-*-eabi*]} {
|
|
|
|
verbose "Skipping py-section-script.exp because of lack of support."
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
* gdb.python/lib-types.exp: Use standard_testfile,
prepare_for_testing.
* gdb.python/py-block.exp: Use standard_testfile.
* gdb.python/py-breakpoint.exp: Use standard_testfile.
* gdb.python/py-events.exp: Use standard_testfile,
standard_output_file.
* gdb.python/py-evsignal.exp: Use standard_testfile.
* gdb.python/py-evethreads.exp: Use standard_testfile.
* gdb.python/py-explore-cc.exp: Use standard_testfile.
* gdb.python/py-explore.exp: Use standard_testfile.
* gdb.python/py-finish-breakpoint.exp: Use standard_testfile,
standard_output_file.
* gdb.python/py-finish-breakpoint2.exp: Use standard_testfile,
prepare_for_testing.
* gdb.python/py-frame-inline.exp: Use standard_testfile.
* gdb.python/py-frame.exp: Use standard_testfile.
* gdb.python/py-inferior.exp: Use standard_testfile.
* gdb.python/py-infthread.exp: Use standard_testfile.
* gdb.python/py-mi.exp: Use standard_testfile.
* gdb.python/py-objfile-script.exp: Use standard_testfile,
build_executable.
* gdb.python/py-objfile.exp: Use standard_testfile.
* gdb.python/py-pp-maint.exp: Use standard_testfile,
prepare_for_testing.
* gdb.python/py-prettyprint.exp: Use standard_testfile.
* gdb.python/py-progspace.exp: Use standard_testfile,
build_executable.
* gdb.python/py-prompt.exp: Use standard_testfile,
build_executable.
* gdb.python/py-section-script.exp: Use standard_testfile,
build_executable.
* gdb.python/py-shared.exp: Use standard_testfile,
standard_output_file, clean_restart.
* gdb.python/py-symbol.exp: Use standard_output_file,
prepare_for_testing.
* gdb.python/py-symtab.exp: Use standard_output_file,
prepare_for_testing
* gdb.python/py-template.exp: Use standard_testfile.
* gdb.python/py-type.exp: Use standard_testfile.
* gdb.python/py-value-cc.exp: Use standard_testfile.
* gdb.python/py-value.exp: Use standard_testfile.
* gdb.python/python.exp: Use standard_testfile, build_executable.
2012-06-22 17:59:33 +00:00
|
|
|
standard_testfile
|
|
|
|
|
2013-08-22 13:51:08 +00:00
|
|
|
# Make this available to gdb before the program starts, it is
|
|
|
|
# automagically loaded by gdb.
|
|
|
|
set remote_python_file [gdb_remote_download host \
|
|
|
|
${srcdir}/${subdir}/${testfile}.py]
|
|
|
|
|
|
|
|
set quoted_name "\"$remote_python_file\""
|
|
|
|
|
|
|
|
if {[build_executable $testfile.exp $testfile $srcfile \
|
2015-01-31 20:01:13 +00:00
|
|
|
[list debug \
|
|
|
|
additional_flags=-I${srcdir}/../../include \
|
|
|
|
additional_flags=-DSCRIPT_FILE=$quoted_name]] == -1} {
|
2010-04-23 16:20:13 +00:00
|
|
|
return -1
|
|
|
|
}
|
|
|
|
|
2011-03-13 13:39:17 +00:00
|
|
|
# Start with a fresh gdb.
|
|
|
|
gdb_exit
|
|
|
|
gdb_start
|
|
|
|
|
|
|
|
# Skip all tests if Python scripting is not enabled.
|
|
|
|
if { [skip_python_tests] } { continue }
|
|
|
|
|
2010-04-23 16:20:13 +00:00
|
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
2015-01-31 20:01:13 +00:00
|
|
|
|
|
|
|
# Try first with a restrictive safe-path.
|
|
|
|
|
|
|
|
gdb_test_no_output "set auto-load safe-path /restricted" \
|
|
|
|
"set restricted auto-load safe-path"
|
2010-04-23 16:20:13 +00:00
|
|
|
gdb_load ${binfile}
|
|
|
|
|
2015-01-31 20:01:13 +00:00
|
|
|
# Verify gdb did not load the scripts.
|
|
|
|
set test_name "verify scripts not loaded"
|
|
|
|
gdb_test_multiple "info auto-load python-scripts" "$test_name" {
|
|
|
|
-re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
|
|
|
|
fail "$test_name"
|
|
|
|
}
|
|
|
|
-re "No.*${testfile}.py.*No.*inlined-script.*$gdb_prompt $" {
|
|
|
|
pass "$test_name"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Try again with a working safe-path.
|
|
|
|
|
|
|
|
gdb_exit
|
|
|
|
gdb_start
|
|
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
|
|
|
|
|
|
gdb_test_no_output "set auto-load safe-path ${remote_python_file}:${binfile}" \
|
|
|
|
"set auto-load safe-path"
|
|
|
|
gdb_load ${binfile}
|
|
|
|
|
|
|
|
# Verify gdb loaded each script and they appear once in the list.
|
|
|
|
set test_name "verify scripts loaded"
|
|
|
|
gdb_test_multiple "info auto-load python-scripts" "$test_name" {
|
|
|
|
-re "${testfile}.py.*${testfile}.py.*$gdb_prompt $" {
|
|
|
|
fail "$test_name"
|
|
|
|
}
|
|
|
|
-re "inlined-script.*inlined-script.*$gdb_prompt $" {
|
|
|
|
fail "$test_name"
|
|
|
|
}
|
|
|
|
-re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" {
|
|
|
|
pass "$test_name"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-05-13 22:11:47 +00:00
|
|
|
# Again, with a regexp this time.
|
2013-08-22 13:51:08 +00:00
|
|
|
gdb_test "info auto-load python-scripts ${testfile}" "Yes.*${testfile}.py.*"
|
2015-01-31 20:01:13 +00:00
|
|
|
|
2011-05-13 22:11:47 +00:00
|
|
|
# Again, with a regexp that matches no scripts.
|
gdb/
auto-load: Implementation.
* NEWS: New descriptions for "info auto-load",
"info auto-load gdb-scripts", "info auto-load python-scripts",
"info auto-load local-gdbinit" and "info auto-load libthread-db".
Deprecate "info auto-load-scripts", "set auto-load-scripts on|off"
and "show auto-load-scripts". New description for "set auto-load",
"show auto-load", "set auto-load gdb-scripts",
"show auto-load gdb-scripts", "set auto-load python-scripts",
"show auto-load python-scripts", "set auto-load local-gdbinit",
"show auto-load local-gdbinit", "set auto-load libthread-db" and
"show auto-load libthread-db".
* auto-load.c: Remove include python/python-internal.h. Add includes
exceptions.h, cli/cli-script.h, gdbcmd.h, cli/cli-decode.h and
cli/cli-setshow.h.
(GDB_AUTO_FILE_NAME, source_gdb_script_for_objfile)
(auto_load_gdb_scripts, show_auto_load_gdb_scripts): New.
(gdbpy_global_auto_load): Rename to ...
(global_auto_load): ... here.
(auto_load_local_gdbinit, auto_load_local_gdbinit_pathname)
(auto_load_local_gdbinit_loaded, show_auto_load_local_gdbinit)
(script_language_gdb, source_gdb_script_for_objfile): New.
(struct loaded_script): New field language.
(hash_loaded_script_entry, eq_loaded_script_entry): Calculate also
LANGUAGE.
(maybe_add_script): Add parameter language. Drop redundant
entry.full_path initialization. Initialize entry.language and
(*slot)->language.
(auto_load_objfile_script): Change parameter suffix to language.
Remove the call of maybe_add_script.
Call language->source_script_for_objfile.
(load_auto_scripts_for_objfile, struct collect_matching_scripts_data):
New.
(collect_matching_scripts): Adjust it for
struct collect_matching_scripts_data.
(auto_load_info_scripts_pattern_nl): New variable.
(info_auto_load_scripts): Rename to ...
(auto_load_info_scripts): ... here, add parameter language. Adjust it
for struct collect_matching_scripts_data.
(info_auto_load_gdb_scripts, info_auto_load_local_gdbinit)
(set_auto_load_cmd, auto_load_set_cmdlist_get, show_auto_load_cmd)
(auto_load_show_cmdlist_get, info_auto_load_cmd)
(auto_load_info_cmdlist_get): New.
(_initialize_auto_load): Move add_info of "auto-load-scripts" to
python/py-auto-load.c. New installment for "set auto-load gdb-scripts",
"info auto-load gdb-scripts", "set auto-load local-gdbinit" and
"info auto-load local-gdbinit".
* auto-load.h (struct script_language): New.
(gdbpy_global_auto_load): Rename to ...
(global_auto_load): ... here.
(auto_load_local_gdbinit, auto_load_local_gdbinit_pathname)
(auto_load_local_gdbinit_loaded): New declarations.
(maybe_add_script): New parameter language.
(auto_load_objfile_script): Change parameter suffix to language.
(load_auto_scripts_for_objfile, auto_load_info_scripts_pattern_nl)
(auto_load_info_scripts, auto_load_set_cmdlist_get)
(auto_load_show_cmdlist_get, auto_load_info_cmdlist_get): New
declarations.
* linux-thread-db.c: Include auto-load.h and ctype.h.
(auto_load_thread_db, show_auto_load_thread_db): New.
(struct thread_db_info): New field filename.
(delete_thread_db_info): Call xfree for FILENAME.
(try_thread_db_load): Initialize FILENAME.
(try_thread_db_load_from_pdir, try_thread_db_load_from_dir): Return
if !AUTO_LOAD_THREAD_DB.
(info_auto_load_libthread_db_compare, info_auto_load_libthread_db): New.
(_initialize_thread_db): Install auto_load_thread_db
as "set auto-load libthread-db" and install info_auto_load_libthread_db
as "info auto-load libthread-db".
* main.c (captured_main): Rename gdbpy_global_auto_load to
global_auto_load. Initialize AUTO_LOAD_LOCAL_GDBINIT_PATHNAME and
AUTO_LOAD_LOCAL_GDBINIT_LOADED.
(print_gdb_help): Extend the help for 'local init file'.
* python/py-auto-load.c: Remove a comment about gdb scripts extension.
(GDBPY_AUTO_SECTION_NAME): Extend the comment it is Python specific.
(auto_load_scripts): Rename to ...
(auto_load_python_scripts): ... here, update the comment.
(gdbpy_load_auto_script_for_objfile): New declaration.
(show_auto_load_python_scripts, script_language_python)
(gdbpy_load_auto_script_for_objfile): New.
(source_section_scripts): Refactor the code.
(load_auto_scripts_for_objfile): Rename to ...
(gdbpy_load_auto_scripts_for_objfile): ... here, update the
auto_load_objfile_script caller, drop GDBPY_GLOBAL_AUTO_LOAD checking.
(info_auto_load_python_scripts): New.
(gdbpy_initialize_auto_load): New variables cmd and cmd_name.
Rename "set auto-load-scripts" to "set auto-load python-scripts".
Register "set auto-load-scripts" as its deprecated alias. Register
"info auto-load python-scripts". Register "info auto-load-scripts" as
its deprecated alias.
(load_auto_scripts_for_objfile): Rename to ...
(gdbpy_load_auto_scripts_for_objfile): ... here.
* python/python.h (load_auto_scripts_for_objfile): Rename to ...
(gdbpy_load_auto_scripts_for_objfile): ... here.
gdb/doc/
auto-load: Implementation.
* gdb.texinfo (Mode Options): New anchor for -nx.
(Startup): New anchors for Option -init-eval-command,
Home Directory Init File
and Init File in the Current Directory during Startup.
Mention set auto-load local-gdbinit with a reference.
Change the sample code to "set auto-load python-scripts".
(Threads): New anchor set libthread-db-search-path.
Provide references to libthread_db.so.1 file.
(Controlling GDB): New menu item for Auto-loading.
(Auto-loading, Init File in the Current Directory)
(libthread_db.so.1 file, objfile-gdb.gdb file): New nodes.
(Python): Rename the menu item Auto-loading to Python Auto-loading.
(Writing a Pretty-Printer, Objfiles In Python): Update the renamed
reference.
(Auto-loading): Rename to ...
(Python Auto-loading): ... here. Change "set auto-load-scripts" to
"set auto-load python-scripts", new anchor for it. Change
"show auto-load-scripts" to "show auto-load python-scripts", new anchor
for it. Change "info auto-load-scripts"
to "info auto-load python-scripts", new anchor for it. Change "scripts"
to "Python scripts".
gdb/testsuite/
auto-load: Implementation.
* gdb.base/help.exp (test set height): Increase the height.
* gdb.python/py-objfile-script.exp (info auto-load-scripts): Change
to ...
(info auto-load python-scripts): ... here.
* gdb.python/py-section-script.exp (info auto-load-scripts *): Change
to ...
(info auto-load python-scripts *): ... here.
2012-04-17 15:51:48 +00:00
|
|
|
gdb_test "info auto-load python-scripts no-script-matches-this" \
|
2011-05-13 22:11:47 +00:00
|
|
|
"No auto-load scripts matching no-script-matches-this."
|
|
|
|
|
2010-04-23 16:20:13 +00:00
|
|
|
if ![runto_main] {
|
|
|
|
perror "couldn't run to main"
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \
|
|
|
|
".*Breakpoint.*"
|
|
|
|
gdb_test "continue" ".*Breakpoint.*"
|
|
|
|
|
|
|
|
gdb_test "print ss" " = a=<1> b=<2>"
|
2015-01-31 20:01:13 +00:00
|
|
|
|
|
|
|
gdb_test "test-cmd 1 2 3" "test-cmd output, arg = 1 2 3"
|