tree.h: De-conditionalize init_priority code.

* tree.h: De-conditionalize init_priority code.
	* mips.h (NM_FLAGS): Change from -Bp to -Bn.
	* collect2.c (NM_FLAGS): Change from -p to -n.
	* configure.in: Turn on collect2 for mipstx39-elf.
	Handle use_collect2=no properly.
	* c-common.c: De-conditionalize init_priority code.
	* collect2.c (extract_init_priority, sort_ids): New fns.
	(main): Call sort_ids.
	Move sequence_number to file scope.
	* configure.in: Handle --enable-init-priority.
	* c-common.c (attrs): Add A_INIT_PRIORITY.
	(init_attributes, decl_attributes): Likewise.
	* tree.h (DEFAULT_INIT_PRIORITY, MAX_INIT_PRIORITY): New macros.
	* tree.c (get_file_function_name_long): Split out...
	(get_file_function_name): ...from here.
cp/:
	* lang-options.h: Add -finit-priority.
	* decl2.c: Likewise.  Check flag_init_priority instead of
	USE_INIT_PRIORITY.
	* decl2.c (setup_initp): New fn.
	(start_objects, finish_objects, do_ctors): Handle init_priority.
	(do_dtors, finish_file): Likewise.

From-SVN: r21701
This commit is contained in:
Jason Merrill 1998-08-13 17:29:30 +00:00 committed by Jason Merrill
parent db04386fd1
commit 2ce3c6c615
12 changed files with 615 additions and 150 deletions

View file

@ -1,3 +1,25 @@
Thu Aug 13 17:08:11 1998 Jason Merrill <jason@yorick.cygnus.com>
* tree.h: De-conditionalize init_priority code.
* mips.h (NM_FLAGS): Change from -Bp to -Bn.
* collect2.c (NM_FLAGS): Change from -p to -n.
* configure.in: Turn on collect2 for mipstx39-elf.
Handle use_collect2=no properly.
* c-common.c: De-conditionalize init_priority code.
* collect2.c (extract_init_priority, sort_ids): New fns.
(main): Call sort_ids.
Move sequence_number to file scope.
* configure.in: Handle --enable-init-priority.
* c-common.c (attrs): Add A_INIT_PRIORITY.
(init_attributes, decl_attributes): Likewise.
* tree.h (DEFAULT_INIT_PRIORITY, MAX_INIT_PRIORITY): New macros.
* tree.c (get_file_function_name_long): Split out...
(get_file_function_name): ...from here.
Thu Aug 13 16:09:53 1998 Martin von Loewis <loewis@informatik.hu-berlin.de> Thu Aug 13 16:09:53 1998 Martin von Loewis <loewis@informatik.hu-berlin.de>
* expr.c (safe_from_p): Change code to ERROR_MARK only when not * expr.c (safe_from_p): Change code to ERROR_MARK only when not

View file

