C99 ld configury

* configure.ac: Move initfini-array arg handling earlier.  Don't
	check for string.h, strings.h, stdlib.h, or locale.h.  Do check
	for inttypes.h, stdint.h, sys/types.h.  Don't check for
	setlocale, free, getev or strstr.
	(AC_ISC_POSIX): Don't invoke.
	* sysdep.h: Include string.h and stdlib.h unconditionally.  Test
	HAVE_SYS_TYPE_H and HAVE_SYS_STAT_H.  Remove strstr, free and
	getenv fallback declarations.
	* ld.h: Don't test HAVE_LOCALE_H.
	* ldmain.c: Don't test HAVE_SETLOCALE.
	* config.in: Regenerate.
	* configure: Regenerate.
This commit is contained in:
Alan Modra 2021-04-05 15:31:53 +09:30
parent 23d613801d
commit c774eab1c8
7 changed files with 797 additions and 1737 deletions

View File

@ -1,3 +1,18 @@
2021-04-05 Alan Modra <amodra@gmail.com>
* configure.ac: Move initfini-array arg handling earlier. Don't
check for string.h, strings.h, stdlib.h, or locale.h. Do check
for inttypes.h, stdint.h, sys/types.h. Don't check for
setlocale, free, getev or strstr.
(AC_ISC_POSIX): Don't invoke.
* sysdep.h: Include string.h and stdlib.h unconditionally. Test
HAVE_SYS_TYPE_H and HAVE_SYS_STAT_H. Remove strstr, free and
getenv fallback declarations.
* ld.h: Don't test HAVE_LOCALE_H.
* ldmain.c: Don't test HAVE_SETLOCALE.
* config.in: Regenerate.
* configure: Regenerate.
2021-04-01 Tamar Christina <tamar.christina@arm.com> 2021-04-01 Tamar Christina <tamar.christina@arm.com>
PR ld/26659 PR ld/26659

View File

@ -57,14 +57,6 @@
don't. */ don't. */
#undef HAVE_DECL_ENVIRON #undef HAVE_DECL_ENVIRON
/* Define to 1 if you have the declaration of `free', and to 0 if you don't.
*/
#undef HAVE_DECL_FREE
/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
*/
#undef HAVE_DECL_GETENV
/* Is the prototype for getopt in <unistd.h> in the expected format? */ /* Is the prototype for getopt in <unistd.h> in the expected format? */
#undef HAVE_DECL_GETOPT #undef HAVE_DECL_GETOPT
@ -72,14 +64,6 @@
*/ */
#undef HAVE_DECL_SBRK #undef HAVE_DECL_SBRK
/* Define to 1 if you have the declaration of `strstr', and to 0 if you don't.
*/
#undef HAVE_DECL_STRSTR
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
*/
#undef HAVE_DIRENT_H
/* Define to 1 if you have the <dlfcn.h> header file. */ /* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H #undef HAVE_DLFCN_H
@ -107,9 +91,6 @@
/* Define to 1 if you have the <limits.h> header file. */ /* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H #undef HAVE_LIMITS_H
/* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
/* Define to 1 if you have the `lseek' function. */ /* Define to 1 if you have the `lseek' function. */
#undef HAVE_LSEEK #undef HAVE_LSEEK
@ -122,9 +103,6 @@
/* Define to 1 if you have a working `mmap' system call. */ /* Define to 1 if you have a working `mmap' system call. */
#undef HAVE_MMAP #undef HAVE_MMAP
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
#undef HAVE_NDIR_H
/* Define to 1 if you have the `open' function. */ /* Define to 1 if you have the `open' function. */
#undef HAVE_OPEN #undef HAVE_OPEN
@ -134,9 +112,6 @@
/* Define to 1 if you have the `sbrk' function. */ /* Define to 1 if you have the `sbrk' function. */
#undef HAVE_SBRK #undef HAVE_SBRK
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
/* Define to 1 if you have the <stdint.h> header file. */ /* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H #undef HAVE_STDINT_H
@ -149,16 +124,11 @@
/* Define to 1 if you have the <string.h> header file. */ /* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H #undef HAVE_STRING_H
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
*/
#undef HAVE_SYS_DIR_H
/* Define to 1 if you have the <sys/file.h> header file. */ /* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H #undef HAVE_SYS_FILE_H
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. /* Define to 1 if you have the <sys/mman.h> header file. */
*/ #undef HAVE_SYS_MMAN_H
#undef HAVE_SYS_NDIR_H
/* Define to 1 if you have the <sys/param.h> header file. */ /* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H #undef HAVE_SYS_PARAM_H
@ -212,9 +182,6 @@
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS #undef STDC_HEADERS
/* Define if you can safely include both <string.h> and <strings.h>. */
#undef STRING_WITH_STRINGS
/* Define to 1 if you want to support the --error-handling-script command line /* Define to 1 if you want to support the --error-handling-script command line
option. */ option. */
#undef SUPPORT_ERROR_HANDLING_SCRIPT #undef SUPPORT_ERROR_HANDLING_SCRIPT

