mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 09:46:20 +00:00
parent
b439924bf9
commit
d813a12f20
@ -1 +1 @@
|
||||
36e4e6aeceb38f3b5948599a90436d8c42ca2ac1
|
||||
dd6adf72605d7e35901267f0c76f3d5138b04b77
|
||||
|
@ -6,8 +6,38 @@ is sent in 'Hg' commands even if no thread is selected, to get
|
||||
the memory map of the correct inferior with the 'info mem'
|
||||
command.
|
||||
|
||||
Also, prevent failed assertions on other commands without a selected thread.
|
||||
|
||||
diff --git a/gdb/exec.c b/gdb/exec.c
|
||||
index ad543c9..9243b22 100644
|
||||
--- a/gdb/exec.c
|
||||
+++ b/gdb/exec.c
|
||||
@@ -515,6 +515,10 @@ exec_file_attach (const char *filename, int from_tty)
|
||||
static void
|
||||
exec_file_command (const char *args, int from_tty)
|
||||
{
|
||||
+ /* prevent a failed assertion in 'find_inferior_pid()' */
|
||||
+ if (inferior_ptid == null_ptid)
|
||||
+ error(_("Cannot execute this command without a live selected thread."));
|
||||
+
|
||||
if (from_tty && target_has_execution ()
|
||||
&& !query (_("A program is being debugged already.\n"
|
||||
"Are you sure you want to change the file? ")))
|
||||
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
|
||||
index 0ddc541..021e29f 100644
|
||||
--- a/gdb/infcmd.c
|
||||
+++ b/gdb/infcmd.c
|
||||
@@ -2924,6 +2924,8 @@ interrupt_command (const char *args, int from_tty)
|
||||
if (args != nullptr
|
||||
&& startswith (args, "-a"))
|
||||
all_threads = 1;
|
||||
+ else
|
||||
+ ensure_valid_thread();
|
||||
|
||||
interrupt_target_1 (all_threads);
|
||||
}
|
||||
diff --git a/gdb/remote.c b/gdb/remote.c
|
||||
index b5db0c0..f36d4a9 100644
|
||||
index 5fccf69..f12d504 100644
|
||||
--- a/gdb/remote.c
|
||||
+++ b/gdb/remote.c
|
||||
@@ -2908,6 +2908,9 @@ remote_target::set_thread (ptid_t ptid, int gen)
|
||||
|
@ -8,3 +8,4 @@ call_dummy_location.patch
|
||||
non_stop.patch
|
||||
memory_map.patch
|
||||
first_inferior.patch
|
||||
symlinks.patch
|
||||
|
165
repos/ports/src/noux-pkg/gdb/patches/symlinks.patch
Normal file
165
repos/ports/src/noux-pkg/gdb/patches/symlinks.patch
Normal file
@ -0,0 +1,165 @@
|
||||
symlinks.patch
|
||||
|
||||
From: Tom Tromey <tromey@adacore.com>
|
||||
Date: Wed, 6 Apr 2022 13:17:10 -0600
|
||||
|
||||
Currently gdb uses realpath when finding an objfile. However, this
|
||||
yields surprising results when the given name is a symlink -- if the
|
||||
symlink is retargeted, re-running will not cause a change.
|
||||
|
||||
This patch fixes the problem by changing gdb to compute the absolute
|
||||
path rather than the real path.
|
||||
|
||||
This area has some history. PR gdb/15415 changed this area to try to
|
||||
preserve the basename of the executable, so that programs that check
|
||||
argv[0] will continue to work correctly.
|
||||
|
||||
There's also PR gdb/15934, which proposes preserving the original name
|
||||
for use in argv[0] and in "info inferior". I haven't done this. The
|
||||
"info inferior" part might not be too difficult (unsure) but I wasn't
|
||||
sure how argv[0] could really be preserved given relative file names,
|
||||
the use of shell to startup, and the user's ability to change gdb's
|
||||
working directory.
|
||||
|
||||
I think this patch does fix PR symtab/24143, which concerns finding
|
||||
separate debug files when symlinks are used. The included test does
|
||||
not test exactly this scenario, though.
|
||||
|
||||
Regression tested on x86-64 Fedora 34.
|
||||
|
||||
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24143
|
||||
---
|
||||
gdb/exec.c | 14 ++------
|
||||
gdb/symfile.c | 2 +
|
||||
gdb/testsuite/gdb.base/symlink-exe.exp | 57 ++++++++++++++++++++++++++++++++
|
||||
3 files changed, 62 insertions(+), 11 deletions(-)
|
||||
create mode 100644 gdb/testsuite/gdb.base/symlink-exe.exp
|
||||
|
||||
diff --git a/gdb/exec.c b/gdb/exec.c
|
||||
index 9243b22..b01b121 100644
|
||||
--- a/gdb/exec.c
|
||||
+++ b/gdb/exec.c
|
||||
@@ -385,7 +385,7 @@ exec_file_attach (const char *filename, int from_tty)
|
||||
else
|
||||
{
|
||||
int load_via_target = 0;
|
||||
- const char *scratch_pathname, *canonical_pathname;
|
||||
+ const char *scratch_pathname;
|
||||
int scratch_chan;
|
||||
char **matching;
|
||||
|
||||
@@ -397,7 +397,7 @@ exec_file_attach (const char *filename, int from_tty)
|
||||
load_via_target = 1;
|
||||
}
|
||||
|
||||
- gdb::unique_xmalloc_ptr<char> canonical_storage, scratch_storage;
|
||||
+ gdb::unique_xmalloc_ptr<char> scratch_storage;
|
||||
if (load_via_target)
|
||||
{
|
||||
/* gdb_bfd_fopen does not support "target:" filenames. */
|
||||
@@ -408,7 +408,6 @@ exec_file_attach (const char *filename, int from_tty)
|
||||
|
||||
scratch_pathname = filename;
|
||||
scratch_chan = -1;
|
||||
- canonical_pathname = scratch_pathname;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -436,19 +435,14 @@ exec_file_attach (const char *filename, int from_tty)
|
||||
perror_with_name (filename);
|
||||
|
||||
scratch_pathname = scratch_storage.get ();
|
||||
-
|
||||
- /* gdb_bfd_open (and its variants) prefers canonicalized
|
||||
- pathname for better BFD caching. */
|
||||
- canonical_storage = gdb_realpath (scratch_pathname);
|
||||
- canonical_pathname = canonical_storage.get ();
|
||||
}
|
||||
|
||||
gdb_bfd_ref_ptr temp;
|
||||
if (write_files && !load_via_target)
|
||||
- temp = gdb_bfd_fopen (canonical_pathname, gnutarget,
|
||||
+ temp = gdb_bfd_fopen (scratch_pathname, gnutarget,
|
||||
FOPEN_RUB, scratch_chan);
|
||||
else
|
||||
- temp = gdb_bfd_open (canonical_pathname, gnutarget, scratch_chan);
|
||||
+ temp = gdb_bfd_open (scratch_pathname, gnutarget, scratch_chan);
|
||||
current_program_space->set_exec_bfd (std::move (temp));
|
||||
|
||||
if (!current_program_space->exec_bfd ())
|
||||
diff --git a/gdb/symfile.c b/gdb/symfile.c
|
||||
index 7f9cada..715c5c9 100644
|
||||
--- a/gdb/symfile.c
|
||||
+++ b/gdb/symfile.c
|
||||
@@ -1710,7 +1710,7 @@ symfile_bfd_open (const char *name)
|
||||
|
||||
/* Look down path for it, allocate 2nd new malloc'd copy. */
|
||||
desc = openp (getenv ("PATH"),
|
||||
- OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
|
||||
+ OPF_TRY_CWD_FIRST,
|
||||
expanded_name.get (), O_RDONLY | O_BINARY, &absolute_name);
|
||||
#if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
|
||||
if (desc < 0)
|
||||
diff --git a/gdb/testsuite/gdb.base/symlink-exe.exp b/gdb/testsuite/gdb.base/symlink-exe.exp
|
||||
new file mode 100644
|
||||
index 0000000..4a45f06
|
||||
--- /dev/null
|
||||
+++ b/gdb/testsuite/gdb.base/symlink-exe.exp
|
||||
@@ -0,0 +1,57 @@
|
||||
+# Copyright 2022 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/>. */
|
||||
+
|
||||
+if {![isnative]} {
|
||||
+ unsupported "symlink-exe.exp not supported on non-native target"
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+if {[is_remote host]} {
|
||||
+ unsupported "symlink-exe.exp not supported on remote host"
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+# We don't really care about the contents, but we're going to build
|
||||
+# two executables here and they need different source file names.
|
||||
+standard_testfile main.c argv0-symlink.c
|
||||
+
|
||||
+if {[build_executable ${testfile}.exp ${testfile}1 ${srcfile}] == -1} {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+set status [remote_exec host \
|
||||
+ "ln -sf ${testfile}1 [standard_output_file ${testfile}]"]
|
||||
+if {[lindex $status 0] != 0} {
|
||||
+ unsupported "symlink-exe.exp - host does not support symbolic links"
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+clean_restart $testfile
|
||||
+gdb_test "run" ".*"
|
||||
+
|
||||
+# Ensure the new file has a newer mtime.
|
||||
+sleep 1
|
||||
+if {[build_executable ${testfile}.exp ${testfile}2 ${srcfile2}] == -1} {
|
||||
+ return -1
|
||||
+}
|
||||
+set status [remote_exec host \
|
||||
+ "ln -sf ${testfile}2 [standard_output_file ${testfile}]"]
|
||||
+if {[lindex $status 0] != 0} {
|
||||
+ unsupported "symlink-exe.exp - host does not support symbolic links"
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+gdb_test "run" ".*${testfile}.* has changed; re-reading symbols.*" \
|
||||
+ "run and re-read symbols"
|
Loading…
x
Reference in New Issue
Block a user