[PATCH] Don't check for __secure_getenv

Janne Blomqvist blomqvist.janne@gmail.com
Thu Apr 27 13:15:00 GMT 2017


Glibc 2.17 made __secure_getenv an officially supported function, and
renamed it secure_getenv. The libgfortran configure has checked for
both of these, per
https://sourceware.org/glibc/wiki/Tips_and_Tricks/secure_getenv.

Unfortunately, while the dynamical library (libc.so) retains the
__secure_getenv symbol for backwards compatibility, the static library
(libc.a) does not. This means that a libgfortran.a compiled against an
older glibc will not work if one tries to link against a newer
libc.a. This creates problems for providing gfortran binary
distributions that work on as many target systems as possible.

Thus, drop the support for __secure_getenv. This implies that when
libgfortran is compiled against an older glibc it instead uses the
fallback secure_getenv in libgfortran/runtime/environ.c instead of
glibc __secure_getenv.

Regtested on x86_64-pc-linux-gnu, Ok for trunk, 7.x when it reopens,
6, 5?

2017-04-27  Janne Blomqvist  <jb@gcc.gnu.org>

	* configure.ac: Don't check for presence of __secure_getenv.
	* libgfortran.h: HAVE_SECURE_GETENV: Don't check
	HAVE___SECURE_GETENV.
	* Makefile.in: Regenerated.
	* config.h.in: Regenerated.
	* configure: Regenerated.
---
 libgfortran/Makefile.in   | 5 +++--
 libgfortran/config.h.in   | 3 ---
 libgfortran/configure     | 7 ++-----
 libgfortran/configure.ac  | 2 +-
 libgfortran/libgfortran.h | 4 +---
 5 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index 05b183d..4914a6f 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -137,8 +137,9 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
 	$(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/acx.m4 \
 	$(top_srcdir)/../config/no-executables.m4 \
-	$(top_srcdir)/../config/math.m4 $(top_srcdir)/../libtool.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/../config/math.m4 \
+	$(top_srcdir)/../config/ax_check_define.m4 \
+	$(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
diff --git a/libgfortran/config.h.in b/libgfortran/config.h.in
index b762d099..45e349d 100644
--- a/libgfortran/config.h.in
+++ b/libgfortran/config.h.in
@@ -837,9 +837,6 @@
 /* Define to 1 if you have the `ynl' function. */
 #undef HAVE_YNL
 
-/* Define to 1 if you have the `__secure_getenv' function. */
-#undef HAVE___SECURE_GETENV
-
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #undef LT_OBJDIR
diff --git a/libgfortran/configure b/libgfortran/configure
index 81238fc..dd99620 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -2598,7 +2598,6 @@ as_fn_append ac_func_list " geteuid"
 as_fn_append ac_func_list " umask"
 as_fn_append ac_func_list " getegid"
 as_fn_append ac_func_list " secure_getenv"
-as_fn_append ac_func_list " __secure_getenv"
 as_fn_append ac_func_list " mkostemp"
 as_fn_append ac_func_list " strnlen"
 as_fn_append ac_func_list " strndup"
@@ -12421,7 +12420,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12424 "configure"
+#line 12423 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12527,7 +12526,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12530 "configure"
+#line 12529 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -16685,8 +16684,6 @@ done
 
 
 
-
-
 fi
 
 # Check strerror_r, cannot be above as versions with two and three arguments exist
diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
index 37b12d2..fe47fcd 100644
--- a/libgfortran/configure.ac
+++ b/libgfortran/configure.ac
@@ -310,7 +310,7 @@ else
    gettimeofday stat fstat lstat getpwuid vsnprintf dup \
    getcwd localtime_r gmtime_r getpwuid_r ttyname_r clock_gettime \
    getgid getpid getuid geteuid umask getegid \
-   secure_getenv __secure_getenv mkostemp strnlen strndup newlocale \
+   secure_getenv mkostemp strnlen strndup newlocale \
    freelocale uselocale strerror_l)
 fi
 
diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h
index cfa4fcf..9d9d117 100644
--- a/libgfortran/libgfortran.h
+++ b/libgfortran/libgfortran.h
@@ -808,9 +808,7 @@ internal_proto(get_unformatted_convert);
 
 /* Secure getenv() which returns NULL if running as SUID/SGID.  */
 #ifndef HAVE_SECURE_GETENV
-#ifdef HAVE___SECURE_GETENV
-#define secure_getenv __secure_getenv
-#elif defined(HAVE_GETUID) && defined(HAVE_GETEUID) \
+#if defined(HAVE_GETUID) && defined(HAVE_GETEUID) \
   && defined(HAVE_GETGID) && defined(HAVE_GETEGID)
 #define FALLBACK_SECURE_GETENV
 extern char *secure_getenv (const char *);
-- 
2.7.4



More information about the Gcc-patches mailing list