aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Berlin <dan@cgsoftware.com>2001-10-05 04:55:41 +0000
committerDaniel Berlin <dan@cgsoftware.com>2001-10-05 04:55:41 +0000
commit44ee3605c4ed5428b1c31d11fafe6298e076cc64 (patch)
tree564b467beddc6cbf1e1aac1472c84d171526b82a
parent29f8365f6d260454e3693246e737376620740b4b (diff)
Serialize RTL, add MDBM support, start precomp'd headers (should only be a few days for C precompiled ones)
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tree-serialize-branch@46027 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/Makefile.in5
-rw-r--r--gcc/c-common.h1
-rw-r--r--gcc/c-decl.c147
-rw-r--r--gcc/c-lang.c21
-rw-r--r--gcc/c-lex.c1
-rw-r--r--gcc/config.in3
-rwxr-xr-xgcc/configure236
-rw-r--r--gcc/configure.in4
-rw-r--r--gcc/cppfiles.c81
-rw-r--r--gcc/cpplib.c21
-rw-r--r--gcc/cpplib.h1
-rw-r--r--gcc/ggc-page.c29
-rw-r--r--gcc/ggc.h5
-rw-r--r--gcc/rtl.c2
-rw-r--r--gcc/toplev.c1
-rw-r--r--gcc/tree.c292
-rw-r--r--gcc/treepch.h11
17 files changed, 735 insertions, 126 deletions
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 7697af64d64..04d4801982c 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -724,7 +724,7 @@ CXX_TARGET_OBJS=@cxx_target_objs@
# Language-specific object files for C and Objective C.
C_AND_OBJC_OBJS = c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
c-convert.o c-aux-info.o c-common.o c-format.o c-semantics.o c-dump.o \
- libcpp.a $(C_TARGET_OBJS)
+ libcpp.a $(C_TARGET_OBJS)
# Language-specific object files for C.
C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS)
@@ -1967,7 +1967,8 @@ PREPROCESSOR_DEFINES = \
LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o \
cpphash.o cpperror.o cppinit.o cppdefault.o \
- hashtable.o line-map.o mkdeps.o prefix.o version.o mbchar.o
+ hashtable.o line-map.o mkdeps.o prefix.o version.o mbchar.o
+
LIBCPP_DEPS = $(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
$(OBSTACK_H) $(SYSTEM_H)
diff --git a/gcc/c-common.h b/gcc/c-common.h
index b5cfcd4b63c..a5f01f1585c 100644
--- a/gcc/c-common.h
+++ b/gcc/c-common.h
@@ -322,6 +322,7 @@ typedef tree (*walk_tree_fn) PARAMS ((tree *,
int *,
void *));
+extern void lang_read_pch PARAMS ((cpp_reader *, int, const char *));
extern stmt_tree current_stmt_tree PARAMS ((void));
extern tree *current_scope_stmt_stack PARAMS ((void));
extern void begin_stmt_tree PARAMS ((tree *));
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 5a93d571432..d35cb60df3e 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -44,6 +44,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "target.h"
#include "debug.h"
#include "treepch.h"
+#include "hashtab.h"
/* In grokdeclarator, distinguish syntactic contexts of declarators. */
enum decl_context
{ NORMAL, /* Ordinary declaration */
@@ -6628,12 +6629,6 @@ finish_function (nested)
/* Tie off the statement tree for this function. */
finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
- {
- tree temp;
- temp = read_tree ((tree) write_tree (&fndecl));
- temp = temp+1;
- temp = temp-1;
- }
/* Clear out memory we no longer need. */
free_after_parsing (cfun);
/* Since we never call rest_of_compilation, we never clear
@@ -7191,3 +7186,143 @@ build_void_list_node ()
tree t = build_tree_list (NULL_TREE, void_type_node);
return t;
}
+int def_len = 0;
+int *def_table=NULL;
+static int
+write_defs (pfile, hn, nothing)
+ cpp_reader *pfile;
+ cpp_hashnode *hn;
+ void *nothing;
+{
+ switch (hn->type)
+ {
+ case NT_MACRO:
+ if (hn->flags & NODE_BUILTIN)
+ {
+ return 1;
+ }
+ case NT_VOID:
+ {
+ def_len++;
+ def_table = xrealloc (def_table, sizeof (int) * def_len);
+ def_table[def_len-1] = pickle_string ((const char *)hn->ident.str);
+ }
+ return 1;
+ case NT_ASSERTION:
+ return 1;
+ default:
+ abort();
+
+ }
+}
+
+void lang_write_pch ()
+{
+ size_t id;
+ int i;
+ const char *keyname;
+ tree globals;
+ tree cgt_table[CTI_MAX];
+ for (i = 0; i < CTI_MAX; i++)
+ cgt_table[i] = write_tree (&c_global_trees[i]);
+ keyname = "c_global_trees";
+ store_to_db ((void *)keyname, strlen (keyname) + 1, cgt_table, CTI_MAX * sizeof (tree));
+ globals = global_binding_level->names;
+ id = write_tree (&globals);
+ keyname = "global_binding_level->names";
+ store_to_db ((void *)keyname, strlen (keyname) + 1, &id, sizeof (size_t));
+ globals = global_binding_level->tags;
+ id = write_tree (&globals);
+ keyname = "global_binding_level->tags";
+ store_to_db ((void *)keyname, strlen (keyname) + 1, &id, sizeof (size_t));
+ globals = static_ctors;
+ id = write_tree (&globals);
+ keyname = "static_ctors";
+ store_to_db ((void *)keyname, strlen (keyname) + 1, &id, sizeof (size_t));
+ globals = static_dtors;
+ id = write_tree (&globals);
+ keyname = "static_dtors";
+ store_to_db ((void *)keyname, strlen (keyname) + 1, &id, sizeof (size_t));
+ def_len = 0;
+ def_table = 0;
+ cpp_forall_identifiers (parse_in, write_defs, NULL);
+ keyname = "defs";
+ store_to_db ((void *)keyname, strlen (keyname) + 1, def_table, def_len * sizeof (int));
+ free (def_table);
+ keyname = "defslen";
+ store_to_db ((void *)keyname, strlen (keyname) + 1, &def_len, sizeof (size_t));
+}
+void lang_read_pch (pfile, fd, self)
+ cpp_reader *pfile;
+ int fd;
+ const char *self;
+{
+ int i;
+ size_t id;
+ datum key, data;
+ const char *keyname;
+ tree cgt_table[CTI_MAX];
+ datafilename = self;
+ if (datafile == NULL)
+ datafile = dbm_open ((char *)datafilename, O_RDWR, 0666);
+ keyname = "c_global_trees";
+ key.dptr = (void *)keyname;
+ key.dsize = strlen (keyname) + 1;
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort();
+ memcpy (cgt_table, data.dptr, data.dsize);
+ for (i = 0; i < CTI_MAX; i++)
+ c_global_trees[i] = read_tree (cgt_table[i]);
+ keyname = "global_binding_level->names";
+ key.dptr = (void *)keyname;
+ key.dsize = strlen (keyname) + 1;
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort();
+ global_binding_level->names = read_tree ((tree)*(tree *)data.dptr);
+ keyname = "global_binding_level->tags";
+ key.dptr = (void *)keyname;
+ key.dsize = strlen (keyname) + 1;
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort();
+ global_binding_level->tags = read_tree ((tree)*(tree *)data.dptr);
+ keyname = "static_ctors";
+ key.dptr = (void *)keyname;
+ key.dsize = strlen (keyname) + 1;
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort();
+ static_ctors = read_tree ((tree)*(tree *)data.dptr);
+ keyname = "static_dtors";
+ key.dptr = (void *)keyname;
+ key.dsize = strlen (keyname) + 1;
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort();
+ static_dtors = read_tree ((tree)*(tree *)data.dptr);
+ keyname = "defslen";
+ key.dptr = (void *)keyname;
+ key.dsize = strlen (keyname) + 1;
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort ();
+ def_len = *(int *)data.dptr;
+ def_table = xmalloc (def_len * sizeof (int));
+ keyname = "defs";
+ key.dptr = (void *)keyname;
+ key.dsize = strlen (keyname) + 1;
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort ();
+ memcpy (def_table, data.dptr, data.dsize);
+ for (i = 0; i < def_len; i++)
+ {
+ const char *tempstr;
+ tempstr = unpickle_string (def_table[i]);
+ cpp_lookup (parse_in, (unsigned char *)tempstr, strlen (tempstr));
+ }
+ free (def_table);
+}
+
diff --git a/gcc/c-lang.c b/gcc/c-lang.c
index 36d73d29c5e..1c1ec583047 100644
--- a/gcc/c-lang.c
+++ b/gcc/c-lang.c
@@ -35,7 +35,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "c-tree.h"
#include "c-lex.h"
#include "cpplib.h"
-
+#include "treepch.h"
static int c_tree_printer PARAMS ((output_buffer *));
static int c_missing_noreturn_ok_p PARAMS ((tree));
static void c_init PARAMS ((void));
@@ -221,10 +221,25 @@ finish_cdtor (body)
#endif
/* Called at end of parsing, but before end-of-file processing. */
-
void
finish_file ()
{
+ char *ch = malloc (5000);
+ memset (ch, 0, 5000);
+ strcpy (ch, input_filename);
+ ch = strcat (ch, ".pch");
+ datafilename = strdup(ch);
+ lang_write_pch ();
+ free (ch);
+ if (written_pointers)
+ splay_tree_delete (written_pointers);
+ if (written_trees)
+ splay_tree_delete (written_trees);
+ if (written_rtl)
+ splay_tree_delete (written_rtl);
+ written_pointers = written_trees = written_rtl = NULL;
+ current_id = 0;
+
#ifndef ASM_OUTPUT_CONSTRUCTOR
if (static_ctors)
{
@@ -263,6 +278,8 @@ finish_file ()
dump_end (TDI_all, stream);
}
}
+ if (datafile)
+ dbm_close (datafile);
}
/* Called during diagnostic message formatting process to print a
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index 669bb169e9a..8f121e652ce 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -128,6 +128,7 @@ init_c_lex (filename)
cb->ident = cb_ident;
cb->file_change = cb_file_change;
cb->def_pragma = cb_def_pragma;
+ cb->read_pch = lang_read_pch;
/* Set the debug callbacks if we can use them. */
if (debug_info_level == DINFO_LEVEL_VERBOSE
diff --git a/gcc/config.in b/gcc/config.in
index 350c6024217..630015f6cfc 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -214,6 +214,9 @@
/* Define if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
+/* Define if you have the <mdbm.h> header file. */
+#undef HAVE_MDBM_H
+
/* Define if you have the <nl_types.h> header file. */
#undef HAVE_NL_TYPES_H
diff --git a/gcc/configure b/gcc/configure
index 39f2628ddf7..250e8e91252 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -4943,7 +4943,7 @@ fi
echo "checking for database support" 1>&6
echo "configure:4945: checking for database support" >&5
-for ac_hdr in sdbm.h gdbm.h
+for ac_hdr in mdbm.h sdbm.h gdbm.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
@@ -5049,6 +5049,70 @@ else :
fi
+echo $ac_n "checking for library containing mdbm_open""... $ac_c" 1>&6
+echo "configure:5054: checking for library containing mdbm_open" >&5
+if eval "test \"`echo '$''{'ac_cv_search_mdbm_open'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_func_search_save_LIBS="$LIBS"
+ac_cv_search_mdbm_open="no"
+cat > conftest.$ac_ext <<EOF
+#line 5061 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char mdbm_open();
+
+int main() {
+mdbm_open()
+; return 0; }
+EOF
+if { (eval echo configure:5072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_search_mdbm_open="none required"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+test "$ac_cv_search_mdbm_open" = "no" && for i in mdbm; do
+LIBS="-l$i $ac_func_search_save_LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5083 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char mdbm_open();
+
+int main() {
+mdbm_open()
+; return 0; }
+EOF
+if { (eval echo configure:5094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_search_mdbm_open="-l$i"
+break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+LIBS="$ac_func_search_save_LIBS"
+fi
+
+echo "$ac_t""$ac_cv_search_mdbm_open" 1>&6
+if test "$ac_cv_search_mdbm_open" != "no"; then
+ test "$ac_cv_search_mdbm_open" = "none required" || LIBS="$ac_cv_search_mdbm_open $LIBS"
+ cat >> confdefs.h <<\EOF
+#define HAVE_DBM 1
+EOF
+
+else :
+
+fi
# File extensions
manext='.1'
objext='.o'
@@ -5311,7 +5375,7 @@ fi
echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
-echo "configure:5315: checking for strerror in -lcposix" >&5
+echo "configure:5379: checking for strerror in -lcposix" >&5
ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5319,7 +5383,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lcposix $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5323 "configure"
+#line 5387 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5330,7 +5394,7 @@ int main() {
strerror()
; return 0; }
EOF
-if { (eval echo configure:5334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5353,12 +5417,12 @@ fi
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:5357: checking for working const" >&5
+echo "configure:5421: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5362 "configure"
+#line 5426 "configure"
#include "confdefs.h"
int main() {
@@ -5407,7 +5471,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
-if { (eval echo configure:5411: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5475: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
@@ -5428,12 +5492,12 @@ EOF
fi
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:5432: checking for off_t" >&5
+echo "configure:5496: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5437 "configure"
+#line 5501 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -5461,12 +5525,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:5465: checking for size_t" >&5
+echo "configure:5529: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5470 "configure"
+#line 5534 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -5499,17 +5563,17 @@ unistd.h sys/param.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5503: checking for $ac_hdr" >&5
+echo "configure:5567: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5508 "configure"
+#line 5572 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5513: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5577: \"$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
rm -rf conftest*
@@ -5539,12 +5603,12 @@ done
strdup __argz_count __argz_stringify __argz_next
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5543: checking for $ac_func" >&5
+echo "configure:5607: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5548 "configure"
+#line 5612 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5567,7 +5631,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5596,12 +5660,12 @@ done
for ac_func in stpcpy
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5600: checking for $ac_func" >&5
+echo "configure:5664: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5605 "configure"
+#line 5669 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5624,7 +5688,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5658,19 +5722,19 @@ EOF
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:5662: checking for LC_MESSAGES" >&5
+echo "configure:5726: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5667 "configure"
+#line 5731 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:5674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_val_LC_MESSAGES=yes
else
@@ -5691,7 +5755,7 @@ EOF
fi
fi
echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:5695: checking whether NLS is requested" >&5
+echo "configure:5759: checking whether NLS is requested" >&5
# Check whether --enable-nls or --disable-nls was given.
if test "${enable_nls+set}" = set; then
enableval="$enable_nls"
@@ -5711,7 +5775,7 @@ fi
EOF
echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:5715: checking whether included gettext is requested" >&5
+echo "configure:5779: checking whether included gettext is requested" >&5
# Check whether --with-included-gettext or --without-included-gettext was given.
if test "${with_included_gettext+set}" = set; then
withval="$with_included_gettext"
@@ -5730,17 +5794,17 @@ fi
ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:5734: checking for libintl.h" >&5
+echo "configure:5798: checking for libintl.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5739 "configure"
+#line 5803 "configure"
#include "confdefs.h"
#include <libintl.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5808: \"$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
rm -rf conftest*
@@ -5757,19 +5821,19 @@ fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:5761: checking for gettext in libc" >&5
+echo "configure:5825: checking for gettext in libc" >&5
if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5766 "configure"
+#line 5830 "configure"
#include "confdefs.h"
#include <libintl.h>
int main() {
return (int) gettext ("")
; return 0; }
EOF
-if { (eval echo configure:5773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gettext_libc=yes
else
@@ -5785,7 +5849,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
if test "$gt_cv_func_gettext_libc" != "yes"; then
echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:5789: checking for bindtextdomain in -lintl" >&5
+echo "configure:5853: checking for bindtextdomain in -lintl" >&5
ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5793,7 +5857,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lintl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5797 "configure"
+#line 5861 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5804,7 +5868,7 @@ int main() {
bindtextdomain()
; return 0; }
EOF
-if { (eval echo configure:5808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5820,12 +5884,12 @@ fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:5824: checking for gettext in libintl" >&5
+echo "configure:5888: checking for gettext in libintl" >&5
if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:5829: checking for gettext in -lintl" >&5
+echo "configure:5893: checking for gettext in -lintl" >&5
ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5833,7 +5897,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lintl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5837 "configure"
+#line 5901 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5844,7 +5908,7 @@ int main() {
gettext()
; return 0; }
EOF
-if { (eval echo configure:5848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5887,7 +5951,7 @@ EOF
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5891: checking for $ac_word" >&5
+echo "configure:5955: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5921,12 +5985,12 @@ fi
for ac_func in dcgettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5925: checking for $ac_func" >&5
+echo "configure:5989: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5930 "configure"
+#line 5994 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5949,7 +6013,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5976,7 +6040,7 @@ done
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5980: checking for $ac_word" >&5
+echo "configure:6044: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6012,7 +6076,7 @@ fi
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6016: checking for $ac_word" >&5
+echo "configure:6080: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6044,7 +6108,7 @@ else
fi
cat > conftest.$ac_ext <<EOF
-#line 6048 "configure"
+#line 6112 "configure"
#include "confdefs.h"
int main() {
@@ -6052,7 +6116,7 @@ extern int _nl_msg_cat_cntr;
return _nl_msg_cat_cntr
; return 0; }
EOF
-if { (eval echo configure:6056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
CATOBJEXT=.gmo
DATADIRNAME=share
@@ -6077,7 +6141,7 @@ fi
if test "$CATOBJEXT" = "NONE"; then
echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6
-echo "configure:6081: checking whether catgets can be used" >&5
+echo "configure:6145: checking whether catgets can be used" >&5
# Check whether --with-catgets or --without-catgets was given.
if test "${with_catgets+set}" = set; then
withval="$with_catgets"
@@ -6090,7 +6154,7 @@ fi
if test "$nls_cv_use_catgets" = "yes"; then
echo $ac_n "checking for main in -li""... $ac_c" 1>&6
-echo "configure:6094: checking for main in -li" >&5
+echo "configure:6158: checking for main in -li" >&5
ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6098,14 +6162,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-li $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6102 "configure"
+#line 6166 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6133,12 +6197,12 @@ else
fi
echo $ac_n "checking for catgets""... $ac_c" 1>&6
-echo "configure:6137: checking for catgets" >&5
+echo "configure:6201: checking for catgets" >&5
if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6142 "configure"
+#line 6206 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char catgets(); below. */
@@ -6161,7 +6225,7 @@ catgets();
; return 0; }
EOF
-if { (eval echo configure:6165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_catgets=yes"
else
@@ -6183,7 +6247,7 @@ EOF
# Extract the first word of "gencat", so it can be a program name with args.
set dummy gencat; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6187: checking for $ac_word" >&5
+echo "configure:6251: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_GENCAT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6219,7 +6283,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6223: checking for $ac_word" >&5
+echo "configure:6287: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6256,7 +6320,7 @@ fi
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6260: checking for $ac_word" >&5
+echo "configure:6324: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6294,7 +6358,7 @@ fi
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6298: checking for $ac_word" >&5
+echo "configure:6362: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6352,7 +6416,7 @@ fi
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6356: checking for $ac_word" >&5
+echo "configure:6420: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6386,7 +6450,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6390: checking for $ac_word" >&5
+echo "configure:6454: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6425,7 +6489,7 @@ fi
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6429: checking for $ac_word" >&5
+echo "configure:6493: checking for $ac_word" >&5
if eval "test \"`echo '$''{'gcc_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6524,7 +6588,7 @@ fi
LINGUAS=
else
echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:6528: checking for catalogs to be installed" >&5
+echo "configure:6592: checking for catalogs to be installed" >&5
if test "x$LINGUAS" = "x"; then
LINGUAS=$ALL_LINGUAS
else
@@ -6556,17 +6620,17 @@ echo "configure:6528: checking for catalogs to be installed" >&5
if test "$CATOBJEXT" = ".cat"; then
ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:6560: checking for linux/version.h" >&5
+echo "configure:6624: checking for linux/version.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6565 "configure"
+#line 6629 "configure"
#include "confdefs.h"
#include <linux/version.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6570: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6634: \"$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
rm -rf conftest*
@@ -6642,7 +6706,7 @@ fi
case $host_os in
win32 | pe | cygwin* | mingw32* | uwin*)
echo $ac_n "checking whether windows registry support is requested""... $ac_c" 1>&6
-echo "configure:6646: checking whether windows registry support is requested" >&5
+echo "configure:6710: checking whether windows registry support is requested" >&5
if test "x$enable_win32_registry" != xno; then
cat >> confdefs.h <<\EOF
#define ENABLE_WIN32_REGISTRY 1
@@ -6651,14 +6715,14 @@ EOF
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for library containing RegOpenKeyExA""... $ac_c" 1>&6
-echo "configure:6655: checking for library containing RegOpenKeyExA" >&5
+echo "configure:6719: checking for library containing RegOpenKeyExA" >&5
if eval "test \"`echo '$''{'ac_cv_search_RegOpenKeyExA'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_RegOpenKeyExA="no"
cat > conftest.$ac_ext <<EOF
-#line 6662 "configure"
+#line 6726 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6669,7 +6733,7 @@ int main() {
RegOpenKeyExA()
; return 0; }
EOF
-if { (eval echo configure:6673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_RegOpenKeyExA="none required"
else
@@ -6680,7 +6744,7 @@ rm -f conftest*
test "$ac_cv_search_RegOpenKeyExA" = "no" && for i in advapi32; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6684 "configure"
+#line 6748 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6691,7 +6755,7 @@ int main() {
RegOpenKeyExA()
; return 0; }
EOF
-if { (eval echo configure:6695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_RegOpenKeyExA="-l$i"
break
@@ -6733,7 +6797,7 @@ esac
if test "x$enable_win32_registry" != xno; then
echo $ac_n "checking registry key on windows hosts""... $ac_c" 1>&6
-echo "configure:6737: checking registry key on windows hosts" >&5
+echo "configure:6801: checking registry key on windows hosts" >&5
cat >> confdefs.h <<EOF
#define WIN32_REGISTRY_KEY "$gcc_cv_win32_registry_key"
EOF
@@ -6916,7 +6980,7 @@ fi
# Figure out what assembler we will be using.
echo $ac_n "checking what assembler to use""... $ac_c" 1>&6
-echo "configure:6920: checking what assembler to use" >&5
+echo "configure:6984: checking what assembler to use" >&5
gcc_cv_as=
gcc_cv_gas_major_version=
gcc_cv_gas_minor_version=
@@ -7001,7 +7065,7 @@ fi
# Figure out what nm we will be using.
echo $ac_n "checking what nm to use""... $ac_c" 1>&6
-echo "configure:7005: checking what nm to use" >&5
+echo "configure:7069: checking what nm to use" >&5
if test -x nm$host_exeext; then
gcc_cv_nm=./nm$host_exeext
elif test x$host = x$target; then
@@ -7012,7 +7076,7 @@ echo "$ac_t""$gcc_cv_nm" 1>&6
# Figure out what assembler alignment features are present.
echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
-echo "configure:7016: checking assembler alignment features" >&5
+echo "configure:7080: checking assembler alignment features" >&5
gcc_cv_as_alignment_features=none
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
# Gas version 2.6 and later support for .balign and .p2align.
@@ -7060,7 +7124,7 @@ fi
echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
-echo "configure:7064: checking assembler subsection support" >&5
+echo "configure:7128: checking assembler subsection support" >&5
gcc_cv_as_subsections=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7100,7 +7164,7 @@ fi
echo "$ac_t""$gcc_cv_as_subsections" 1>&6
echo $ac_n "checking assembler weak support""... $ac_c" 1>&6
-echo "configure:7104: checking assembler weak support" >&5
+echo "configure:7168: checking assembler weak support" >&5
gcc_cv_as_weak=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then
@@ -7123,7 +7187,7 @@ fi
echo "$ac_t""$gcc_cv_as_weak" 1>&6
echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6
-echo "configure:7127: checking assembler hidden support" >&5
+echo "configure:7191: checking assembler hidden support" >&5
gcc_cv_as_hidden=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 10 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7147,7 +7211,7 @@ fi
echo "$ac_t""$gcc_cv_as_hidden" 1>&6
echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6
-echo "configure:7151: checking assembler leb128 support" >&5
+echo "configure:7215: checking assembler leb128 support" >&5
gcc_cv_as_leb128=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7192,7 +7256,7 @@ fi
echo "$ac_t""$gcc_cv_as_leb128" 1>&6
echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6
-echo "configure:7196: checking assembler eh_frame optimization" >&5
+echo "configure:7260: checking assembler eh_frame optimization" >&5
gcc_cv_as_eh_frame=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7275,7 +7339,7 @@ echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6
case "$target" in
sparc*-*-*)
echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
-echo "configure:7279: checking assembler .register pseudo-op support" >&5
+echo "configure:7343: checking assembler .register pseudo-op support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7303,7 +7367,7 @@ EOF
fi
echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
-echo "configure:7307: checking assembler supports -relax" >&5
+echo "configure:7371: checking assembler supports -relax" >&5
if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7333,7 +7397,7 @@ EOF
case "$tm_file" in
*64*)
echo $ac_n "checking for 64 bit support in assembler ($gcc_cv_as)""... $ac_c" 1>&6
-echo "configure:7337: checking for 64 bit support in assembler ($gcc_cv_as)" >&5
+echo "configure:7401: checking for 64 bit support in assembler ($gcc_cv_as)" >&5
if eval "test \"`echo '$''{'gcc_cv_as_flags64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7378,7 +7442,7 @@ EOF
if test "x$gcc_cv_as_flags64" != xno; then
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
-echo "configure:7382: checking for assembler offsetable %lo() support" >&5
+echo "configure:7446: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7418,7 +7482,7 @@ EOF
i[34567]86-*-*)
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
-echo "configure:7422: checking assembler instructions" >&5
+echo "configure:7486: checking assembler instructions" >&5
gcc_cv_as_instructions=
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
@@ -7447,7 +7511,7 @@ EOF
esac
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
-echo "configure:7451: checking assembler dwarf2 debug_line support" >&5
+echo "configure:7515: checking assembler dwarf2 debug_line support" >&5
gcc_cv_as_dwarf2_debug_line=no
# ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any
@@ -7632,7 +7696,7 @@ fi
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:7636: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:7700: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
diff --git a/gcc/configure.in b/gcc/configure.in
index 1fc4b13c80e..f0edda63a80 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -677,9 +677,9 @@ CFLAGS="$saved_CFLAGS"
gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
AC_CHECKING(for database support)
-AC_CHECK_HEADERS(sdbm.h gdbm.h, [break])
+AC_CHECK_HEADERS(mdbm.h sdbm.h gdbm.h, [break])
AC_SEARCH_LIBS(dbm_open, sdbm gdbm, [AC_DEFINE(HAVE_DBM)])
-
+AC_SEARCH_LIBS(mdbm_open, mdbm, [AC_DEFINE(HAVE_DBM)])
# File extensions
manext='.1'
objext='.o'
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index 5b8f9076b39..c5fb4b65801 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -71,6 +71,13 @@ struct include_file
unsigned short include_count; /* number of times file has been read */
unsigned short refcnt; /* number of stacked buffers using this file */
unsigned char mapped; /* file buffer is mmapped */
+ unsigned char pch; /* 0: file not known to be a PCH.
+ 1: file is a PCH
+ (on return from find_include_file).
+ 2: file is not and never will be a valid
+ precompiled header.
+ 3: file is always a valid precompiled
+ header. */
};
/* The cmacro works like this: If it's NULL, the file is to be
@@ -81,6 +88,7 @@ struct include_file
#define DO_NOT_REREAD(inc) \
((inc)->cmacro && ((inc)->cmacro == NEVER_REREAD \
|| (inc)->cmacro->type == NT_MACRO))
+#define INCLUDE_PCH_P(i) (((i)->pch & 1) != 0)
#define NO_INCLUDE_PATH ((struct include_file *) -1)
static struct file_name_map *read_name_map
@@ -94,6 +102,8 @@ static struct include_file *
find_include_file PARAMS ((cpp_reader *, const cpp_token *,
enum include_type));
static struct include_file *open_file PARAMS ((cpp_reader *, const char *));
+static struct include_file *open_file_pch PARAMS ((cpp_reader *,
+ const char *));
static int read_include_file PARAMS ((cpp_reader *, struct include_file *));
static bool stack_include_file PARAMS ((cpp_reader *, struct include_file *));
static void purge_cache PARAMS ((struct include_file *));
@@ -275,6 +285,35 @@ open_file (pfile, filename)
return 0;
}
+/* Like open_file, but also look for a precompiled header if (a) one exists
+ and (b) it is valid. */
+static struct include_file *
+open_file_pch (pfile, filename)
+ cpp_reader *pfile;
+ const char *filename;
+{
+ if (filename[0] != '\0')
+ {
+ size_t namelen = strlen (filename);
+ char *pchname = alloca (namelen + 5);
+ struct include_file * file;
+
+ memcpy (pchname, filename, namelen);
+ memcpy (pchname + namelen, ".pch", 5);
+ file = open_file (pfile, pchname);
+ if (file != NULL)
+ {
+// file->name = xstrdup (filename);
+ if ((file->pch & 2) == 0)
+ file->pch = 1;
+ if (INCLUDE_PCH_P (file))
+ return file;
+ close (file->fd);
+ file->fd = -1;
+ }
+ }
+ return open_file (pfile, filename);
+}
/* Place the file referenced by INC into a new buffer on the buffer
stack, unless there are errors, or the file is not re-included
because of e.g. multiple-include guards. Returns true if a buffer
@@ -302,14 +341,34 @@ stack_include_file (pfile, inc)
/* Not in cache? */
if (! inc->buffer)
{
- /* If an error occurs, do not try to read this file again. */
- if (read_include_file (pfile, inc))
- {
- _cpp_never_reread (inc);
- return false;
- }
- close (inc->fd);
- inc->fd = -1;
+ /* PCH files get dealt with immediately.
+ We stack a zero-sized buffer below.
+ The reason for this is that reading a PCH directly into memory
+ will approximately double the memory consumption of the compiler. */
+ if (INCLUDE_PCH_P (inc))
+ {
+ pfile->cb.read_pch (pfile, inc->fd, inc->name);
+ close (inc->fd);
+ inc->fd = -1;
+ return false;
+#if 0
+ fp = cpp_push_buffer (pfile, (unsigned char *)"", 0, 0, inc->nominal_fname);
+#else
+// fp = cpp_push_buffer (pfile, (unsigned char *)"", 0, 0, 0);
+#endif
+ // fp->rlimit = fp->buf;
+ }
+ else
+ {
+ /* If an error occurs, do not try to read this file again. */
+ if (read_include_file (pfile, inc))
+ {
+ _cpp_never_reread (inc);
+ return false;
+ }
+ close (inc->fd);
+ inc->fd = -1;
+ }
}
if (pfile->buffer)
@@ -517,7 +576,7 @@ find_include_file (pfile, header, type)
char *name, *n;
if (IS_ABSOLUTE_PATHNAME (fname))
- return open_file (pfile, fname);
+ return open_file_pch (pfile, fname);
/* For #include_next, skip in the search path past the dir in which
the current file was found, but if it was found via an absolute
@@ -547,7 +606,7 @@ find_include_file (pfile, header, type)
else
n = name;
- file = open_file (pfile, n);
+ file = open_file_pch (pfile, n);
if (file)
{
file->foundhere = path;
@@ -709,7 +768,7 @@ _cpp_read_file (pfile, fname)
cpp_reader *pfile;
const char *fname;
{
- struct include_file *f = open_file (pfile, fname);
+ struct include_file *f = open_file_pch (pfile, fname);
bool stacked = false;
if (f == NULL)
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index 0a02c15845e..0e18af914d5 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -25,7 +25,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "cpplib.h"
#include "cpphash.h"
#include "obstack.h"
-
+#include "treepch.h"
/* Chained list of answers to an assertion. */
struct answer
{
@@ -1729,6 +1729,21 @@ cpp_set_callbacks (pfile, cb)
pfile->cb = *cb;
}
+struct include_file
+{
+ const char *name; /* actual path name of file */
+ const cpp_hashnode *cmacro; /* macro, if any, preventing reinclusion. */
+ const struct search_path *foundhere;
+ /* location in search path where file was
+ found, for #include_next and sysp. */
+ const unsigned char *buffer; /* pointer to cached file contents */
+ struct stat st; /* copy of stat(2) data for file */
+ int fd; /* fd open on file (short term storage only) */
+ int err_no; /* errno obtained if opening a file failed */
+ unsigned short include_count; /* number of times file has been read */
+ unsigned short refcnt; /* number of stacked buffers using this file */
+ unsigned char mapped; /* file buffer is mmapped */
+};
/* Push a new buffer on the buffer stack. Returns the new buffer; it
doesn't fail. It does not generate a file change call back; that
is the responsibility of the caller. */
@@ -1787,7 +1802,9 @@ _cpp_pop_buffer (pfile)
pfile->buffer = buffer->prev;
if (buffer->inc)
- _cpp_pop_file_buffer (pfile, buffer->inc);
+ {
+ _cpp_pop_file_buffer (pfile, buffer->inc);
+ }
obstack_free (&pfile->buffer_ob, buffer);
}
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index 8c495736aa9..aedab18e768 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -389,6 +389,7 @@ struct cpp_options
/* Call backs. */
struct cpp_callbacks
{
+ void (*read_pch) PARAMS ((cpp_reader *, int, const char *));
void (*file_change) PARAMS ((cpp_reader *, const struct line_map *));
void (*include) PARAMS ((cpp_reader *, unsigned int,
const unsigned char *, const cpp_token *));
diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c
index b731b296071..3918bee2418 100644
--- a/gcc/ggc-page.c
+++ b/gcc/ggc-page.c
@@ -1000,6 +1000,35 @@ ggc_set_mark (p)
return 0;
}
+/* Return 1 if P has been marked, zero otherwise.
+ P must have been allocated by the GC allocator; it mustn't point to
+ static objects, stack variables, or memory allocated with malloc. */
+
+int
+ggc_marked_p (p)
+ const void *p;
+{
+ page_entry *entry;
+ unsigned bit, word;
+ unsigned long mask;
+
+ /* Look up the page on which the object is alloced. If the object
+ wasn't allocated by the collector, we'll probably die. */
+ entry = lookup_page_table_entry (p);
+#ifdef ENABLE_CHECKING
+ if (entry == NULL)
+ abort ();
+#endif
+
+ /* Calculate the index of the object on the page; this is its bit
+ position in the in_use_p bitmap. */
+ bit = (((const char *) p) - entry->page) / OBJECT_SIZE (entry->order);
+ word = bit / HOST_BITS_PER_LONG;
+ mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG);
+
+ return (entry->in_use_p[word] & mask) != 0;
+}
+
/* Return the size of the gc-able object P. */
diff --git a/gcc/ggc.h b/gcc/ggc.h
index be137e791b9..a6528eb5b19 100644
--- a/gcc/ggc.h
+++ b/gcc/ggc.h
@@ -155,6 +155,11 @@ void ggc_collect PARAMS ((void));
pointers in this data structure should not be traversed. */
int ggc_set_mark PARAMS ((const void *));
+/* Return 1 if P has been marked, zero otherwise.
+ P must have been allocated by the GC allocator; it mustn't point to
+ static objects, stack variables, or memory allocated with malloc. */
+extern int ggc_marked_p PARAMS ((const void *));
+
/* Callbacks to the languages. */
/* This is the language's opportunity to mark nodes held through
diff --git a/gcc/rtl.c b/gcc/rtl.c
index bd4d6fad682..cd055e560ba 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -25,7 +25,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "real.h"
#include "ggc.h"
#include "errors.h"
-
+#include "treepch.h"
/* Calculate the format for CONST_DOUBLE. This depends on the relative
widths of HOST_WIDE_INT and REAL_VALUE_TYPE.
diff --git a/gcc/toplev.c b/gcc/toplev.c
index dda03425f3c..44007148e18 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -68,7 +68,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "integrate.h"
#include "debug.h"
#include "target.h"
-
#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
#include "dwarf2out.h"
#endif
diff --git a/gcc/tree.c b/gcc/tree.c
index a2af124fbaa..3c2cdb40596 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -45,6 +45,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "hashtab.h"
#include "output.h"
#include "target.h"
+#include "rtl.h"
+#include "real.h"
#include "treepch.h"
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
@@ -4983,14 +4985,14 @@ DBM * datafile = NULL;
const char *datafilename = "testtree";
size_t current_id = 1;
splay_tree read_trees = NULL;
+splay_tree read_rtls = NULL;
+splay_tree written_rtl = NULL;
splay_tree written_trees = NULL;
splay_tree written_pointers = NULL;
-static int pickle_string PARAMS ((const char *));
static char * pickle_tree PARAMS ((tree));
static tree unpickle_tree PARAMS ((tree));
-static const char * unpickle_string PARAMS ((int));
#define VARRAY_BYTES(x) ((sizeof (struct varray_head_tag) - sizeof (varray_data)) + (x->num_elements * x->element_size))
-static int
+int
pickle_string (s)
const char *s;
{
@@ -5004,7 +5006,7 @@ pickle_string (s)
store_to_db (&id, sizeof (int), (void *)s, strlen (s) + 1);
return id;
}
-static const char *
+const char *
unpickle_string (id)
int id;
{
@@ -5039,6 +5041,131 @@ read_tree_varray (id)
ret = unpickle_tree_varray (id);
return ret;
}
+static rtx
+unpickle_rtl (id)
+ rtx id;
+{
+ int i;
+ const char *format;
+ rtx result;
+ datum key, data;
+ if (id == 0)
+ return NULL_RTX;
+ key.dptr = (char *) &id;
+ key.dsize = sizeof (int);
+ data = dbm_fetch (datafile, key);
+ if (!data.dptr)
+ abort();
+ result = rtx_alloc (GET_CODE ((rtx) data.dptr));
+ memcpy (result, data.dptr, data.dsize);
+ format = GET_RTX_FORMAT (GET_CODE (result));
+ for (i = 0; i < GET_RTX_LENGTH (GET_CODE (result)); ++i)
+ {
+ switch (format[i])
+ {
+ case '\0':
+ return 0;
+ case 'e':
+ case 'u':
+ XEXP (result, i) = read_rtl (XEXP (result, i));
+ break;
+ case 'V':
+ case 'E':
+ if (XVEC (result, i) != 0)
+ {
+ int j;
+ for (j = 0; j < XVECLEN (result, i); ++j)
+ {
+ XVECEXP (result, i, j) = read_rtl (XVECEXP (result, i, j));
+ }
+ }
+ break;
+ case 'S':
+ case 's':
+ if (XSTR (result, i) != 0)
+ {
+ XSTR (result, i) = unpickle_string ((int)XSTR (result, i));
+ }
+ break;
+ case 't':
+ if (XTREE (result, i) != 0)
+ {
+ XTREE (result, i) = read_tree (XTREE (result, i));
+ }
+ break;
+ case '0':
+ switch (GET_CODE (result))
+ {
+ case JUMP_INSN:
+ case LABEL_REF:
+ case CONST_DOUBLE:
+ X0EXP (result, i) = read_rtl (X0EXP (result, i));
+ break;
+ case CODE_LABEL:
+ if (i != 3)
+ X0EXP (result, i) = read_rtl (X0EXP (result, i));
+ break;
+ case MEM:
+ case REG:
+ case SCRATCH:
+ case ADDR_DIFF_VEC:
+ break;
+
+ case NOTE:
+ switch (NOTE_LINE_NUMBER (result))
+ {
+ case NOTE_INSN_RANGE_BEG:
+ case NOTE_INSN_RANGE_END:
+ case NOTE_INSN_LIVE:
+ case NOTE_INSN_EXPECTED_VALUE:
+ X0EXP (result, i) = read_rtl (X0EXP (result, i));
+ break;
+ case NOTE_INSN_BLOCK_BEG:
+ case NOTE_INSN_BLOCK_END:
+ if (X0TREE (result, i) != 0)
+ {
+ X0TREE (result, i) = read_tree (X0TREE (result, i));
+ }
+ break;
+ case NOTE_INSN_DELETED_LABEL:
+ if (X0STR (result, i) != 0)
+ {
+ X0STR (result, i) = unpickle_string ((int)X0STR (result, i));
+ }
+ break;
+ default:
+ if (NOTE_LINE_NUMBER (result) >= 0)
+ if (X0STR (result, i) != 0)
+ {
+ X0STR (result, i) = unpickle_string ((int)X0STR (result, i));
+ }
+ break;
+ }
+ break;
+ default:
+ abort ();
+ }
+ break;
+ }
+ }
+ return result;
+}
+rtx
+read_rtl (id)
+ rtx id;
+{
+ splay_tree_node result;
+ rtx ret;
+ if (id == 0)
+ return NULL_RTX;
+ if (read_rtls == NULL)
+ read_rtls = splay_tree_new (splay_tree_compare_pointers, NULL, NULL);
+ result = splay_tree_lookup (read_rtls, (splay_tree_key) id);
+ if (result)
+ return (rtx) result->value;
+ ret = unpickle_rtl (id);
+ return ret;
+}
tree
read_tree (id)
tree id;
@@ -5095,6 +5222,12 @@ unpickle_tree (id)
abort();
if (TREE_CODE ((tree) data.dptr) == TREE_VEC)
buffer = make_tree_vec (TREE_VEC_LENGTH ((tree) data.dptr));
+ else if (TREE_CODE ((tree) data.dptr) == IDENTIFIER_NODE)
+ {
+ buffer = make_lang_type (TREE_CODE ((tree) data.dptr));
+ memcpy (buffer, data.dptr, data.dsize);
+ buffer = get_identifier (unpickle_string (IDENTIFIER_POINTER (buffer)));
+ }
else
buffer = make_lang_type (TREE_CODE ((tree) data.dptr));
splay_tree_insert (read_trees, (splay_tree_key) id,
@@ -5119,8 +5252,11 @@ unpickle_tree (id)
break;
case 'x':
if (TREE_CODE (buffer) == IDENTIFIER_NODE)
- IDENTIFIER_POINTER (buffer) = (const char *)
- unpickle_string ((int)IDENTIFIER_POINTER (buffer));
+ {
+ IDENTIFIER_POINTER (buffer) = (const char *)
+ unpickle_string ((int)IDENTIFIER_POINTER (buffer));
+
+ }
else if (TREE_CODE (buffer) == TREE_LIST)
{
TREE_PURPOSE (buffer) = read_tree (TREE_PURPOSE (buffer));
@@ -5156,8 +5292,9 @@ unpickle_tree (id)
|| DECL_EXTERNAL (buffer)
|| TREE_PUBLIC (buffer))))
DECL_ASSEMBLER_NAME (buffer);
+ if (DECL_RTL_SET_P (buffer))
+ buffer->decl.rtl = read_rtl (buffer->decl.rtl);
/*FIXME: if it's PARM_DECL, u2 is an RTL */
- /*FIXME: Handle lang specific */
break;
case 't':
TYPE_VALUES (buffer) = read_tree (TYPE_VALUES (buffer));
@@ -5175,7 +5312,6 @@ unpickle_tree (id)
TYPE_NONCOPIED_PARTS (buffer) =
read_tree (TYPE_NONCOPIED_PARTS (buffer));
TYPE_CONTEXT (buffer) = read_tree (TYPE_CONTEXT (buffer));
- /* FIXME: Handle lang_specific */
break;
case 'b':
{
@@ -5281,6 +5417,8 @@ pickle_tree (t)
DECL_MACHINE_ATTRIBUTES (buffer) =
(tree) write_tree (&DECL_MACHINE_ATTRIBUTES (buffer));
DECL_VINDEX (buffer) = (tree) write_tree (&DECL_VINDEX (buffer));
+ if (DECL_RTL_SET_P (t))
+ buffer->decl.rtl = (rtx) write_rtl (&buffer->decl.rtl);
#if 0
if (DECL_ASSEMBLER_NAME_SET_P (t))
DECL_ASSEMBLER_NAME (buffer) = (tree) write_tree (&DECL_ASSEMBLER_NAME (buffer));
@@ -5361,12 +5499,13 @@ write_tree_varray (v)
char *buffer;
if (!v)
return 0;
- if (ggc_set_mark (v))
+ if (ggc_marked_p (v))
{
result = splay_tree_lookup (written_pointers, (splay_tree_key) v);
if (result)
return result->value;
}
+ ggc_test_and_set_mark (v);
id = current_id++;
splay_tree_insert (written_pointers, (splay_tree_key)v, id);
buffer = pickle_tree_varray (v);
@@ -5387,18 +5526,19 @@ write_tree (tp)
if (written_trees == NULL)
written_trees = splay_tree_new (splay_tree_compare_pointers, NULL, NULL);
if (datafile == NULL)
- datafile = dbm_open ((char *)datafilename, O_RDWR | O_CREAT, 0666);
+ datafile = dbm_open ((char *)datafilename, O_RDWR | O_CREAT, 0666);
if (datafile == NULL)
- abort();
+ return 0;
/* Skip empty subtrees. */
if (!*tp)
return 0;
- if (ggc_set_mark (*tp))
+ if (ggc_marked_p (*tp))
{
result = splay_tree_lookup (written_trees, (splay_tree_key)*tp);
if (result)
return result->value;
}
+ ggc_test_and_set_mark (*tp);
id = current_id++;
splay_tree_insert (written_trees, (splay_tree_key)(*tp), id);
buffer = pickle_tree (*tp);
@@ -5406,3 +5546,131 @@ write_tree (tp)
free (buffer);
return id;
}
+static char *
+pickle_rtl (rtl)
+ rtx rtl;
+{
+ int i;
+ const char *format;
+ rtx buffer = xmalloc (sizeof (struct rtx_def) + (GET_RTX_LENGTH (GET_CODE (rtl)) - 1) * sizeof (rtunion));
+ memcpy (buffer, rtl, sizeof (struct rtx_def) + (GET_RTX_LENGTH (GET_CODE (rtl)) - 1) * sizeof (rtunion));
+ format = GET_RTX_FORMAT (GET_CODE (rtl));
+ for (i = 0; i < GET_RTX_LENGTH (GET_CODE (rtl)); ++i)
+ {
+ switch (format[i])
+ {
+ case '\0':
+ return 0;
+ case 'e':
+ case 'u':
+ XEXP (buffer, i) = (rtx) write_rtl (&XEXP (buffer, i));
+ break;
+ case 'V':
+ case 'E':
+ if (XVEC (buffer, i) != 0)
+ {
+ int j;
+ for (j = 0; j < XVECLEN (buffer, i); ++j)
+ {
+ XVECEXP (buffer, i, j) = (rtx) write_rtl (&XVECEXP (buffer, i, j));
+ }
+ }
+ break;
+ case 'S':
+ case 's':
+ if (XSTR (buffer, i) != 0)
+ {
+ XSTR (buffer, i) = (const char *) pickle_string (XSTR (buffer, i));
+ }
+ break;
+ case 't':
+ if (XTREE (buffer, i) != 0)
+ {
+ XTREE (buffer, i) = (tree) write_tree (&XTREE (buffer, i));
+ }
+ break;
+ case '0':
+ switch (GET_CODE (rtl))
+ {
+ case JUMP_INSN:
+ case LABEL_REF:
+ case CONST_DOUBLE:
+ X0EXP (buffer, i) = (rtx) write_rtl (&X0EXP (buffer, i));
+ break;
+ case CODE_LABEL:
+ if (i != 3)
+ X0EXP (buffer, i) = (rtx) write_rtl (&X0EXP (buffer, i));
+ break;
+ case MEM:
+ case REG:
+ case SCRATCH:
+ case ADDR_DIFF_VEC:
+ break;
+
+ case NOTE:
+ switch (NOTE_LINE_NUMBER (rtl))
+ {
+ case NOTE_INSN_RANGE_BEG:
+ case NOTE_INSN_RANGE_END:
+ case NOTE_INSN_LIVE:
+ case NOTE_INSN_EXPECTED_VALUE:
+ X0EXP (buffer, i) = (rtx) write_rtl (&X0EXP (buffer, i));
+ break;
+ case NOTE_INSN_BLOCK_BEG:
+ case NOTE_INSN_BLOCK_END:
+ if (X0TREE (buffer, i) != 0)
+ {
+ X0TREE (buffer, i) = (tree) write_tree (&X0TREE (buffer, i));
+ }
+ break;
+ case NOTE_INSN_DELETED_LABEL:
+ if (X0STR (buffer, i) != 0)
+ {
+ X0STR (buffer, i) = (const char *) pickle_string (X0STR (buffer, i));
+ }
+ break;
+ default:
+ if (NOTE_LINE_NUMBER (rtl) >= 0)
+ if (X0STR (buffer, i) != 0)
+ {
+ X0STR (buffer, i) = (const char *) pickle_string (X0STR (buffer, i));
+ }
+ break;
+ }
+ break;
+ default:
+ abort ();
+ }
+ break;
+ }
+ }
+ return (char *)buffer;
+}
+
+
+
+int
+write_rtl (rtlp)
+ rtx *rtlp;
+{
+ size_t id;
+ splay_tree_node result;
+ char *buffer;
+ if (written_rtl == NULL)
+ written_rtl = splay_tree_new (splay_tree_compare_pointers, NULL, NULL);
+ if (!*rtlp)
+ return 0;
+ if (ggc_marked_p (*rtlp))
+ {
+ result = splay_tree_lookup (written_rtl, (splay_tree_key) *rtlp);
+ if (result)
+ return result->value;
+ }
+ ggc_test_and_set_mark (*rtlp);
+ id = current_id++;
+ splay_tree_insert (written_rtl, (splay_tree_key) (*rtlp), id);
+ buffer = pickle_rtl (*rtlp);
+ store_to_db (&id, sizeof (int), buffer, sizeof (struct rtx_def) + (GET_RTX_LENGTH (GET_CODE (*rtlp)) - 1) * sizeof (rtunion));
+ free (buffer);
+ return id;
+}
diff --git a/gcc/treepch.h b/gcc/treepch.h
index e2ddbaec2bf..da373fcfe62 100644
--- a/gcc/treepch.h
+++ b/gcc/treepch.h
@@ -1,19 +1,28 @@
#include "splay-tree.h"
-#ifdef HAVE_SDBM_H
+#ifdef HAVE_MDBM_H
+#define NDBM_COMPAT
+#include "mdbm.h"
+#elif HAVE_SDBM_H
#include "sdbm.h"
#elif HAVE_GDBM_H
#include "gdbm.h"
#endif
#include "varray.h"
+extern int write_rtl PARAMS ((rtx *));
extern int write_tree PARAMS ((tree *));
extern int write_tree_varray PARAMS ((varray_type));
+extern rtx read_rtl PARAMS ((rtx));
extern tree read_tree PARAMS ((tree));
extern varray_type read_tree_varray PARAMS ((varray_type));
extern void lang_pickle_tree PARAMS ((tree, tree));
extern void lang_unpickle_tree PARAMS ((tree));
+extern const char * unpickle_string PARAMS ((int));
+extern int pickle_string PARAMS ((const char *));
extern splay_tree read_trees;
extern splay_tree written_trees;
extern splay_tree written_pointers;
+extern splay_tree written_rtl;
+extern splay_tree read_rtls;
extern size_t current_id;
extern const char *datafilename;
extern DBM *datafile;