[COMMITTED] Fix pr 17367

Message ID m3ppf4rtoc.fsf@sspiff.org
State Committed
Headers

Commit Message

Doug Evans Sept. 10, 2014, 4:22 a.m. UTC
  Hi.

This patch fixes PR 17367.
https://sourceware.org/bugzilla/show_bug.cgi?id=17367

Guile 2.2 now compiles to ELF files, and I was noticing gdb complaining
when starting up.

Exception caught while booting Guile.
Error in function "load-thunk-from-memory":
not an ELF file
./gdb: warning: Could not complete Guile gdb module initialization from:
/hack/gnu/sourceware/gdb-guile/b-sigchld-prep-git-guile-gc74/gdb/data-directory/guile/gdb/boot.scm.

I traced this to the wrong guild program being used.
guild should come from the specified guile distribution,
but /bin/guild was being used instead (which is guile 2.0).

Regression tested on amd64-linux with guile 2.0.11 and guile trunk.

2014-09-09  Doug Evans  <xdje42@gmail.com>

	PR guile/17367
	* acinclude.m4 (GDB_GUILE_PROGRAM_NAMES): Pass guile version as
	last parameter to pkg-config, not first.
	* configure.ac: Pass --with-guile provided pkg-config path to
	GDB_GUILE_PROGRAM_NAMES.
	* configure: Regenerate.
  

Comments

Doug Evans Sept. 10, 2014, 5:14 a.m. UTC | #1
Doug Evans <xdje42@gmail.com> writes:
> Hi.
>
> This patch fixes PR 17367.
> https://sourceware.org/bugzilla/show_bug.cgi?id=17367
>
> Guile 2.2 now compiles to ELF files, and I was noticing gdb complaining
> when starting up.
>
> Exception caught while booting Guile.
> Error in function "load-thunk-from-memory":
> not an ELF file
> ./gdb: warning: Could not complete Guile gdb module initialization from:
> /hack/gnu/sourceware/gdb-guile/b-sigchld-prep-git-guile-gc74/gdb/data-directory/guile/gdb/boot.scm.
>
> I traced this to the wrong guild program being used.
> guild should come from the specified guile distribution,
> but /bin/guild was being used instead (which is guile 2.0).
>
> Regression tested on amd64-linux with guile 2.0.11 and guile trunk.
>
> 2014-09-09  Doug Evans  <xdje42@gmail.com>
>
> 	PR guile/17367
> 	* acinclude.m4 (GDB_GUILE_PROGRAM_NAMES): Pass guile version as
> 	last parameter to pkg-config, not first.
> 	* configure.ac: Pass --with-guile provided pkg-config path to
> 	GDB_GUILE_PROGRAM_NAMES.
> 	* configure: Regenerate.

Pushed to 7.8 branch as well.
  

Patch

diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
index 2b46f73..3ff5155 100644
--- a/gdb/acinclude.m4
+++ b/gdb/acinclude.m4
@@ -478,14 +478,14 @@  dnl similar to Guile's 'GUILE_PROGS' macro.)
 AC_DEFUN([GDB_GUILE_PROGRAM_NAMES], [
   AC_CACHE_CHECK([for the absolute file name of the 'guild' command],
     [ac_cv_guild_program_name],
-    [ac_cv_guild_program_name="`$1 $2 --variable guild`"
+    [ac_cv_guild_program_name="`$1 --variable guild $2`"
 
      # In Guile up to 2.0.11 included, guile-2.0.pc would not define
      # the 'guild' and 'bindir' variables.  In that case, try to guess
      # what the program name is, at the risk of getting it wrong if
      # Guile was configured with '--program-suffix' or similar.
      if test "x$ac_cv_guild_program_name" = "x"; then
-       guile_exec_prefix="`$1 $2 --variable exec_prefix`"
+       guile_exec_prefix="`$1 --variable exec_prefix $2`"
        ac_cv_guild_program_name="$guile_exec_prefix/bin/guild"
      fi
   ])
diff --git a/gdb/configure.ac b/gdb/configure.ac
index ab7b1c2..4f5fb7b 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1143,8 +1143,9 @@  dnl        It could be a shell script.  It is invoked as:
 dnl        pkg-config --exists $version
 dnl        pkg-config --cflags $version
 dnl        pkg-config --libs $version
-dnl        $version will be the default guile version (currently guile-2.0),
-dnl        but the program is free to ignore this.
+dnl        pkg-config --variable guild $version
+dnl        The script will be called with $version having each value in
+dnl        $try_guile_versions until --exists indicates success.
 
 AC_ARG_WITH(guile,
   AS_HELP_STRING([--with-guile@<:@=GUILE@:>@], [include guile support (auto/yes/no/<guile-version>/<pkg-config-program>)]),
@@ -1196,7 +1197,14 @@  esac
 
 if test "${have_libguile}" != no; then
   dnl Get the name of the 'guild' program.
-  GDB_GUILE_PROGRAM_NAMES(["${pkg_config_prog_path}"], ["${guile_version}"])
+  case "${with_guile}" in
+  [[\\/]]* | ?:[[\\/]]*)
+    GDB_GUILE_PROGRAM_NAMES(["${with_guile}"], ["${guile_version}"])
+    ;;
+  *)
+    GDB_GUILE_PROGRAM_NAMES(["${pkg_config_prog_path}"], ["${guile_version}"])
+    ;;
+  esac
 
   dnl Make sure guild can handle this host.
   GDB_TRY_GUILD([$srcdir/guile/lib/gdb/support.scm])