2369
ld/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,6 @@ AC_CONFIG_SRCDIR(ldmain.c)
AC_CANONICAL_TARGET AC_CANONICAL_TARGET
AC_CANONICAL_BUILD AC_CANONICAL_BUILD
AC_ISC_POSIX
AM_INIT_AUTOMAKE AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
@ -231,6 +230,18 @@ case "${enable_default_hash_style}" in
*) ac_default_emit_gnu_hash=0 ;; *) ac_default_emit_gnu_hash=0 ;;
esac esac
AC_ARG_ENABLE(initfini-array,
[ --disable-initfini-array do not use .init_array/.fini_array sections],
[case "${enableval}" in
yes|no) ;;
*) AC_MSG_ERROR([invalid --enable-initfini-array argument]) ;;
esac], [enable_initfini_array=yes])
AC_SUBST(enable_initfini_array)
if test $enable_initfini_array = yes; then
AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
[Define .init_array/.fini_array sections are available and working.])
fi
GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections]) GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
if test "${enable_libctf}" = yes; then if test "${enable_libctf}" = yes; then
AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections]) AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections])
@ -280,30 +291,25 @@ ACX_PROG_CMP_IGNORE_INITIAL
AC_SUBST(HDEFINES) AC_SUBST(HDEFINES)
AC_SUBST(NATIVE_LIB_DIRS) AC_SUBST(NATIVE_LIB_DIRS)
AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h elf-hints.h limits.h locale.h sys/param.h) # We use headers from include/ that check various HAVE_*_H macros, thus
AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h sys/stat.h) # should ensure they are set by configure. This is true even when C99
ACX_HEADER_STRING # guarantees they are available.
AC_CHECK_FUNCS(glob mkstemp realpath sbrk setlocale waitpid) # sha1.h and md4.h test HAVE_LIMITS_H, HAVE_SYS_TYPES_H and HAVE_STDINT_H
AC_CHECK_FUNCS(open lseek close) # plugin-api.h tests HAVE_STDINT_H and HAVE_INTTYPES_H
AC_HEADER_DIRENT # Besides those, we need to check anything used in ld/ not in C99.
AC_CHECK_HEADERS(fcntl.h elf-hints.h limits.h inttypes.h stdint.h \
sys/file.h sys/mman.h sys/param.h sys/stat.h sys/time.h \
sys/types.h unistd.h)
AC_CHECK_FUNCS(close glob lseek mkstemp open realpath sbrk waitpid)
BFD_BINARY_FOPEN
AC_CHECK_DECLS([asprintf, environ, sbrk])
dnl AC_CHECK_HEADERS(sys/mman.h)
AC_FUNC_MMAP AC_FUNC_MMAP
AC_SEARCH_LIBS([dlopen], [dl]) AC_SEARCH_LIBS([dlopen], [dl])
AC_ARG_ENABLE(initfini-array,
[ --disable-initfini-array do not use .init_array/.fini_array sections],
[case "${enableval}" in
yes|no) ;;
*) AC_MSG_ERROR([invalid --enable-initfini-array argument]) ;;
esac], [enable_initfini_array=yes])
AC_SUBST(enable_initfini_array)
if test $enable_initfini_array = yes; then
AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
[Define .init_array/.fini_array sections are available and working.])
fi
AC_MSG_CHECKING(for a known getopt prototype in unistd.h) AC_MSG_CHECKING(for a known getopt prototype in unistd.h)
AC_CACHE_VAL(ld_cv_decl_getopt_unistd_h, AC_CACHE_VAL(ld_cv_decl_getopt_unistd_h,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>], [extern int getopt (int, char *const*, const char *);])], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>], [extern int getopt (int, char *const*, const char *);])],
@ -314,10 +320,6 @@ if test $ld_cv_decl_getopt_unistd_h = yes; then
[Is the prototype for getopt in <unistd.h> in the expected format?]) [Is the prototype for getopt in <unistd.h> in the expected format?])
fi fi
BFD_BINARY_FOPEN
AC_CHECK_DECLS([asprintf, environ, free, getenv, sbrk, strstr])
# Link in zlib if we can. This allows us to read and write # Link in zlib if we can. This allows us to read and write
# compressed CTF sections. # compressed CTF sections.
AM_ZLIB AM_ZLIB

