From 0d72f628a4f21a869cb0dba9bbf45be1b17e625d Mon Sep 17 00:00:00 2001
From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Date: Mon, 27 Jun 2011 16:20:47 +0000
Subject: [PATCH] re PR libmudflap/38738 (libmudflap could be enabled for
 Solaris when using GNU ld)

	gcc:
	PR libmudflap/38738
	* config/sol2.h [!USE_GLD] (MFLIB_SPEC): Define.

	libmudflap:
	PR libmudflap/38738
	* configure.ac: Check for sys/mnttab.h.
	Check for library containing connect.
	* configure: Regenerate.
	* config.h.in: Regenerate.
	* mf-hooks2.c [HAVE_SYS_MNTTAB_H]: Include <sys/mnttab.h>.
	* testsuite/libmudflap.c/pass-stratcliff.c (main) [__sun__ &&
	__svr4__]: Disable rawmemchr, stpcpy, mempcpy tests.

From-SVN: r175537
---
 gcc/ChangeLog                                 |  5 ++
 gcc/config/sol2.h                             |  5 ++
 libmudflap/ChangeLog                          | 11 ++++
 libmudflap/config.h.in                        |  3 ++
 libmudflap/configure                          | 54 ++++++++++++++++++-
 libmudflap/configure.ac                       |  4 +-
 libmudflap/mf-hooks2.c                        |  9 +++-
 .../testsuite/libmudflap.c/pass-stratcliff.c  |  6 +--
 8 files changed, 91 insertions(+), 6 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1d9c27c08376..9d3823a1a46d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-06-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	PR libmudflap/38738
+	* config/sol2.h [!USE_GLD] (MFLIB_SPEC): Define.
+
 2011-06-27  Nick Clifton  <nickc@redhat.com>
 
 	* config/mn10300/mn10300.md (clzsi2): Use XOR after BSCH to
diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h
index d898c2ef2ae7..d9c1fc99a40a 100644
--- a/gcc/config/sol2.h
+++ b/gcc/config/sol2.h
@@ -187,6 +187,11 @@ along with GCC; see the file COPYING3.  If not see
 #endif /* HAVE_LD_EH_FRAME && TARGET_DL_ITERATE_PHDR */
 #endif
 
+#ifndef USE_GLD
+/* The default MFLIB_SPEC is GNU ld specific.  */
+#define MFLIB_SPEC ""
+#endif
+
 /* collect2.c can only parse GNU nm -n output.  Solaris nm needs -png to
    produce the same format.  */
 #define NM_FLAGS "-png"
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog
index 920c73ec3618..f44f0ed18fe0 100644
--- a/libmudflap/ChangeLog
+++ b/libmudflap/ChangeLog
@@ -1,3 +1,14 @@
+2011-06-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	PR libmudflap/38738
+	* configure.ac: Check for sys/mnttab.h.
+	Check for library containing connect.
+	* configure: Regenerate.
+	* config.h.in: Regenerate.
+	* mf-hooks2.c [HAVE_SYS_MNTTAB_H]: Include <sys/mnttab.h>.
+	* testsuite/libmudflap.c/pass-stratcliff.c (main) [__sun__ &&
+	__svr4__]: Disable rawmemchr, stpcpy, mempcpy tests.
+
 2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
 	* configure: Regenerate.
diff --git a/libmudflap/config.h.in b/libmudflap/config.h.in
index d20c42bbc376..16afd05efcdc 100644
--- a/libmudflap/config.h.in
+++ b/libmudflap/config.h.in
@@ -210,6 +210,9 @@
 /* Define to 1 if you have the <sys/mman.h> header file. */
 #undef HAVE_SYS_MMAN_H
 
+/* Define to 1 if you have the <sys/mnttab.h> header file. */
+#undef HAVE_SYS_MNTTAB_H
+
 /* Define to 1 if you have the <sys/sem.h> header file. */
 #undef HAVE_SYS_SEM_H
 
diff --git a/libmudflap/configure b/libmudflap/configure
index 11bcca18439c..ebf8f2d9ce4c 100755
--- a/libmudflap/configure
+++ b/libmudflap/configure
@@ -4297,7 +4297,7 @@ done
 
 for ac_header in stdint.h execinfo.h signal.h dlfcn.h dirent.h pwd.h grp.h \
   netdb.h sys/ipc.h sys/sem.h sys/shm.h sys/wait.h ctype.h mntent.h \
