diff -uNr --exclude=CVS ../devel/boehm-gc/Makefile boehm-gc/Makefile
--- ../devel/boehm-gc/Makefile	Sat Dec  9 00:41:58 2006
+++ boehm-gc/Makefile	Sun Mar 25 20:16:28 2007
@@ -3,10 +3,11 @@
 
 COMMENT=	"garbage collection and memory leak detection for C and C++"
 
-VERSION=	6.2
+VERSION=	6.8
 DISTNAME=	gc${VERSION}
-PKGNAME=	boehm-gc-${VERSION}p1
+PKGNAME=	boehm-gc-${VERSION}
 SHARED_LIBS +=	gc                   1.2      # .1.2
+SHARED_LIBS +=  gccpp		     1.2
 
 CATEGORIES=	devel
 MASTER_SITES=	${HOMEPAGE}gc_source/
@@ -23,15 +24,23 @@
 PERMIT_DISTFILES_CDROM=	Yes
 PERMIT_DISTFILES_FTP=	Yes
 
+WANTLIB=	pthread
+
 MAKE_ENV=	CP="cp" \
 		INSTALL_DATA="${INSTALL_DATA}" \
 		INSTALL_MAN="${INSTALL_MAN}"
 
 USE_LIBTOOL=	Yes
+
 CONFIGURE_STYLE=autoconf no-autoheader
-AUTOCONF_VERSION=2.54
-CONFIGURE_ARGS= ${CONFIGURE_SHARED} --enable-full-debug
 
+AUTOCONF_VERSION=2.59
+
+CONFIGURE_ARGS= ${CONFIGURE_SHARED} \
+                CFLAGS="-DGC_PTHREADS -DSIG_SUSPEND=SIGUSR2" \
+                LDFLAGS="-lpthread" \
+                --enable-full-debug
+
 # XXX the below causes failures still
 #	--enable-redirect-malloc 
 
@@ -45,6 +54,7 @@
 aliases=	malloc malloc_atomic free realloc enable_incremental \
 		register_finalizer malloc_ignore_off_page \
 		malloc_atomic_ignore_off_page set_warn_proc
+
 post-install:
 	${INSTALL_DATA} ${WRKSRC}/doc/gc.man ${PREFIX}/man/man3/gc.3
 .for i in ${aliases}
@@ -54,6 +64,6 @@
 	${INSTALL_DATA} ${WRKSRC}/include/gc{,_{cpp,backptr,gcj,mark,typed}}.h ${PREFIX}/include
 	${INSTALL_DATA} ${WRKSRC}/include/private/gc{config,_{hdrs,locks,priv,pmark}}.h ${PREFIX}/include/private
 
-REGRESS_TARGET=	check-TESTS
+NO_REGRESS=	Yes
 
 .include <bsd.port.mk>
