OSDN Git Service

PR target/42811
authordavek <davek@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 6 May 2010 16:20:53 +0000 (16:20 +0000)
committerdavek <davek@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 6 May 2010 16:20:53 +0000 (16:20 +0000)
* tests/staticrootstest.c: New test source file.
* tests/staticrootslib.c: New test library source file.
* Makefile.am (test_ldadd): New variable.
(gctest_LDADD): Use it.
(TESTS): Add leaktest, middletest and staticrootstest.
(check_PROGRAMS): Likewise.
(leaktest_SOURCES): New libtool variable definition.
(leaktest_LDADD): Likewise.
(leaktest_LDFLAGS): Likewise.
(leaktest_LINK): Likewise.
(middletest_SOURCES): Likewise.
(middletest_LDADD): Likewise.
(middletest_LDFLAGS): Likewise.
(middletest_LINK): Likewise.
(staticrootstest_SOURCES): Likewise.
(staticrootstest_LDADD): Likewise.
(staticrootstest_LDFLAGS): Likewise.
(staticrootstest_LINK): Likewise.
(check_LTLIBRARIES): Likewise.
(libstaticrootslib_la_SOURCES): Likewise.
(libstaticrootslib_la_LIBADD): Likewise.
(libstaticrootslib_la_LDFLAGS): Likewise.
(libstaticrootslib_la_DEPENDENCIES): Likewise.
* Makefile.in: Regenerate.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159115 138bc75d-0d04-0410-961f-82ee72b054a4

boehm-gc/ChangeLog
boehm-gc/Makefile.am
boehm-gc/Makefile.in
boehm-gc/tests/staticrootslib.c [new file with mode: 0644]
boehm-gc/tests/staticrootstest.c [new file with mode: 0644]

index 98a9aa3..25266c8 100644 (file)
@@ -1,3 +1,31 @@
+2010-05-06  Dave Korn  <dave.korn.cygwin@gmail.com>
+
+       PR target/42811
+       * tests/staticrootstest.c: New test source file.
+       * tests/staticrootslib.c: New test library source file.
+       * Makefile.am (test_ldadd): New variable.
+       (gctest_LDADD): Use it.
+       (TESTS): Add leaktest, middletest and staticrootstest.
+       (check_PROGRAMS): Likewise.
+       (leaktest_SOURCES): New libtool variable definition.
+       (leaktest_LDADD): Likewise.
+       (leaktest_LDFLAGS): Likewise.
+       (leaktest_LINK): Likewise.
+       (middletest_SOURCES): Likewise.
+       (middletest_LDADD): Likewise.
+       (middletest_LDFLAGS): Likewise.
+       (middletest_LINK): Likewise.
+       (staticrootstest_SOURCES): Likewise.
+       (staticrootstest_LDADD): Likewise.
+       (staticrootstest_LDFLAGS): Likewise.
+       (staticrootstest_LINK): Likewise.
+       (check_LTLIBRARIES): Likewise.
+       (libstaticrootslib_la_SOURCES): Likewise.
+       (libstaticrootslib_la_LIBADD): Likewise.
+       (libstaticrootslib_la_LDFLAGS): Likewise.
+       (libstaticrootslib_la_DEPENDENCIES): Likewise.
+       * Makefile.in: Regenerate.
+
 2010-04-02  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * Makefile.in: Regenerate.
index b074ac6..df8de1e 100644 (file)
@@ -48,14 +48,43 @@ libgcjgc_convenience_la_DEPENDENCIES = @addobjs@
 AM_CXXFLAGS = @GC_CFLAGS@
 AM_CFLAGS = @GC_CFLAGS@
 
+test_ldadd = libgcjgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
+
 check_PROGRAMS = gctest
 gctest_SOURCES = tests/test.c
-gctest_LDADD = libgcjgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
+gctest_LDADD = $(test_ldadd)
 gctest_LDFLAGS = -shared-libgcc
 gctest_LINK = $(LINK) $(gctest_LDFLAGS)
 TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
 TESTS = gctest
 
