PR gdb/16626

Fix auto-load 7.7 regression,
the regression affects any loading from /usr/share/gdb/auto-load .

5b2bf9471f is the first bad commit
commit 5b2bf9471f
Author: Doug Evans <xdje42@gmail.com>
Date:   Fri Nov 29 21:29:26 2013 -0800
    Move .debug_gdb_script processing to auto-load.c.
    Simplify handling of auto-loaded objfile scripts.

Fedora 20 x86_64
$ gdb -q /usr/lib64/libgobject-2.0.so
Reading symbols from /usr/lib64/libglib-2.0.so.0.3800.2...Reading symbols from
/usr/lib/debug/usr/lib64/libglib-2.0.so.0.3800.2.debug...done.
done.
(gdb) _

Fedora Rawhide x86_64
$ gdb -q /usr/lib64/libgobject-2.0.so
Reading symbols from /usr/lib64/libglib-2.0.so...Reading symbols from
/usr/lib/debug/usr/lib64/libglib-2.0.so.0.3990.0.debug...done.
done.
warning: File "/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py" auto-loading has been declined by your `auto-load safe-path'
set to "$debugdir:$datadir/auto-load:/usr/bin/mono-gdb.py".
To enable execution of this file add
        add-auto-load-safe-path /usr/lib64/libglib-2.0.so.0.3990.0-gdb.py
line to your configuration file "/home/jkratoch/.gdbinit".
To completely disable this security protection add
        set auto-load safe-path /
line to your configuration file "/home/jkratoch/.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
        info "(gdb)Auto-loading safe path"
(gdb) _

That is it tries to load "forbidden"
	/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py
but it should load instead
	/usr/share/gdb/auto-load/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py*
Although that is also not exactly this way, there does not exist any
	/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py
despite regressed GDB says so.

gdb/
2014-02-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR gdb/16626
	* auto-load.c (auto_load_objfile_script_1): Change filename to
	debugfile.

gdb/testsuite/
2014-02-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR gdb/16626
	* gdb.base/auto-load-script: New file.
	* gdb.base/auto-load.c: New file.
	* gdb.base/auto-load.exp: New file.

Message-ID: <20140223212400.GA8831@host2.jankratochvil.net>
This commit is contained in:
Jan Kratochvil
2014-02-25 18:32:32 +01:00
parent 599c9f4265
commit 5b91e80ee9
6 changed files with 96 additions and 3 deletions

View File

@@ -1,3 +1,9 @@
2014-02-25 Jan Kratochvil <jan.kratochvil@redhat.com>
PR gdb/16626
* auto-load.c (auto_load_objfile_script_1): Change filename to
debugfile.
2014-02-09 Jan Kratochvil <jan.kratochvil@redhat.com> 2014-02-09 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix Python stack corruption. Fix Python stack corruption.

View File

@@ -791,17 +791,17 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
make_cleanup_fclose (input); make_cleanup_fclose (input);
is_safe is_safe
= file_is_auto_load_safe (filename, = file_is_auto_load_safe (debugfile,
_("auto-load: Loading %s script \"%s\"" _("auto-load: Loading %s script \"%s\""
" by extension for objfile \"%s\".\n"), " by extension for objfile \"%s\".\n"),
language->name, filename, language->name, debugfile,
objfile_name (objfile)); objfile_name (objfile));
/* Add this script to the hash table too so /* Add this script to the hash table too so
"info auto-load ${lang}-scripts" can print it. */ "info auto-load ${lang}-scripts" can print it. */
pspace_info pspace_info
= get_auto_load_pspace_data_for_loading (current_program_space); = get_auto_load_pspace_data_for_loading (current_program_space);
maybe_add_script (pspace_info, is_safe, filename, filename, language); maybe_add_script (pspace_info, is_safe, debugfile, debugfile, language);
/* To preserve existing behaviour we don't check for whether the /* To preserve existing behaviour we don't check for whether the
script was already in the table, and always load it. script was already in the table, and always load it.

View File

@@ -1,3 +1,10 @@
2014-02-25 Jan Kratochvil <jan.kratochvil@redhat.com>
PR gdb/16626
* gdb.base/auto-load-script: New file.
* gdb.base/auto-load.c: New file.
* gdb.base/auto-load.exp: New file.
2014-02-05 Yao Qi <yao@codesourcery.com> 2014-02-05 Yao Qi <yao@codesourcery.com>
* gdb.trace/report.exp (use_collected_data): Test the output * gdb.trace/report.exp (use_collected_data): Test the output

View File

@@ -0,0 +1,17 @@
# Copyright 2014 Free Software Foundation, Inc.
# 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/>.
echo script_loaded\n
set $script_loaded=42

View File

@@ -0,0 +1,22 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2014 Free Software Foundation, Inc.
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/>. */
int
main (void)
{
return 0;
}

View File

@@ -0,0 +1,41 @@
# Copyright 2014 Free Software Foundation, Inc.
# 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/>.
standard_testfile
if [is_remote host] {
return 0
}
set targetdir "${binfile}.dir"
set sourcescript "${binfile}-script"
set targetscriptdir "${targetdir}/[file dirname ${sourcescript}]"
set targetscript "${targetscriptdir}/${testfile}-gdb.gdb"
remote_exec host "rm -rf ${targetdir}"
if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
return -1
}
remote_exec host "mkdir -p ${targetscriptdir}"
remote_exec host "cp ${sourcescript} ${targetscript}"
gdb_test_no_output "set auto-load scripts-directory ${targetdir}" "set auto-load scripts-directory"
gdb_test_no_output "set auto-load safe-path ${targetscript}" "set auto-load safe-path"
gdb_load ${binfile}
gdb_test {print $script_loaded} " = 42"