diff -uNr --exclude=CVS ../devel/boehm-gc/distinfo boehm-gc/distinfo
--- ../devel/boehm-gc/distinfo	Wed Jan  5 19:22:28 2005
+++ boehm-gc/distinfo	Sun Mar 25 18:43:06 2007
@@ -1,4 +1,5 @@
-MD5 (gc6.2.tar.gz) = 15492b14ca7b9a9e035238611e9cd1e3
-RMD160 (gc6.2.tar.gz) = 849969021e41697dc7cfd6773607ac73f0b525be
-SHA1 (gc6.2.tar.gz) = ef17f8f56e9853ef41808fdf5c4c7bf2f78f1fec
-SIZE (gc6.2.tar.gz) = 750883
+MD5 (gc6.8.tar.gz) = 418d38bd9c66398386a372ec0435250e
+RMD160 (gc6.8.tar.gz) = 6e894e7a51683a9342fd738baa6f1a2861e27400
+SHA1 (gc6.8.tar.gz) = 6d5def5ba5d29292ba9c76f04df3ec06d3ab3278
+SHA256 (gc6.8.tar.gz) = 448f8e4c6ee8c80eac059cf1c9379d20c388bcb900fc0796cd2a44d1dcbbae69
+SIZE (gc6.8.tar.gz) = 756879
diff -uNr --exclude=CVS ../devel/boehm-gc/patches/patch-include_gc_h boehm-gc/patches/patch-include_gc_h
--- ../devel/boehm-gc/patches/patch-include_gc_h	Wed Nov 12 02:49:08 2003
+++ boehm-gc/patches/patch-include_gc_h	Thu Jan  1 03:00:00 1970
@@ -1,12 +0,0 @@
-$OpenBSD: patch-include_gc_h,v 1.1 2003/11/11 23:49:08 espie Exp $
---- include/gc.h.orig	2003-11-11 19:12:31.000000000 +0100
-+++ include/gc.h	2003-11-11 19:15:50.000000000 +0100
-@@ -122,7 +122,7 @@ GC_API int GC_java_finalization;
- 			/* ordered finalization.  Default value is	*/
- 			/* determined by JAVA_FINALIZATION macro.	*/
- 
--GC_API void (* GC_finalizer_notifier)();
-+GC_API void (* GC_finalizer_notifier) GC_PROTO((void));
- 			/* Invoked by the collector when there are 	*/
- 			/* objects to be finalized.  Invoked at most	*/
- 			/* once per GC cycle.  Never invoked unless 	*/
diff -uNr --exclude=CVS ../devel/boehm-gc/patches/patch-include_private_gcconfig_h boehm-gc/patches/patch-include_private_gcconfig_h
--- ../devel/boehm-gc/patches/patch-include_private_gcconfig_h	Mon Mar 15 05:47:24 2004
+++ boehm-gc/patches/patch-include_private_gcconfig_h	Sun Mar 25 18:43:06 2007
@@ -1,8 +1,7 @@
-$OpenBSD: patch-include_private_gcconfig_h,v 1.12 2004/03/15 02:47:24 pvalchev Exp $
---- include/private/gcconfig.h.orig	2003-06-16 20:01:23.000000000 -0600
-+++ include/private/gcconfig.h	2004-03-14 14:19:44.000000000 -0700
-@@ -97,7 +97,7 @@
- #    define ARM32
+--- include/private/gcconfig.h.orig	Sun Mar 25 15:30:22 2007
++++ include/private/gcconfig.h	Sun Mar 25 15:48:40 2007
+@@ -102,7 +102,7 @@
+ #    define SH
  #    define mach_type_known
  # endif
 -# if defined(vax)
@@ -10,7 +9,7 @@
  #    define VAX
  #    ifdef ultrix
  #	define ULTRIX
-@@ -216,6 +216,10 @@
+@@ -233,6 +233,10 @@
  #    define I386
  #    define mach_type_known
  # endif
@@ -21,9 +20,9 @@
  # if defined(LINUX) && defined(__x86_64__)
  #    define X86_64
  #    define mach_type_known
-@@ -278,6 +282,16 @@
- #    define POWERPC
- #    define mach_type_known
+@@ -304,6 +308,16 @@
+ #   define MACOS
+ #   define mach_type_known
  # endif
 +# if defined(__OpenBSD__) && (defined(__powerpc__))
 +#   define POWERPC
@@ -35,10 +34,10 @@
 +#   define OPENBSD
 +#   define mach_type_known
 +# endif
- # if defined(__APPLE__) && defined(__MACH__) && defined(__i386__)
- #    define DARWIN
- #    define I386
-@@ -326,6 +340,10 @@
+ # if defined(macosx) || (defined(__APPLE__) && defined(__MACH__))
+ #   define DARWIN
+ #   if defined(__ppc__)  || defined(__ppc64__)
+@@ -366,6 +380,10 @@
      /* DGUX defined */
  #   define mach_type_known
  # endif