+TESTS += leaktest$(EXEEXT)
+check_PROGRAMS += leaktest
+leaktest_SOURCES = tests/leak_test.c
+leaktest_LDADD = $(test_ldadd)
+leaktest_LDFLAGS = -shared-libgcc
+leaktest_LINK = $(LINK) $(leaktest_LDFLAGS)
+
+TESTS += middletest$(EXEEXT)
+check_PROGRAMS += middletest
+middletest_SOURCES = tests/middle.c
+middletest_LDADD = $(test_ldadd)
+middletest_LDFLAGS = -shared-libgcc
+middletest_LINK = $(LINK) $(middletest_LDFLAGS)
+
+TESTS += staticrootstest$(EXEEXT)
+check_PROGRAMS += staticrootstest
+staticrootstest_SOURCES = tests/staticrootstest.c
+staticrootstest_LDADD = $(test_ldadd) libstaticrootslib.la
+staticrootstest_LDFLAGS = -shared-libgcc
+staticrootstest_LINK = $(LINK) $(staticrootstest_LDFLAGS)
+check_LTLIBRARIES = libstaticrootslib.la
+libstaticrootslib_la_SOURCES = tests/staticrootslib.c
+libstaticrootslib_la_LIBADD = libgcjgc_convenience.la
+libstaticrootslib_la_LDFLAGS = -version-info 1:2:0 -no-undefined \
+                               -rpath /nowhere -shared-libgcc
+libstaticrootslib_la_DEPENDENCIES = libgcjgc_convenience.la
+
 ## FIXME: we shouldn't have to do this, but automake forces us to.
 .s.lo:
 ## We use -Wp,-P to strip #line directives.  Irix `as' chokes on
index 25951a0..051f6ce 100644 (file)
@@ -35,8 +35,10 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-check_PROGRAMS = gctest$(EXEEXT)
-TESTS = gctest$(EXEEXT)
+check_PROGRAMS = gctest$(EXEEXT) leaktest$(EXEEXT) middletest$(EXEEXT) \
+       staticrootstest$(EXEEXT)
+TESTS = gctest$(EXEEXT) leaktest$(EXEEXT) middletest$(EXEEXT) \
+       staticrootstest$(EXEEXT)
 subdir = .
 DIST_COMMON = ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
        $(top_srcdir)/configure $(am__configure_deps) \
@@ -81,10 +83,26 @@ am_libgcjgc_convenience_la_OBJECTS = $(am__objects_2)
 libgcjgc_convenience_la_OBJECTS =  \
        $(am_libgcjgc_convenience_la_OBJECTS)
 am__dirstamp = $(am__leading_dot)dirstamp
+am_libstaticrootslib_la_OBJECTS = tests/staticrootslib.lo
+libstaticrootslib_la_OBJECTS = $(am_libstaticrootslib_la_OBJECTS)
+libstaticrootslib_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libstaticrootslib_la_LDFLAGS) $(LDFLAGS) -o $@
 am_gctest_OBJECTS = tests/test.$(OBJEXT)
 gctest_OBJECTS = $(am_gctest_OBJECTS)
-gctest_DEPENDENCIES = libgcjgc.la $(am__DEPENDENCIES_1) \
+am__DEPENDENCIES_2 = libgcjgc.la $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1)
+gctest_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_leaktest_OBJECTS = tests/leak_test.$(OBJEXT)
+leaktest_OBJECTS = $(am_leaktest_OBJECTS)
+leaktest_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_middletest_OBJECTS = tests/middle.$(OBJEXT)
+middletest_OBJECTS = $(am_middletest_OBJECTS)
+middletest_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_staticrootstest_OBJECTS = tests/staticrootstest.$(OBJEXT)
+staticrootstest_OBJECTS = $(am_staticrootstest_OBJECTS)
+staticrootstest_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+       libstaticrootslib.la
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
 depcomp =
 am__depfiles_maybe =
@@ -95,7 +113,9 @@ CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
 LTCCASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
        --mode=compile $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
 SOURCES = $(libgcjgc_la_SOURCES) $(libgcjgc_convenience_la_SOURCES) \
-       $(gctest_SOURCES)
+       $(libstaticrootslib_la_SOURCES) $(gctest_SOURCES) \
+       $(leaktest_SOURCES) $(middletest_SOURCES) \
+       $(staticrootstest_SOURCES)
 MULTISRCTOP = 
 MULTIBUILDTOP = 
 MULTIDIRS = 
@@ -289,11 +309,31 @@ libgcjgc_convenience_la_LIBADD = @addobjs@
 libgcjgc_convenience_la_DEPENDENCIES = @addobjs@
 AM_CXXFLAGS = @GC_CFLAGS@
 AM_CFLAGS = @GC_CFLAGS@
+test_ldadd = libgcjgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
 gctest_SOURCES = tests/test.c
