This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix calling gcore when gdb is not in $PATH.


On 10/11/2013 03:10 PM, Jan Kratochvil wrote:
On Fri, 11 Oct 2013 19:53:12 +0200, Luis Machado wrote:
On 10/11/2013 01:56 PM, Jan Kratochvil wrote:
On Fri, 11 Oct 2013 18:46:15 +0200, Luis Machado wrote:
--- a/gdb/gcore.in
+++ b/gdb/gcore.in
@@ -49,9 +49,26 @@ rc=0
  # Loop through pids
  for pid in $*
  do
+# Attempt to fetch the absolute path to the gcore script that was
+# called.
+binary_path=`dirname "$0"`
+
+	if test "x$binary_path" = x. ; then
+	  # We got "." back as a path.  This means the user executed
+	  # the gcore script locally (i.e. ./gcore) or called the
+	  # script via a shell interpreter (i.e. sh gcore).  We use
+	  # the "which" command to locate the real path of the gcore
+	  # script, disambiguating this situation.
+	  binary_path_from_env=`which "$0"`
+	  binary_path=`dirname $binary_path_from_env`

In generally OK, just still ... is there some reason for this 'which' search?
Moreover if one really runs ./gcore then it should IMO take ./gdb (and not some
other gdb), if we should really pick GDB from the directory of gcore.

Yes. The reason is to pick the gdb binary from the directory that
contains the gcore script the user invoked.

If the user issued "sh gcore" and /usr/bin/gcore was picked (based
on $PATH), then we should use /usr/bin/gdb.

Now, if the user issued "./gcore", ./gdb will be picked up, and so on.

Does it make sense?

Great we agree.  But your code does pick /usr/bin/gdb for ./gcore, doesn't it?
Which is why I proposed the change I proposed.

Hmmm... unless there is some discrepancy between shell interpreters, mine (bash) does the following:

Invocation: ./gcore
dirname ./gcore -> .

So we go inside the if block and locate the real binary that is being called based on $PATH.

which ./gcore -> ./gcore

So we pick the dirname of ./gcore (which is ".") and add a slash to it, resulting in ./gdb.

Do you see something different or a corner case?

Luis


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]