@@ -49,25 +48,33 @@
  # if defined(_WIN32_WCE)
      /* SH3, SH4, MIPS already defined for corresponding architectures */
  #   if defined(SH3) || defined(SH4)
-@@ -595,8 +613,8 @@
+@@ -656,15 +674,9 @@
+ #   define ALIGNMENT 2
  #   ifdef OPENBSD
  #	define OS_TYPE "OPENBSD"
- #	define HEURISTIC2
--	extern char etext[];
--#	define DATASTART ((ptr_t)(etext))
+-#	define HEURISTIC2
+-#	ifdef __ELF__
+-#	  define DATASTART GC_data_start
+-#	  define DYNAMIC_LOADING
+-#	else
+-	  extern char etext[];
+-#	  define DATASTART ((ptr_t)(etext))
+-#       endif
+-#       define USE_GENERIC_PUSH_REGS
++#	define OPENBSD_STACKBOTTOM
 +#	define DATASTART GC_data_start
 +#	define USE_GENERIC_PUSH_REGS
  #   endif
  #   ifdef NETBSD
  #	define OS_TYPE "NETBSD"
-@@ -761,6 +779,14 @@
+@@ -860,6 +872,14 @@
  #     define DATASTART GC_data_start
  #     define DYNAMIC_LOADING
  #   endif
 +#   ifdef OPENBSD
 +#     define ALIGNMENT 4
 +#     define OS_TYPE "OPENBSD"
-+#     define HEURISTIC2
++#     define OPENBSD_STACKBOTTOM
 +      extern char etext;
 +#     define DATASTART GC_data_start
 +#     define DYNAMIC_LOADING
@@ -75,30 +82,30 @@
  #   ifdef NOSYS
  #     define ALIGNMENT 4
  #     define OS_TYPE "NOSYS"
-@@ -897,9 +923,9 @@
+@@ -994,9 +1014,9 @@
  #   endif
  #   ifdef OPENBSD
  #     define OS_TYPE "OPENBSD"
 -#     define STACKBOTTOM ((ptr_t) 0xf8000000)
 -      extern int etext[];
 -#     define DATASTART ((ptr_t)(etext))
-+#     define HEURISTIC2
++#     define OPENBSD_STACKBOTTOM
 +#     define DATASTART GC_data_start
 +#     define DYNAMIC_LOADING
  #   endif
  #   ifdef NETBSD
  #     define OS_TYPE "NETBSD"
-@@ -1145,6 +1171,9 @@
+@@ -1250,6 +1270,9 @@
  #   endif
  #   ifdef OPENBSD
  #	define OS_TYPE "OPENBSD"
-+#	define HEURISTIC2
++#	define OPENBSD_STACKBOTTOM
 +#       define DATASTART GC_data_start
 +#       define DYNAMIC_LOADING
  #   endif
  #   ifdef FREEBSD
  #	define OS_TYPE "FREEBSD"
-@@ -1173,7 +1202,7 @@
+@@ -1285,7 +1308,7 @@
  #   ifdef BSDI
  #	define OS_TYPE "BSDI"
  #   endif
@@ -107,7 +114,7 @@
          || defined(THREE86BSD) || defined(BSDI)
  #	define HEURISTIC2
  	extern char etext[];
-@@ -1435,7 +1464,7 @@
+@@ -1580,7 +1603,7 @@
  #   define MACH_TYPE "ALPHA"
  #   define ALIGNMENT 8
  #   define CPP_WORDSZ 64
@@ -116,16 +123,12 @@
  #     define USE_GENERIC_PUSH_REGS
        /* Gcc and probably the DEC/Compaq compiler spill pointers to preserved */
        /* fp registers in some cases when the target is a 21264.  The assembly */