-gctest_LDADD = libgcjgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
+gctest_LDADD = $(test_ldadd)
 gctest_LDFLAGS = -shared-libgcc
 gctest_LINK = $(LINK) $(gctest_LDFLAGS)
 TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
+leaktest_SOURCES = tests/leak_test.c
+leaktest_LDADD = $(test_ldadd)
+leaktest_LDFLAGS = -shared-libgcc
+leaktest_LINK = $(LINK) $(leaktest_LDFLAGS)
+middletest_SOURCES = tests/middle.c
+middletest_LDADD = $(test_ldadd)
+middletest_LDFLAGS = -shared-libgcc
+middletest_LINK = $(LINK) $(middletest_LDFLAGS)
+staticrootstest_SOURCES = tests/staticrootstest.c
+staticrootstest_LDADD = $(test_ldadd) libstaticrootslib.la
+staticrootstest_LDFLAGS = -shared-libgcc
+staticrootstest_LINK = $(LINK) $(staticrootstest_LDFLAGS)
+check_LTLIBRARIES = libstaticrootslib.la
+libstaticrootslib_la_SOURCES = tests/staticrootslib.c
+libstaticrootslib_la_LIBADD = libgcjgc_convenience.la
+libstaticrootslib_la_LDFLAGS = -version-info 1:2:0 -no-undefined \
+                               -rpath /nowhere -shared-libgcc
+
+libstaticrootslib_la_DEPENDENCIES = libgcjgc_convenience.la
 LTCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile \
        $(CC) $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) 
@@ -387,6 +427,15 @@ $(am__aclocal_m4_deps):
 threads.mk: $(top_builddir)/config.status $(srcdir)/threads.mk.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 
+clean-checkLTLIBRARIES:
+       -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+       @list='$(check_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
 clean-noinstLTLIBRARIES:
        -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
        @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
@@ -399,6 +448,12 @@ libgcjgc.la: $(libgcjgc_la_OBJECTS) $(libgcjgc_la_DEPENDENCIES)
        $(libgcjgc_la_LINK)  $(libgcjgc_la_OBJECTS) $(libgcjgc_la_LIBADD) $(LIBS)
 libgcjgc_convenience.la: $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_DEPENDENCIES) 
        $(LINK)  $(libgcjgc_convenience_la_OBJECTS) $(libgcjgc_convenience_la_LIBADD) $(LIBS)
+tests/$(am__dirstamp):
+       @$(MKDIR_P) tests
+       @: > tests/$(am__dirstamp)
+tests/staticrootslib.lo: tests/$(am__dirstamp)
+libstaticrootslib.la: $(libstaticrootslib_la_OBJECTS) $(libstaticrootslib_la_DEPENDENCIES) 
+       $(libstaticrootslib_la_LINK)  $(libstaticrootslib_la_OBJECTS) $(libstaticrootslib_la_LIBADD) $(LIBS)
 
 clean-checkPROGRAMS:
        @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
@@ -408,16 +463,30 @@ clean-checkPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
-tests/$(am__dirstamp):
-       @$(MKDIR_P) tests
-       @: > tests/$(am__dirstamp)
 tests/test.$(OBJEXT): tests/$(am__dirstamp)
 gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) 
        @rm -f gctest$(EXEEXT)
        $(gctest_LINK) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS)
