aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/config.in6
-rwxr-xr-xgdb/configure26
-rw-r--r--gdb/configure.ac5
-rw-r--r--gdb/guile/guile.c15
5 files changed, 61 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a73b37f..c5ebd2a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2014-07-26 Doug Evans <xdje42@gmail.com>
+
+ PR 17185
+ * configure.ac: Add check for header gc/gc.h.
+ Add check for function setenv.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * guile/guile.c (_initialize_guile): Add workaround for libgc 7.4.0.
+
2014-07-25 Maciej W. Rozycki <macro@codesourcery.com>
* mips-tdep.c (mips_gdbarch_init): Also check the compressed ISA
diff --git a/gdb/config.in b/gdb/config.in
index 8585b49..fb9b0cd 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -141,6 +141,9 @@
/* Define if <sys/procfs.h> has fpregset_t. */
#undef HAVE_FPREGSET_T
+/* Define to 1 if you have the <gc/gc.h> header file. */
+#undef HAVE_GC_GC_H
+
/* Define to 1 if you have the `getgid' function. */
#undef HAVE_GETGID
@@ -345,6 +348,9 @@
/* Define to 1 if you have the `scm_new_smob' function. */
#undef HAVE_SCM_NEW_SMOB
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
diff --git a/gdb/configure b/gdb/configure
index a4c0a8c..58fa477 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -9103,6 +9103,32 @@ fi
+# PR 17185, see if we can get the libgc version to see if we need
+# to apply the workaround.
+for ac_header in gc/gc.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "gc/gc.h" "ac_cv_header_gc_gc_h" "$ac_includes_default"
+if test "x$ac_cv_header_gc_gc_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GC_GC_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in setenv
+do :
+ ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv"
+if test "x$ac_cv_func_setenv" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SETENV 1
+_ACEOF
+
+fi
+done
+
+
# --------------------- #
# Check for libmcheck. #
# --------------------- #
diff --git a/gdb/configure.ac b/gdb/configure.ac
index a2ac15f..e348144 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1218,6 +1218,11 @@ fi
AC_SUBST(GUILE_CPPFLAGS)
AC_SUBST(GUILE_LIBS)
+# PR 17185, see if we can get the libgc version to see if we need
+# to apply the workaround.
+AC_CHECK_HEADERS(gc/gc.h)
+AC_CHECK_FUNCS([setenv])
+
# --------------------- #
# Check for libmcheck. #
# --------------------- #
diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c
index 05dba69..6bc078f 100644
--- a/gdb/guile/guile.c
+++ b/gdb/guile/guile.c
@@ -35,6 +35,9 @@
#ifdef HAVE_GUILE
#include "guile.h"
#include "guile-internal.h"
+#ifdef HAVE_GC_GC_H
+#include <gc/gc.h> /* PR 17185 */
+#endif
#endif
/* The Guile version we're using.
@@ -750,6 +753,18 @@ _initialize_guile (void)
side to define module "gdb" which imports "_gdb". There is evidently no
similar convention in Guile so we skip this. */
+ /* PR 17185 There are problems with using libgc 7.4.0.
+ Copy over the workaround Guile uses (Guile is working around a different
+ problem, but the workaround is the same). */
+#if (GC_VERSION_MAJOR == 7 && GC_VERSION_MINOR == 4 && GC_VERSION_MICRO == 0)
+ /* The bug is only known to appear with pthreads. We assume any system
+ using pthreads also uses setenv (and not putenv). That is why we don't
+ have a similar call to putenv here. */
+#if defined (HAVE_SETENV)
+ setenv ("GC_MARKERS", "1", 1);
+#endif
+#endif
+
/* scm_with_guile is the most portable way to initialize Guile.
Plus we need to initialize the Guile support while in Guile mode
(e.g., called from within a call to scm_with_guile). */