-@@ -1449,6 +1478,7 @@
- #	define ELFCLASS32 32
- #	define ELFCLASS64 64
- #	define ELF_CLASS ELFCLASS64
-+#   	define CPP_WORDSZ 64
- #       define DYNAMIC_LOADING
+@@ -1598,12 +1621,11 @@
  #   endif
  #   ifdef OPENBSD
-@@ -1456,9 +1486,8 @@
- #	define HEURISTIC2
+ #	define OS_TYPE "OPENBSD"
+-#	define HEURISTIC2
++#	define OPENBSD_STACKBOTTOM
  #   	ifdef __ELF__	/* since OpenBSD/Alpha 2.9 */
  #	   define DATASTART GC_data_start
 -#   	   define ELFCLASS32 32
@@ -135,13 +138,13 @@
  #       else		/* ECOFF, until OpenBSD/Alpha 2.7 */
  #   	   define DATASTART ((ptr_t) 0x140000000)
  #   	endif
-@@ -1614,16 +1643,22 @@
+@@ -1783,9 +1805,15 @@
  #   define ALIGNMENT 4
  #   define ALIGN_DOUBLE
      extern int etext[];
 +#   ifdef OPENBSD
 +#	define OS_TYPE "OPENBSD"
-+#	define HEURISTIC2
++#	define OPENBSD_STACKBOTTOM
 +#       define DATASTART GC_data_start
 +#   endif
  #   ifdef CX_UX
@@ -151,25 +154,17 @@
  #   endif
  #   ifdef  DGUX
  #	define OS_TYPE "DGUX"
- 	extern ptr_t GC_SysVGetDataStart();
- #       define DATASTART GC_SysVGetDataStart(0x10000, etext)
-+#       define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */
+@@ -1825,6 +1853,13 @@
  #   endif
--#   define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */
- # endif
- 
- # ifdef S370
-@@ -1765,6 +1800,13 @@
- #   endif
- #   define CACHE_LINE_SIZE 64
- #   define USE_GENERIC_PUSH_REGS
+ #   ifndef HBLKSIZE
+ #     define HBLKSIZE 4096
++#   endif
 +#   ifdef OPENBSD
 +#       define OS_TYPE "OPENBSD"
 +#       define DATASTART GC_data_start
 +#       define HEURISTIC2
 +#       define ELF_CLASS ELFCLASS64
 +#       define DYNAMIC_LOADING
-+#   endif
+ #   endif
  #   ifdef LINUX
- #	define OS_TYPE "LINUX"
- #       define LINUX_STACKBOTTOM
+ #       define OS_TYPE "LINUX"
diff -uNr --exclude=CVS ../devel/boehm-gc/patches/patch-mach_dep_c boehm-gc/patches/patch-mach_dep_c
--- ../devel/boehm-gc/patches/patch-mach_dep_c	Wed Oct 15 16:58:11 2003
+++ boehm-gc/patches/patch-mach_dep_c	Sun Mar 25 18:43:06 2007
@@ -1,12 +1,12 @@
 $OpenBSD: patch-mach_dep_c,v 1.3 2003/10/15 12:58:11 todd Exp $
---- mach_dep.c.orig	2003-06-06 04:50:30.000000000 +1000
-+++ mach_dep.c	2003-10-15 13:42:32.000000000 +1000
-@@ -456,7 +456,7 @@ ptr_t cold_gc_frame;
+--- mach_dep.c.orig	Wed Jul 20 02:42:50 2005
++++ mach_dep.c	Sun Mar 25 15:06:42 2007
+@@ -492,7 +492,7 @@ ptr_t cold_gc_frame;
  /* the stack.	Return sp.						*/
  # ifdef SPARC
      asm("	.seg 	\"text\"");
--#   if defined(SVR4) || defined(NETBSD)
-+#   if defined(SVR4) || defined(NETBSD) || defined(__ELF__)
+-#   if defined(SVR4) || defined(NETBSD) || defined(FREEBSD)
++#   if defined(SVR4) || defined(NETBSD) || defined(FREEBSD) | defined(__ELF__)
        asm("	.globl	GC_save_regs_in_stack");
        asm("GC_save_regs_in_stack:");
        asm("	.type GC_save_regs_in_stack,#function");