+tests/leak_test.$(OBJEXT): tests/$(am__dirstamp)
+leaktest$(EXEEXT): $(leaktest_OBJECTS) $(leaktest_DEPENDENCIES) 
+       @rm -f leaktest$(EXEEXT)
+       $(leaktest_LINK) $(leaktest_OBJECTS) $(leaktest_LDADD) $(LIBS)
+tests/middle.$(OBJEXT): tests/$(am__dirstamp)
+middletest$(EXEEXT): $(middletest_OBJECTS) $(middletest_DEPENDENCIES) 
+       @rm -f middletest$(EXEEXT)
+       $(middletest_LINK) $(middletest_OBJECTS) $(middletest_LDADD) $(LIBS)
+tests/staticrootstest.$(OBJEXT): tests/$(am__dirstamp)
+staticrootstest$(EXEEXT): $(staticrootstest_OBJECTS) $(staticrootstest_DEPENDENCIES) 
+       @rm -f staticrootstest$(EXEEXT)
+       $(staticrootstest_LINK) $(staticrootstest_OBJECTS) $(staticrootstest_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
+       -rm -f tests/leak_test.$(OBJEXT)
+       -rm -f tests/middle.$(OBJEXT)
+       -rm -f tests/staticrootslib.$(OBJEXT)
+       -rm -f tests/staticrootslib.lo
+       -rm -f tests/staticrootstest.$(OBJEXT)
        -rm -f tests/test.$(OBJEXT)
 
 distclean-compile:
@@ -443,6 +512,7 @@ mostlyclean-libtool:
 
 clean-libtool:
        -rm -rf .libs _libs
+       -rm -rf tests/.libs tests/_libs
 
 distclean-libtool:
        -rm -f libtool config.lt
@@ -690,7 +760,7 @@ check-TESTS: $(TESTS)
          echo "$$dashes$$std"; \
          test "$$failed" -eq 0; \
        else :; fi
-check-am: $(check_PROGRAMS)
+check-am: $(check_LTLIBRARIES) $(check_PROGRAMS)
        $(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-recursive
 all-am: Makefile $(LTLIBRARIES) all-multi
@@ -724,8 +794,8 @@ maintainer-clean-generic:
        @echo "it deletes files that may require special tools to rebuild."
 clean: clean-multi clean-recursive
 
-clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
-       clean-noinstLTLIBRARIES mostlyclean-am
+clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES mostlyclean-am
 
 distclean: distclean-multi distclean-recursive
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -801,9 +871,9 @@ uninstall-am:
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
        all all-am all-multi am--refresh check check-TESTS check-am \
-       clean clean-checkPROGRAMS clean-generic clean-libtool \
-       clean-multi clean-noinstLTLIBRARIES ctags ctags-recursive \
-       distclean distclean-compile distclean-generic \
+       clean clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+       clean-libtool clean-multi clean-noinstLTLIBRARIES ctags \
+       ctags-recursive distclean distclean-compile distclean-generic \
        distclean-libtool distclean-multi distclean-tags dvi dvi-am \
        html html-am info info-am install install-am install-data \
        install-data-am install-dvi install-dvi-am install-exec \
diff --git a/boehm-gc/tests/staticrootslib.c b/boehm-gc/tests/staticrootslib.c
new file mode 100644 (file)
index 0000000..6e13278
--- /dev/null
@@ -0,0 +1,33 @@
+#include <stdio.h>
+
+#ifndef GC_DEBUG
+# define GC_DEBUG
+#endif
+
+#include "gc.h"
+
+struct treenode {
+    struct treenode *x;
+    struct treenode *y;
+} * root[10];
+
+struct treenode * libsrl_mktree(int i)
+{
+  struct treenode * r = GC_MALLOC(sizeof(struct treenode));
+  if (0 == i) return 0;
+  if (1 == i) r = GC_MALLOC_ATOMIC(sizeof(struct treenode));
+  r -> x = libsrl_mktree(i-1);
+  r -> y = libsrl_mktree(i-1);
+  return r;
+}
+
+void * libsrl_init(void)
+{
+  GC_INIT();
+  return GC_MALLOC(sizeof(struct treenode));
+}
+
+void * libsrl_collect (void)
+{
+  GC_gcollect();
+}
diff --git a/boehm-gc/tests/staticrootstest.c b/boehm-gc/tests/staticrootstest.c
new file mode 100644 (file)
index 0000000..68ff9ea
--- /dev/null
@@ -0,0 +1,46 @@
+#include <stdio.h>
+
+#ifndef GC_DEBUG
+# define GC_DEBUG
+#endif
+
+#include "gc.h"
+#include "gc_backptr.h"
+
+struct treenode {
+    struct treenode *x;
+    struct treenode *y;
+} * root[10];
+
+static char *staticroot = 0;
+
+extern struct treenode * libsrl_mktree(int i);
+extern void * libsrl_init(void);
+extern void * libsrl_collect (void);
+
+int main(void)
+{
+  int i;
+  staticroot = libsrl_init();
+  for (i = 0; i < sizeof(struct treenode); ++i) {
+    staticroot[i] = 0x42;
+  }
+  libsrl_collect();
+  for (i = 0; i < 10; ++i) {
+    root[i] = libsrl_mktree(12);
+    libsrl_collect();
+  }
+  for (i = 0; i < sizeof(struct treenode); ++i) {
+    if (staticroot[i] != 0x42)
+      return -1;
+  }
+  for (i = 0; i < 10; ++i) {
+    root[i] = libsrl_mktree(12);
+    libsrl_collect();
+  }
+  for (i = 0; i < sizeof(struct treenode); ++i) {
+    if (staticroot[i] != 0x42)
+      return -1;
+  }
+  return 0;
+}