From a8f7a205fe1cab6bc8f4da53ec6fc3af7bccca25 Mon Sep 17 00:00:00 2001 From: Hans Boehm Date: Thu, 30 Jan 2003 00:00:00 +0000 Subject: [PATCH] gc6.2alpha3 tarball import --- Makefile | 20 +- Makefile.am | 24 +- Makefile.direct | 20 +- Makefile.in | 128 +++++-- alloc.c | 13 +- backgraph.c | 1 + configure | 869 +++++++++++++++++++++++---------------------- configure.in | 15 + dbg_mlc.c | 6 +- doc/README | 2 +- doc/README.changes | 90 ++++- dyn_load.c | 51 ++- finalize.c | 4 +- gc_dlopen.c | 17 +- if_mach.c | 2 +- include/gc.h | 61 +++- include/gc_mark.h | 4 +- include/gc_typed.h | 32 +- include/private/gc_locks.h | 36 +- include/private/gc_pmark.h | 24 +- include/private/gc_priv.h | 9 + include/private/gcconfig.h | 128 ++++--- include/private/specific.h | 2 +- linux_threads.c | 6 +- mark.c | 13 +- mark_rts.c | 40 ++- misc.c | 52 ++- os_dep.c | 191 +++++++--- tests/test.c | 3 + tests/test_cpp.cc | 4 +- typd_mlc.c | 7 +- version.h | 4 +- win32_threads.c | 3 +- 33 files changed, 1248 insertions(+), 633 deletions(-) diff --git a/Makefile b/Makefile index 17e257b..eefda5d 100644 --- a/Makefile +++ b/Makefile @@ -249,6 +249,21 @@ HOSTCFLAGS=$(CFLAGS) # -DHANDLE_FORK attempts to make GC_malloc() work in a child process fork()ed # from a multithreaded parent. Currently only supported by linux_threads.c. # (Similar code should work on Solaris or Irix, but it hasn't been tried.) +# -DTEST_WITH_SYSTEM_MALLOC causes gctest to allocate (and leak) large chunks +# of memory with the standard system malloc. This will cause the root +# set and collected heap to grow significantly if malloced memory is +# somehow getting traced by the collector. This has no impact on the +# generated library; it only affects the test. +# -DPOINTER_MASK=0x... causes candidate pointers to be ANDed with the +# given mask before being considered. If either this or the following +# macro is defined, it will be assumed that all pointers stored in +# the heap need to be processed this way. Stack and register pointers +# will be considered both with and without processing. +# These macros are normally needed only to support systems that use +# high-order pointer tags. EXPERIMENTAL. +# -DPOINTER_SHIFT=n causes the collector to left shift candidate pointers +# by the indicated amount before trying to interpret them. Applied +# after POINTER_MASK. EXPERIMENTAL. See also the preceding macro. # CXXFLAGS= $(CFLAGS) @@ -466,7 +481,8 @@ mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.S \ $(srcdir)/ia64_save_regs_in_stack.s \ $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS) rm -f mach_dep.o - ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.S + ./if_mach MIPS IRIX5 $(CC) -E $(srcdir)/mips_sgi_mach_dep.S \ + | ./if_mach MIPS IRIX5 grep -v "^\#" > $(srcdir)/mips_sgi_mach_dep.s ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s @@ -536,7 +552,7 @@ if_not_there: $(srcdir)/if_not_there.c clean: rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \ setjmp_test mon.out gmon.out a.out core if_not_there if_mach \ - threadlibs $(CORD_OBJS) cord/cordtest cord/de + threadlibs $(CORD_OBJS) cord/cordtest cord/de mips_sgi_mach_dep.s -rm -f *~ gctest: tests/test.o gc.a $(UTILS) diff --git a/Makefile.am b/Makefile.am index d99ea33..e72fa52 100644 --- a/Makefile.am +++ b/Makefile.am @@ -22,6 +22,11 @@ AUTOMAKE_OPTIONS = foreign lib_LTLIBRARIES = libgc.la +include_HEADERS = include/gc.h include/gc_local_alloc.h \ +include/leak_detector.h include/gc_typed.h @addincludes@ + +EXTRA_HEADERS = include/gc_cpp.h include/gc_allocator.h + libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c irix_threads.c \ linux_threads.c malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \ @@ -33,33 +38,38 @@ backgraph.c win32_threads.c # linuxthread semaphore functions get linked: libgc_la_LIBADD = @addobjs@ $(THREADLIBS) libgc_la_DEPENDENCIES = @addobjs@ -libgc_la_LDFLAGS = -version-info 1:1:0 +libgc_la_LDFLAGS = -version-info 1:2:0 EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \ mips_sgi_mach_dep.S mips_ultrix_mach_dep.s powerpc_macosx_mach_dep.s \ rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \ -sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s +sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s gc_cpp.cc AM_CXXFLAGS = @GC_CFLAGS@ AM_CFLAGS = @GC_CFLAGS@ -check_PROGRAMS = gctest -# The following hack produces a warning from automake, but we need it in order -# to build a file from a subdirectory. FIXME. +check_PROGRAMS = gctest @addtests@ +EXTRA_PROGRAMS = test_cpp + test.o: $(srcdir)/tests/test.c $(COMPILE) -c $(srcdir)/tests/test.c # Using $< in the above seems to fail with the HP/UX on Itanium make. +test_cpp.o: $(srcdir)/tests/test_cpp.cc + $(COMPILE) -c $(srcdir)/tests/test_cpp.cc # gctest_OBJECTS = test.o gctest_SOURCES = gctest_LDADD = test.o ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) +test_cpp_SOURCES = +test_cpp_LDADD = test_cpp.o ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc -TESTS = gctest +TESTS = gctest @addtests@ ## FIXME: relies on internal code generated by automake. all_objs = @addobjs@ $(libgc_la_OBJECTS) $(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ -include/private/gc_hdrs.h include/gc.h include/gc_gcj.h include/gc_mark.h +include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \ +include/gc_mark.h @addincludes@ ## FIXME: we shouldn't have to do this, but automake forces us to. .s.lo: diff --git a/Makefile.direct b/Makefile.direct index 17e257b..eefda5d 100644 --- a/Makefile.direct +++ b/Makefile.direct @@ -249,6 +249,21 @@ HOSTCFLAGS=$(CFLAGS) # -DHANDLE_FORK attempts to make GC_malloc() work in a child process fork()ed # from a multithreaded parent. Currently only supported by linux_threads.c. # (Similar code should work on Solaris or Irix, but it hasn't been tried.) +# -DTEST_WITH_SYSTEM_MALLOC causes gctest to allocate (and leak) large chunks +# of memory with the standard system malloc. This will cause the root +# set and collected heap to grow significantly if malloced memory is +# somehow getting traced by the collector. This has no impact on the +# generated library; it only affects the test. +# -DPOINTER_MASK=0x... causes candidate pointers to be ANDed with the +# given mask before being considered. If either this or the following +# macro is defined, it will be assumed that all pointers stored in +# the heap need to be processed this way. Stack and register pointers +# will be considered both with and without processing. +# These macros are normally needed only to support systems that use +# high-order pointer tags. EXPERIMENTAL. +# -DPOINTER_SHIFT=n causes the collector to left shift candidate pointers +# by the indicated amount before trying to interpret them. Applied +# after POINTER_MASK. EXPERIMENTAL. See also the preceding macro. # CXXFLAGS= $(CFLAGS) @@ -466,7 +481,8 @@ mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.S \ $(srcdir)/ia64_save_regs_in_stack.s \ $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS) rm -f mach_dep.o - ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.S + ./if_mach MIPS IRIX5 $(CC) -E $(srcdir)/mips_sgi_mach_dep.S \ + | ./if_mach MIPS IRIX5 grep -v "^\#" > $(srcdir)/mips_sgi_mach_dep.s ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s @@ -536,7 +552,7 @@ if_not_there: $(srcdir)/if_not_there.c clean: rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \ setjmp_test mon.out gmon.out a.out core if_not_there if_mach \ - threadlibs $(CORD_OBJS) cord/cordtest cord/de + threadlibs $(CORD_OBJS) cord/cordtest cord/de mips_sgi_mach_dep.s -rm -f *~ gctest: tests/test.o gc.a $(UTILS) diff --git a/Makefile.in b/Makefile.in index 0e73538..bbbc30f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -106,7 +106,9 @@ RANLIB = @RANLIB@ STRIP = @STRIP@ THREADLIBS = @THREADLIBS@ VERSION = @VERSION@ +addincludes = @addincludes@ addobjs = @addobjs@ +addtests = @addtests@ am__include = @am__include@ am__quote = @am__quote@ gc_basedir = @gc_basedir@ @@ -117,6 +119,12 @@ AUTOMAKE_OPTIONS = foreign lib_LTLIBRARIES = libgc.la +include_HEADERS = include/gc.h include/gc_local_alloc.h \ +include/leak_detector.h include/gc_typed.h @addincludes@ + + +EXTRA_HEADERS = include/gc_cpp.h include/gc_allocator.h + libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c irix_threads.c \ linux_threads.c malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \ @@ -129,25 +137,27 @@ backgraph.c win32_threads.c # linuxthread semaphore functions get linked: libgc_la_LIBADD = @addobjs@ $(THREADLIBS) libgc_la_DEPENDENCIES = @addobjs@ -libgc_la_LDFLAGS = -version-info 1:1:0 +libgc_la_LDFLAGS = -version-info 1:2:0 EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \ mips_sgi_mach_dep.S mips_ultrix_mach_dep.s powerpc_macosx_mach_dep.s \ rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \ -sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s +sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s gc_cpp.cc AM_CXXFLAGS = @GC_CFLAGS@ AM_CFLAGS = @GC_CFLAGS@ -check_PROGRAMS = gctest -# Using $< in the above seems to fail with the HP/UX on Itanium make. +check_PROGRAMS = gctest @addtests@ +EXTRA_PROGRAMS = test_cpp # gctest_OBJECTS = test.o gctest_SOURCES = gctest_LDADD = test.o ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) +test_cpp_SOURCES = +test_cpp_LDADD = test_cpp.o ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc -TESTS = gctest +TESTS = gctest @addtests@ all_objs = @addobjs@ $(libgc_la_OBJECTS) @@ -216,11 +226,16 @@ am_libgc_la_OBJECTS = allchblk.lo alloc.lo blacklst.lo checksums.lo \ reclaim.lo solaris_pthreads.lo solaris_threads.lo specific.lo \ stubborn.lo typd_mlc.lo backgraph.lo win32_threads.lo libgc_la_OBJECTS = $(am_libgc_la_OBJECTS) -check_PROGRAMS = gctest$(EXEEXT) +EXTRA_PROGRAMS = test_cpp$(EXEEXT) +check_PROGRAMS = gctest$(EXEEXT) @addtests@ am_gctest_OBJECTS = gctest_OBJECTS = $(am_gctest_OBJECTS) gctest_DEPENDENCIES = test.o ./libgc.la gctest_LDFLAGS = +am_test_cpp_OBJECTS = +test_cpp_OBJECTS = $(am_test_cpp_OBJECTS) +test_cpp_DEPENDENCIES = test_cpp.o ./libgc.la +test_cpp_LDFLAGS = DEFS = @DEFS@ DEFAULT_INCLUDES = -I. -I$(srcdir) @@ -233,8 +248,8 @@ am__depfiles_maybe = depfiles @AMDEP_TRUE@ ./$(DEPDIR)/backgraph.Plo ./$(DEPDIR)/blacklst.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/checksums.Plo ./$(DEPDIR)/dbg_mlc.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/dyn_load.Plo ./$(DEPDIR)/finalize.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/gc_dlopen.Plo ./$(DEPDIR)/gcj_mlc.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/headers.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/gc_cpp.Plo ./$(DEPDIR)/gc_dlopen.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/gcj_mlc.Plo ./$(DEPDIR)/headers.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/irix_threads.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/linux_threads.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/malloc.Plo ./$(DEPDIR)/mallocx.Plo \ @@ -255,17 +270,27 @@ LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ DIST_SOURCES = $(libgc_la_SOURCES) $(EXTRA_libgc_la_SOURCES) \ - $(gctest_SOURCES) -DIST_COMMON = Makefile.am Makefile.in acinclude.m4 aclocal.m4 \ - config.guess config.sub configure configure.in depcomp \ - install-sh ltconfig ltmain.sh missing mkinstalldirs -SOURCES = $(libgc_la_SOURCES) $(EXTRA_libgc_la_SOURCES) $(gctest_SOURCES) + $(gctest_SOURCES) $(test_cpp_SOURCES) +HEADERS = $(include_HEADERS) + +DIST_COMMON = $(include_HEADERS) Makefile.am Makefile.in acinclude.m4 \ + aclocal.m4 config.guess config.sub configure configure.in \ + depcomp install-sh ltconfig ltmain.sh missing mkinstalldirs +SOURCES = $(libgc_la_SOURCES) $(EXTRA_libgc_la_SOURCES) $(gctest_SOURCES) $(test_cpp_SOURCES) all: all-am .SUFFIXES: -.SUFFIXES: .S .c .lo .o .obj .s +.SUFFIXES: .S .c .cc .lo .o .obj .s $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile @@ -302,13 +327,16 @@ uninstall-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) libgc.la: $(libgc_la_OBJECTS) $(libgc_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libgc_la_LDFLAGS) $(libgc_la_OBJECTS) $(libgc_la_LIBADD) $(LIBS) + $(CXXLINK) -rpath $(libdir) $(libgc_la_LDFLAGS) $(libgc_la_OBJECTS) $(libgc_la_LIBADD) $(LIBS) clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) @rm -f gctest$(EXEEXT) $(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS) +test_cpp$(EXEEXT): $(test_cpp_OBJECTS) $(test_cpp_DEPENDENCIES) + @rm -f test_cpp$(EXEEXT) + $(LINK) $(test_cpp_LDFLAGS) $(test_cpp_OBJECTS) $(test_cpp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core @@ -324,6 +352,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbg_mlc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dyn_load.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/finalize.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_cpp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_dlopen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcj_mlc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/headers.Plo@am__quote@ @@ -379,6 +408,25 @@ distclean-depend: $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< CCDEPMODE = @CCDEPMODE@ +.cc.o: +@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< + +.cc.obj: +@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + $(CXXCOMPILE) -c -o $@ `cygpath -w $<` + +.cc.lo: +@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + $(LTCXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< +CXXDEPMODE = @CXXDEPMODE@ + .s.o: $(CCASCOMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< @@ -394,6 +442,24 @@ clean-libtool: distclean-libtool: -rm -f libtool uninstall-info-am: +includeHEADERS_INSTALL = $(INSTALL_HEADER) +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(includedir) + @list='$(include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f"; \ + $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(includedir)/$$f"; \ + rm -f $(DESTDIR)$(includedir)/$$f; \ + done ETAGS = etags ETAGSFLAGS = @@ -501,6 +567,7 @@ distcleancheck_listfiles = find . -type f -print distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) + $(mkinstalldirs) $(distdir)/include @for file in $(DISTFILES); do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ @@ -577,10 +644,10 @@ check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am -all-am: Makefile $(LTLIBRARIES) +all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - $(mkinstalldirs) $(DESTDIR)$(libdir) + $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir) install: install-am install-exec: install-exec-am @@ -624,7 +691,7 @@ info: info-am info-am: -install-data-am: +install-data-am: install-includeHEADERS install-exec-am: install-libLTLIBRARIES @@ -643,7 +710,8 @@ mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES +uninstall-am: uninstall-includeHEADERS uninstall-info-am \ + uninstall-libLTLIBRARIES .PHONY: GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ @@ -651,20 +719,24 @@ uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES distclean-compile distclean-depend distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir dvi \ dvi-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-libLTLIBRARIES install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - tags uninstall uninstall-am uninstall-info-am \ + install-data-am install-exec install-exec-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool tags uninstall \ + uninstall-am uninstall-includeHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES -# The following hack produces a warning from automake, but we need it in order -# to build a file from a subdirectory. FIXME. + test.o: $(srcdir)/tests/test.c $(COMPILE) -c $(srcdir)/tests/test.c +# Using $< in the above seems to fail with the HP/UX on Itanium make. +test_cpp.o: $(srcdir)/tests/test_cpp.cc + $(COMPILE) -c $(srcdir)/tests/test_cpp.cc $(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ -include/private/gc_hdrs.h include/gc.h include/gc_gcj.h include/gc_mark.h +include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \ +include/gc_mark.h @addincludes@ .s.lo: $(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $< diff --git a/alloc.c b/alloc.c index f732444..baead13 100644 --- a/alloc.c +++ b/alloc.c @@ -249,7 +249,6 @@ void GC_maybe_gc() if (GC_should_collect()) { if (!GC_incremental) { - GC_notify_full_gc(); GC_gcollect_inner(); n_partial_gcs = 0; return; @@ -301,6 +300,7 @@ void GC_maybe_gc() /* * Stop the world garbage collection. Assumes lock held, signals disabled. * If stop_func is not GC_never_stop_func, then abort if stop_func returns TRUE. + * Return TRUE if we successfully completed the collection. */ GC_bool GC_try_to_collect_inner(stop_func) GC_stop_func stop_func; @@ -308,6 +308,7 @@ GC_stop_func stop_func; # ifdef CONDPRINT CLOCK_TYPE start_time, current_time; # endif + if (GC_dont_gc) return FALSE; if (GC_incremental && GC_collection_in_progress()) { # ifdef CONDPRINT if (GC_print_stats) { @@ -321,6 +322,7 @@ GC_stop_func stop_func; GC_collect_a_little_inner(1); } } + if (stop_func == GC_never_stop_func) GC_notify_full_gc(); # ifdef CONDPRINT if (GC_print_stats) { if (GC_print_stats) GET_TIME(start_time); @@ -396,6 +398,7 @@ int n; { register int i; + if (GC_dont_gc) return; if (GC_incremental && GC_collection_in_progress()) { for (i = GC_deficit; i < GC_RATE*n; i++) { if (GC_mark_some((ptr_t)0)) { @@ -463,6 +466,9 @@ GC_stop_func stop_func; # if defined(CONDPRINT) && !defined(PRINTTIMES) if (GC_print_stats) GET_TIME(start_time); # endif +# if defined(REGISTER_LIBRARIES_EARLY) + GC_cond_register_dynamic_libraries(); +# endif STOP_WORLD(); # ifdef CONDPRINT if (GC_print_stats) { @@ -759,7 +765,6 @@ void GC_finish_collection() void GC_gcollect GC_PROTO(()) { - GC_notify_full_gc(); (void)GC_try_to_collect(GC_never_stop_func); if (GC_have_errors) GC_print_all_errors(); } @@ -963,7 +968,6 @@ GC_bool ignore_off_page; { if (!GC_incremental && !GC_dont_gc && (GC_dont_expand && GC_words_allocd > 0 || GC_should_collect())) { - GC_notify_full_gc(); GC_gcollect_inner(); } else { word blocks_to_get = GC_heapsize/(HBLKSIZE*GC_free_space_divisor) @@ -988,7 +992,6 @@ GC_bool ignore_off_page; && !GC_expand_hp_inner(needed_blocks)) { if (GC_fail_count++ < GC_max_retries) { WARN("Out of Memory! Trying to continue ...\n", 0); - GC_notify_full_gc(); GC_gcollect_inner(); } else { # if !defined(AMIGA) || !defined(GC_AMIGA_FASTALLOC) @@ -1026,7 +1029,7 @@ int kind; while (*flh == 0) { ENTER_GC(); /* Do our share of marking work */ - if(TRUE_INCREMENTAL && !GC_dont_gc) GC_collect_a_little_inner(1); + if(TRUE_INCREMENTAL) GC_collect_a_little_inner(1); /* Sweep blocks for objects of this size */ GC_continue_reclaim(sz, kind); EXIT_GC(); diff --git a/backgraph.c b/backgraph.c index 01ab738..0fe1c8f 100644 --- a/backgraph.c +++ b/backgraph.c @@ -307,6 +307,7 @@ static void add_back_edges(ptr_t p, word n_words, word gc_descr) } while (currentp < (word *)(p + gc_descr)) { word current = *currentp++; + FIXUP_POINTER(current); if (current >= (word)GC_least_plausible_heap_addr && current <= (word)GC_greatest_plausible_heap_addr) { ptr_t target = GC_base((GC_PTR)current); diff --git a/configure b/configure index 2483548..07710f0 100755 --- a/configure +++ b/configure @@ -810,6 +810,7 @@ Optional Features: (and sometimes confusing) to the casual installer --enable-threads=TYPE choose threading package --enable-parallel-mark parallelize marking and free list construction + --enable-cplusplus include C++ support in GC library and include directory --enable-shared=PKGS build shared libraries default=no --enable-shared=PKGS build shared libraries default=yes --enable-static=PKGS build static libraries default=yes @@ -1025,7 +1026,7 @@ if test -z "$CONFIG_SITE"; then fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - { echo "$as_me:1028: loading site script $ac_site_file" >&5 + { echo "$as_me:1029: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} cat "$ac_site_file" >&5 . "$ac_site_file" @@ -1036,7 +1037,7 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then - { echo "$as_me:1039: loading cache $cache_file" >&5 + { echo "$as_me:1040: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; @@ -1044,7 +1045,7 @@ echo "$as_me: loading cache $cache_file" >&6;} esac fi else - { echo "$as_me:1047: creating cache $cache_file" >&5 + { echo "$as_me:1048: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1060,21 +1061,21 @@ for ac_var in `(set) 2>&1 | eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:1063: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + { echo "$as_me:1064: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:1067: error: \`$ac_var' was not set in the previous run" >&5 + { echo "$as_me:1068: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:1073: error: \`$ac_var' has changed since the previous run:" >&5 + { echo "$as_me:1074: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:1075: former value: $ac_old_val" >&5 + { echo "$as_me:1076: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:1077: current value: $ac_new_val" >&5 + { echo "$as_me:1078: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; @@ -1093,9 +1094,9 @@ echo "$as_me: current value: $ac_new_val" >&2;} fi done if $ac_cache_corrupted; then - { echo "$as_me:1096: error: changes in the environment can compromise the build" >&5 + { echo "$as_me:1097: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:1098: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 + { { echo "$as_me:1099: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi @@ -1115,10 +1116,10 @@ esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh -if { (echo "$as_me:1118: PATH=\".;.\"; conftest.sh") >&5 +if { (echo "$as_me:1119: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? - echo "$as_me:1121: \$? = $ac_status" >&5 + echo "$as_me:1122: \$? = $ac_status" >&5 (exit $ac_status); }; then ac_path_separator=';' else @@ -1145,7 +1146,7 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do fi done if test -z "$ac_aux_dir"; then - { { echo "$as_me:1148: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 + { { echo "$as_me:1149: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi @@ -1165,7 +1166,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:1168: checking for a BSD compatible install" >&5 +echo "$as_me:1169: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then @@ -1214,7 +1215,7 @@ fi INSTALL=$ac_install_sh fi fi -echo "$as_me:1217: result: $INSTALL" >&5 +echo "$as_me:1218: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. @@ -1225,7 +1226,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -echo "$as_me:1228: checking whether build environment is sane" >&5 +echo "$as_me:1229: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 @@ -1249,7 +1250,7 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:1252: error: ls -t appears to fail. Make sure there is not a broken + { { echo "$as_me:1253: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} @@ -1262,13 +1263,13 @@ then # Ok. : else - { { echo "$as_me:1265: error: newly created file is older than distributed files! + { { echo "$as_me:1266: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi -echo "$as_me:1271: result: yes" >&5 +echo "$as_me:1272: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" @@ -1292,7 +1293,7 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:1295: WARNING: \`missing' script is too old or missing" >&5 + { echo "$as_me:1296: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi @@ -1300,7 +1301,7 @@ for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:1303: checking for $ac_word" >&5 +echo "$as_me:1304: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1315,7 +1316,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AWK="$ac_prog" -echo "$as_me:1318: found $ac_dir/$ac_word" >&5 +echo "$as_me:1319: found $ac_dir/$ac_word" >&5 break done @@ -1323,17 +1324,17 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:1326: result: $AWK" >&5 + echo "$as_me:1327: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else - echo "$as_me:1329: result: no" >&5 + echo "$as_me:1330: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done -echo "$as_me:1336: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "$as_me:1337: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then @@ -1353,11 +1354,11 @@ fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:1356: result: yes" >&5 + echo "$as_me:1357: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else - echo "$as_me:1360: result: no" >&5 + echo "$as_me:1361: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi @@ -1365,7 +1366,7 @@ fi # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then - { { echo "$as_me:1368: error: source directory already configured; run \"make distclean\" there first" >&5 + { { echo "$as_me:1369: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi @@ -1398,7 +1399,7 @@ if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:1401: checking for $ac_word" >&5 +echo "$as_me:1402: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1413,7 +1414,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_STRIP="${ac_tool_prefix}strip" -echo "$as_me:1416: found $ac_dir/$ac_word" >&5 +echo "$as_me:1417: found $ac_dir/$ac_word" >&5 break done @@ -1421,10 +1422,10 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:1424: result: $STRIP" >&5 + echo "$as_me:1425: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else - echo "$as_me:1427: result: no" >&5 + echo "$as_me:1428: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1433,7 +1434,7 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -echo "$as_me:1436: checking for $ac_word" >&5 +echo "$as_me:1437: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1448,7 +1449,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_STRIP="strip" -echo "$as_me:1451: found $ac_dir/$ac_word" >&5 +echo "$as_me:1452: found $ac_dir/$ac_word" >&5 break done @@ -1457,10 +1458,10 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - echo "$as_me:1460: result: $ac_ct_STRIP" >&5 + echo "$as_me:1461: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else - echo "$as_me:1463: result: no" >&5 + echo "$as_me:1464: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1477,11 +1478,11 @@ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:1480: error: cannot run $ac_config_sub" >&5 + { { echo "$as_me:1481: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } -echo "$as_me:1484: checking build system type" >&5 +echo "$as_me:1485: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1490,23 +1491,23 @@ else test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && - { { echo "$as_me:1493: error: cannot guess build type; you must specify one" >&5 + { { echo "$as_me:1494: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:1497: error: $ac_config_sub $ac_cv_build_alias failed." >&5 + { { echo "$as_me:1498: error: $ac_config_sub $ac_cv_build_alias failed." >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} { (exit 1); exit 1; }; } fi -echo "$as_me:1502: result: $ac_cv_build" >&5 +echo "$as_me:1503: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$as_me:1509: checking host system type" >&5 +echo "$as_me:1510: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1515,12 +1516,12 @@ else test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:1518: error: $ac_config_sub $ac_cv_host_alias failed" >&5 + { { echo "$as_me:1519: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi -echo "$as_me:1523: result: $ac_cv_host" >&5 +echo "$as_me:1524: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` @@ -1535,7 +1536,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:1538: checking for $ac_word" >&5 +echo "$as_me:1539: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1550,7 +1551,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}gcc" -echo "$as_me:1553: found $ac_dir/$ac_word" >&5 +echo "$as_me:1554: found $ac_dir/$ac_word" >&5 break done @@ -1558,10 +1559,10 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1561: result: $CC" >&5 + echo "$as_me:1562: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1564: result: no" >&5 + echo "$as_me:1565: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1570,7 +1571,7 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo "$as_me:1573: checking for $ac_word" >&5 +echo "$as_me:1574: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1585,7 +1586,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="gcc" -echo "$as_me:1588: found $ac_dir/$ac_word" >&5 +echo "$as_me:1589: found $ac_dir/$ac_word" >&5 break done @@ -1593,10 +1594,10 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1596: result: $ac_ct_CC" >&5 + echo "$as_me:1597: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1599: result: no" >&5 + echo "$as_me:1600: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1609,7 +1610,7 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:1612: checking for $ac_word" >&5 +echo "$as_me:1613: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1624,7 +1625,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}cc" -echo "$as_me:1627: found $ac_dir/$ac_word" >&5 +echo "$as_me:1628: found $ac_dir/$ac_word" >&5 break done @@ -1632,10 +1633,10 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1635: result: $CC" >&5 + echo "$as_me:1636: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1638: result: no" >&5 + echo "$as_me:1639: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1644,7 +1645,7 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:1647: checking for $ac_word" >&5 +echo "$as_me:1648: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1659,7 +1660,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="cc" -echo "$as_me:1662: found $ac_dir/$ac_word" >&5 +echo "$as_me:1663: found $ac_dir/$ac_word" >&5 break done @@ -1667,10 +1668,10 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1670: result: $ac_ct_CC" >&5 + echo "$as_me:1671: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1673: result: no" >&5 + echo "$as_me:1674: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1683,7 +1684,7 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:1686: checking for $ac_word" >&5 +echo "$as_me:1687: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1703,7 +1704,7 @@ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then continue fi ac_cv_prog_CC="cc" -echo "$as_me:1706: found $ac_dir/$ac_word" >&5 +echo "$as_me:1707: found $ac_dir/$ac_word" >&5 break done @@ -1725,10 +1726,10 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1728: result: $CC" >&5 + echo "$as_me:1729: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1731: result: no" >&5 + echo "$as_me:1732: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1739,7 +1740,7 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:1742: checking for $ac_word" >&5 +echo "$as_me:1743: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1754,7 +1755,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="$ac_tool_prefix$ac_prog" -echo "$as_me:1757: found $ac_dir/$ac_word" >&5 +echo "$as_me:1758: found $ac_dir/$ac_word" >&5 break done @@ -1762,10 +1763,10 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1765: result: $CC" >&5 + echo "$as_me:1766: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1768: result: no" >&5 + echo "$as_me:1769: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1778,7 +1779,7 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:1781: checking for $ac_word" >&5 +echo "$as_me:1782: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1793,7 +1794,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="$ac_prog" -echo "$as_me:1796: found $ac_dir/$ac_word" >&5 +echo "$as_me:1797: found $ac_dir/$ac_word" >&5 break done @@ -1801,10 +1802,10 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1804: result: $ac_ct_CC" >&5 + echo "$as_me:1805: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1807: result: no" >&5 + echo "$as_me:1808: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1816,32 +1817,32 @@ fi fi -test -z "$CC" && { { echo "$as_me:1819: error: no acceptable cc found in \$PATH" >&5 +test -z "$CC" && { { echo "$as_me:1820: error: no acceptable cc found in \$PATH" >&5 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. -echo "$as_me:1824:" \ +echo "$as_me:1825:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:1827: \"$ac_compiler --version &5\"") >&5 +{ (eval echo "$as_me:1828: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? - echo "$as_me:1830: \$? = $ac_status" >&5 + echo "$as_me:1831: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1832: \"$ac_compiler -v &5\"") >&5 +{ (eval echo "$as_me:1833: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? - echo "$as_me:1835: \$? = $ac_status" >&5 + echo "$as_me:1836: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1837: \"$ac_compiler -V &5\"") >&5 +{ (eval echo "$as_me:1838: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? - echo "$as_me:1840: \$? = $ac_status" >&5 + echo "$as_me:1841: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF -#line 1844 "configure" +#line 1845 "configure" #include "confdefs.h" int @@ -1857,13 +1858,13 @@ ac_clean_files="$ac_clean_files a.out a.exe" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -echo "$as_me:1860: checking for C compiler default output" >&5 +echo "$as_me:1861: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:1863: \"$ac_link_default\"") >&5 +if { (eval echo "$as_me:1864: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? - echo "$as_me:1866: \$? = $ac_status" >&5 + echo "$as_me:1867: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last @@ -1886,34 +1887,34 @@ done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -{ { echo "$as_me:1889: error: C compiler cannot create executables" >&5 +{ { echo "$as_me:1890: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext -echo "$as_me:1895: result: $ac_file" >&5 +echo "$as_me:1896: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -echo "$as_me:1900: checking whether the C compiler works" >&5 +echo "$as_me:1901: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' - { (eval echo "$as_me:1906: \"$ac_try\"") >&5 + { (eval echo "$as_me:1907: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1909: \$? = $ac_status" >&5 + echo "$as_me:1910: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { echo "$as_me:1916: error: cannot run C compiled programs. + { { echo "$as_me:1917: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} @@ -1921,24 +1922,24 @@ If you meant to cross compile, use \`--host'." >&2;} fi fi fi -echo "$as_me:1924: result: yes" >&5 +echo "$as_me:1925: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -echo "$as_me:1931: checking whether we are cross compiling" >&5 +echo "$as_me:1932: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:1933: result: $cross_compiling" >&5 +echo "$as_me:1934: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 -echo "$as_me:1936: checking for executable suffix" >&5 +echo "$as_me:1937: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 -if { (eval echo "$as_me:1938: \"$ac_link\"") >&5 +if { (eval echo "$as_me:1939: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:1941: \$? = $ac_status" >&5 + echo "$as_me:1942: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will @@ -1954,25 +1955,25 @@ for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do esac done else - { { echo "$as_me:1957: error: cannot compute EXEEXT: cannot compile and link" >&5 + { { echo "$as_me:1958: error: cannot compute EXEEXT: cannot compile and link" >&5 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext -echo "$as_me:1963: result: $ac_cv_exeext" >&5 +echo "$as_me:1964: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:1969: checking for object suffix" >&5 +echo "$as_me:1970: checking for object suffix" >&5 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 1975 "configure" +#line 1976 "configure" #include "confdefs.h" int @@ -1984,10 +1985,10 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:1987: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:1988: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1990: \$? = $ac_status" >&5 + echo "$as_me:1991: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in @@ -1999,24 +2000,24 @@ done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 -{ { echo "$as_me:2002: error: cannot compute OBJEXT: cannot compile" >&5 +{ { echo "$as_me:2003: error: cannot compute OBJEXT: cannot compile" >&5 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:2009: result: $ac_cv_objext" >&5 +echo "$as_me:2010: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:2013: checking whether we are using the GNU C compiler" >&5 +echo "$as_me:2014: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 2019 "configure" +#line 2020 "configure" #include "confdefs.h" int @@ -2031,16 +2032,16 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2034: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2035: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2037: \$? = $ac_status" >&5 + echo "$as_me:2038: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2040: \"$ac_try\"") >&5 + { (eval echo "$as_me:2041: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2043: \$? = $ac_status" >&5 + echo "$as_me:2044: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else @@ -2052,19 +2053,19 @@ rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:2055: result: $ac_cv_c_compiler_gnu" >&5 +echo "$as_me:2056: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" -echo "$as_me:2061: checking whether $CC accepts -g" >&5 +echo "$as_me:2062: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 2067 "configure" +#line 2068 "configure" #include "confdefs.h" int @@ -2076,16 +2077,16 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2079: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2080: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2082: \$? = $ac_status" >&5 + echo "$as_me:2083: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2085: \"$ac_try\"") >&5 + { (eval echo "$as_me:2086: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2088: \$? = $ac_status" >&5 + echo "$as_me:2089: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else @@ -2095,7 +2096,7 @@ ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:2098: result: $ac_cv_prog_cc_g" >&5 +echo "$as_me:2099: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS @@ -2122,16 +2123,16 @@ cat >conftest.$ac_ext <<_ACEOF #endif _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2125: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2126: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2128: \$? = $ac_status" >&5 + echo "$as_me:2129: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2131: \"$ac_try\"") >&5 + { (eval echo "$as_me:2132: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2134: \$? = $ac_status" >&5 + echo "$as_me:2135: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ @@ -2143,7 +2144,7 @@ if { (eval echo "$as_me:2125: \"$ac_compile\"") >&5 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF -#line 2146 "configure" +#line 2147 "configure" #include "confdefs.h" #include $ac_declaration @@ -2156,16 +2157,16 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2159: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2160: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2162: \$? = $ac_status" >&5 + echo "$as_me:2163: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2165: \"$ac_try\"") >&5 + { (eval echo "$as_me:2166: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2168: \$? = $ac_status" >&5 + echo "$as_me:2169: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else @@ -2175,7 +2176,7 @@ continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF -#line 2178 "configure" +#line 2179 "configure" #include "confdefs.h" $ac_declaration int @@ -2187,16 +2188,16 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2190: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2191: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2193: \$? = $ac_status" >&5 + echo "$as_me:2194: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2196: \"$ac_try\"") >&5 + { (eval echo "$as_me:2197: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2199: \$? = $ac_status" >&5 + echo "$as_me:2200: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else @@ -2240,7 +2241,7 @@ doit: @echo done END # If we don't find an include directive, just comment out the code. -echo "$as_me:2243: checking for style of include used by $am_make" >&5 +echo "$as_me:2244: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= @@ -2267,7 +2268,7 @@ if test "$am__include" = "#"; then fi fi -echo "$as_me:2270: result: $_am_result" >&5 +echo "$as_me:2271: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf @@ -2291,7 +2292,7 @@ fi depcc="$CC" am_compiler_list= -echo "$as_me:2294: checking dependency style of $depcc" >&5 +echo "$as_me:2295: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2353,7 +2354,7 @@ else fi fi -echo "$as_me:2356: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "$as_me:2357: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type @@ -2367,7 +2368,7 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:2370: checking for $ac_word" >&5 +echo "$as_me:2371: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2382,7 +2383,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" -echo "$as_me:2385: found $ac_dir/$ac_word" >&5 +echo "$as_me:2386: found $ac_dir/$ac_word" >&5 break done @@ -2390,10 +2391,10 @@ fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - echo "$as_me:2393: result: $CXX" >&5 + echo "$as_me:2394: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else - echo "$as_me:2396: result: no" >&5 + echo "$as_me:2397: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -2406,7 +2407,7 @@ if test -z "$CXX"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:2409: checking for $ac_word" >&5 +echo "$as_me:2410: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2421,7 +2422,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CXX="$ac_prog" -echo "$as_me:2424: found $ac_dir/$ac_word" >&5 +echo "$as_me:2425: found $ac_dir/$ac_word" >&5 break done @@ -2429,10 +2430,10 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - echo "$as_me:2432: result: $ac_ct_CXX" >&5 + echo "$as_me:2433: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else - echo "$as_me:2435: result: no" >&5 + echo "$as_me:2436: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -2444,32 +2445,32 @@ test -n "$ac_ct_CXX" || ac_ct_CXX="g++" fi # Provide some information about the compiler. -echo "$as_me:2447:" \ +echo "$as_me:2448:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:2450: \"$ac_compiler --version &5\"") >&5 +{ (eval echo "$as_me:2451: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? - echo "$as_me:2453: \$? = $ac_status" >&5 + echo "$as_me:2454: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:2455: \"$ac_compiler -v &5\"") >&5 +{ (eval echo "$as_me:2456: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? - echo "$as_me:2458: \$? = $ac_status" >&5 + echo "$as_me:2459: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:2460: \"$ac_compiler -V &5\"") >&5 +{ (eval echo "$as_me:2461: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? - echo "$as_me:2463: \$? = $ac_status" >&5 + echo "$as_me:2464: \$? = $ac_status" >&5 (exit $ac_status); } -echo "$as_me:2466: checking whether we are using the GNU C++ compiler" >&5 +echo "$as_me:2467: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 2472 "configure" +#line 2473 "configure" #include "confdefs.h" int @@ -2484,16 +2485,16 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2487: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2488: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2490: \$? = $ac_status" >&5 + echo "$as_me:2491: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2493: \"$ac_try\"") >&5 + { (eval echo "$as_me:2494: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2496: \$? = $ac_status" >&5 + echo "$as_me:2497: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else @@ -2505,19 +2506,19 @@ rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:2508: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "$as_me:2509: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" -echo "$as_me:2514: checking whether $CXX accepts -g" >&5 +echo "$as_me:2515: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 2520 "configure" +#line 2521 "configure" #include "confdefs.h" int @@ -2529,16 +2530,16 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2532: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2533: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2535: \$? = $ac_status" >&5 + echo "$as_me:2536: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2538: \"$ac_try\"") >&5 + { (eval echo "$as_me:2539: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2541: \$? = $ac_status" >&5 + echo "$as_me:2542: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else @@ -2548,7 +2549,7 @@ ac_cv_prog_cxx_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:2551: result: $ac_cv_prog_cxx_g" >&5 +echo "$as_me:2552: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS @@ -2575,7 +2576,7 @@ for ac_declaration in \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF -#line 2578 "configure" +#line 2579 "configure" #include "confdefs.h" #include $ac_declaration @@ -2588,16 +2589,16 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2591: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2592: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2594: \$? = $ac_status" >&5 + echo "$as_me:2595: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2597: \"$ac_try\"") >&5 + { (eval echo "$as_me:2598: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2600: \$? = $ac_status" >&5 + echo "$as_me:2601: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else @@ -2607,7 +2608,7 @@ continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF -#line 2610 "configure" +#line 2611 "configure" #include "confdefs.h" $ac_declaration int @@ -2619,16 +2620,16 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2622: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:2623: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2625: \$? = $ac_status" >&5 + echo "$as_me:2626: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2628: \"$ac_try\"") >&5 + { (eval echo "$as_me:2629: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2631: \$? = $ac_status" >&5 + echo "$as_me:2632: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else @@ -2652,7 +2653,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= -echo "$as_me:2655: checking dependency style of $depcc" >&5 +echo "$as_me:2656: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2714,7 +2715,7 @@ else fi fi -echo "$as_me:2717: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "$as_me:2718: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type @@ -2727,7 +2728,7 @@ CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -echo "$as_me:2730: checking for $ac_word" >&5 +echo "$as_me:2731: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2742,7 +2743,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AR="${ac_tool_prefix}ar" -echo "$as_me:2745: found $ac_dir/$ac_word" >&5 +echo "$as_me:2746: found $ac_dir/$ac_word" >&5 break done @@ -2750,10 +2751,10 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:2753: result: $AR" >&5 + echo "$as_me:2754: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else - echo "$as_me:2756: result: no" >&5 + echo "$as_me:2757: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -2762,7 +2763,7 @@ if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -echo "$as_me:2765: checking for $ac_word" >&5 +echo "$as_me:2766: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2777,7 +2778,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_AR="ar" -echo "$as_me:2780: found $ac_dir/$ac_word" >&5 +echo "$as_me:2781: found $ac_dir/$ac_word" >&5 break done @@ -2785,10 +2786,10 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - echo "$as_me:2788: result: $ac_ct_AR" >&5 + echo "$as_me:2789: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else - echo "$as_me:2791: result: no" >&5 + echo "$as_me:2792: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -2800,7 +2801,7 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:2803: checking for $ac_word" >&5 +echo "$as_me:2804: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2815,7 +2816,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" -echo "$as_me:2818: found $ac_dir/$ac_word" >&5 +echo "$as_me:2819: found $ac_dir/$ac_word" >&5 break done @@ -2823,10 +2824,10 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:2826: result: $RANLIB" >&5 + echo "$as_me:2827: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else - echo "$as_me:2829: result: no" >&5 + echo "$as_me:2830: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -2835,7 +2836,7 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -echo "$as_me:2838: checking for $ac_word" >&5 +echo "$as_me:2839: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2850,7 +2851,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_RANLIB="ranlib" -echo "$as_me:2853: found $ac_dir/$ac_word" >&5 +echo "$as_me:2854: found $ac_dir/$ac_word" >&5 break done @@ -2859,10 +2860,10 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - echo "$as_me:2862: result: $ac_ct_RANLIB" >&5 + echo "$as_me:2863: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else - echo "$as_me:2865: result: no" >&5 + echo "$as_me:2866: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -2883,7 +2884,7 @@ fi # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:2886: checking for a BSD compatible install" >&5 +echo "$as_me:2887: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then @@ -2932,7 +2933,7 @@ fi INSTALL=$ac_install_sh fi fi -echo "$as_me:2935: result: $INSTALL" >&5 +echo "$as_me:2936: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. @@ -2943,7 +2944,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -echo "$as_me:2946: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "$as_me:2947: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then @@ -2952,7 +2953,7 @@ if test "${enable_maintainer_mode+set}" = set; then else USE_MAINTAINER_MODE=no fi; - echo "$as_me:2955: result: $USE_MAINTAINER_MODE" >&5 + echo "$as_me:2956: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 if test $USE_MAINTAINER_MODE = yes; then @@ -2999,13 +3000,13 @@ if test "${enable_threads+set}" = set; then enableval="$enable_threads" THREADS=$enableval else - echo "$as_me:3002: checking for thread model used by GCC" >&5 + echo "$as_me:3003: checking for thread model used by GCC" >&5 echo $ECHO_N "checking for thread model used by GCC... $ECHO_C" >&6 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` if test -z "$THREADS"; then THREADS=no fi - echo "$as_me:3008: result: $THREADS" >&5 + echo "$as_me:3009: result: $THREADS" >&5 echo "${ECHO_T}$THREADS" >&6 fi; @@ -3014,7 +3015,7 @@ if test "${enable_parallel_mark+set}" = set; then enableval="$enable_parallel_mark" case "$THREADS" in no | none | single) - { { echo "$as_me:3017: error: Parallel mark requires --enable-threads=x spec" >&5 + { { echo "$as_me:3018: error: Parallel mark requires --enable-threads=x spec" >&5 echo "$as_me: error: Parallel mark requires --enable-threads=x spec" >&2;} { (exit 1); exit 1; }; } ;; @@ -3022,6 +3023,12 @@ echo "$as_me: error: Parallel mark requires --enable-threads=x spec" >&2;} fi; +# Check whether --enable-cplusplus or --disable-cplusplus was given. +if test "${enable_cplusplus+set}" = set; then + enableval="$enable_cplusplus" + +fi; + INCLUDES=-I${srcdir}/include THREADLIBS= case "$THREADS" in @@ -3063,7 +3070,7 @@ EOF ;; *-*-hpux*) - { echo "$as_me:3066: WARNING: \"Only HP/UX 11 threads are supported.\"" >&5 + { echo "$as_me:3073: WARNING: \"Only HP/UX 11 threads are supported.\"" >&5 echo "$as_me: WARNING: \"Only HP/UX 11 threads are supported.\"" >&2;} cat >>confdefs.h <<\EOF #define GC_HPUX_THREADS 1 @@ -3086,7 +3093,7 @@ EOF THREADLIBS="-lpthread -lrt" ;; *-*-freebsd*) - { echo "$as_me:3089: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&5 + { echo "$as_me:3096: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&5 echo "$as_me: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&2;} cat >>confdefs.h <<\EOF #define GC_FREEBSD_THREADS 1 @@ -3175,18 +3182,18 @@ EOF INCLUDES="-pthread $INCLUDES" ;; decosf1 | irix | mach | os2 | solaris | dce | vxworks) - { { echo "$as_me:3178: error: thread package $THREADS not yet supported" >&5 + { { echo "$as_me:3185: error: thread package $THREADS not yet supported" >&5 echo "$as_me: error: thread package $THREADS not yet supported" >&2;} { (exit 1); exit 1; }; } ;; *) - { { echo "$as_me:3183: error: $THREADS is an unknown thread package" >&5 + { { echo "$as_me:3190: error: $THREADS is an unknown thread package" >&5 echo "$as_me: error: $THREADS is an unknown thread package" >&2;} { (exit 1); exit 1; }; } ;; esac -echo "$as_me:3189: checking for dlopen in -ldl" >&5 +echo "$as_me:3196: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3194,7 +3201,7 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3197 "configure" +#line 3204 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ @@ -3213,16 +3220,16 @@ dlopen (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3216: \"$ac_link\"") >&5 +if { (eval echo "$as_me:3223: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3219: \$? = $ac_status" >&5 + echo "$as_me:3226: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3222: \"$ac_try\"") >&5 + { (eval echo "$as_me:3229: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3225: \$? = $ac_status" >&5 + echo "$as_me:3232: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else @@ -3233,7 +3240,7 @@ fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3236: result: $ac_cv_lib_dl_dlopen" >&5 +echo "$as_me:3243: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl" @@ -3251,6 +3258,8 @@ if test "${with_ecos+set}" = set; then fi; addobjs= +addincludes= +addtests= CXXINCLUDES= case "$TARGET_ECOS" in no) @@ -3265,6 +3274,12 @@ EOF ;; esac +if test "${enable_cplusplus}" = yes; then + addobjs="$addobjs gc_cpp.lo" + addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h" + addtests="$addtests test_cpp" +fi + machdep= case "$host" in @@ -3322,7 +3337,7 @@ case "$host" in alpha-*-openbsd*) machdep="alpha_mach_dep.lo" if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then - { echo "$as_me:3325: WARNING: OpenBSD/Alpha without dlopen(). Shared library support is disabled" >&5 + { echo "$as_me:3340: WARNING: OpenBSD/Alpha without dlopen(). Shared library support is disabled" >&5 echo "$as_me: WARNING: OpenBSD/Alpha without dlopen(). Shared library support is disabled" >&2;} fi ;; @@ -3447,7 +3462,7 @@ fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:3450: checking for ld used by GCC" >&5 + echo "$as_me:3465: checking for ld used by GCC" >&5 echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 case $host in *-*-mingw*) @@ -3477,10 +3492,10 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 ;; esac elif test "$with_gnu_ld" = yes; then - echo "$as_me:3480: checking for GNU ld" >&5 + echo "$as_me:3495: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else - echo "$as_me:3483: checking for non-GNU ld" >&5 + echo "$as_me:3498: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then @@ -3510,16 +3525,16 @@ fi LD="$lt_cv_path_LD" if test -n "$LD"; then - echo "$as_me:3513: result: $LD" >&5 + echo "$as_me:3528: result: $LD" >&5 echo "${ECHO_T}$LD" >&6 else - echo "$as_me:3516: result: no" >&5 + echo "$as_me:3531: result: no" >&5 echo "${ECHO_T}no" >&6 fi -test -z "$LD" && { { echo "$as_me:3519: error: no acceptable ld found in \$PATH" >&5 +test -z "$LD" && { { echo "$as_me:3534: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } -echo "$as_me:3522: checking if the linker ($LD) is GNU ld" >&5 +echo "$as_me:3537: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3531,23 +3546,23 @@ else lt_cv_prog_gnu_ld=no fi fi -echo "$as_me:3534: result: $lt_cv_prog_gnu_ld" >&5 +echo "$as_me:3549: result: $lt_cv_prog_gnu_ld" >&5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld -echo "$as_me:3538: checking for $LD option to reload object files" >&5 +echo "$as_me:3553: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi -echo "$as_me:3545: result: $lt_cv_ld_reload_flag" >&5 +echo "$as_me:3560: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag test -n "$reload_flag" && reload_flag=" $reload_flag" -echo "$as_me:3550: checking for BSD-compatible nm" >&5 +echo "$as_me:3565: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3583,21 +3598,21 @@ fi fi NM="$lt_cv_path_NM" -echo "$as_me:3586: result: $NM" >&5 +echo "$as_me:3601: result: $NM" >&5 echo "${ECHO_T}$NM" >&6 -echo "$as_me:3589: checking whether ln -s works" >&5 +echo "$as_me:3604: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:3593: result: yes" >&5 + echo "$as_me:3608: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:3596: result: no, using $LN_S" >&5 + echo "$as_me:3611: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi -echo "$as_me:3600: checking how to recognise dependant libraries" >&5 +echo "$as_me:3615: checking how to recognise dependant libraries" >&5 echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3775,13 +3790,13 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) esac fi -echo "$as_me:3778: result: $lt_cv_deplibs_check_method" >&5 +echo "$as_me:3793: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method # Check for command to grab the raw symbol name followed by C symbol from nm. -echo "$as_me:3784: checking command to parse $NM output" >&5 +echo "$as_me:3799: checking command to parse $NM output" >&5 echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3862,17 +3877,17 @@ void nm_test_func(){} int main(){nm_test_var='a';nm_test_func();return(0);} EOF - if { (eval echo "$as_me:3865: \"$ac_compile\"") >&5 + if { (eval echo "$as_me:3880: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3868: \$? = $ac_status" >&5 + echo "$as_me:3883: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm - if { (eval echo "$as_me:3872: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + if { (eval echo "$as_me:3887: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? - echo "$as_me:3875: \$? = $ac_status" >&5 + echo "$as_me:3890: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -3924,10 +3939,10 @@ EOF save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$no_builtin_flag" - if { (eval echo "$as_me:3927: \"$ac_link\"") >&5 + if { (eval echo "$as_me:3942: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3930: \$? = $ac_status" >&5 + echo "$as_me:3945: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest; then pipe_works=yes fi @@ -3968,10 +3983,10 @@ else fi if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; then - echo "$as_me:3971: result: failed" >&5 + echo "$as_me:3986: result: failed" >&5 echo "${ECHO_T}failed" >&6 else - echo "$as_me:3974: result: ok" >&5 + echo "$as_me:3989: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi @@ -3980,7 +3995,7 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:3983: checking how to run the C preprocessor" >&5 +echo "$as_me:3998: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then @@ -4001,18 +4016,18 @@ do # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF -#line 4004 "configure" +#line 4019 "configure" #include "confdefs.h" #include Syntax error _ACEOF -if { (eval echo "$as_me:4009: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:4024: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:4015: \$? = $ac_status" >&5 + echo "$as_me:4030: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -4035,17 +4050,17 @@ rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF -#line 4038 "configure" +#line 4053 "configure" #include "confdefs.h" #include _ACEOF -if { (eval echo "$as_me:4042: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:4057: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:4048: \$? = $ac_status" >&5 + echo "$as_me:4063: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -4082,7 +4097,7 @@ fi else ac_cv_prog_CPP=$CPP fi -echo "$as_me:4085: result: $CPP" >&5 +echo "$as_me:4100: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes @@ -4092,18 +4107,18 @@ do # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF -#line 4095 "configure" +#line 4110 "configure" #include "confdefs.h" #include Syntax error _ACEOF -if { (eval echo "$as_me:4100: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:4115: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:4106: \$? = $ac_status" >&5 + echo "$as_me:4121: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -4126,17 +4141,17 @@ rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF -#line 4129 "configure" +#line 4144 "configure" #include "confdefs.h" #include _ACEOF -if { (eval echo "$as_me:4133: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:4148: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:4139: \$? = $ac_status" >&5 + echo "$as_me:4154: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -4164,7 +4179,7 @@ rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else - { { echo "$as_me:4167: error: C preprocessor \"$CPP\" fails sanity check" >&5 + { { echo "$as_me:4182: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi @@ -4178,23 +4193,23 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:4181: checking for $ac_header" >&5 +echo "$as_me:4196: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 4187 "configure" +#line 4202 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF -if { (eval echo "$as_me:4191: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:4206: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:4197: \$? = $ac_status" >&5 + echo "$as_me:4212: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -4213,7 +4228,7 @@ else fi rm -f conftest.err conftest.$ac_ext fi -echo "$as_me:4216: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "$as_me:4231: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 + echo "$as_me:4245: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4282,16 +4297,16 @@ fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then - echo "$as_me:4285: result: $MAGIC_CMD" >&5 + echo "$as_me:4300: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else - echo "$as_me:4288: result: no" >&5 + echo "$as_me:4303: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - echo "$as_me:4294: checking for file" >&5 + echo "$as_me:4309: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4346,10 +4361,10 @@ fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then - echo "$as_me:4349: result: $MAGIC_CMD" >&5 + echo "$as_me:4364: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else - echo "$as_me:4352: result: no" >&5 + echo "$as_me:4367: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -4365,7 +4380,7 @@ esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:4368: checking for $ac_word" >&5 +echo "$as_me:4383: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4380,7 +4395,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" -echo "$as_me:4383: found $ac_dir/$ac_word" >&5 +echo "$as_me:4398: found $ac_dir/$ac_word" >&5 break done @@ -4388,10 +4403,10 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:4391: result: $RANLIB" >&5 + echo "$as_me:4406: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else - echo "$as_me:4394: result: no" >&5 + echo "$as_me:4409: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -4400,7 +4415,7 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -echo "$as_me:4403: checking for $ac_word" >&5 +echo "$as_me:4418: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4415,7 +4430,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_RANLIB="ranlib" -echo "$as_me:4418: found $ac_dir/$ac_word" >&5 +echo "$as_me:4433: found $ac_dir/$ac_word" >&5 break done @@ -4424,10 +4439,10 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - echo "$as_me:4427: result: $ac_ct_RANLIB" >&5 + echo "$as_me:4442: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else - echo "$as_me:4430: result: no" >&5 + echo "$as_me:4445: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -4439,7 +4454,7 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:4442: checking for $ac_word" >&5 +echo "$as_me:4457: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4454,7 +4469,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_STRIP="${ac_tool_prefix}strip" -echo "$as_me:4457: found $ac_dir/$ac_word" >&5 +echo "$as_me:4472: found $ac_dir/$ac_word" >&5 break done @@ -4462,10 +4477,10 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:4465: result: $STRIP" >&5 + echo "$as_me:4480: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else - echo "$as_me:4468: result: no" >&5 + echo "$as_me:4483: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -4474,7 +4489,7 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -echo "$as_me:4477: checking for $ac_word" >&5 +echo "$as_me:4492: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4489,7 +4504,7 @@ for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_STRIP="strip" -echo "$as_me:4492: found $ac_dir/$ac_word" >&5 +echo "$as_me:4507: found $ac_dir/$ac_word" >&5 break done @@ -4498,10 +4513,10 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - echo "$as_me:4501: result: $ac_ct_STRIP" >&5 + echo "$as_me:4516: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else - echo "$as_me:4504: result: no" >&5 + echo "$as_me:4519: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -4525,11 +4540,11 @@ test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes case $host in *-*-irix6*) # Find out which ABI we are using. - echo '#line 4528 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:4529: \"$ac_compile\"") >&5 + echo '#line 4543 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:4544: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4532: \$? = $ac_status" >&5 + echo "$as_me:4547: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) @@ -4550,7 +4565,7 @@ case $host in # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" - echo "$as_me:4553: checking whether the C compiler needs -belf" >&5 + echo "$as_me:4568: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4563,7 +4578,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF -#line 4566 "configure" +#line 4581 "configure" #include "confdefs.h" int @@ -4575,16 +4590,16 @@ main () } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:4578: \"$ac_link\"") >&5 +if { (eval echo "$as_me:4593: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:4581: \$? = $ac_status" >&5 + echo "$as_me:4596: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:4584: \"$ac_try\"") >&5 + { (eval echo "$as_me:4599: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4587: \$? = $ac_status" >&5 + echo "$as_me:4602: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else @@ -4600,7 +4615,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -echo "$as_me:4603: result: $lt_cv_cc_needs_belf" >&5 +echo "$as_me:4618: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf @@ -4702,7 +4717,7 @@ compiler="$2" ## FIXME: this should be a separate macro ## -echo "$as_me:4705: checking for objdir" >&5 +echo "$as_me:4720: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null @@ -4713,7 +4728,7 @@ else objdir=_libs fi rmdir .libs 2>/dev/null -echo "$as_me:4716: result: $objdir" >&5 +echo "$as_me:4731: result: $objdir" >&5 echo "${ECHO_T}$objdir" >&6 ## ## END FIXME @@ -4733,7 +4748,7 @@ test -z "$pic_mode" && pic_mode=default # We assume here that the value for lt_cv_prog_cc_pic will not be cached # in isolation, and that seeing it set (from the cache) indicates that # the associated values are set (in the cache) correctly too. -echo "$as_me:4736: checking for $compiler option to produce PIC" >&5 +echo "$as_me:4751: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "${lt_cv_prog_cc_pic+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4880,14 +4895,14 @@ else fi if test -z "$lt_cv_prog_cc_pic"; then - echo "$as_me:4883: result: none" >&5 + echo "$as_me:4898: result: none" >&5 echo "${ECHO_T}none" >&6 else - echo "$as_me:4886: result: $lt_cv_prog_cc_pic" >&5 + echo "$as_me:4901: result: $lt_cv_prog_cc_pic" >&5 echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6 # Check to make sure the pic_flag actually works. - echo "$as_me:4890: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 + echo "$as_me:4905: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6 if test "${lt_cv_prog_cc_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4895,7 +4910,7 @@ else save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" cat >conftest.$ac_ext <<_ACEOF -#line 4898 "configure" +#line 4913 "configure" #include "confdefs.h" int @@ -4907,16 +4922,16 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4910: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:4925: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4913: \$? = $ac_status" >&5 + echo "$as_me:4928: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4916: \"$ac_try\"") >&5 + { (eval echo "$as_me:4931: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4919: \$? = $ac_status" >&5 + echo "$as_me:4934: \$? = $ac_status" >&5 (exit $ac_status); }; }; then case $host_os in hpux9* | hpux10* | hpux11*) @@ -4952,7 +4967,7 @@ fi lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" fi - echo "$as_me:4955: result: $lt_cv_prog_cc_pic_works" >&5 + echo "$as_me:4970: result: $lt_cv_prog_cc_pic_works" >&5 echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6 fi ## @@ -4960,11 +4975,11 @@ fi # Check for any special shared library compilation flags. if test -n "$lt_cv_prog_cc_shlib"; then - { echo "$as_me:4963: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5 + { echo "$as_me:4978: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]" >/dev/null; then : else - { echo "$as_me:4967: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 + { echo "$as_me:4982: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi @@ -4972,7 +4987,7 @@ fi ## FIXME: this should be a separate macro ## -echo "$as_me:4975: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 +echo "$as_me:4990: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6 if test "${lt_cv_prog_cc_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -4981,7 +4996,7 @@ else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" cat >conftest.$ac_ext <<_ACEOF -#line 4984 "configure" +#line 4999 "configure" #include "confdefs.h" int @@ -4993,16 +5008,16 @@ main () } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:4996: \"$ac_link\"") >&5 +if { (eval echo "$as_me:5011: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:4999: \$? = $ac_status" >&5 + echo "$as_me:5014: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:5002: \"$ac_try\"") >&5 + { (eval echo "$as_me:5017: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5005: \$? = $ac_status" >&5 + echo "$as_me:5020: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_prog_cc_static_works=yes else @@ -5016,7 +5031,7 @@ fi # Belt *and* braces to stop my trousers falling down: test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= -echo "$as_me:5019: result: $lt_cv_prog_cc_static_works" >&5 +echo "$as_me:5034: result: $lt_cv_prog_cc_static_works" >&5 echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6 pic_flag="$lt_cv_prog_cc_pic" @@ -5031,7 +5046,7 @@ can_build_shared="$lt_cv_prog_cc_can_build_shared" ## FIXME: this should be a separate macro ## # Check to see if options -o and -c are simultaneously supported by compiler -echo "$as_me:5034: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo "$as_me:5049: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -5051,7 +5066,7 @@ chmod -w . save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" compiler_c_o=no -if { (eval echo configure:5054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then +if { (eval echo configure:5069: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then @@ -5075,12 +5090,12 @@ $rm -r conftest 2>/dev/null fi compiler_c_o=$lt_cv_compiler_c_o -echo "$as_me:5078: result: $compiler_c_o" >&5 +echo "$as_me:5093: result: $compiler_c_o" >&5 echo "${ECHO_T}$compiler_c_o" >&6 if test x"$compiler_c_o" = x"yes"; then # Check to see if we can write to a .lo - echo "$as_me:5083: checking if $compiler supports -c -o file.lo" >&5 + echo "$as_me:5098: checking if $compiler supports -c -o file.lo" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6 if test "${lt_cv_compiler_o_lo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -5092,7 +5107,7 @@ else save_objext="$ac_objext" ac_objext=lo cat >conftest.$ac_ext <<_ACEOF -#line 5095 "configure" +#line 5110 "configure" #include "confdefs.h" int @@ -5104,16 +5119,16 @@ int some_variable = 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5107: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5122: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5110: \$? = $ac_status" >&5 + echo "$as_me:5125: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5113: \"$ac_try\"") >&5 + { (eval echo "$as_me:5128: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5116: \$? = $ac_status" >&5 + echo "$as_me:5131: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -5134,7 +5149,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext fi compiler_o_lo=$lt_cv_compiler_o_lo - echo "$as_me:5137: result: $compiler_o_lo" >&5 + echo "$as_me:5152: result: $compiler_o_lo" >&5 echo "${ECHO_T}$compiler_o_lo" >&6 else compiler_o_lo=no @@ -5148,7 +5163,7 @@ fi hard_links="nottested" if test "$compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user - echo "$as_me:5151: checking if we can lock with hard links" >&5 + echo "$as_me:5166: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* @@ -5156,10 +5171,10 @@ echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:5159: result: $hard_links" >&5 + echo "$as_me:5174: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then - { echo "$as_me:5162: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 + { echo "$as_me:5177: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi @@ -5173,14 +5188,14 @@ fi ## if test "$GCC" = yes; then # Check to see if options -fno-rtti -fno-exceptions are supported by compiler - echo "$as_me:5176: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 + echo "$as_me:5191: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 echo "int some_variable = 0;" > conftest.$ac_ext save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" compiler_rtti_exceptions=no cat >conftest.$ac_ext <<_ACEOF -#line 5183 "configure" +#line 5198 "configure" #include "confdefs.h" int @@ -5192,16 +5207,16 @@ int some_variable = 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5195: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:5210: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5198: \$? = $ac_status" >&5 + echo "$as_me:5213: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5201: \"$ac_try\"") >&5 + { (eval echo "$as_me:5216: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5204: \$? = $ac_status" >&5 + echo "$as_me:5219: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -5217,7 +5232,7 @@ cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" - echo "$as_me:5220: result: $compiler_rtti_exceptions" >&5 + echo "$as_me:5235: result: $compiler_rtti_exceptions" >&5 echo "${ECHO_T}$compiler_rtti_exceptions" >&6 if test "$compiler_rtti_exceptions" = "yes"; then @@ -5232,7 +5247,7 @@ fi ## FIXME: this should be a separate macro ## # See if the linker supports building shared libraries. -echo "$as_me:5235: checking whether the linker ($LD) supports shared libraries" >&5 +echo "$as_me:5250: checking whether the linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6 allow_undefined_flag= @@ -5912,7 +5927,7 @@ EOF ;; esac fi -echo "$as_me:5915: result: $ld_shlibs" >&5 +echo "$as_me:5930: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no ## @@ -5921,7 +5936,7 @@ test "$ld_shlibs" = no && can_build_shared=no ## FIXME: this should be a separate macro ## # Check hardcoding attributes. -echo "$as_me:5924: checking how to hardcode library paths into programs" >&5 +echo "$as_me:5939: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ @@ -5945,7 +5960,7 @@ else # directories. hardcode_action=unsupported fi -echo "$as_me:5948: result: $hardcode_action" >&5 +echo "$as_me:5963: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 ## ## END FIXME @@ -5954,15 +5969,15 @@ echo "${ECHO_T}$hardcode_action" >&6 ## striplib= old_striplib= -echo "$as_me:5957: checking whether stripping libraries is possible" >&5 +echo "$as_me:5972: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:5962: result: yes" >&5 + echo "$as_me:5977: result: yes" >&5 echo "${ECHO_T}yes" >&6 else - echo "$as_me:5965: result: no" >&5 + echo "$as_me:5980: result: no" >&5 echo "${ECHO_T}no" >&6 fi ## @@ -5974,7 +5989,7 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown ## FIXME: this should be a separate macro ## # PORTME Fill in your ld.so characteristics -echo "$as_me:5977: checking dynamic linker characteristics" >&5 +echo "$as_me:5992: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' @@ -6367,7 +6382,7 @@ sysv4*MP*) dynamic_linker=no ;; esac -echo "$as_me:6370: result: $dynamic_linker" >&5 +echo "$as_me:6385: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no ## @@ -6376,16 +6391,16 @@ test "$dynamic_linker" = no && can_build_shared=no ## FIXME: this should be a separate macro ## # Report the final consequences. -echo "$as_me:6379: checking if libtool supports shared libraries" >&5 +echo "$as_me:6394: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:6381: result: $can_build_shared" >&5 +echo "$as_me:6396: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 ## ## END FIXME ## FIXME: this should be a separate macro ## -echo "$as_me:6388: checking whether to build shared libraries" >&5 +echo "$as_me:6403: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no @@ -6406,18 +6421,18 @@ aix4*) fi ;; esac -echo "$as_me:6409: result: $enable_shared" >&5 +echo "$as_me:6424: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 ## ## END FIXME ## FIXME: this should be a separate macro ## -echo "$as_me:6416: checking whether to build static libraries" >&5 +echo "$as_me:6431: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes -echo "$as_me:6420: result: $enable_static" >&5 +echo "$as_me:6435: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 ## ## END FIXME @@ -6457,13 +6472,13 @@ else ;; *) - echo "$as_me:6460: checking for shl_load" >&5 + echo "$as_me:6475: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6466 "configure" +#line 6481 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. */ @@ -6494,16 +6509,16 @@ f = shl_load; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6497: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6512: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6500: \$? = $ac_status" >&5 + echo "$as_me:6515: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6503: \"$ac_try\"") >&5 + { (eval echo "$as_me:6518: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6506: \$? = $ac_status" >&5 + echo "$as_me:6521: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else @@ -6513,12 +6528,12 @@ ac_cv_func_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:6516: result: $ac_cv_func_shl_load" >&5 +echo "$as_me:6531: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else - echo "$as_me:6521: checking for shl_load in -ldld" >&5 + echo "$as_me:6536: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6526,7 +6541,7 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 6529 "configure" +#line 6544 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ @@ -6545,16 +6560,16 @@ shl_load (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6548: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6563: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6551: \$? = $ac_status" >&5 + echo "$as_me:6566: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6554: \"$ac_try\"") >&5 + { (eval echo "$as_me:6569: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6557: \$? = $ac_status" >&5 + echo "$as_me:6572: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else @@ -6565,18 +6580,18 @@ fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:6568: result: $ac_cv_lib_dld_shl_load" >&5 +echo "$as_me:6583: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else - echo "$as_me:6573: checking for dlopen" >&5 + echo "$as_me:6588: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6579 "configure" +#line 6594 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. */ @@ -6607,16 +6622,16 @@ f = dlopen; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6610: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6625: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6613: \$? = $ac_status" >&5 + echo "$as_me:6628: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6616: \"$ac_try\"") >&5 + { (eval echo "$as_me:6631: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6619: \$? = $ac_status" >&5 + echo "$as_me:6634: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else @@ -6626,12 +6641,12 @@ ac_cv_func_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:6629: result: $ac_cv_func_dlopen" >&5 +echo "$as_me:6644: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else - echo "$as_me:6634: checking for dlopen in -ldl" >&5 + echo "$as_me:6649: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6639,7 +6654,7 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 6642 "configure" +#line 6657 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ @@ -6658,16 +6673,16 @@ dlopen (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6661: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6676: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6664: \$? = $ac_status" >&5 + echo "$as_me:6679: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6667: \"$ac_try\"") >&5 + { (eval echo "$as_me:6682: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6670: \$? = $ac_status" >&5 + echo "$as_me:6685: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else @@ -6678,12 +6693,12 @@ fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:6681: result: $ac_cv_lib_dl_dlopen" >&5 +echo "$as_me:6696: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else - echo "$as_me:6686: checking for dlopen in -lsvld" >&5 + echo "$as_me:6701: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6691,7 +6706,7 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 6694 "configure" +#line 6709 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ @@ -6710,16 +6725,16 @@ dlopen (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6713: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6728: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6716: \$? = $ac_status" >&5 + echo "$as_me:6731: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6719: \"$ac_try\"") >&5 + { (eval echo "$as_me:6734: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6722: \$? = $ac_status" >&5 + echo "$as_me:6737: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else @@ -6730,12 +6745,12 @@ fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:6733: result: $ac_cv_lib_svld_dlopen" >&5 +echo "$as_me:6748: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else - echo "$as_me:6738: checking for dld_link in -ldld" >&5 + echo "$as_me:6753: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6743,7 +6758,7 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 6746 "configure" +#line 6761 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ @@ -6762,16 +6777,16 @@ dld_link (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6765: \"$ac_link\"") >&5 +if { (eval echo "$as_me:6780: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6768: \$? = $ac_status" >&5 + echo "$as_me:6783: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6771: \"$ac_try\"") >&5 + { (eval echo "$as_me:6786: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6774: \$? = $ac_status" >&5 + echo "$as_me:6789: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else @@ -6782,7 +6797,7 @@ fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:6785: result: $ac_cv_lib_dld_dld_link" >&5 +echo "$as_me:6800: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" @@ -6818,7 +6833,7 @@ fi save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" - echo "$as_me:6821: checking whether a program can dlopen itself" >&5 + echo "$as_me:6836: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6829,7 +6844,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { (eval echo "$as_me:6908: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6896: \$? = $ac_status" >&5 + echo "$as_me:6911: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? @@ -6910,12 +6925,12 @@ fi rm -fr conftest* fi -echo "$as_me:6913: result: $lt_cv_dlopen_self" >&5 +echo "$as_me:6928: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:6918: checking whether a statically linked program can dlopen itself" >&5 + echo "$as_me:6933: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6926,7 +6941,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { (eval echo "$as_me:7005: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6993: \$? = $ac_status" >&5 + echo "$as_me:7008: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? @@ -7007,7 +7022,7 @@ fi rm -fr conftest* fi -echo "$as_me:7010: result: $lt_cv_dlopen_self_static" >&5 +echo "$as_me:7025: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi @@ -7039,7 +7054,7 @@ if test "$enable_shared" = yes && test "$GCC" = yes; then # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - echo "$as_me:7042: checking whether -lc should be explicitly linked in" >&5 + echo "$as_me:7057: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 if test "${lt_cv_archive_cmds_need_lc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -7047,10 +7062,10 @@ else $rm conftest* echo 'static int dummy;' > conftest.$ac_ext - if { (eval echo "$as_me:7050: \"$ac_compile\"") >&5 + if { (eval echo "$as_me:7065: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:7053: \$? = $ac_status" >&5 + echo "$as_me:7068: \$? = $ac_status" >&5 (exit $ac_status); }; then soname=conftest lib=conftest @@ -7064,10 +7079,10 @@ else libname=conftest save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= - if { (eval echo "$as_me:7067: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + if { (eval echo "$as_me:7082: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - echo "$as_me:7070: \$? = $ac_status" >&5 + echo "$as_me:7085: \$? = $ac_status" >&5 (exit $ac_status); } then lt_cv_archive_cmds_need_lc=no @@ -7080,7 +7095,7 @@ else fi fi - echo "$as_me:7083: result: $lt_cv_archive_cmds_need_lc" >&5 + echo "$as_me:7098: result: $lt_cv_archive_cmds_need_lc" >&5 echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6 ;; esac @@ -7651,26 +7666,26 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion -echo "$as_me:7654: checking if host is AViiON running DGUX" >&5 +echo "$as_me:7669: checking if host is AViiON running DGUX" >&5 echo $ECHO_N "checking if host is AViiON running DGUX... $ECHO_C" >&6 ac_is_dgux=no -echo "$as_me:7657: checking for sys/dg_sys_info.h" >&5 +echo "$as_me:7672: checking for sys/dg_sys_info.h" >&5 echo $ECHO_N "checking for sys/dg_sys_info.h... $ECHO_C" >&6 if test "${ac_cv_header_sys_dg_sys_info_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 7663 "configure" +#line 7678 "configure" #include "confdefs.h" #include _ACEOF -if { (eval echo "$as_me:7667: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:7682: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:7673: \$? = $ac_status" >&5 + echo "$as_me:7688: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -7689,7 +7704,7 @@ else fi rm -f conftest.err conftest.$ac_ext fi -echo "$as_me:7692: result: $ac_cv_header_sys_dg_sys_info_h" >&5 +echo "$as_me:7707: result: $ac_cv_header_sys_dg_sys_info_h" >&5 echo "${ECHO_T}$ac_cv_header_sys_dg_sys_info_h" >&6 if test $ac_cv_header_sys_dg_sys_info_h = yes; then ac_is_dgux=yes; @@ -7718,7 +7733,7 @@ if test "${with_cross_host+set}" = set; then fi; -echo "$as_me:7721: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "$as_me:7736: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then @@ -7727,7 +7742,7 @@ if test "${enable_maintainer_mode+set}" = set; then else USE_MAINTAINER_MODE=no fi; - echo "$as_me:7730: result: $USE_MAINTAINER_MODE" >&5 + echo "$as_me:7745: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 if test $USE_MAINTAINER_MODE = yes; then @@ -7751,7 +7766,7 @@ if false; then fi -echo "$as_me:7754: checking for threads package to use" >&5 +echo "$as_me:7769: checking for threads package to use" >&5 echo $ECHO_N "checking for threads package to use... $ECHO_C" >&6 case "$host" in @@ -7825,7 +7840,7 @@ fi if test "${enable_full_debug+set}" = set; then enableval="$enable_full_debug" if test "$enable_full_debug" = "yes"; then - { echo "$as_me:7828: WARNING: \"Must define GC_DEBUG and use debug alloc. in clients.\"" >&5 + { echo "$as_me:7843: WARNING: \"Must define GC_DEBUG and use debug alloc. in clients.\"" >&5 echo "$as_me: WARNING: \"Must define GC_DEBUG and use debug alloc. in clients.\"" >&2;} cat >>confdefs.h <<\EOF #define KEEP_BACK_PTRS 1 @@ -7847,7 +7862,7 @@ EOF #define MAKE_BACK_GRAPH 1 EOF - { echo "$as_me:7850: WARNING: \"Client must not use -fomit-frame-pointer.\"" >&5 + { echo "$as_me:7865: WARNING: \"Client must not use -fomit-frame-pointer.\"" >&5 echo "$as_me: WARNING: \"Client must not use -fomit-frame-pointer.\"" >&2;} cat >>confdefs.h <<\EOF #define SAVE_CALL_COUNT 8 @@ -8015,28 +8030,28 @@ DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:8018: error: conditional \"AMDEP\" was never defined. + { { echo "$as_me:8033: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { echo "$as_me:8025: error: conditional \"MAINTAINER_MODE\" was never defined. + { { echo "$as_me:8040: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { echo "$as_me:8032: error: conditional \"MAINTAINER_MODE\" was never defined. + { { echo "$as_me:8047: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${USE_LIBDIR_TRUE}" && test -z "${USE_LIBDIR_FALSE}"; then - { { echo "$as_me:8039: error: conditional \"USE_LIBDIR\" was never defined. + { { echo "$as_me:8054: error: conditional \"USE_LIBDIR\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"USE_LIBDIR\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} @@ -8046,7 +8061,7 @@ fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:8049: creating $CONFIG_STATUS" >&5 +{ echo "$as_me:8064: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL @@ -8217,7 +8232,7 @@ cat >>$CONFIG_STATUS <<\EOF echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header - { { echo "$as_me:8220: error: ambiguous option: $1 + { { echo "$as_me:8235: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} @@ -8236,7 +8251,7 @@ Try \`$0 --help' for more information." >&2;} ac_need_defaults=false;; # This is an error. - -*) { { echo "$as_me:8239: error: unrecognized option: $1 + -*) { { echo "$as_me:8254: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} @@ -8291,7 +8306,7 @@ do "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - *) { { echo "$as_me:8294: error: invalid argument: $ac_config_target" >&5 + *) { { echo "$as_me:8309: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac @@ -8432,6 +8447,8 @@ s,@target_all@,$target_all,;t t s,@INCLUDES@,$INCLUDES,;t t s,@CXXINCLUDES@,$CXXINCLUDES,;t t s,@addobjs@,$addobjs,;t t +s,@addincludes@,$addincludes,;t t +s,@addtests@,$addtests,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@CPP@,$CPP,;t t @@ -8553,7 +8570,7 @@ done; } esac if test x"$ac_file" != x-; then - { echo "$as_me:8556: creating $ac_file" >&5 + { echo "$as_me:8573: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi @@ -8571,7 +8588,7 @@ echo "$as_me: creating $ac_file" >&6;} -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:8574: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:8591: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; @@ -8584,7 +8601,7 @@ echo "$as_me: error: cannot find input file: $f" >&2;} echo $srcdir/$f else # /dev/null tree - { { echo "$as_me:8587: error: cannot find input file: $f" >&5 + { { echo "$as_me:8604: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; diff --git a/configure.in b/configure.in index 8e2c949..0784c2b 100644 --- a/configure.in +++ b/configure.in @@ -84,6 +84,10 @@ AC_ARG_ENABLE(parallel-mark, esac] ) +AC_ARG_ENABLE(cplusplus, +[ --enable-cplusplus include C++ support in GC library and include directory], +) + INCLUDES=-I${srcdir}/include THREADLIBS= case "$THREADS" in @@ -189,6 +193,8 @@ TARGET_ECOS="$with_ecos" ) addobjs= +addincludes= +addtests= CXXINCLUDES= case "$TARGET_ECOS" in no) @@ -199,6 +205,13 @@ case "$TARGET_ECOS" in addobjs="$addobjs ecos.lo" ;; esac + +if test "${enable_cplusplus}" = yes; then + addobjs="$addobjs gc_cpp.lo" + addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h" + addtests="$addtests test_cpp" +fi + AC_SUBST(CXX) AC_SUBST(INCLUDES) @@ -263,6 +276,8 @@ if test x"$machdep" = x; then fi addobjs="$addobjs $machdep" AC_SUBST(addobjs) +AC_SUBST(addincludes) +AC_SUBST(addtests) AC_PROG_LIBTOOL diff --git a/dbg_mlc.c b/dbg_mlc.c index a67fef2..1de217c 100644 --- a/dbg_mlc.c +++ b/dbg_mlc.c @@ -60,7 +60,7 @@ ptr_t p; # include # if defined(LINUX) || defined(SUNOS4) || defined(SUNOS5) \ - || defined(HPUX) || defined(IRIX) || defined(OSF1) + || defined(HPUX) || defined(IRIX5) || defined(OSF1) # define RANDOM() random() # else # define RANDOM() (long)rand() @@ -460,7 +460,7 @@ void GC_start_debugging() (unsigned long) lb); return(0); } - ADD_CALL_CHAIN(result, ra); + ADD_CALL_CHAIN(result, GC_RETURN_ADDR); return (GC_store_debug_info_inner(result, (word)lb, "INTERNAL", (word)0)); } @@ -474,7 +474,7 @@ void GC_start_debugging() (unsigned long) lb); return(0); } - ADD_CALL_CHAIN(result, ra); + ADD_CALL_CHAIN(result, GC_RETURN_ADDR); return (GC_store_debug_info_inner(result, (word)lb, "INTERNAL", (word)0)); } # endif diff --git a/doc/README b/doc/README index d6dbec9..afe2d52 100644 --- a/doc/README +++ b/doc/README @@ -28,7 +28,7 @@ are GPL'ed, but with an exception that should cover all uses in the collector. (If you are concerned about such things, I recommend you look at the notice in config.guess or ltmain.sh.) -This is version 6.1 of a conservative garbage collector for C and C++. +This is version 6.2alpha3 of a conservative garbage collector for C and C++. You might find a more recent version of this at diff --git a/doc/README.changes b/doc/README.changes index 3a49e06..a8d7b6c 100644 --- a/doc/README.changes +++ b/doc/README.changes @@ -1676,16 +1676,92 @@ Since 6.1alpha5: to work correctly with these. - Fixed Linux USE_PROC_FOR_LIBRARIES to work with a 64-bit /proc format. +Since 6.1: + - Guard the test for GC_DUMP_REGULARLY in misc.c with + "#ifndef NO_DEBUGGING". Otherwise it fails to build with NO_DEBUGGING + defined. (Thanks to Manuel Serrano.) + - Message about retrying suspend signals was incorrectly generated even when + flag was not set. + - Cleaned up MACOSX/NEXT root registration code. There was apparently a + separate ifdef case in GC_register_data_segments() for no reason. + - Removed MPROTECT_VDB for MACOSX port, based on one negative report. + - Arrange for gc.h and friends to be correctly installed with GNU-style + "make install". + - Enable the GNU-style build facility include C++ support in the library + with --enable-cplusplus. (Thanks to Thomas Maier for some of the patch.) + - Mark from GC_thread_key in linux_threads.c, in case that's allocated + from the garbage collected heap, as it is with our own thread-specific + storage implementation. (Thanks to Jeff Sturm.) + - Mark all free list header blocks if they are heap allocated. This avoids + some unnecessary tracing. And it remains correct if we turn clear the + root set. (Thanks to Jeff Sturm for identifying the bug.) + - Improved S390/Linux support. Add S390/Linux 64-bit support. (Thanks + to Ulrich Weigand.) + - Corrected the spelling of GC_{M,C}ALLOC_EXPLICTLY_TYPED to + GC_{M,C}ALLOC_EXPLICITLY_TYPED in gc_typed.h. This is technically + an interface change. Based on the fact that nobody reported this, + I suspect/hope there were no clients. + - Cleaned up gc_typed.h so that (1) it adds an extern "C" declaration + when appropriate, (2) doesn't generate references to undefined internal + macros, and (3) allows easier manual construction of descriptors. + - Close the file descriptor used by GC_print_address_map(). + - Set the "close-on-exec" bit for various file descriptors maintained + for the collector's internal use. + - Added a hack to find memory segments owned by the system allocator + under win32. Based on my tests, this tends to eventually find all + segments, though it may take a while. There appear to be cleaner, + but slower solutions under NT/XP. But they rely on an API that's + unsupported under 9X. + - Changed Linux PowerPC stack finding to LINUX_STACKBOTTOM. (Thanks + to Akira Tagoh for pointing out that HEURISTIC1 doesn't work on + 64-bit kernels.) + - Added GC_set_free_space_divisor to avoid some Windows dll issues. + - Added FIXUP_POINTER, POINTER_SHIFT, POINTER_MASK to allow preprocessing + of candidate pointers for tagging, etc. + - Always lock around GC_notify_full_gc(). Simplified code for + invoking GC_notify_full_gc(). + - Changed the way DATASTART is defined on FreeBSD to be robust against + an unmapped page after etext. (Thanks to Hironori Sakamoto for + tracking down the intermittent failure.) + - Made GC_enable() and GC_disable() official. Deprecated direct update + of GC_dont_gc. Changed GC_gcollect to be a noop when garbage collection + is disabled. + - Call GC_register_dynamic_libraries before stopping the world on Linux, + in order to avoid a potential deadlock due to the dl_iterate_phdr lock. + - Introduced a more general mechanism for platform-dependent code to + decide whether the main data segment should be handled separately + from dynamic libraries, or registered by GC_register_dynamic_libraries. + The latter is more reliable and easier on Linux with dl_iterate_phdr. + +Since 6.2alpha1: + - Fixed the completely broken FreeBSD code in 6.2alpha1. (Thanks to + Hironori Sakamoto for the patch.) + - Changed IRIX reference in dbg_mlc.c to IRIX5. (Thanks to Marcus Herbert.) + - Attempted to work around the problems with .S filenames and the SGI + compiler. (Reported by several people. Untested.) + - Worked around an HP/UX make issue with the GNU-style build process. + - Fixed the --enable-cplusplus build machinery to allow builds without + a C++ compiler. (That was always the intent ...) + - Changed the debugging allocation macros to explicitly pass the return + address for Linux and XXXBSD on hardware for which we can't get stack + traces. Use __builtin_return_address(0) to generate it when possible. + Some of the configuration work was cleaned up (good) and moved to gc.h + (bad, but necessary). This should make leak detection more useful + on a number of platforms. (Thanks to Fabian Thylman for the suggestion.) + - Fixed compilation problems in dbg_mlc.c with GC_ADD_CALLER. + - Bumped revision number for dynamic library. + +Since 6.2alpha2: + - Don't include execinfo.h in os_dep.c when it's not needed, and may not exist. + To do: + - A dynamic libgc.so references dlopen unconditionally, but doesn't link + against libdl. + - GC_proc_fd for Solaris is not correctly updated in response to a + fork() call. Thus incremental collection in the child won't work + correctly. (Thanks to Ben Cottrell for pointing this out.) - --enable-redirect-malloc is mostly untested and known not to work on some platforms. - - The win32 collector ends up tracing some (most?) objects allocated with - the system allocator, in spite if the fact that it tries not to. - This costs time and space, though it remains correct. - We need a way to identify memory regions used by the system malloc(), - or an alternate way to locate dll data areas. A very partial - workaround is to use GC_malloc_atomic_uncollectable() instead of - the system malloc() for most allocation. - There seem to be outstanding issues on Solaris/X86, possibly with finding the data segment starting address. Information/patches would be appreciated. diff --git a/dyn_load.c b/dyn_load.c index b888a52..95a7a4d 100644 --- a/dyn_load.c +++ b/dyn_load.c @@ -355,10 +355,12 @@ void GC_register_dynamic_libraries() /* Stack mapping; discard */ continue; } - if (start <= datastart && end > datastart && maj_dev != 0) { +# if 0 + if (start <= datastart && end > datastart && maj_dev != 0) { /* Main data segment; discard */ continue; - } + } +# endif # ifdef THREADS if (GC_segment_is_thread_stack(start, end)) continue; # endif @@ -384,6 +386,13 @@ void GC_register_dynamic_libraries() } } +/* We now take care of the main data segment ourselves: */ +GC_bool GC_register_main_static_data() +{ + return FALSE; +} + +# define HAVE_REGISTER_MAIN_STATIC_DATA // // parse_map_entry parses an entry from /proc/self/maps so we can // locate all writable data segments that belong to shared libraries. @@ -482,12 +491,14 @@ static int GC_register_dynlib_callback(info, size, ptr) + sizeof (info->dlpi_phnum)) return -1; +# if 0 /* We now register the main program data here. */ /* Skip the first object - it is the main program. */ if (*(int *)ptr == 0) { *(int *)ptr = 1; return 0; } +# endif p = info->dlpi_phdr; for( i = 0; i < (int)(info->dlpi_phnum); ((i++),(p++)) ) { @@ -523,6 +534,14 @@ GC_bool GC_register_dynamic_libraries_dl_iterate_phdr() } } +/* Do we need to separately register the main static data segment? */ +GC_bool GC_register_main_static_data() +{ + return (dl_iterate_phdr == 0); +} + +#define HAVE_REGISTER_MAIN_STATIC_DATA + # else /* !LINUX || version(glibc) < 2.2.4 */ /* Dynamic loading code for Linux running ELF. Somewhat tested on @@ -789,10 +808,23 @@ void GC_register_dynamic_libraries() } # endif -# ifndef MSWINCE +# ifdef MSWINCE + /* Do we need to separately register the main static data segment? */ + GC_bool GC_register_main_static_data() + { + return FALSE; + } +# else /* win32 */ extern GC_bool GC_no_win32_dlls; -# endif + + GC_bool GC_register_main_static_data() + { + return GC_no_win32_dlls; + } +# endif /* win32 */ +# define HAVE_REGISTER_MAIN_STATIC_DATA + void GC_register_dynamic_libraries() { MEMORY_BASIC_INFORMATION buf; @@ -1093,4 +1125,15 @@ void GC_register_dynamic_libraries(){} int GC_no_dynamic_loading; #endif /* !PCR */ + #endif /* !DYNAMIC_LOADING */ + +#ifndef HAVE_REGISTER_MAIN_STATIC_DATA + +/* Do we need to separately register the main static data segment? */ +GC_bool GC_register_main_static_data() +{ + return TRUE; +} +#endif /* HAVE_REGISTER_MAIN_STATIC_DATA */ + diff --git a/finalize.c b/finalize.c index 42890ad..8350605 100644 --- a/finalize.c +++ b/finalize.c @@ -814,7 +814,9 @@ void GC_notify_or_invoke_finalizers GC_PROTO((void)) if (GC_finalize_now == 0) return; if (!GC_finalize_on_demand) { (void) GC_invoke_finalizers(); - GC_ASSERT(GC_finalize_now == 0); +# ifndef THREADS + GC_ASSERT(GC_finalize_now == 0); +# endif /* Otherwise GC can run concurrently and add more */ return; } if (GC_finalizer_notifier != (void (*) GC_PROTO((void)))0 diff --git a/gc_dlopen.c b/gc_dlopen.c index eafaa2b..35d8abc 100644 --- a/gc_dlopen.c +++ b/gc_dlopen.c @@ -19,7 +19,8 @@ /* * This used to be in dyn_load.c. It was extracted into a separate file * to avoid having to link against libdl.{a,so} if the client doesn't call - * dlopen. -HB + * dlopen. Of course this fails if the collector is in a dynamic + * library. -HB */ #include "private/gc_priv.h" @@ -44,19 +45,14 @@ /* calls in either a multithreaded environment, or if the library */ /* initialization code allocates substantial amounts of GC'ed memory. */ /* But I don't know of a better solution. */ - /* This can still deadlock if the client explicitly starts a GC */ - /* during the dlopen. He shouldn't do that. */ - static GC_bool disable_gc_for_dlopen() + static void disable_gc_for_dlopen() { - GC_bool result; LOCK(); - result = GC_dont_gc; while (GC_incremental && GC_collection_in_progress()) { GC_collect_a_little_inner(1000); } - GC_dont_gc = TRUE; + ++GC_dont_gc; UNLOCK(); - return(result); } /* Redefine dlopen to guarantee mutual exclusion with */ @@ -74,10 +70,9 @@ #endif { void * result; - GC_bool dont_gc_save; # ifndef USE_PROC_FOR_LIBRARIES - dont_gc_save = disable_gc_for_dlopen(); + disable_gc_for_dlopen(); # endif # ifdef GC_USE_LD_WRAP result = (void *)__real_dlopen(path, mode); @@ -85,7 +80,7 @@ result = dlopen(path, mode); # endif # ifndef USE_PROC_FOR_LIBRARIES - GC_dont_gc = dont_gc_save; + GC_enable(); /* undoes disable_gc_for_dlopen */ # endif return(result); } diff --git a/if_mach.c b/if_mach.c index fd6009e..3dcccf2 100644 --- a/if_mach.c +++ b/if_mach.c @@ -14,7 +14,7 @@ char ** envp; if (strcmp(MACH_TYPE, argv[1]) != 0) return(0); if (strcmp(OS_TYPE, "") != 0 && strcmp(argv[2], "") != 0 && strcmp(OS_TYPE, argv[2]) != 0) return(0); - printf("^^^^Starting command^^^^\n"); + fprintf(stderr, "^^^^Starting command^^^^\n"); fflush(stdout); execvp(argv[3], argv+3); perror("Couldn't execute"); diff --git a/include/gc.h b/include/gc.h index 57d5ebd..0c9d19c 100644 --- a/include/gc.h +++ b/include/gc.h @@ -226,8 +226,14 @@ GC_API void (* GC_finalizer_notifier)(); /* thread, which will call GC_invoke_finalizers */ /* in response. */ -GC_API int GC_dont_gc; /* Dont collect unless explicitly requested, e.g. */ - /* because it's not safe. */ +GC_API int GC_dont_gc; /* != 0 ==> Dont collect. In versions 7.2a1+, */ + /* this overrides explicit GC_gcollect() calls. */ + /* Used as a counter, so that nested enabling */ + /* and disabling work correctly. Should */ + /* normally be updated with GC_enable() and */ + /* GC_disable() calls. */ + /* Direct assignment to GC_dont_gc is */ + /* deprecated. */ GC_API int GC_dont_expand; /* Dont expand heap unless explicitly requested */ @@ -475,9 +481,18 @@ GC_API size_t GC_get_free_bytes GC_PROTO((void)); GC_API size_t GC_get_bytes_since_gc GC_PROTO((void)); /* Return the total number of bytes allocated in this process. */ -/* Never decreases. */ +/* Never decreases, except due to wrapping. */ GC_API size_t GC_get_total_bytes GC_PROTO((void)); +/* Disable garbage collection. Even GC_gcollect calls will be */ +/* ineffective. */ +GC_API void GC_disable GC_PROTO((void)); + +/* Reenable garbage collection. GC_diable() and GC_enable() calls */ +/* nest. Garbage collection is enabled if the number of calls to both */ +/* both functions is equal. */ +GC_API void GC_enable GC_PROTO((void)); + /* Enable incremental/generational collection. */ /* Not advisable unless dirty bits are */ /* available or most heap objects are */ @@ -533,6 +548,42 @@ GC_API GC_PTR GC_malloc_atomic_ignore_off_page GC_PROTO((size_t lb)); # define GC_RETURN_ADDR (GC_word)__return_address #endif +#ifdef __linux__ +# include +# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \ + && !defined(__ia64__) +# define GC_HAVE_BUILTIN_BACKTRACE +# define GC_CAN_SAVE_CALL_STACKS +# endif +# if defined(__i386__) || defined(__x86_64__) +# define GC_CAN_SAVE_CALL_STACKS +# endif +#endif + +#if defined(__sparc__) +# define GC_CAN_SAVE_CALL_STACKS +#endif + +/* If we're on an a platform on which we can't save call stacks, but */ +/* gcc is normally used, we go ahead and define GC_ADD_CALLER. */ +/* We make this decision independent of whether gcc is actually being */ +/* used, in order to keep the interface consistent, and allow mixing */ +/* of compilers. */ +/* This may also be desirable if it is possible but expensive to */ +/* retrieve the call chain. */ +#if (defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) \ + || defined(__FreeBSD__)) & !defined(GC_CAN_SAVE_CALL_STACKS) +# define GC_ADD_CALLER +# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) + /* gcc knows how to retrieve return address, but we don't know */ + /* how to generate call stacks. */ +# define GC_RETURN_ADDR (GC_word)__builtin_return_address(0) +# else + /* Just pass 0 for gcc compatibility. */ +# define GC_RETURN_ADDR 0 +# endif +#endif + #ifdef GC_ADD_CALLER # define GC_EXTRAS GC_RETURN_ADDR, __FILE__, __LINE__ # define GC_EXTRA_PARAMS GC_word ra, GC_CONST char * s, int i @@ -770,6 +821,10 @@ GC_API int GC_invoke_finalizers GC_PROTO((void)); typedef void (*GC_warn_proc) GC_PROTO((char *msg, GC_word arg)); GC_API GC_warn_proc GC_set_warn_proc GC_PROTO((GC_warn_proc p)); /* Returns old warning procedure. */ + +GC_API GC_word GC_set_free_space_divisor GC_PROTO((GC_word value)); + /* Set free_space_divisor. See above for definition. */ + /* Returns old value. */ /* The following is intended to be used by a higher level */ /* (e.g. Java-like) finalization facility. It is expected */ diff --git a/include/gc_mark.h b/include/gc_mark.h index 0856d16..9ddba2c 100644 --- a/include/gc_mark.h +++ b/include/gc_mark.h @@ -129,7 +129,9 @@ extern GC_PTR GC_greatest_plausible_heap_addr; /* be reserved for exceptional cases. That will ensure that */ /* performance of this call is not extremely performance critical. */ /* (Otherwise we would need to inline GC_mark_and_push completely, */ -/* which would tie the client code to a fixed colllector version.) */ +/* which would tie the client code to a fixed collector version.) */ +/* Note that mark procedures should explicitly call FIXUP_POINTER() */ +/* if required. */ struct GC_ms_entry *GC_mark_and_push GC_PROTO((GC_PTR obj, struct GC_ms_entry * mark_stack_ptr, diff --git a/include/gc_typed.h b/include/gc_typed.h index 2e0598f..bdbb82b 100644 --- a/include/gc_typed.h +++ b/include/gc_typed.h @@ -29,14 +29,21 @@ # include "gc.h" # endif +#ifdef __cplusplus + extern "C" { +#endif typedef GC_word * GC_bitmap; /* The least significant bit of the first word is one if */ /* the first word in the object may be a pointer. */ +# define GC_WORDSZ (8*sizeof(GC_word)) # define GC_get_bit(bm, index) \ - (((bm)[divWORDSZ(index)] >> modWORDSZ(index)) & 1) + (((bm)[index/GC_WORDSZ] >> (index%GC_WORDSZ)) & 1) # define GC_set_bit(bm, index) \ - (bm)[divWORDSZ(index)] |= (word)1 << modWORDSZ(index) + (bm)[index/GC_WORDSZ] |= ((GC_word)1 << (index%GC_WORDSZ)) +# define GC_WORD_OFFSET(t, f) (offsetof(t,f)/sizeof(GC_word)) +# define GC_WORD_LEN(t) (sizeof(t)/ sizeof(GC_word)) +# define GC_BITMAP_SIZE(t) ((GC_WORD_LEN(t) + GC_WORDSZ-1)/GC_WORDSZ) typedef GC_word GC_descr; @@ -57,6 +64,16 @@ GC_API GC_descr GC_make_descriptor GC_PROTO((GC_bitmap bm, size_t len)); /* is intended to be called once per type, not once */ /* per allocation. */ +/* It is possible to generate a descriptor for a C type T with */ +/* word aligned pointer fields f1, f2, ... as follows: */ +/* */ +/* GC_descr T_descr; +/* GC_word T_bitmap[GC_BITMAP_SIZE(T)] = {0}; */ +/* GC_set_bit(T_bitmap, GC_WORD_OFFSET(T,f1)); */ +/* GC_set_bit(T_bitmap, GC_WORD_OFFSET(T,f2)); */ +/* ... */ +/* T_descr = GC_make_descriptor(T_bitmap, GC_WORD_LEN(T)); */ + GC_API GC_PTR GC_malloc_explicitly_typed GC_PROTO((size_t size_in_bytes, GC_descr d)); /* Allocate an object whose layout is described by d. */ @@ -79,15 +96,18 @@ GC_API GC_PTR GC_calloc_explicitly_typed /* Returned object is cleared. */ #ifdef GC_DEBUG -# define GC_MALLOC_EXPLICTLY_TYPED(bytes, d) GC_MALLOC(bytes) -# define GC_CALLOC_EXPLICTLY_TYPED(n, bytes, d) GC_MALLOC(n*bytes) +# define GC_MALLOC_EXPLICITLY_TYPED(bytes, d) GC_MALLOC(bytes) +# define GC_CALLOC_EXPLICITLY_TYPED(n, bytes, d) GC_MALLOC(n*bytes) #else -# define GC_MALLOC_EXPLICTLY_TYPED(bytes, d) \ +# define GC_MALLOC_EXPLICITLY_TYPED(bytes, d) \ GC_malloc_explicitly_typed(bytes, d) -# define GC_CALLOC_EXPLICTLY_TYPED(n, bytes, d) \ +# define GC_CALLOC_EXPLICITLY_TYPED(n, bytes, d) \ GC_calloc_explicitly_typed(n, bytes, d) #endif /* !GC_DEBUG */ +#ifdef __cplusplus + } /* matches extern "C" */ +#endif #endif /* _GC_TYPED_H */ diff --git a/include/private/gc_locks.h b/include/private/gc_locks.h index 6133343..35c3716 100644 --- a/include/private/gc_locks.h +++ b/include/private/gc_locks.h @@ -157,7 +157,7 @@ : "=&r"(oldval), "=p"(addr) : "r"(temp), "1"(addr) : "memory"); - return (int)oldval; + return oldval; } # define GC_TEST_AND_SET_DEFINED inline static void GC_clear(volatile unsigned int *addr) { @@ -212,6 +212,19 @@ } # define GC_TEST_AND_SET_DEFINED # endif /* ARM32 */ +# ifdef S390 + inline static int GC_test_and_set(volatile unsigned int *addr) { + int ret; + __asm__ __volatile__ ( + " l %0,0(%2)\n" + "0: cs %0,%1,0(%2)\n" + " jl 0b" + : "=&d" (ret) + : "d" (1), "a" (addr) + : "cc", "memory"); + return ret; + } +# endif # endif /* __GNUC__ */ # if (defined(ALPHA) && !defined(__GNUC__)) # ifndef OSF1 @@ -385,6 +398,27 @@ # define GC_memory_barrier() asm("mb") # endif /* !__GNUC__ */ # endif /* ALPHA */ +# if defined(S390) +# if !defined(GENERIC_COMPARE_AND_SWAP) + inline static GC_bool GC_compare_and_exchange(volatile C_word *addr, + GC_word old, GC_word new_val) + { + int retval; + __asm__ __volatile__ ( +# ifndef __s390x__ + " cs %1,%2,0(%3)\n" +# else + " csg %1,%2,0(%3)\n" +# endif + " ipm %0\n" + " srl %0,28\n" + : "=&d" (retval), "+d" (old) + : "d" (new_val), "a" (addr) + : "cc", "memory"); + return retval == 0; + } +# endif +# endif # if !defined(GENERIC_COMPARE_AND_SWAP) /* Returns the original value of *addr. */ inline static GC_word GC_atomic_add(volatile GC_word *addr, diff --git a/include/private/gc_pmark.h b/include/private/gc_pmark.h index cf85d4d..c109738 100644 --- a/include/private/gc_pmark.h +++ b/include/private/gc_pmark.h @@ -281,21 +281,39 @@ exit_label: ; \ /* * Push a single value onto mark stack. Mark from the object pointed to by p. + * Invoke FIXUP_POINTER(p) before any further processing. * P is considered valid even if it is an interior pointer. * Previously marked objects are not pushed. Hence we make progress even * if the mark stack overflows. */ -# define GC_PUSH_ONE_STACK(p, source) \ - if ((ptr_t)(p) >= (ptr_t)GC_least_plausible_heap_addr \ + +# if NEED_FIXUP_POINTER + /* Try both the raw version and the fixed up one. */ +# define GC_PUSH_ONE_STACK(p, source) \ + if ((ptr_t)(p) >= (ptr_t)GC_least_plausible_heap_addr \ && (ptr_t)(p) < (ptr_t)GC_greatest_plausible_heap_addr) { \ PUSH_ONE_CHECKED_STACK(p, source); \ - } + } \ + FIXUP_POINTER(p); \ + if ((ptr_t)(p) >= (ptr_t)GC_least_plausible_heap_addr \ + && (ptr_t)(p) < (ptr_t)GC_greatest_plausible_heap_addr) { \ + PUSH_ONE_CHECKED_STACK(p, source); \ + } +# else /* !NEED_FIXUP_POINTER */ +# define GC_PUSH_ONE_STACK(p, source) \ + if ((ptr_t)(p) >= (ptr_t)GC_least_plausible_heap_addr \ + && (ptr_t)(p) < (ptr_t)GC_greatest_plausible_heap_addr) { \ + PUSH_ONE_CHECKED_STACK(p, source); \ + } +# endif + /* * As above, but interior pointer recognition as for * normal for heap pointers. */ # define GC_PUSH_ONE_HEAP(p,source) \ + FIXUP_POINTER(p); \ if ((ptr_t)(p) >= (ptr_t)GC_least_plausible_heap_addr \ && (ptr_t)(p) < (ptr_t)GC_greatest_plausible_heap_addr) { \ GC_mark_stack_top = GC_mark_and_push( \ diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index cc36317..d597155 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -1413,6 +1413,11 @@ GC_bool GC_is_tmp_root GC_PROTO((ptr_t p)); # endif void GC_register_dynamic_libraries GC_PROTO((void)); /* Add dynamic library data sections to the root set. */ + +GC_bool GC_register_main_static_data GC_PROTO((void)); + /* We need to register the main data segment. Returns */ + /* TRUE unless this is done implicitly as part of */ + /* dynamic library registration. */ /* Machine dependent startup routines */ ptr_t GC_get_stack_base GC_PROTO((void)); /* Cold end of stack */ @@ -1664,6 +1669,10 @@ extern void (*GC_print_heap_obj) GC_PROTO((ptr_t p)); /* If possible print s followed by a more */ /* detailed description of the object */ /* referred to by p. */ +#if defined(LINUX) && defined(__ELF__) && !defined(SMALL_CONFIG) + void GC_print_address_map GC_PROTO((void)); + /* Print an address map of the process. */ +#endif extern GC_bool GC_have_errors; /* We saw a smashed or leaked object. */ /* Call error printing routine */ diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index e6cf91e..18bf9ff 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -392,7 +392,7 @@ # define mach_type_known # endif # if defined(__s390__) && defined(LINUX) -# define S370 +# define S390 # define mach_type_known # endif # if defined(__GNU__) @@ -441,7 +441,8 @@ /* (CX_UX and DGUX) */ /* S370 ==> 370-like machine */ /* running Amdahl UTS4 */ - /* or a 390 running LINUX */ + /* S390 ==> 390-like machine */ + /* running LINUX */ /* ARM32 ==> Intel StrongARM */ /* IA64 ==> Intel IPF */ /* (e.g. Itanium) */ @@ -698,7 +699,9 @@ # define ALIGNMENT 4 /* Guess. Can someone verify? */ /* This was 2, but that didn't sound right. */ # define OS_TYPE "LINUX" -# define HEURISTIC1 + /* HEURISTIC1 has been reliably reported to fail for a 32-bit */ + /* executable on a 64 bit kernel. */ +# define LINUX_STACKBOTTOM # define DYNAMIC_LOADING # undef STACK_GRAN # define STACK_GRAN 0x10000000 @@ -714,7 +717,8 @@ # define DATASTART ((ptr_t) get_etext()) # define STACKBOTTOM ((ptr_t) 0xc0000000) # define DATAEND /* not needed */ -# define MPROTECT_VDB +/* # define MPROTECT_VDB -- There is some evidence that this breaks + * on some minor versions of MACOSX. In theory, it should be OK */ # include # define GETPAGESIZE() getpagesize() # endif @@ -777,8 +781,8 @@ # define OS_TYPE "SUNOS5" extern int _etext[]; extern int _end[]; - extern char * GC_SysVGetDataStart(); -# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext) + extern ptr_t GC_SysVGetDataStart(); +# define DATASTART GC_SysVGetDataStart(0x10000, _etext) # define DATAEND (_end) # if !defined(USE_MMAP) && defined(REDIRECT_MALLOC) # define USE_MMAP @@ -832,9 +836,9 @@ # endif # ifdef DRSNX # define OS_TYPE "DRSNX" - extern char * GC_SysVGetDataStart(); + extern ptr_t GC_SysVGetDataStart(); extern int etext[]; -# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, etext) +# define DATASTART GC_SysVGetDataStart(0x10000, etext) # define MPROTECT_VDB # define STACKBOTTOM ((ptr_t) 0xdfff0000) # define DYNAMIC_LOADING @@ -850,12 +854,13 @@ extern int _etext[]; # define DATAEND (_end) # define SVR4 + extern ptr_t GC_SysVGetDataStart(); # ifdef __arch64__ -# define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext) +# define DATASTART GC_SysVGetDataStart(0x100000, _etext) /* libc_stack_end is not set reliably for sparc64 */ # define STACKBOTTOM ((ptr_t) 0x80000000000ULL) # else -# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext) +# define DATASTART GC_SysVGetDataStart(0x10000, _etext) # define LINUX_STACKBOTTOM # endif # endif @@ -907,7 +912,7 @@ # ifdef SUNOS5 # define OS_TYPE "SUNOS5" extern int _etext[], _end[]; - extern char * GC_SysVGetDataStart(); + extern ptr_t GC_SysVGetDataStart(); # define DATASTART GC_SysVGetDataStart(0x1000, _etext) # define DATAEND (_end) /* # define STACKBOTTOM ((ptr_t)(_start)) worked through 2.7, */ @@ -955,7 +960,7 @@ # ifdef DGUX # define OS_TYPE "DGUX" extern int _etext, _end; - extern char * GC_SysVGetDataStart(); + extern ptr_t GC_SysVGetDataStart(); # define DATASTART GC_SysVGetDataStart(0x1000, &_etext) # define DATAEND (&_end) # define STACK_GROWS_DOWN @@ -1118,7 +1123,8 @@ # define DYNAMIC_LOADING # endif extern char etext[]; -# define DATASTART ((ptr_t)(etext)) + extern char * GC_FreeBSDGetDataStart(); +# define DATASTART GC_FreeBSDGetDataStart(0x1000, &etext) # endif # ifdef NETBSD # define OS_TYPE "NETBSD" @@ -1565,13 +1571,15 @@ # endif # ifdef DGUX # define OS_TYPE "DGUX" - extern char * GC_SysVGetDataStart(); -# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, etext) + extern ptr_t GC_SysVGetDataStart(); +# define DATASTART GC_SysVGetDataStart(0x10000, etext) # endif # define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */ # endif # ifdef S370 + /* If this still works, and if anyone cares, this should probably */ + /* be moved to the S390 category. */ # define MACH_TYPE "S370" # define ALIGNMENT 4 /* Required by hardware */ # define USE_GENERIC_PUSH_REGS @@ -1580,17 +1588,34 @@ extern int etext[]; extern int _etext[]; extern int _end[]; - extern char * GC_SysVGetDataStart(); -# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext) + extern ptr_t GC_SysVGetDataStart(); +# define DATASTART GC_SysVGetDataStart(0x10000, _etext) # define DATAEND (_end) # define HEURISTIC2 # endif +# endif + +# ifdef S390 +# define MACH_TYPE "S390" +# define USE_GENERIC_PUSH_REGS +# ifndef __s390x__ +# define ALIGNMENT 4 +# define CPP_WORDSZ 32 +# else +# define ALIGNMENT 8 +# define CPP_WORDSZ 64 +# define HBLKSIZE 4096 +# endif # ifdef LINUX # define OS_TYPE "LINUX" -# define HEURISTIC1 +# define LINUX_STACKBOTTOM # define DYNAMIC_LOADING extern int __data_start[]; # define DATASTART ((ptr_t)(__data_start)) + extern int _end[]; +# define DATAEND (_end) +# define CACHE_LINE_SIZE 256 +# define GETPAGESIZE() 4096 # endif # endif @@ -1686,6 +1711,9 @@ # define MACH_TYPE "X86_64" # define ALIGNMENT 8 # define CPP_WORDSZ 64 +# ifndef HBLKSIZE +# define HBLKSIZE 4096 +# endif # define CACHE_LINE_SIZE 64 # define USE_GENERIC_PUSH_REGS # ifdef LINUX @@ -1831,6 +1859,15 @@ # define CACHE_LINE_SIZE 32 /* Wild guess */ # endif +# ifdef LINUX +# define REGISTER_LIBRARIES_EARLY + /* We sometimes use dl_iterate_phdr, which may acquire an internal */ + /* lock. This isn't safe after the world has stopped. So we must */ + /* call GC_register_dynamic_libraries before stopping the world. */ + /* For performance reasons, this may be beneficial on other */ + /* platforms as well, though it should be avoided in win32. */ +# endif /* LINUX */ + # if defined(SEARCH_FOR_DATA_START) && defined(GC_PRIVATE_H) extern ptr_t GC_data_start; # define DATASTART GC_data_start @@ -1872,47 +1909,37 @@ # if defined(HP_PA) || defined(M88K) || defined(POWERPC) && !defined(MACOSX) \ || defined(LINT) || defined(MSWINCE) || defined(ARM32) \ || (defined(I386) && defined(__LCC__)) - /* Use setjmp based hack to mark from callee-save registers. */ - /* The define should move to the individual platform */ - /* descriptions. */ + /* Use setjmp based hack to mark from callee-save registers. */ + /* The define should move to the individual platform */ + /* descriptions. */ # define USE_GENERIC_PUSH_REGS # endif # if defined(SPARC) # define ASM_CLEAR_CODE /* Stack clearing is crucial, and we */ - /* include assembly code to do it well. */ + /* include assembly code to do it well. */ # endif - /* Can we save call chain in objects for debugging? */ - /* SET NFRAMES (# of saved frames) and NARGS (#of args for each frame) */ - /* to reasonable values for the platform. */ - /* Set SAVE_CALL_CHAIN if we can. SAVE_CALL_COUNT can be specified at */ - /* build time, though we feel free to adjust it slightly. */ - /* Define NEED_CALLINFO if we either save the call stack or */ - /* GC_ADD_CALLER is defined. */ -#ifdef LINUX -# include -# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2 -# define HAVE_BUILTIN_BACKTRACE -# endif -#endif + /* Can we save call chain in objects for debugging? */ + /* SET NFRAMES (# of saved frames) and NARGS (#of args for each */ + /* frame) to reasonable values for the platform. */ + /* Set SAVE_CALL_CHAIN if we can. SAVE_CALL_COUNT can be specified */ + /* at build time, though we feel free to adjust it slightly. */ + /* Define NEED_CALLINFO if we either save the call stack or */ + /* GC_ADD_CALLER is defined. */ + /* GC_CAN_SAVE_CALL_STACKS is set in gc.h. */ #if defined(SPARC) -# define CAN_SAVE_CALL_STACKS # define CAN_SAVE_CALL_ARGS #endif #if (defined(I386) || defined(X86_64)) && defined(LINUX) /* SAVE_CALL_CHAIN is supported if the code is compiled to save */ /* frame pointers by default, i.e. no -fomit-frame-pointer flag. */ -# define CAN_SAVE_CALL_STACKS # define CAN_SAVE_CALL_ARGS #endif -#if defined(HAVE_BUILTIN_BACKTRACE) && !defined(CAN_SAVE_CALL_STACKS) -# define CAN_SAVE_CALL_STACKS -#endif # if defined(SAVE_CALL_COUNT) && !defined(GC_ADD_CALLER) \ - && defined(CAN_SAVE_CALL_STACKS) + && defined(GC_CAN_SAVE_CALL_STACKS) # define SAVE_CALL_CHAIN # endif # ifdef SAVE_CALL_CHAIN @@ -1941,6 +1968,25 @@ # define DBG_HDRS_ALL # endif +# if defined(POINTER_MASK) && !defined(POINTER_SHIFT) +# define POINTER_SHIFT 0 +# endif + +# if defined(POINTER_SHIFT) && !defined(POINTER_MASK) +# define POINTER_MASK ((GC_word)(-1)) +# endif + +# if !defined(FIXUP_POINTER) && defined(POINTER_MASK) +# define FIXUP_POINTER(p) (p) = ((p) & (POINTER_MASK) << POINTER_SHIFT) +# endif + +# if defined(FIXUP_POINTER) +# define NEED_FIXUP_POINTER 1 +# else +# define NEED_FIXUP_POINTER 0 +# define FIXUP_POINTER(p) +# endif + #ifdef GC_PRIVATE_H /* This relies on some type definitions from gc_priv.h, from */ /* where it's normally included. */ diff --git a/include/private/specific.h b/include/private/specific.h index 399f84f..d04e19f 100644 --- a/include/private/specific.h +++ b/include/private/specific.h @@ -85,7 +85,7 @@ static __inline__ void * PREFIXED(getspecific) (tsd * key) { unsigned hash_val = CACHE_HASH(qtid); tse * volatile * entry_ptr = key -> cache + hash_val; tse * entry = *entry_ptr; /* Must be loaded only once. */ - if (entry -> qtid == qtid) { + if (EXPECT(entry -> qtid == qtid, 1)) { GC_ASSERT(entry -> thread == pthread_self()); return entry -> value; } diff --git a/linux_threads.c b/linux_threads.c index efb4c54..b760ac4 100644 --- a/linux_threads.c +++ b/linux_threads.c @@ -754,6 +754,10 @@ volatile GC_thread GC_threads[THREAD_TABLE_SZ]; void GC_push_thread_structures GC_PROTO((void)) { GC_push_all((ptr_t)(GC_threads), (ptr_t)(GC_threads)+sizeof(GC_threads)); +# if defined(THREAD_LOCAL_ALLOC) && !defined(DBG_HDRS_ALL) + GC_push_all((ptr_t)(&GC_thread_key), + (ptr_t)(&GC_thread_key)+sizeof(&GC_thread_key)); +# endif } #ifdef THREAD_LOCAL_ALLOC @@ -1335,7 +1339,7 @@ void GC_thr_init() GC_retry_signals = FALSE; } # ifdef CONDPRINT - if (GC_print_stats) { + if (GC_print_stats && GC_retry_signals) { GC_printf0("Will retry suspend signal if necessary.\n"); } # endif diff --git a/mark.c b/mark.c index 8ca36f1..33f4ff8 100644 --- a/mark.c +++ b/mark.c @@ -571,6 +571,7 @@ mse * mark_stack_limit; while (descr != 0) { if ((signed_word)descr < 0) { current = *current_p; + FIXUP_POINTER(current); if ((ptr_t)current >= least_ha && (ptr_t)current < greatest_ha) { PREFETCH(current); HC_PUSH_CONTENTS((ptr_t)current, mark_stack_top, @@ -645,6 +646,7 @@ mse * mark_stack_limit; PREFETCH((ptr_t)limit - PREF_DIST*CACHE_LINE_SIZE); GC_ASSERT(limit >= current_p); deferred = *limit; + FIXUP_POINTER(deferred); limit = (word *)((char *)limit - ALIGNMENT); if ((ptr_t)deferred >= least_ha && (ptr_t)deferred < greatest_ha) { PREFETCH(deferred); @@ -654,6 +656,7 @@ mse * mark_stack_limit; /* Unroll once, so we don't do too many of the prefetches */ /* based on limit. */ deferred = *limit; + FIXUP_POINTER(deferred); limit = (word *)((char *)limit - ALIGNMENT); if ((ptr_t)deferred >= least_ha && (ptr_t)deferred < greatest_ha) { PREFETCH(deferred); @@ -668,6 +671,7 @@ mse * mark_stack_limit; /* Since HC_PUSH_CONTENTS expands to a lot of code, */ /* we don't. */ current = *current_p; + FIXUP_POINTER(current); PREFETCH((ptr_t)current_p + PREF_DIST*CACHE_LINE_SIZE); if ((ptr_t)current >= least_ha && (ptr_t)current < greatest_ha) { /* Prefetch the contents of the object we just pushed. It's */ @@ -1346,8 +1350,8 @@ ptr_t top; # define GC_least_plausible_heap_addr least_ha if (top == 0) return; - /* check all pointers in range and put in push if they appear */ - /* to be valid. */ + /* check all pointers in range and push if they appear */ + /* to be valid. */ lim = t - 1 /* longword */; for (p = b; p <= lim; p = (word *)(((char *)p) + ALIGNMENT)) { q = *p; @@ -1370,7 +1374,7 @@ ptr_t bottom; ptr_t top; ptr_t cold_gc_frame; { - if (GC_all_interior_pointers) { + if (!NEED_FIXUP_POINTER && GC_all_interior_pointers) { # define EAGER_BYTES 1024 /* Push the hot end of the stack eagerly, so that register values */ /* saved inside GC frames are marked before they disappear. */ @@ -1379,6 +1383,7 @@ ptr_t cold_gc_frame; GC_push_all_stack(bottom, top); return; } + GC_ASSERT(bottom <= cold_gc_frame && cold_gc_frame <= top); # ifdef STACK_GROWS_DOWN GC_push_all(cold_gc_frame - sizeof(ptr_t), top); GC_push_all_eager(bottom, cold_gc_frame); @@ -1399,7 +1404,7 @@ void GC_push_all_stack(bottom, top) ptr_t bottom; ptr_t top; { - if (GC_all_interior_pointers) { + if (!NEED_FIXUP_POINTER && GC_all_interior_pointers) { GC_push_all(bottom, top); } else { GC_push_all_eager(bottom, top); diff --git a/mark_rts.c b/mark_rts.c index 628cba2..f663dcd 100644 --- a/mark_rts.c +++ b/mark_rts.c @@ -506,6 +506,17 @@ void GC_push_gc_structures GC_PROTO((void)) void GC_mark_thread_local_free_lists(); #endif +void GC_cond_register_dynamic_libraries() +{ +# if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || defined(MSWINCE) \ + || defined(PCR)) && !defined(SRC_M3) + GC_remove_tmp_roots(); + if (!GC_no_dls) GC_register_dynamic_libraries(); +# else + GC_no_dls = TRUE; +# endif +} + /* * Call the mark routines (GC_tl_push for a single pointer, GC_push_conditional * on groups of pointers) on every top level accessible pointer. @@ -519,19 +530,20 @@ void GC_push_roots(all, cold_gc_frame) GC_bool all; ptr_t cold_gc_frame; { - register int i; + int i; + int kind; /* * Next push static data. This must happen early on, since it's * not robust against mark stack overflow. */ - /* Reregister dynamic libraries, in case one got added. */ -# if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || defined(MSWINCE) \ - || defined(PCR)) && !defined(SRC_M3) - GC_remove_tmp_roots(); - if (!GC_no_dls) GC_register_dynamic_libraries(); -# else - GC_no_dls = TRUE; + /* Reregister dynamic libraries, in case one got added. */ + /* There is some argument for doing this as late as possible, */ + /* especially on win32, where it can change asynchronously. */ + /* In those cases, we do it here. But on other platforms, it's */ + /* not safe with the world stopped, so we do it earlier. */ +# if !defined(REGISTER_LIBRARIES_EARLY) + GC_cond_register_dynamic_libraries(); # endif /* Mark everything in static data areas */ @@ -541,6 +553,18 @@ ptr_t cold_gc_frame; GC_static_roots[i].r_end, all); } + /* Mark all free list header blocks, if those were allocated from */ + /* the garbage collected heap. This makes sure they don't */ + /* disappear if we are not marking from static data. It also */ + /* saves us the trouble of scanning them, and possibly that of */ + /* marking the freelists. */ + for (kind = 0; kind < GC_n_kinds; kind++) { + GC_PTR base = GC_base(GC_obj_kinds[kind].ok_freelist); + if (0 != base) { + GC_set_mark_bit(base); + } + } + /* Mark from GC internal roots if those might otherwise have */ /* been excluded. */ if (GC_no_dls || roots_were_cleared) { diff --git a/misc.c b/misc.c index 2d6421e..9cda9a2 100644 --- a/misc.c +++ b/misc.c @@ -77,6 +77,14 @@ #undef STACKBASE #endif +/* Dont unnecessarily call GC_register_main_static_data() in case */ +/* dyn_load.c isn't linked in. */ +#ifdef DYNAMIC_LOADING +# define GC_REGISTER_MAIN_STATIC_DATA() GC_register_main_static_data() +#else +# define GC_REGISTER_MAIN_STATIC_DATA() TRUE +#endif + GC_FAR struct _GC_arrays GC_arrays /* = { 0 } */; @@ -507,6 +515,10 @@ void GC_exit_check GC_PROTO((void)) GC_gcollect(); } +#ifdef SEARCH_FOR_DATA_START + extern void GC_init_linux_data_start GC_PROTO((void)); +#endif + void GC_init_inner() { # if !defined(THREADS) && defined(GC_ASSERTIONS) @@ -524,9 +536,11 @@ void GC_init_inner() if (0 != GETENV("GC_PRINT_STATS")) { GC_print_stats = 1; } - if (0 != GETENV("GC_DUMP_REGULARLY")) { - GC_dump_regularly = 1; - } +# ifndef NO_DEBUGGING + if (0 != GETENV("GC_DUMP_REGULARLY")) { + GC_dump_regularly = 1; + } +# endif if (0 != GETENV("GC_FIND_LEAK")) { GC_find_leak = 1; # ifdef __STDC__ @@ -589,7 +603,7 @@ void GC_init_inner() GC_init_win32(); # endif # if defined(SEARCH_FOR_DATA_START) - GC_init_linux_data_start(); + if (GC_REGISTER_MAIN_STATIC_DATA()) GC_init_linux_data_start(); # endif # if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__) GC_init_netbsd_elf(); @@ -608,6 +622,16 @@ void GC_init_inner() # if defined(LINUX) && defined(IA64) GC_register_stackbottom = GC_get_register_stack_base(); # endif + } else { +# if defined(LINUX) && defined(IA64) + if (GC_register_stackbottom == 0) { + WARN("GC_register_stackbottom should be set with GC_stackbottom", 0); + /* The following is likely to fail, since we rely on */ + /* alignment properties that may not hold with a user set */ + /* GC_stackbottom. */ + GC_register_stackbottom = GC_get_register_stack_base(); + } +# endif } # endif GC_ASSERT(sizeof (ptr_t) == sizeof(word)); @@ -636,7 +660,7 @@ void GC_init_inner() /* Add initial guess of root sets. Do this first, since sbrk(0) */ /* might be used. */ - GC_register_data_segments(); + if (GC_REGISTER_MAIN_STATIC_DATA()) GC_register_data_segments(); GC_init_headers(); GC_bl_init(); GC_mark_init(); @@ -954,6 +978,17 @@ GC_warn_proc GC_current_warn_proc = GC_default_warn_proc; return(result); } +# if defined(__STDC__) || defined(__cplusplus) + GC_word GC_set_free_space_divisor (GC_word value) +# else + GC_word GC_set_free_space_divisor (value) + GC_word value; +# endif +{ + GC_word old = GC_free_space_divisor; + GC_free_space_divisor = value; + return old; +} #ifndef PCR void GC_abort(msg) @@ -980,17 +1015,18 @@ GC_CONST char * msg; } #endif - -/* Needed by SRC_M3, gcj, and should perhaps be the official interface */ -/* to GC_dont_gc. */ void GC_enable() { + LOCK(); GC_dont_gc--; + UNLOCK(); } void GC_disable() { + LOCK(); GC_dont_gc++; + UNLOCK(); } #if !defined(NO_DEBUGGING) diff --git a/os_dep.c b/os_dep.c index 5e81154..1a7930a 100644 --- a/os_dep.c +++ b/os_dep.c @@ -80,12 +80,15 @@ # define NEED_FIND_LIMIT # endif -#ifdef NEED_FIND_LIMIT -# include -#endif - #if defined(FREEBSD) && defined(I386) # include +# if !defined(PCR) +# define NEED_FIND_LIMIT +# endif +#endif + +#ifdef NEED_FIND_LIMIT +# include #endif #ifdef AMIGA @@ -622,7 +625,8 @@ ptr_t GC_get_stack_base() } /* Return the first nonaddressible location > p (up) or */ - /* the smallest location q s.t. [q,p] is addressible (!up). */ + /* the smallest location q s.t. [q,p) is addressable (!up). */ + /* We assume that p (up) or p-1 (!up) is addressable. */ ptr_t GC_find_limit(p, up) ptr_t p; GC_bool up; @@ -666,6 +670,7 @@ ptr_t GC_get_stack_base() #include #include +#include # define STAT_SKIP 27 /* Number of fields preceding startstack */ /* field in /proc/self/stat */ @@ -939,9 +944,10 @@ void GC_register_data_segments() /* invalid result. Under NT, GC_register_data_segments is a noop and */ /* all real work is done by GC_register_dynamic_libraries. Under */ /* win32s, we cannot find the data segments associated with dll's. */ - /* We rgister the main data segment here. */ + /* We register the main data segment here. */ # ifdef __GCC__ - GC_bool GC_no_win32_dlls = TRUE; /* GCC can't do SEH, so we can't use VirtualQuery */ + GC_bool GC_no_win32_dlls = TRUE; + /* GCC can't do SEH, so we can't use VirtualQuery */ # else GC_bool GC_no_win32_dlls = FALSE; # endif @@ -976,36 +982,102 @@ void GC_register_data_segments() return(p); } # endif + +# ifndef REDIRECT_MALLOC + /* We maintain a linked list of AllocationBase values that we know */ + /* correspond to malloc heap sections. Currently this is only called */ + /* during a GC. But there is some hope that for long running */ + /* programs we will eventually see most heap sections. */ + + /* In the long run, it would be more reliable to occasionally walk */ + /* the malloc heap with HeapWalk on the default heap. But that */ + /* apparently works only for NT-based Windows. */ + + /* In the long run, a better data structure would also be nice ... */ + struct GC_malloc_heap_list { + void * allocation_base; + struct GC_malloc_heap_list *next; + } *GC_malloc_heap_l = 0; + + /* Is p the base of one of the malloc heap sections we already know */ + /* about? */ + GC_bool GC_is_malloc_heap_base(ptr_t p) + { + struct GC_malloc_heap_list *q = GC_malloc_heap_l; + + while (0 != q) { + if (q -> allocation_base == p) return TRUE; + q = q -> next; + } + return FALSE; + } + + void *GC_get_allocation_base(void *p) + { + MEMORY_BASIC_INFORMATION buf; + DWORD result = VirtualQuery(p, &buf, sizeof(buf)); + if (result != sizeof(buf)) { + ABORT("Weird VirtualQuery result"); + } + return buf.AllocationBase; + } + + size_t GC_max_root_size = 100000; /* Appr. largest root size. */ + + void GC_add_current_malloc_heap() + { + struct GC_malloc_heap_list *new_l = + malloc(sizeof(struct GC_malloc_heap_list)); + void * candidate = GC_get_allocation_base(new_l); + + if (new_l == 0) return; + if (GC_is_malloc_heap_base(candidate)) { + /* Try a little harder to find malloc heap. */ + size_t req_size = 10000; + do { + void *p = malloc(req_size); + if (0 == p) { free(new_l); return; } + candidate = GC_get_allocation_base(p); + free(p); + req_size *= 2; + } while (GC_is_malloc_heap_base(candidate) + && req_size < GC_max_root_size/10 && req_size < 500000); + if (GC_is_malloc_heap_base(candidate)) { + free(new_l); return; + } + } +# ifdef CONDPRINT + if (GC_print_stats) + GC_printf1("Found new system malloc AllocationBase at 0x%lx\n", + candidate); +# endif + new_l -> allocation_base = candidate; + new_l -> next = GC_malloc_heap_l; + GC_malloc_heap_l = new_l; + } +# endif /* REDIRECT_MALLOC */ /* Is p the start of either the malloc heap, or of one of our */ /* heap sections? */ GC_bool GC_is_heap_base (ptr_t p) { - register unsigned i; + unsigned i; # ifndef REDIRECT_MALLOC - static ptr_t malloc_heap_pointer = 0; + static word last_gc_no = -1; - if (0 == malloc_heap_pointer) { - MEMORY_BASIC_INFORMATION buf; - void *pTemp = malloc( 1 ); - register DWORD result = VirtualQuery(pTemp, &buf, sizeof(buf)); - - free( pTemp ); - - - if (result != sizeof(buf)) { - ABORT("Weird VirtualQuery result"); - } - malloc_heap_pointer = (ptr_t)(buf.AllocationBase); + if (last_gc_no != GC_gc_no) { + GC_add_current_malloc_heap(); + last_gc_no = GC_gc_no; } - if (p == malloc_heap_pointer) return(TRUE); + if (GC_root_size > GC_max_root_size) GC_max_root_size = GC_root_size; + if (GC_is_malloc_heap_base(p)) return TRUE; # endif for (i = 0; i < GC_n_heap_bases; i++) { - if (GC_heap_bases[i] == p) return(TRUE); + if (GC_heap_bases[i] == p) return TRUE; } - return(FALSE); + return FALSE ; } # ifdef MSWIN32 @@ -1055,7 +1127,7 @@ void GC_register_data_segments() # if (defined(SVR4) || defined(AUX) || defined(DGUX) \ || (defined(LINUX) && defined(SPARC))) && !defined(PCR) -char * GC_SysVGetDataStart(max_page_size, etext_addr) +ptr_t GC_SysVGetDataStart(max_page_size, etext_addr) int max_page_size; int * etext_addr; { @@ -1081,10 +1153,43 @@ int * etext_addr; /* string constants in the text segment, but after etext. */ /* Use plan B. Note that we now know there is a gap between */ /* text and data segments, so plan A bought us something. */ - result = (char *)GC_find_limit((ptr_t)(DATAEND) - MIN_PAGE_SIZE, FALSE); + result = (char *)GC_find_limit((ptr_t)(DATAEND), FALSE); } - return((char *)result); + return((ptr_t)result); +} +# endif + +# if defined(FREEBSD) && defined(I386) && !defined(PCR) +/* Its unclear whether this should be identical to the above, or */ +/* whether it should apply to non-X86 architectures. */ +/* For now we don't assume that there is always an empty page after */ +/* etext. But in some cases there actually seems to be slightly more. */ +/* This also deals with holes between read-only data and writable data. */ +ptr_t GC_FreeBSDGetDataStart(max_page_size, etext_addr) +int max_page_size; +int * etext_addr; +{ + word text_end = ((word)(etext_addr) + sizeof(word) - 1) + & ~(sizeof(word) - 1); + /* etext rounded to word boundary */ + VOLATILE word next_page = (text_end + (word)max_page_size - 1) + & ~((word)max_page_size - 1); + VOLATILE ptr_t result = (ptr_t)text_end; + GC_setup_temporary_fault_handler(); + if (setjmp(GC_jmp_buf) == 0) { + /* Try reading at the address. */ + /* This should happen before there is another thread. */ + for (; next_page < (word)(DATAEND); next_page += (word)max_page_size) + *(VOLATILE char *)next_page; + GC_reset_fault_handler(); + } else { + GC_reset_fault_handler(); + /* As above, we go to plan B */ + result = GC_find_limit((ptr_t)(DATAEND), FALSE); + } + return(result); } + # endif @@ -1098,8 +1203,7 @@ int * etext_addr; void GC_register_data_segments() { -# if !defined(PCR) && !defined(SRC_M3) && !defined(NEXT) && !defined(MACOS) \ - && !defined(MACOSX) +# if !defined(PCR) && !defined(SRC_M3) && !defined(MACOS) # if defined(REDIRECT_MALLOC) && defined(GC_SOLARIS_THREADS) /* As of Solaris 2.3, the Solaris threads implementation */ /* allocates the data structure for the initial thread with */ @@ -1116,9 +1220,6 @@ void GC_register_data_segments() # endif # endif # endif -# if !defined(PCR) && (defined(NEXT) || defined(MACOSX)) - GC_add_roots_inner(DATASTART, (char *) get_end(), FALSE); -# endif # if defined(MACOS) { # if defined(THINK_C) @@ -1235,6 +1336,7 @@ word bytes; if (!initialized) { fd = open("/dev/zero", O_RDONLY); + fcntl(fd, F_SETFD, FD_CLOEXEC); initialized = TRUE; } if (bytes & (GC_page_size -1)) ABORT("Bad GET_MEM arg"); @@ -1532,6 +1634,7 @@ void GC_remap(ptr_t start, word bytes) } # else if (-1 == zero_descr) zero_descr = open("/dev/zero", O_RDWR); + fcntl(zero_descr, F_SETFD, FD_CLOEXEC); if (0 == start_addr) return; result = mmap(start_addr, len, PROT_READ | PROT_WRITE | OPT_PROT_EXEC, MAP_FIXED | MAP_PRIVATE, zero_descr, 0); @@ -2852,6 +2955,7 @@ void GC_dirty_init() } GC_proc_fd = syscall(SYS_ioctl, fd, PIOCOPENPD, 0); close(fd); + syscall(SYS_fcntl, GC_proc_fd, F_SETFD, FD_CLOEXEC); if (GC_proc_fd < 0) { ABORT("/proc ioctl failed"); } @@ -3156,17 +3260,6 @@ GC_bool is_ptrfree; /* callers. Ignore my frame and my callers frame. */ #ifdef LINUX -# include -# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2 -# define HAVE_BUILTIN_BACKTRACE -# ifdef IA64 -# define BUILTIN_BACKTRACE_BROKEN -# endif -# endif -#endif - -#include -#ifdef LINUX # include #endif @@ -3175,7 +3268,9 @@ GC_bool is_ptrfree; #ifdef SAVE_CALL_CHAIN #if NARGS == 0 && NFRAMES % 2 == 0 /* No padding */ \ - && defined(HAVE_BUILTIN_BACKTRACE) + && defined(GC_HAVE_BUILTIN_BACKTRACE) + +#include void GC_save_callers (info) struct callinfo info[NFRAMES]; @@ -3288,8 +3383,7 @@ struct callinfo info[NFRAMES]; # ifdef LINUX FILE *pipe; # endif -# if defined(HAVE_BUILTIN_BACKTRACE) && \ - !defined(BUILTIN_BACKTRACE_BROKEN) +# if defined(GC_HAVE_BUILTIN_BACKTRACE) char **sym_name = backtrace_symbols((void **)(&(info[i].ci_pc)), 1); char *name = sym_name[0]; @@ -3366,8 +3460,7 @@ struct callinfo info[NFRAMES]; } # endif /* LINUX */ GC_err_printf1("\t\t%s\n", name); -# if defined(HAVE_BUILTIN_BACKTRACE) && \ - !defined(BUILTIN_BACKTRACE_BROKEN) +# if defined(GC_HAVE_BUILTIN_BACKTRACE) free(sym_name); /* May call GC_free; that's OK */ # endif } @@ -3424,7 +3517,7 @@ void GC_print_address_map() if (result <= 0) ABORT("Couldn't read /proc/self/maps"); GC_err_write(maps_temp, result); } while (result == sizeof(maps_temp)); - + close(f); GC_err_printf0("---------- End address map ----------\n"); } diff --git a/tests/test.c b/tests/test.c index 51be6f5..0fd4830 100644 --- a/tests/test.c +++ b/tests/test.c @@ -376,6 +376,9 @@ sexpr x, y; sexpr reverse(x) sexpr x; { +# ifdef TEST_WITH_SYSTEM_MALLOC + malloc(100000); +# endif return( reverse1(x, nil) ); } diff --git a/tests/test_cpp.cc b/tests/test_cpp.cc index d6032b8..daa7b07 100644 --- a/tests/test_cpp.cc +++ b/tests/test_cpp.cc @@ -214,8 +214,8 @@ int APIENTRY WinMain( x = 0; # endif if (argc != 2 || (0 >= (n = atoi( argv[ 1 ] )))) { - GC_printf0( "usage: test_cpp number-of-iterations\n" ); - exit( 1 );} + GC_printf0( "usage: test_cpp number-of-iterations\nAssuming 10 iters\n" ); + n = 10;} for (iters = 1; iters <= n; iters++) { GC_printf1( "Starting iteration %d\n", iters ); diff --git a/typd_mlc.c b/typd_mlc.c index 0771700..a081c97 100644 --- a/typd_mlc.c +++ b/typd_mlc.c @@ -437,6 +437,7 @@ void GC_init_explicit_typing() for (; bm != 0; bm >>= 1, current_p++) { if (bm & 1) { current = *current_p; + FIXUP_POINTER(current); if ((ptr_t)current >= least_ha && (ptr_t)current <= greatest_ha) { PUSH_CONTENTS((ptr_t)current, mark_stack_ptr, mark_stack_limit, current_p, exit1); @@ -674,9 +675,9 @@ DCL_LOCK_STATE; if( !FASTLOCK_SUCCEEDED() || (op = *opp) == 0 ) { FASTUNLOCK(); op = (ptr_t)GENERAL_MALLOC((word)lb, GC_explicit_kind); - if (0 == op) return(0); + if (0 == op) return 0; # ifdef MERGE_SIZES - lw = GC_size_map[lb]; /* May have been uninitialized. */ + lw = GC_size_map[lb]; /* May have been uninitialized. */ # endif } else { *opp = obj_link(op); @@ -720,7 +721,7 @@ DCL_LOCK_STATE; FASTUNLOCK(); op = (ptr_t)GENERAL_MALLOC_IOP(lb, GC_explicit_kind); # ifdef MERGE_SIZES - lw = GC_size_map[lb]; /* May have been uninitialized. */ + lw = GC_size_map[lb]; /* May have been uninitialized. */ # endif } else { *opp = obj_link(op); diff --git a/version.h b/version.h index 554e2e2..1e61bcd 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define GC_VERSION_MAJOR 6 -#define GC_VERSION_MINOR 1 -#define GC_ALPHA_VERSION GC_NOT_ALPHA +#define GC_VERSION_MINOR 2 +#define GC_ALPHA_VERSION 3 # define GC_NOT_ALPHA 0xff diff --git a/win32_threads.c b/win32_threads.c index 1f9ab94..65822ee 100755 --- a/win32_threads.c +++ b/win32_threads.c @@ -808,8 +808,7 @@ int GC_pthread_detach(pthread_t thread) { #else /* - * This isn't generally safe, since DllMain is not premptible. - * If another thread holds the lock while this runs we're in trouble. + * We avoid acquiring locks here, since this doesn't seem to be preemptable. * Pontus Rydin suggests wrapping the thread start routine instead. */ BOOL WINAPI DllMain(HINSTANCE inst, ULONG reason, LPVOID reserved) -- 2.7.4