22
ld/ld.h
View File

@ -21,8 +21,6 @@
#ifndef LD_H #ifndef LD_H
#define LD_H #define LD_H
#ifdef HAVE_LOCALE_H
#endif
#ifndef SEEK_CUR #ifndef SEEK_CUR
#define SEEK_CUR 1 #define SEEK_CUR 1
#endif #endif
@ -30,18 +28,16 @@
#define SEEK_END 2 #define SEEK_END 2
#endif #endif
#ifdef HAVE_LOCALE_H #ifndef ENABLE_NLS
# ifndef ENABLE_NLS /* The Solaris version of locale.h always includes libintl.h. If we have
/* The Solaris version of locale.h always includes libintl.h. If we have been configured with --disable-nls then ENABLE_NLS will not be defined
been configured with --disable-nls then ENABLE_NLS will not be defined and the dummy definitions of bindtextdomain (et al) below will conflict
and the dummy definitions of bindtextdomain (et al) below will conflict with the defintions in libintl.h. So we define these values to prevent
with the defintions in libintl.h. So we define these values to prevent the bogus inclusion of libintl.h. */
the bogus inclusion of libintl.h. */ # define _LIBINTL_H
# define _LIBINTL_H # define _LIBGETTEXT_H
# define _LIBGETTEXT_H
# endif
# include <locale.h>
#endif #endif
#include <locale.h>
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
# include <libintl.h> # include <libintl.h>

View File

@ -246,12 +246,10 @@ main (int argc, char **argv)
char *emulation; char *emulation;
long start_time = get_run_time (); long start_time = get_run_time ();
#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES) #ifdef HAVE_LC_MESSAGES
setlocale (LC_MESSAGES, ""); setlocale (LC_MESSAGES, "");
#endif #endif
#if defined (HAVE_SETLOCALE)
setlocale (LC_CTYPE, ""); setlocale (LC_CTYPE, "");
#endif
bindtextdomain (PACKAGE, LOCALEDIR); bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE); textdomain (PACKAGE);

View File

@ -28,30 +28,15 @@
#include "config.h" #include "config.h"
#include <stdio.h> #include <stdio.h>
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h> #include <sys/stat.h>
#include <stdarg.h>
#ifdef STRING_WITH_STRINGS
#include <string.h>
#include <strings.h>
#else
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#else
extern char *strchr ();
extern char *strrchr ();
#endif #endif
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h> #include <stdlib.h>
#endif #include <string.h>
#include <stdarg.h>
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -107,18 +92,6 @@ extern char *strrchr ();
#define SEEK_END 2 #define SEEK_END 2
#endif #endif
#if !HAVE_DECL_STRSTR
extern char *strstr ();
#endif
#if !HAVE_DECL_FREE
extern void free ();
#endif
#if !HAVE_DECL_GETENV
extern char *getenv ();
#endif
#if !HAVE_DECL_ENVIRON #if !HAVE_DECL_ENVIRON
extern char **environ; extern char **environ;
#endif #endif