diff -uNr --exclude=CVS ../devel/boehm-gc/patches/patch-misc_c boehm-gc/patches/patch-misc_c
--- ../devel/boehm-gc/patches/patch-misc_c	Thu Oct 16 08:11:15 2003
+++ boehm-gc/patches/patch-misc_c	Sun Mar 25 18:43:06 2007
@@ -1,19 +1,14 @@
-$OpenBSD: patch-misc_c,v 1.5 2003/10/16 04:11:15 todd Exp $
---- misc.c.orig	2003-05-29 10:50:10.000000000 -0500
-+++ misc.c	2003-10-16 02:31:36.000000000 -0500
-@@ -635,7 +635,14 @@ void GC_init_inner()
+--- misc.c.orig	Sun Mar 25 15:09:57 2007
++++ misc.c	Sun Mar 25 15:15:00 2007
+@@ -664,7 +664,10 @@ void GC_init_inner()
  #   if defined(SEARCH_FOR_DATA_START)
  	GC_init_linux_data_start();
  #   endif
 -#   if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)
-+#   if defined(OPENBSD)
-+#     if defined(__ELF__)
-+	GC_init_openbsd_elf();
-+#     else
-+	GC_init_openbsd_aout();
-+#     endif
-+#   endif
++#if defined(OPENBSD)
++	GC_init_openbsd();
++#endif
 +#   if defined(NETBSD) && defined(__ELF__)
  	GC_init_netbsd_elf();
  #   endif