@ -52,7 +52,8 @@ int skip_evaluation;
enum attrs {A_PACKED, A_NOCOMMON, A_COMMON, A_NORETURN, A_CONST, A_T_UNION, enum attrs {A_PACKED, A_NOCOMMON, A_COMMON, A_NORETURN, A_CONST, A_T_UNION,
A_NO_INSTRUMENT_FUNCTION, A_NO_INSTRUMENT_FUNCTION,
A_CONSTRUCTOR, A_DESTRUCTOR, A_MODE, A_SECTION, A_ALIGNED, A_CONSTRUCTOR, A_DESTRUCTOR, A_MODE, A_SECTION, A_ALIGNED,
A_UNUSED, A_FORMAT, A_FORMAT_ARG, A_WEAK, A_ALIAS}; A_UNUSED, A_FORMAT, A_FORMAT_ARG, A_WEAK, A_ALIAS,
A_INIT_PRIORITY};
enum format_type { printf_format_type, scanf_format_type, enum format_type { printf_format_type, scanf_format_type,
strftime_format_type }; strftime_format_type };
@ -89,6 +90,12 @@ static int if_stack_pointer = 0;
/* Generate RTL for the start of an if-then, and record the start of it /* Generate RTL for the start of an if-then, and record the start of it
for ambiguous else detection. */ for ambiguous else detection. */
/* A list of objects which have constructors or destructors which
reside in the global scope, and have an init_priority attribute
associated with them. The decl is stored in the TREE_VALUE slot
and the priority number is stored in the TREE_PURPOSE slot. */
tree static_aggregates_initp;
void void
c_expand_start_cond (cond, exitflag, compstmt_count) c_expand_start_cond (cond, exitflag, compstmt_count)
tree cond; tree cond;
@ -383,6 +390,7 @@ init_attributes ()
add_attribute (A_FORMAT_ARG, "format_arg", 1, 1, 1); add_attribute (A_FORMAT_ARG, "format_arg", 1, 1, 1);
add_attribute (A_WEAK, "weak", 0, 0, 1); add_attribute (A_WEAK, "weak", 0, 0, 1);
add_attribute (A_ALIAS, "alias", 1, 1, 1); add_attribute (A_ALIAS, "alias", 1, 1, 1);
add_attribute (A_INIT_PRIORITY, "init_priority", 0, 1, 0);
add_attribute (A_NO_INSTRUMENT_FUNCTION, "no_instrument_function", 0, 0, 1); add_attribute (A_NO_INSTRUMENT_FUNCTION, "no_instrument_function", 0, 0, 1);
} }
@ -859,6 +867,62 @@ decl_attributes (node, attributes, prefix_attributes)
warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
break; break;
case A_INIT_PRIORITY:
{
tree initp_expr = (args ? TREE_VALUE (args): NULL_TREE);
int pri;
if (initp_expr)
STRIP_NOPS (initp_expr);
if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
{
error ("requested init_priority is not an integer constant");
continue;
}
pri = TREE_INT_CST_LOW (initp_expr);
if (is_type || TREE_CODE (decl) != VAR_DECL
|| ! TREE_STATIC (decl)
|| DECL_EXTERNAL (decl)
|| (TREE_CODE (TREE_TYPE (decl)) != RECORD_TYPE
&& TREE_CODE (TREE_TYPE (decl)) != UNION_TYPE)
/* Static objects in functions are initialized the
first time control passes through that
function. This is not precise enough to pin down an
init_priority value, so don't allow it. */
|| current_function_decl)
{
error ("can only use init_priority attribute on file-scope definitions of objects of class type");
continue;
}
/* Check for init_priorities that are reserved for
implementation. Reserved for language and runtime
support implementations.*/
if ((10 <= pri && pri <= 99)
/* Reserved for standard library implementations. */
|| (500 <= pri && pri <= 999)
/* Reserved for objects with no attributes. */
|| pri > (MAX_INIT_PRIORITY - 50))
{
warning
("requested init_priority is reserved for internal use");
continue;
}
if (pri > MAX_INIT_PRIORITY || pri <= 0)
{
error ("requested init_priority is out of range");
continue;
}
static_aggregates_initp
= perm_tree_cons (initp_expr, decl, static_aggregates_initp);
break;
}
case A_NO_INSTRUMENT_FUNCTION: case A_NO_INSTRUMENT_FUNCTION:
if (TREE_CODE (decl) != FUNCTION_DECL) if (TREE_CODE (decl) != FUNCTION_DECL)
{ {

View file

@ -137,7 +137,7 @@ extern char *make_temp_file PROTO ((char *));
/* Default flags to pass to nm. */ /* Default flags to pass to nm. */
#ifndef NM_FLAGS #ifndef NM_FLAGS
#define NM_FLAGS "-p" #define NM_FLAGS "-n"
#endif #endif
#endif /* OBJECT_FORMAT_NONE */ #endif /* OBJECT_FORMAT_NONE */
@ -280,6 +280,8 @@ static void do_wait PROTO((char *));
static void fork_execute PROTO((char *, char **)); static void fork_execute PROTO((char *, char **));
static void maybe_unlink PROTO((char *)); static void maybe_unlink PROTO((char *));
static void add_to_list PROTO((struct head *, char *)); static void add_to_list PROTO((struct head *, char *));
static int extract_init_priority PROTO((char *));
static void sort_ids PROTO((struct head *));
static void write_list PROTO((FILE *, char *, struct id *)); static void write_list PROTO((FILE *, char *, struct id *));
#ifdef COLLECT_EXPORT_LIST #ifdef COLLECT_EXPORT_LIST
static void dump_list PROTO((FILE *, char *, struct id *)); static void dump_list PROTO((FILE *, char *, struct id *));
@ -1483,6 +1485,10 @@ main (argc, argv)
return 0; return 0;
} }
/* Sort ctor and dtor lists by priority. */
sort_ids (&constructors);
sort_ids (&destructors);
maybe_unlink(output_file); maybe_unlink(output_file);
outf = fopen (c_file, "w"); outf = fopen (c_file, "w");
if (outf == (FILE *) 0) if (outf == (FILE *) 0)
@ -1697,6 +1703,8 @@ maybe_unlink (file)
} }
static long sequence_number = 0;
/* Add a name to a linked list. */ /* Add a name to a linked list. */
static void static void
@ -1707,7 +1715,6 @@ add_to_list (head_ptr, name)
struct id *newid struct id *newid
= (struct id *) xcalloc (sizeof (struct id) + strlen (name), 1); = (struct id *) xcalloc (sizeof (struct id) + strlen (name), 1);
struct id *p; struct id *p;
static long sequence_number = 0;
strcpy (newid->name, name); strcpy (newid->name, name);
if (head_ptr->first) if (head_ptr->first)
@ -1732,6 +1739,67 @@ add_to_list (head_ptr, name)
head_ptr->number++; head_ptr->number++;
} }
/* Grab the init priority number from an init function name that
looks like "_GLOBAL_.I.12345.foo". */
static int
extract_init_priority (name)
char *name;
{
int pos = 0;
while (name[pos] == '_')
++pos;
pos += 10; /* strlen ("GLOBAL__X_") */
/* Extract init_p number from ctor/dtor name. */
return strtoul(name + pos, NULL, 10);
}
/* Insertion sort the ids from ctor/dtor list HEAD_PTR in descending order.
ctors will be run from right to left, dtors from left to right. */
static void
sort_ids (head_ptr)
struct head *head_ptr;
{
/* id holds the current element to insert. id_next holds the next
element to insert. id_ptr iterates through the already sorted elements
looking for the place to insert id. */
struct id *id, *id_next, **id_ptr;
int i;
id = head_ptr->first;
/* We don't have any sorted elements yet. */
head_ptr->first = NULL;
for (; id; id = id_next)
{
id_next = id->next;
id->sequence = extract_init_priority (id->name);
for (id_ptr = &(head_ptr->first); ; id_ptr = &((*id_ptr)->next))
if (*id_ptr == NULL
/* If the sequence numbers are the same, we put the id from the
file later on the command line later in the list. */
|| id->sequence > (*id_ptr)->sequence
/* Hack: do lexical compare, too.
|| (id->sequence == (*id_ptr)->sequence
&& strcmp (id->name, (*id_ptr)->name) > 0) */
)
{
id->next = *id_ptr;
*id_ptr = id;
break;
}
}
/* Now set the sequence numbers properly so write_c_file works. */
for (id = head_ptr->first; id; id = id->next)
id->sequence = ++sequence_number;
}
/* Write: `prefix', the names on list LIST, `suffix'. */ /* Write: `prefix', the names on list LIST, `suffix'. */
static void static void

View file

@ -716,7 +716,7 @@ while (0)
/* Tell collect what flags to pass to nm. */ /* Tell collect what flags to pass to nm. */
#ifndef NM_FLAGS #ifndef NM_FLAGS
#define NM_FLAGS "-Bp" #define NM_FLAGS "-Bn"
#endif #endif

287
gcc/configure vendored
View file