-  sys/socket.h netinet/in.h arpa/inet.h dlfcn.h sys/mman.h
+  sys/mnttab.h sys/socket.h netinet/in.h arpa/inet.h dlfcn.h sys/mman.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -11063,6 +11063,58 @@ _ACEOF
 fi
 
 
+ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = x""yes; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+fi
+
+fi
+
+
 # Calculate toolexeclibdir
 # Also toolexecdir, though it's only used in toolexeclibdir
 case ${version_specific_libs} in
diff --git a/libmudflap/configure.ac b/libmudflap/configure.ac
index 9b9ea20321b9..b61b56f2708e 100644
--- a/libmudflap/configure.ac
+++ b/libmudflap/configure.ac
@@ -62,7 +62,7 @@ enable_shared=no])
 
 AC_CHECK_HEADERS(stdint.h execinfo.h signal.h dlfcn.h dirent.h pwd.h grp.h \
   netdb.h sys/ipc.h sys/sem.h sys/shm.h sys/wait.h ctype.h mntent.h \
-  sys/socket.h netinet/in.h arpa/inet.h dlfcn.h sys/mman.h)
+  sys/mnttab.h sys/socket.h netinet/in.h arpa/inet.h dlfcn.h sys/mman.h)
 
 AC_CHECK_FUNCS(backtrace backtrace_symbols gettimeofday signal)
 AC_CHECK_FUNCS(fopen64 fseeko64 ftello64 stat64 freopen64)
@@ -147,6 +147,8 @@ AC_SUBST(build_libmudflapth)
 
 AC_CHECK_LIB(dl, dlsym)
 
+AC_CHECK_FUNC(connect,, AC_CHECK_LIB(socket, connect))
+
 # Calculate toolexeclibdir
 # Also toolexecdir, though it's only used in toolexeclibdir
 case ${version_specific_libs} in
diff --git a/libmudflap/mf-hooks2.c b/libmudflap/mf-hooks2.c
index 5649e1c58829..77d58131bfa8 100644
--- a/libmudflap/mf-hooks2.c
+++ b/libmudflap/mf-hooks2.c
@@ -1,5 +1,5 @@
 /* Mudflap: narrow-pointer bounds-checking by tree rewriting.
-   Copyright (C) 2002, 2003, 2004, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2009, 2011 Free Software Foundation, Inc.
    Contributed by Frank Ch. Eigler <fche@redhat.com>
    and Graydon Hoare <graydon@redhat.com>
 
@@ -90,6 +90,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #ifdef HAVE_MNTENT_H
 #include <mntent.h>
 #endif
+#ifdef HAVE_SYS_MNTTAB_H
+#include <sys/mnttab.h>
+#endif
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif
@@ -2063,6 +2066,7 @@ WRAPPER2(const char *, gai_strerror, int errcode)
 
 
 #ifdef HAVE_GETMNTENT
+#ifdef HAVE_MNTENT_H
 WRAPPER2(struct mntent *, getmntent, FILE *filep)
 {
   struct mntent *m;
@@ -2097,6 +2101,9 @@ WRAPPER2(struct mntent *, getmntent, FILE *filep)
 
   return m;
 }
+#elif defined HAVE_SYS_MNTTAB_H
+/* FIXME: Implement.  */
+#endif
 #endif
 
 
diff --git a/libmudflap/testsuite/libmudflap.c/pass-stratcliff.c b/libmudflap/testsuite/libmudflap.c/pass-stratcliff.c
index baaf8a9f3536..985c796e13c8 100644
--- a/libmudflap/testsuite/libmudflap.c/pass-stratcliff.c
+++ b/libmudflap/testsuite/libmudflap.c/pass-stratcliff.c
@@ -153,7 +153,7 @@ main (int argc, char *argv[])
 	    }
         }
 
-#ifndef __FreeBSD__
+#if !defined  __FreeBSD__ && !(defined __sun__ && defined __svr4__)
       /* rawmemchr test */
       for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
         {
@@ -250,7 +250,7 @@ main (int argc, char *argv[])
 	    }
         }
 
-#ifndef __FreeBSD__
+#ifndef __FreeBSD__ && !(defined __sun__ && defined __svr4__)
       /* stpcpy test */
       for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
         {
@@ -302,7 +302,7 @@ main (int argc, char *argv[])
 	      result = 1;
 	    }
 
-#ifndef __FreeBSD__
+#if !defined __FreeBSD__ && !(defined __sun__ && defined __svr4__)
       /* mempcpy test */
       for (outer = size - 1; outer >= MAX (0, size - 128); --outer)
 	for (inner = 0; inner < size - outer; ++inner)
-- 
GitLab