- #   if defined(GC_PTHREADS) || defined(GC_SOLARIS_THREADS)
+ #   if defined(GC_PTHREADS) || defined(GC_SOLARIS_THREADS) \
diff -uNr --exclude=CVS ../devel/boehm-gc/patches/patch-os_dep_c boehm-gc/patches/patch-os_dep_c
--- ../devel/boehm-gc/patches/patch-os_dep_c	Thu Oct 16 08:11:15 2003
+++ boehm-gc/patches/patch-os_dep_c	Sun Mar 25 18:43:06 2007
@@ -1,34 +1,73 @@
-$OpenBSD: patch-os_dep_c,v 1.5 2003/10/16 04:11:15 todd Exp $
---- os_dep.c.orig	2003-06-13 14:11:00.000000000 -0500
-+++ os_dep.c	2003-10-16 02:31:36.000000000 -0500
-@@ -391,6 +391,30 @@ static void *tiny_sbrk(ptrdiff_t increme
+--- os_dep.c.orig	Sun Mar 25 15:16:07 2007
++++ os_dep.c	Sun Mar 25 15:27:46 2007
+@@ -380,7 +380,7 @@ static void *tiny_sbrk(ptrdiff_t increme
+ #define sbrk tiny_sbrk
+ # endif /* ECOS */
+ 
+-#if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)
++#if defined(NETBSD) && defined(__ELF__)
+   ptr_t GC_data_start;
+ 
+   void GC_init_netbsd_elf()
+@@ -393,6 +393,18 @@ static void *tiny_sbrk(ptrdiff_t increme
    }
  #endif
  
 +#if defined(OPENBSD)
-+  #if defined(__ELF__)
 +  ptr_t GC_data_start;
 +
-+  void GC_init_openbsd_elf()
++  /* Use __progname as GC_data_start. This seems to work on i386. */
++  void GC_init_openbsd()
 +  {
-+    extern ptr_t GC_find_limit();
-+	/* This may need to be environ, without the underscore, for	*/
-+	/* some versions.						*/
-+    GC_data_start = GC_find_limit((ptr_t)&end, FALSE);
++    extern char **__progname;
++    GC_data_start = (ptr_t)&__progname;
 +  }
-+  #else
-+  ptr_t GC_data_start;
-+
-+  void GC_init_openbsd_aout()
-+  {
-+    extern ptr_t GC_find_limit();
-+	/* This may need to be environ, without the underscore, for	*/
-+	/* some versions.						*/
-+    GC_data_start = GC_find_limit((ptr_t)&end, FALSE);
-+  }
-+  #endif
 +#endif
 +
++
  # ifdef OS2
  
  # include <stddef.h>
+@@ -1006,13 +1018,31 @@ ptr_t GC_get_stack_base()
+ 
+ #endif /* FREEBSD_STACKBOTTOM */
+ 
++#ifdef OPENBSD_STACKBOTTOM
++
++/* Find the stack using pthread_stackseg_np() */
++
++# include <sys/signal.h>
++# include <pthread.h>
++# include <pthread_np.h>
++        
++  ptr_t GC_openbsd_stack_base(void)
++  {
++    stack_t stack;
++    pthread_stackseg_np(pthread_self(), &stack);
++    return stack.ss_sp;
++  }
++#endif /* OPENBSD_STACKBOTTOM */
++
++
+ #if !defined(BEOS) && !defined(AMIGA) && !defined(MSWIN32) \
+     && !defined(MSWINCE) && !defined(OS2) && !defined(NOSYS) && !defined(ECOS)
+ 
+ ptr_t GC_get_stack_base()
+ {
+ #   if defined(HEURISTIC1) || defined(HEURISTIC2) || \
+-       defined(LINUX_STACKBOTTOM) || defined(FREEBSD_STACKBOTTOM)
++       defined(LINUX_STACKBOTTOM) || defined(FREEBSD_STACKBOTTOM) || \
++       defined(OPENBSD_STACKBOTTOM)
+     word dummy;
+     ptr_t result;
+ #   endif
+@@ -1037,6 +1067,9 @@ ptr_t GC_get_stack_base()
+ #	endif
+ #	ifdef FREEBSD_STACKBOTTOM
+ 	   result = GC_freebsd_stack_base();
++#	endif
++#	ifdef OPENBSD_STACKBOTTOM
++	   result = GC_openbsd_stack_base();
+ #	endif
+ #	ifdef HEURISTIC2
+ #	    ifdef STACK_GROWS_DOWN
diff -uNr --exclude=CVS ../devel/boehm-gc/pkg/PFRAG.shared boehm-gc/pkg/PFRAG.shared
--- ../devel/boehm-gc/pkg/PFRAG.shared	Fri Jan  6 17:42:59 2006
+++ boehm-gc/pkg/PFRAG.shared	Sun Mar 25 18:43:06 2007
@@ -1,2 +1,2 @@
-@comment $OpenBSD: PFRAG.shared,v 1.4 2006/01/06 14:42:59 bernd Exp $
+@comment $OpenBSD$
 @lib lib/libgc.so.${LIBgc_VERSION}
diff -uNr --exclude=CVS ../devel/boehm-gc/pkg/PLIST boehm-gc/pkg/PLIST
--- ../devel/boehm-gc/pkg/PLIST	Mon Sep  5 15:41:56 2005
+++ boehm-gc/pkg/PLIST	Sun Mar 25 18:43:06 2007
@@ -1,4 +1,4 @@
-@comment $OpenBSD: PLIST,v 1.10 2005/09/05 11:41:56 espie Exp $
+@comment $OpenBSD$
 %%SHARED%%
 include/gc/
 include/gc.h
@@ -72,9 +72,10 @@
 share/gc/README.win32
 share/gc/barrett_diagram
 share/gc/debugging.html
-@comment share/gc/gc.man
+share/gc/gc.man
 share/gc/gcdescr.html
 share/gc/gcinterface.html
 share/gc/leak.html
 share/gc/scale.html
+share/gc/simple_example.html
 share/gc/tree.html