@ -1,7 +1,7 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.12.1 # Generated automatically using autoconf version 2.12.2
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
# #
# This configure script is free software; the Free Software Foundation # This configure script is free software; the Free Software Foundation
@ -36,6 +36,11 @@ ac_help="$ac_help
targets which normally enable it." targets which normally enable it."
ac_help="$ac_help ac_help="$ac_help
--with-fast-fixincludes Use a faster fixinclude program. Experimental" --with-fast-fixincludes Use a faster fixinclude program. Experimental"
ac_help="$ac_help
--enable-init-priority Use attributes to assign initialization order
for static objects.
--disable-init-priority Conform to ISO C++ rules for ordering static objects
(i.e. initialized in order of declaration). "
ac_help="$ac_help ac_help="$ac_help
--enable-threads enable thread usage for target GCC. --enable-threads enable thread usage for target GCC.
--enable-threads=LIB use LIB thread package for target GCC." --enable-threads=LIB use LIB thread package for target GCC."
@ -361,7 +366,7 @@ EOF
verbose=yes ;; verbose=yes ;;
-version | --version | --versio | --versi | --vers) -version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.12.1" echo "configure generated by autoconf version 2.12.2"
exit 0 ;; exit 0 ;;
-with-* | --with-*) -with-* | --with-*)
@ -531,9 +536,11 @@ ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS' ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross cross_compiling=$ac_cv_prog_cc_cross
ac_exeext=
ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
@ -694,6 +701,16 @@ else
fi fi
# Enable init_priority.
# Check whether --enable-init-priority or --disable-init-priority was given.
if test "${enable_init_priority+set}" = set; then
enableval="$enable_init_priority"
if [ x$enable_init_priority != xno ]; then
extra_c_flags=-DUSE_INIT_PRIORITY
fi
fi
# Enable threads # Enable threads
# Pass with no value to take the default # Pass with no value to take the default
# Pass with a value to specify a thread package # Pass with a value to specify a thread package
@ -777,7 +794,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi fi
echo $ac_n "checking host system type""... $ac_c" 1>&6 echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:781: checking host system type" >&5 echo "configure:798: checking host system type" >&5
host_alias=$host host_alias=$host
case "$host_alias" in case "$host_alias" in
@ -798,7 +815,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6 echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6
echo "configure:802: checking target system type" >&5 echo "configure:819: checking target system type" >&5
target_alias=$target target_alias=$target
case "$target_alias" in case "$target_alias" in
@ -816,7 +833,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6 echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:820: checking build system type" >&5 echo "configure:837: checking build system type" >&5
build_alias=$build build_alias=$build
case "$build_alias" in case "$build_alias" in
@ -843,14 +860,14 @@ test "$host_alias" != "$target_alias" &&
# Extract the first word of "gcc", so it can be a program name with args. # Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2 set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:847: checking for $ac_word" >&5 echo "configure:864: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
if test -n "$CC"; then if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test. ac_cv_prog_CC="$CC" # Let the user override the test.
else else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $PATH; do for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=. test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then if test -f $ac_dir/$ac_word; then
@ -872,14 +889,14 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args. # Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2 set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:876: checking for $ac_word" >&5 echo "configure:893: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
if test -n "$CC"; then if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test. ac_cv_prog_CC="$CC" # Let the user override the test.
else else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no ac_prog_rejected=no
for ac_dir in $PATH; do for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=. test -z "$ac_dir" && ac_dir=.
@ -916,25 +933,58 @@ else
echo "$ac_t""no" 1>&6 echo "$ac_t""no" 1>&6
fi fi
if test -z "$CC"; then
case "`uname -s`" in
*win32* | *WIN32*)
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:943: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="cl"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
;;
esac
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:924: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 echo "configure:974: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS' ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 934 "configure" #line 984 "configure"
#include "confdefs.h" #include "confdefs.h"
main(){return(0);} main(){return(0);}
EOF EOF
if { (eval echo configure:938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then if { (eval echo configure:988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler. # If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then if (./conftest; exit) 2>/dev/null; then
@ -954,12 +1004,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:958: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "configure:1008: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:963: checking whether we are using GNU C" >&5 echo "configure:1013: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -968,7 +1018,7 @@ else
yes; yes;
#endif #endif
EOF EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:972: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes ac_cv_prog_gcc=yes
else else
ac_cv_prog_gcc=no ac_cv_prog_gcc=no
@ -979,11 +1029,15 @@ echo "$ac_t""$ac_cv_prog_gcc" 1>&6
if test $ac_cv_prog_gcc = yes; then if test $ac_cv_prog_gcc = yes; then
GCC=yes GCC=yes
else
GCC=
fi
ac_test_CFLAGS="${CFLAGS+set}" ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS" ac_save_CFLAGS="$CFLAGS"
CFLAGS= CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:987: checking whether ${CC-cc} accepts -g" >&5 echo "configure:1041: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1001,17 +1055,21 @@ echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
if test "$ac_test_CFLAGS" = set; then if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS" CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2" CFLAGS="-g -O2"
else else
CFLAGS="-O2" CFLAGS="-g"
fi fi
else else
GCC= if test "$GCC" = yes; then
test "${CFLAGS+set}" = set || CFLAGS="-g" CFLAGS="-O2"
else
CFLAGS=
fi
fi fi
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:1015: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo "configure:1073: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1044,14 +1102,14 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args. # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2 set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1048: checking for $ac_word" >&5 echo "configure:1106: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
if test -n "$AWK"; then if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test. ac_cv_prog_AWK="$AWK" # Let the user override the test.
else else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $PATH; do for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=. test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then if test -f $ac_dir/$ac_word; then
@ -1075,14 +1133,14 @@ done
# Extract the first word of "flex", so it can be a program name with args. # Extract the first word of "flex", so it can be a program name with args.
set dummy flex; ac_word=$2 set dummy flex; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1079: checking for $ac_word" >&5 echo "configure:1137: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
if test -n "$LEX"; then if test -n "$LEX"; then
ac_cv_prog_LEX="$LEX" # Let the user override the test. ac_cv_prog_LEX="$LEX" # Let the user override the test.
else else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $PATH; do for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=. test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then if test -f $ac_dir/$ac_word; then
@ -1108,7 +1166,7 @@ then
*) ac_lib=l ;; *) ac_lib=l ;;
esac esac
echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
echo "configure:1112: checking for yywrap in -l$ac_lib" >&5 echo "configure:1170: checking for yywrap in -l$ac_lib" >&5
ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1116,7 +1174,7 @@ else
ac_save_LIBS="$LIBS" ac_save_LIBS="$LIBS"
LIBS="-l$ac_lib $LIBS" LIBS="-l$ac_lib $LIBS"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1120 "configure" #line 1178 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -1127,7 +1185,7 @@ int main() {
yywrap() yywrap()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then if { (eval echo configure:1189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes" eval "ac_cv_lib_$ac_lib_var=yes"
else else
@ -1150,7 +1208,7 @@ fi
fi fi
echo $ac_n "checking whether ln works""... $ac_c" 1>&6 echo $ac_n "checking whether ln works""... $ac_c" 1>&6
echo "configure:1154: checking whether ln works" >&5 echo "configure:1212: checking whether ln works" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1182,7 +1240,7 @@ else
fi fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
echo "configure:1186: checking whether ln -s works" >&5 echo "configure:1244: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1214,19 +1272,19 @@ else
fi fi
echo $ac_n "checking for volatile""... $ac_c" 1>&6 echo $ac_n "checking for volatile""... $ac_c" 1>&6
echo "configure:1218: checking for volatile" >&5 echo "configure:1276: checking for volatile" >&5
if eval "test \"`echo '$''{'gcc_cv_c_volatile'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_c_volatile'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1223 "configure" #line 1281 "configure"
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
volatile int foo; volatile int foo;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
gcc_cv_c_volatile=yes gcc_cv_c_volatile=yes
else else
@ -1249,14 +1307,14 @@ fi
# Extract the first word of "ranlib", so it can be a program name with args. # Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2 set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1253: checking for $ac_word" >&5 echo "configure:1311: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
if test -n "$RANLIB"; then if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $PATH; do for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=. test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then if test -f $ac_dir/$ac_word; then
@ -1280,14 +1338,14 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args. # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2 set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1284: checking for $ac_word" >&5 echo "configure:1342: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
if test -n "$YACC"; then if test -n "$YACC"; then
ac_cv_prog_YACC="$YACC" # Let the user override the test. ac_cv_prog_YACC="$YACC" # Let the user override the test.
else else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $PATH; do for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=. test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then if test -f $ac_dir/$ac_word; then
@ -1320,7 +1378,7 @@ test -n "$YACC" || YACC="yacc"
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh. # ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:1324: checking for a BSD compatible install" >&5 echo "configure:1382: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1371,7 +1429,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:1375: checking how to run the C preprocessor" >&5 echo "configure:1433: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory. # On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then if test -n "$CPP" && test -d "$CPP"; then
CPP= CPP=
@ -1386,14 +1444,14 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser, # On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. # not just through cpp.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1390 "configure" #line 1448 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <assert.h> #include <assert.h>
Syntax Error Syntax Error
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1454: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
: :
else else
@ -1403,14 +1461,31 @@ else
rm -rf conftest* rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp" CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1407 "configure" #line 1465 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <assert.h> #include <assert.h>
Syntax Error Syntax Error
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1413: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
#line 1482 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1488: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
: :
else else
@ -1422,6 +1497,8 @@ else
fi fi
rm -f conftest* rm -f conftest*
fi fi
rm -f conftest*
fi
rm -f conftest* rm -f conftest*
ac_cv_prog_CPP="$CPP" ac_cv_prog_CPP="$CPP"
fi fi
@ -1432,12 +1509,12 @@ fi
echo "$ac_t""$CPP" 1>&6 echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:1436: checking for ANSI C header files" >&5 echo "configure:1513: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1441 "configure" #line 1518 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
@ -1445,8 +1522,8 @@ else
#include <float.h> #include <float.h>
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1449: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
rm -rf conftest* rm -rf conftest*
ac_cv_header_stdc=yes ac_cv_header_stdc=yes
@ -1462,7 +1539,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI. # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1466 "configure" #line 1543 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <string.h> #include <string.h>
EOF EOF
@ -1480,7 +1557,7 @@ fi
if test $ac_cv_header_stdc = yes; then if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1484 "configure" #line 1561 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdlib.h> #include <stdlib.h>
EOF EOF
@ -1501,7 +1578,7 @@ if test "$cross_compiling" = yes; then
: :
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1505 "configure" #line 1582 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <ctype.h> #include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@ -1512,7 +1589,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); } exit (0); }
EOF EOF
if { (eval echo configure:1516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null if { (eval echo configure:1593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then then
: :
else else
@ -1536,12 +1613,12 @@ EOF
fi fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
echo "configure:1540: checking whether time.h and sys/time.h may both be included" >&5 echo "configure:1617: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1545 "configure" #line 1622 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#include <sys/time.h> #include <sys/time.h>
@ -1550,7 +1627,7 @@ int main() {
struct tm *tp; struct tm *tp;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
ac_cv_header_time=yes ac_cv_header_time=yes
else else
@ -1574,18 +1651,18 @@ for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unist
do do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:1578: checking for $ac_hdr" >&5 echo "configure:1655: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1583 "configure" #line 1660 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <$ac_hdr> #include <$ac_hdr>
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1665: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes" eval "ac_cv_header_$ac_safe=yes"
@ -1614,18 +1691,18 @@ done
# Check for thread headers. # Check for thread headers.
ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'` ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for thread.h""... $ac_c" 1>&6 echo $ac_n "checking for thread.h""... $ac_c" 1>&6
echo "configure:1618: checking for thread.h" >&5 echo "configure:1695: checking for thread.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1623 "configure" #line 1700 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <thread.h> #include <thread.h>
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1628: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1705: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes" eval "ac_cv_header_$ac_safe=yes"
@ -1648,18 +1725,18 @@ fi
ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'` ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for pthread.h""... $ac_c" 1>&6 echo $ac_n "checking for pthread.h""... $ac_c" 1>&6
echo "configure:1652: checking for pthread.h" >&5 echo "configure:1729: checking for pthread.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1657 "configure" #line 1734 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <pthread.h> #include <pthread.h>
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1662: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1739: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes" eval "ac_cv_header_$ac_safe=yes"
@ -1684,12 +1761,12 @@ fi
# See if the system preprocessor understands the ANSI C preprocessor # See if the system preprocessor understands the ANSI C preprocessor
# stringification operator. # stringification operator.
echo $ac_n "checking whether cpp understands the stringify operator""... $ac_c" 1>&6 echo $ac_n "checking whether cpp understands the stringify operator""... $ac_c" 1>&6
echo "configure:1688: checking whether cpp understands the stringify operator" >&5 echo "configure:1765: checking whether cpp understands the stringify operator" >&5
if eval "test \"`echo '$''{'gcc_cv_c_have_stringify'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_c_have_stringify'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1693 "configure" #line 1770 "configure"
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
@ -1697,7 +1774,7 @@ int main() {
char *test = S(foo); char *test = S(foo);
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
gcc_cv_c_have_stringify=yes gcc_cv_c_have_stringify=yes
else else
@ -1720,12 +1797,12 @@ fi
# Use <inttypes.h> only if it exists, # Use <inttypes.h> only if it exists,
# doesn't clash with <sys/types.h>, and declares intmax_t. # doesn't clash with <sys/types.h>, and declares intmax_t.
echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6 echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6
echo "configure:1724: checking for inttypes.h" >&5 echo "configure:1801: checking for inttypes.h" >&5
if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1729 "configure" #line 1806 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#include <inttypes.h> #include <inttypes.h>
@ -1733,7 +1810,7 @@ int main() {
intmax_t i = -1; intmax_t i = -1;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
cat >> confdefs.h <<EOF cat >> confdefs.h <<EOF
#define HAVE_INTTYPES_H 1 #define HAVE_INTTYPES_H 1
@ -1756,12 +1833,12 @@ for ac_func in strtoul bsearch strerror putenv popen bcopy bzero bcmp \
sysconf isascii gettimeofday sysconf isascii gettimeofday
do do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1760: checking for $ac_func" >&5 echo "configure:1837: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1765 "configure" #line 1842 "configure"
#include "confdefs.h" #include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */ which can conflict with char $ac_func(); below. */
@ -1784,7 +1861,7 @@ $ac_func();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then if { (eval echo configure:1865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_func_$ac_func=yes" eval "ac_cv_func_$ac_func=yes"
else else
@ -1813,12 +1890,12 @@ done
#AC_CHECK_TYPE(wchar_t, unsigned int) #AC_CHECK_TYPE(wchar_t, unsigned int)
echo $ac_n "checking for vprintf""... $ac_c" 1>&6 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
echo "configure:1817: checking for vprintf" >&5 echo "configure:1894: checking for vprintf" >&5
if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1822 "configure" #line 1899 "configure"
#include "confdefs.h" #include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vprintf(); below. */ which can conflict with char vprintf(); below. */
@ -1841,7 +1918,7 @@ vprintf();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then if { (eval echo configure:1922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_func_vprintf=yes" eval "ac_cv_func_vprintf=yes"
else else
@ -1865,12 +1942,12 @@ fi
if test "$ac_cv_func_vprintf" != yes; then if test "$ac_cv_func_vprintf" != yes; then
echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
echo "configure:1869: checking for _doprnt" >&5 echo "configure:1946: checking for _doprnt" >&5
if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1874 "configure" #line 1951 "configure"
#include "confdefs.h" #include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char _doprnt(); below. */ which can conflict with char _doprnt(); below. */
@ -1893,7 +1970,7 @@ _doprnt();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then if { (eval echo configure:1974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_func__doprnt=yes" eval "ac_cv_func__doprnt=yes"
else else
@ -1929,7 +2006,7 @@ fi
echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6 echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6
echo "configure:1933: checking whether the printf functions support %p" >&5 echo "configure:2010: checking whether the printf functions support %p" >&5
if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -1937,7 +2014,7 @@ else
gcc_cv_func_printf_ptr=no gcc_cv_func_printf_ptr=no
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1941 "configure" #line 2018 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
@ -1950,7 +2027,7 @@ main()
exit (p != q); exit (p != q);
} }
EOF EOF
if { (eval echo configure:1954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null if { (eval echo configure:2031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then then
gcc_cv_func_printf_ptr=yes gcc_cv_func_printf_ptr=yes
else else
@ -1978,12 +2055,12 @@ for ac_func in malloc realloc calloc free bcopy bzero bcmp \
index rindex getenv atol sbrk abort atof strerror getcwd getwd index rindex getenv atol sbrk abort atof strerror getcwd getwd
do do
echo $ac_n "checking whether $ac_func must be declared""... $ac_c" 1>&6 echo $ac_n "checking whether $ac_func must be declared""... $ac_c" 1>&6
echo "configure:1982: checking whether $ac_func must be declared" >&5 echo "configure:2059: checking whether $ac_func must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_$ac_func'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_decl_needed_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1987 "configure" #line 2064 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
@ -2011,7 +2088,7 @@ int main() {
char *(*pfn) = (char *(*)) $ac_func char *(*pfn) = (char *(*)) $ac_func
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:2092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
eval "gcc_cv_decl_needed_$ac_func=no" eval "gcc_cv_decl_needed_$ac_func=no"
else else
@ -2040,12 +2117,12 @@ done
for ac_func in getrlimit setrlimit for ac_func in getrlimit setrlimit
do do
echo $ac_n "checking whether $ac_func must be declared""... $ac_c" 1>&6 echo $ac_n "checking whether $ac_func must be declared""... $ac_c" 1>&6
echo "configure:2044: checking whether $ac_func must be declared" >&5 echo "configure:2121: checking whether $ac_func must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_$ac_func'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_decl_needed_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2049 "configure" #line 2126 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
@ -2077,7 +2154,7 @@ int main() {
char *(*pfn) = (char *(*)) $ac_func char *(*pfn) = (char *(*)) $ac_func
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:2158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
eval "gcc_cv_decl_needed_$ac_func=no" eval "gcc_cv_decl_needed_$ac_func=no"
else else
@ -2104,12 +2181,12 @@ done
echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
echo "configure:2108: checking for sys_siglist declaration in signal.h or unistd.h" >&5 echo "configure:2185: checking for sys_siglist declaration in signal.h or unistd.h" >&5
if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2113 "configure" #line 2190 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#include <signal.h> #include <signal.h>
@ -2121,7 +2198,7 @@ int main() {
char *msg = *(sys_siglist + 1); char *msg = *(sys_siglist + 1);
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:2202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
ac_cv_decl_sys_siglist=yes ac_cv_decl_sys_siglist=yes
else else
@ -4138,6 +4215,8 @@ for machine in $build $host $target; do
mipstx39-*-elf*) mipstx39-*-elf*)
tm_file="mips/r3900.h mips/elf.h mips/abi64.h libgloss.h" tm_file="mips/r3900.h mips/elf.h mips/abi64.h libgloss.h"
tmake_file=mips/t-r3900 tmake_file=mips/t-r3900
# FIXME mips-elf should be fixed to use crtstuff.
use_collect2=yes
;; ;;
mips-*-*) # Default MIPS RISC-OS 4.0. mips-*-*) # Default MIPS RISC-OS 4.0.
if [ x$stabs = xyes ]; then if [ x$stabs = xyes ]; then
@ -5230,6 +5309,10 @@ else
done done
fi fi
if [ x$use_collect2 = xno ]; then
use_collect2=
fi
# Add a definition of USE_COLLECT2 if system wants one. # Add a definition of USE_COLLECT2 if system wants one.
# Also tell toplev.c what to do. # Also tell toplev.c what to do.
# This substitutes for lots of t-* files. # This substitutes for lots of t-* files.
@ -5277,7 +5360,7 @@ fi
# Figure out what assembler alignment features are present. # Figure out what assembler alignment features are present.
echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6 echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
echo "configure:5281: checking assembler alignment features" >&5 echo "configure:5364: checking assembler alignment features" >&5
gcc_cv_as= gcc_cv_as=
gcc_cv_as_alignment_features= gcc_cv_as_alignment_features=
gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,gcc$,gas,'` gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,gcc$,gas,'`
@ -5530,6 +5613,14 @@ if [ x$enable_haifa != x ]; then
done done
fi fi
# Warn if using init_priority.
echo $ac_n "checking whether to enable init_priority by default""... $ac_c" 1>&6
echo "configure:5619: checking whether to enable init_priority by default" >&5
if [ x$enable_init_priority != xyes ]; then
enable_init_priority=no
fi
echo "$ac_t""$enable_init_priority" 1>&6
# Nothing to do for FLOAT_H, float_format already handled. # Nothing to do for FLOAT_H, float_format already handled.
objdir=`pwd` objdir=`pwd`
@ -5719,7 +5810,7 @@ do
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v) -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.12.1" echo "$CONFIG_STATUS generated by autoconf version 2.12.2"
exit 0 ;; exit 0 ;;
-help | --help | --hel | --he | --h) -help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;; echo "\$ac_cs_usage"; exit 0 ;;

View file

@ -130,6 +130,16 @@ AC_ARG_WITH(fast-fixincludes,
fast_fixinc="$with_fast_fixincludes", fast_fixinc="$with_fast_fixincludes",
fast_fixinc=no) fast_fixinc=no)
# Enable init_priority.
AC_ARG_ENABLE(init-priority,
[ --enable-init-priority Use attributes to assign initialization order
for static objects.
--disable-init-priority Conform to ISO C++ rules for ordering static objects
(i.e. initialized in order of declaration). ],
if [[[ x$enable_init_priority != xno ]]]; then
extra_c_flags=-DUSE_INIT_PRIORITY
fi)
# Enable threads # Enable threads
# Pass with no value to take the default # Pass with no value to take the default
# Pass with a value to specify a thread package # Pass with a value to specify a thread package
@ -2231,6 +2241,8 @@ for machine in $build $host $target; do
mipstx39-*-elf*) mipstx39-*-elf*)
tm_file="mips/r3900.h mips/elf.h mips/abi64.h libgloss.h" tm_file="mips/r3900.h mips/elf.h mips/abi64.h libgloss.h"
tmake_file=mips/t-r3900 tmake_file=mips/t-r3900
# FIXME mips-elf should be fixed to use crtstuff.
use_collect2=yes
;; ;;
mips-*-*) # Default MIPS RISC-OS 4.0. mips-*-*) # Default MIPS RISC-OS 4.0.
if [[ x$stabs = xyes ]]; then if [[ x$stabs = xyes ]]; then
@ -3323,6 +3335,10 @@ else
done done
fi fi
if [[ x$use_collect2 = xno ]]; then
use_collect2=
fi
# Add a definition of USE_COLLECT2 if system wants one. # Add a definition of USE_COLLECT2 if system wants one.
# Also tell toplev.c what to do. # Also tell toplev.c what to do.
# This substitutes for lots of t-* files. # This substitutes for lots of t-* files.
@ -3610,6 +3626,13 @@ if [[ x$enable_haifa != x ]]; then
done done
fi fi
# Warn if using init_priority.
AC_MSG_CHECKING(whether to enable init_priority by default)
if [[ x$enable_init_priority != xyes ]]; then
enable_init_priority=no
fi
AC_MSG_RESULT($enable_init_priority)
# Nothing to do for FLOAT_H, float_format already handled. # Nothing to do for FLOAT_H, float_format already handled.
objdir=`pwd` objdir=`pwd`
AC_SUBST(objdir) AC_SUBST(objdir)

View file

@ -1,3 +1,13 @@
1998-08-13 Jason Merrill <jason@yorick.cygnus.com>
* lang-options.h: Add -finit-priority.
* decl2.c: Likewise. Check flag_init_priority instead of
USE_INIT_PRIORITY.
* decl2.c (setup_initp): New fn.
(start_objects, finish_objects, do_ctors): Handle init_priority.
(do_dtors, finish_file): Likewise.
1998-08-13 Jason Merrill <jason@yorick.cygnus.com> 1998-08-13 Jason Merrill <jason@yorick.cygnus.com>
* pt.c (tsubst_copy): Hush warning. * pt.c (tsubst_copy): Hush warning.

View file

@ -173,6 +173,14 @@ int flag_alt_external_templates;
int flag_implicit_templates = 1; int flag_implicit_templates = 1;
/* Nonzero means allow numerical priorities on constructors. */
#ifdef USE_INIT_PRIORITY
int flag_init_priority = 1;
#else
int flag_init_priority;
#endif
/* Nonzero means warn about implicit declarations. */ /* Nonzero means warn about implicit declarations. */
int warn_implicit = 1; int warn_implicit = 1;
@ -492,6 +500,7 @@ static struct { char *string; int *variable; int on_value;} lang_f_options[] =
{"implement-inlines", &flag_implement_inlines, 1}, {"implement-inlines", &flag_implement_inlines, 1},
{"external-templates", &flag_external_templates, 1}, {"external-templates", &flag_external_templates, 1},
{"implicit-templates", &flag_implicit_templates, 1}, {"implicit-templates", &flag_implicit_templates, 1},
{"init-priority", &flag_init_priority, 1},
{"huge-objects", &flag_huge_objects, 1}, {"huge-objects", &flag_huge_objects, 1},
{"conserve-space", &flag_conserve_space, 1}, {"conserve-space", &flag_conserve_space, 1},
{"vtable-thunks", &flag_vtable_thunks, 1}, {"vtable-thunks", &flag_vtable_thunks, 1},
@ -2929,18 +2938,104 @@ get_sentry (base)
return sentry; return sentry;
} }
/* A list of objects which have constructors or destructors
which reside in the global scope. The decl is stored in
the TREE_VALUE slot and the initializer is stored
in the TREE_PURPOSE slot. */
extern tree static_aggregates_initp;
/* Set up the static_aggregates* lists for processing. Subroutine of
finish_file. Note that this function changes the format of
static_aggregates_initp, from (priority . decl) to
(priority . ((initializer . decl) ...)). */
static void
setup_initp ()
{
tree t, *p, next_t;
if (! flag_init_priority)
{
for (t = static_aggregates_initp; t; t = TREE_CHAIN (t))
cp_warning ("init_priority for `%#D' ignored without -finit-priority",
TREE_VALUE (t));
return;
}
/* First, remove any entries from static_aggregates that are also in
static_aggregates_initp, and update the entries in _initp to
include the initializer. */
p = &static_aggregates;
for (; *p; )
{
t = value_member (TREE_VALUE (*p), static_aggregates_initp);
if (t)
{
TREE_VALUE (t) = *p;
*p = TREE_CHAIN (*p);
TREE_CHAIN (TREE_VALUE (t)) = NULL_TREE;
}
else
p = &TREE_CHAIN (*p);
}
/* Then, group static_aggregates_initp. After this step, there will only
be one entry for each priority, with a chain coming off it. */
t = static_aggregates_initp;
static_aggregates_initp = NULL_TREE;
for (; t; t = next_t)
{
next_t = TREE_CHAIN (t);
for (p = &static_aggregates_initp; ; p = &TREE_CHAIN (*p))
{
if (*p == NULL_TREE
|| tree_int_cst_lt (TREE_PURPOSE (*p), TREE_PURPOSE (t)))
{
TREE_CHAIN (t) = *p;
*p = t;
break;
}
else if (tree_int_cst_equal (TREE_PURPOSE (*p), TREE_PURPOSE (t)))
{
TREE_CHAIN (TREE_VALUE (t)) = TREE_VALUE (*p);
TREE_VALUE (*p) = TREE_VALUE (t);
break;
}
}
}
/* Reverse each list to preserve the order (currently reverse declaration
order, for destructors). */
for (t = static_aggregates_initp; t; t = TREE_CHAIN (t))
TREE_VALUE (t) = nreverse (TREE_VALUE (t));
}
/* Start the process of running a particular set of global constructors /* Start the process of running a particular set of global constructors
or destructors. Subroutine of do_[cd]tors. */ or destructors. Subroutine of do_[cd]tors. */
static void static void
start_objects (method_type) start_objects (method_type, initp)
int method_type; int method_type, initp;
{ {
tree fnname; tree fnname;
char type[10];
/* Make ctor or dtor function. METHOD_TYPE may be 'I' or 'D'. */ /* Make ctor or dtor function. METHOD_TYPE may be 'I' or 'D'. */
fnname = get_file_function_name (method_type); if (flag_init_priority)
{
if (initp == 0)
initp = DEFAULT_INIT_PRIORITY;
sprintf (type, "%c%c%.5u", method_type, JOINER, initp);
}
else
sprintf (type, "%c", method_type);
fnname = get_file_function_name_long (type);
start_function (void_list_node, start_function (void_list_node,
make_call_declarator (fnname, void_list_node, NULL_TREE, make_call_declarator (fnname, void_list_node, NULL_TREE,
@ -2958,18 +3053,21 @@ start_objects (method_type)
or destructors. Subroutine of do_[cd]tors. */ or destructors. Subroutine of do_[cd]tors. */
static void static void
finish_objects (method_type) finish_objects (method_type, initp)
int method_type; int method_type, initp;
{ {
char *fnname; char *fnname;
if (! initp)
{
tree list = (method_type == 'I' ? static_ctors : static_dtors); tree list = (method_type == 'I' ? static_ctors : static_dtors);
if (! current_function_decl && list) if (! current_function_decl && list)
start_objects (method_type); start_objects (method_type, initp);
for (; list; list = TREE_CHAIN (list)) for (; list; list = TREE_CHAIN (list))
expand_expr_stmt (build_function_call (TREE_VALUE (list), NULL_TREE)); expand_expr_stmt (build_function_call (TREE_VALUE (list), NULL_TREE));
}
if (! current_function_decl) if (! current_function_decl)
return; return;
@ -2982,19 +3080,56 @@ finish_objects (method_type)
pop_momentary (); pop_momentary ();
finish_function (lineno, 0, 0); finish_function (lineno, 0, 0);
if (! flag_init_priority)
{
if (method_type == 'I') if (method_type == 'I')
assemble_constructor (fnname); assemble_constructor (fnname);
else else
assemble_destructor (fnname); assemble_destructor (fnname);
} }
/* Generate a function to run a set of global destructors. Subroutine of #ifdef ASM_OUTPUT_SECTION_NAME
finish_file. */ /* If we're using init priority we can't use assemble_*tor, but on ELF
targets we can stick the references into named sections for GNU ld
to collect. */
if (flag_init_priority)
{
char buf[15];
if (initp == 0)
initp = DEFAULT_INIT_PRIORITY;
sprintf (buf, ".%ctors.%.5u", method_type == 'I' ? 'c' : 'd',
/* invert the numbering so the linker puts us in the proper
order; constructors are run from right to left, and the
linker sorts in increasing order. */
MAX_INIT_PRIORITY - initp);
named_section (NULL_TREE, buf, 0);
assemble_integer (gen_rtx_SYMBOL_REF (Pmode, fnname),
POINTER_SIZE / BITS_PER_UNIT, 1);
}
#endif
}
/* Generate a function to run a set of global destructors. START is either
NULL_TREE or a node indicating a set of destructors with the same
init priority. Subroutine of finish_file. */
static void static void
do_dtors () do_dtors (start)
tree start;
{ {
tree vars = static_aggregates; tree vars;
int initp;
if (start)
{
initp = TREE_INT_CST_LOW (TREE_PURPOSE (start));
vars = TREE_VALUE (start);
}
else
{
initp = 0;
vars = static_aggregates;
}
for (; vars; vars = TREE_CHAIN (vars)) for (; vars; vars = TREE_CHAIN (vars))
{ {
@ -3010,7 +3145,7 @@ do_dtors ()
|| DECL_WEAK (decl))); || DECL_WEAK (decl)));
if (! current_function_decl) if (! current_function_decl)
start_objects ('D'); start_objects ('D', initp);
/* Because of: /* Because of:
@ -3053,16 +3188,30 @@ do_dtors ()
} }
} }
finish_objects ('D'); finish_objects ('D', initp);
} }
/* Generate a function to run a set of global constructors. Subroutine of /* Generate a function to run a set of global constructors. START is
finish_file. */ either NULL_TREE or a node indicating a set of constructors with the
same init priority. Subroutine of finish_file. */
static void static void
do_ctors () do_ctors (start)
tree start;
{ {
tree vars = static_aggregates; tree vars;
int initp;
if (start)
{
initp = TREE_INT_CST_LOW (TREE_PURPOSE (start));
vars = TREE_VALUE (start);
}
else
{
initp = 0;
vars = static_aggregates;
}
/* Reverse the list so it's in the right order for ctors. */ /* Reverse the list so it's in the right order for ctors. */
vars = nreverse (vars); vars = nreverse (vars);
@ -3088,7 +3237,7 @@ do_ctors ()
|| DECL_WEAK (decl))); || DECL_WEAK (decl)));
if (! current_function_decl) if (! current_function_decl)
start_objects ('I'); start_objects ('I', initp);
/* Set these global variables so that GDB at least puts /* Set these global variables so that GDB at least puts
us near the declaration which required the initialization. */ us near the declaration which required the initialization. */
@ -3148,7 +3297,7 @@ do_ctors ()
my_friendly_abort (22); my_friendly_abort (22);
} }
finish_objects ('I'); finish_objects ('I', initp);
} }
/* This routine is called from the last rule in yyparse (). /* This routine is called from the last rule in yyparse ().
@ -3262,16 +3411,27 @@ finish_file ()
if (static_dtors || vars) if (static_dtors || vars)
needs_cleaning = 1; needs_cleaning = 1;
/* The aggregates are listed in reverse declaration order, for cleaning. */ setup_initp ();
/* After setup_initp, the aggregates are listed in reverse declaration
order, for cleaning. */
if (needs_cleaning) if (needs_cleaning)
{ {
do_dtors (); do_dtors (NULL_TREE);
if (flag_init_priority)
for (vars = static_aggregates_initp; vars; vars = TREE_CHAIN (vars))
do_dtors (vars);
} }
/* do_ctors will reverse the lists for messing up. */ /* do_ctors will reverse the lists for messing up. */
if (needs_messing_up) if (needs_messing_up)
{ {
do_ctors (); do_ctors (NULL_TREE);
if (flag_init_priority)
for (vars = static_aggregates_initp; vars; vars = TREE_CHAIN (vars))
do_ctors (vars);
} }
permanent_allocation (1); permanent_allocation (1);

View file

@ -66,6 +66,8 @@ DEFINE_LANG_NAME ("C++")
{ "-fno-implement-inlines", "Export functions even if they can be inlined" }, { "-fno-implement-inlines", "Export functions even if they can be inlined" },
{ "-fimplicit-templates", "Emit implicit instatiations if needed" }, { "-fimplicit-templates", "Emit implicit instatiations if needed" },
{ "-fno-implicit-templates", "" }, { "-fno-implicit-templates", "" },
{ "-finit-priority", "Handle the init_priority attribute" },
{ "-fno-init-priority", "" },
{ "-flabels-ok", "Labels can be used as first class objects" }, { "-flabels-ok", "Labels can be used as first class objects" },
{ "-fno-labels-ok", "" }, { "-fno-labels-ok", "" },
{ "-fmemoize-lookups", "Enable caching of member function resolutions" }, { "-fmemoize-lookups", "Enable caching of member function resolutions" },

View file

@ -1030,6 +1030,11 @@ your code with this flag (including the C++ library, if you use it).
This flag is not useful when compiling with -fvtable-thunks. This flag is not useful when compiling with -fvtable-thunks.
@item -finit-priority
Support @samp{__attribute__ ((init_priority (n)))} for controlling the
order of initialization of file-scope objects. On ELF targets, this
requires GNU ld 2.10 or later.
@item -fno-implement-inlines @item -fno-implement-inlines
To save space, do not emit out-of-line copies of inline functions To save space, do not emit out-of-line copies of inline functions
controlled by @samp{#pragma implementation}. This will cause linker controlled by @samp{#pragma implementation}. This will cause linker

View file

@ -4806,24 +4806,24 @@ dump_tree_statistics ()
#define FILE_FUNCTION_PREFIX_LEN 9 #define FILE_FUNCTION_PREFIX_LEN 9
#ifndef NO_DOLLAR_IN_LABEL #ifndef NO_DOLLAR_IN_LABEL
#define FILE_FUNCTION_FORMAT "_GLOBAL_$D$%s" #define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s"
#else /* NO_DOLLAR_IN_LABEL */ #else /* NO_DOLLAR_IN_LABEL */
#ifndef NO_DOT_IN_LABEL #ifndef NO_DOT_IN_LABEL
#define FILE_FUNCTION_FORMAT "_GLOBAL_.D.%s" #define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s"
#else /* NO_DOT_IN_LABEL */ #else /* NO_DOT_IN_LABEL */
#define FILE_FUNCTION_FORMAT "_GLOBAL__D_%s" #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
#endif /* NO_DOT_IN_LABEL */ #endif /* NO_DOT_IN_LABEL */
#endif /* NO_DOLLAR_IN_LABEL */ #endif /* NO_DOLLAR_IN_LABEL */
extern char * first_global_object_name; extern char * first_global_object_name;
extern char * weak_global_object_name; extern char * weak_global_object_name;
/* If KIND=='I', return a suitable global initializer (constructor) name. /* TYPE is some string to identify this function to the linker or
If KIND=='D', return a suitable global clean-up (destructor) name. */ collect2. */
tree tree
get_file_function_name (kind) get_file_function_name_long (type)
int kind; char *type;
{ {
char *buf; char *buf;
register char *p; register char *p;
@ -4837,13 +4837,14 @@ get_file_function_name (kind)
else else
p = input_filename; p = input_filename;
buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)); buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
+ strlen (type));
/* Set up the name of the file-level functions we may need. */ /* Set up the name of the file-level functions we may need. */
/* Use a global object (which is already required to be unique over /* Use a global object (which is already required to be unique over
the program) rather than the file name (which imposes extra the program) rather than the file name (which imposes extra
constraints). -- Raeburn@MIT.EDU, 10 Jan 1990. */ constraints). -- Raeburn@MIT.EDU, 10 Jan 1990. */
sprintf (buf, FILE_FUNCTION_FORMAT, p); sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
/* Don't need to pull weird characters out of global names. */ /* Don't need to pull weird characters out of global names. */
if (p != first_global_object_name) if (p != first_global_object_name)
@ -4866,10 +4867,23 @@ get_file_function_name (kind)
*p = '_'; *p = '_';
} }
buf[FILE_FUNCTION_PREFIX_LEN] = kind;
return get_identifier (buf); return get_identifier (buf);
} }
/* If KIND=='I', return a suitable global initializer (constructor) name.
If KIND=='D', return a suitable global clean-up (destructor) name. */
tree
get_file_function_name (kind)
int kind;
{
char p[2];
p[0] = kind;
p[1] = 0;
return get_file_function_name_long (p);
}
/* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node. /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
The result is placed in BUFFER (which has length BIT_SIZE), The result is placed in BUFFER (which has length BIT_SIZE),

View file

@ -1124,6 +1124,11 @@ struct tree_type
do not allocate storage, and refer to a definition elsewhere. */ do not allocate storage, and refer to a definition elsewhere. */
#define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag) #define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag)
/* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority
initializatons. */
#define DEFAULT_INIT_PRIORITY 65535
#define MAX_INIT_PRIORITY 65535
/* In a TYPE_DECL /* In a TYPE_DECL
nonzero means the detail info about this type is not dumped into stabs. nonzero means the detail info about this type is not dumped into stabs.
Instead it will generate cross reference ('x') of names. Instead it will generate cross reference ('x') of names.
@ -1843,6 +1848,7 @@ extern void (*incomplete_decl_finalize_hook) PROTO((tree));
/* In tree.c */ /* In tree.c */
extern char *perm_calloc PROTO((int, long)); extern char *perm_calloc PROTO((int, long));
extern tree get_file_function_name PROTO((int)); extern tree get_file_function_name PROTO((int));
extern tree get_file_function_name_long PROTO((char *));
extern tree get_set_constructor_bits PROTO((tree, char *, int)); extern tree get_set_constructor_bits PROTO((tree, char *, int));
extern tree get_set_constructor_bytes PROTO((tree, extern tree get_set_constructor_bytes PROTO((tree,
unsigned char *, int)); unsigned char *, int));