aboutsummaryrefslogtreecommitdiff
path: root/devel/boehm-gc-threaded
diff options
context:
space:
mode:
authorStanislav Sedov <stas@FreeBSD.org>2009-12-18 04:08:01 +0000
committerStanislav Sedov <stas@FreeBSD.org>2009-12-18 04:08:01 +0000
commit3c4f18635e797c2c88ac9a2448c03cac8d8bca2d (patch)
treef22e1d2467845bdb4597598236e90df704d20c08 /devel/boehm-gc-threaded
parent006d834cf51b82687d48e8ded28e85adca64353c (diff)
Notes
Diffstat (limited to 'devel/boehm-gc-threaded')
-rw-r--r--devel/boehm-gc-threaded/Makefile66
-rw-r--r--devel/boehm-gc-threaded/distinfo3
-rw-r--r--devel/boehm-gc-threaded/files/patch-dbg_mlc.c77
-rw-r--r--devel/boehm-gc-threaded/files/patch-dyn_load.c15
-rw-r--r--devel/boehm-gc-threaded/files/patch-include-gc.h10
-rw-r--r--devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h63
-rw-r--r--devel/boehm-gc-threaded/files/patch-os_dep.c29
-rw-r--r--devel/boehm-gc-threaded/pkg-descr20
8 files changed, 283 insertions, 0 deletions
diff --git a/devel/boehm-gc-threaded/Makefile b/devel/boehm-gc-threaded/Makefile
new file mode 100644
index 000000000000..c10a6159b0c0
--- /dev/null
+++ b/devel/boehm-gc-threaded/Makefile
@@ -0,0 +1,66 @@
+# New ports collection makefile for: boehm-gc-redirect
+# Date created: 12/17/2009
+# Whom: stas
+#
+# $FreeBSD$
+#
+
+PORTNAME= boehm-gc
+PORTVERSION= 7.1
+CATEGORIES= devel
+MASTER_SITES= http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/
+PKGNAMESUFFIX= -${GC_VARIANT}
+DISTNAME= gc-${PORTVERSION:S/.a/alpha/}
+
+MAINTAINER= stas@FreeBSD.org
+COMMENT= Garbage collection and memory leak detection for C and C++
+
+RUN_DEPENDS= ${PREFIX}/include/gc/gc.h:${PORTSDIR}/devel/boehm-gc
+
+GNU_CONFIGURE= yes
+USE_GNOME= gnometarget
+USE_LDCONFIG= yes
+CONFIGURE_ARGS= --enable-cplusplus --disable-static --enable-threads=posix \
+ --enable-thread-local-alloc
+CONFIGURE_ENV= CFLAGSS="${CFLAGS} LIBS="${LIBS}
+MAKE_JOBS_UNSAFE= yes
+INSTLIBS= cord gc gccpp
+GC_VARIANT= threaded
+SOVER= 1
+
+OPTIONS= PARALLEL_MARK "Parallel-thread marking (faster for SMP)" off \
+ FULLDEBUG "Debugging support (see documentation)" off
+
+PLIST_FILES= ${INSTLIBS:S,^,lib/lib,g:S,$,-${GC_VARIANT}.so.${SOVER},g} \
+ ${INSTLIBS:S,^,lib/lib,g:S,$,-${GC_VARIANT}.so,g}
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == "ia64"
+BROKEN= Does not compile on ia64
+.endif
+
+.if defined(WITH_PARALLEL_MARK)
+CONFIGURE_ARGS+= --enable-parallel-mark
+.endif
+
+.if defined(WITH_FULLDEBUG)
+CONFIGURE_ARGS+= --enable-gc-debug
+PKGNAMESUFFIX:= ${PKGNAMESUFFIX}+fulldebug
+.endif
+
+post-patch:
+ ${REINPLACE_CMD} -E -e 's,libgc\.la,libgc-${GC_VARIANT}.la,g' \
+ -e 's,libgccpp\.la,libgccpp-${GC_VARIANT}.la,g' \
+ -e 's,libcord\.la,libcord-${GC_VARIANT}.la,g' \
+ ${WRKSRC}/Makefile.in
+
+do-install:
+.for LIB in ${INSTLIBS}
+ ${INSTALL_DATA} ${WRKSRC}/.libs/lib${LIB}-${GC_VARIANT}.so.${SOVER} \
+ ${PREFIX}/lib/lib${LIB}-${GC_VARIANT}.so.${SOVER}
+ @(cd ${PREFIX}/lib && ${LN} -s lib${LIB}-${GC_VARIANT}.so.${SOVER} \
+ lib${LIB}-${GC_VARIANT}.so)
+.endfor
+
+.include <bsd.port.post.mk>
diff --git a/devel/boehm-gc-threaded/distinfo b/devel/boehm-gc-threaded/distinfo
new file mode 100644
index 000000000000..d4f8223a8eb4
--- /dev/null
+++ b/devel/boehm-gc-threaded/distinfo
@@ -0,0 +1,3 @@
+MD5 (gc-7.1.tar.gz) = 2ff9924c7249ef7f736ecfe6f08f3f9b
+SHA256 (gc-7.1.tar.gz) = e3cef6028fe3efe7de3bcf4107c880eae50b3ee79841450d885467c09bcebf30
+SIZE (gc-7.1.tar.gz) = 1077714
diff --git a/devel/boehm-gc-threaded/files/patch-dbg_mlc.c b/devel/boehm-gc-threaded/files/patch-dbg_mlc.c
new file mode 100644
index 000000000000..52a801da9c3a
--- /dev/null
+++ b/devel/boehm-gc-threaded/files/patch-dbg_mlc.c
@@ -0,0 +1,77 @@
+--- dbg_mlc.c.orig 2009-10-20 00:34:39.000000000 +0400
++++ dbg_mlc.c 2009-10-20 00:41:22.000000000 +0400
+@@ -456,10 +456,34 @@
+ GC_register_displacement((word)sizeof(oh) + offset);
+ }
+
++#if defined(__FreeBSD__)
++#include <dlfcn.h>
++static void GC_caller_func_offset(ad, symp, offp)
++const GC_word ad;
++const char **symp;
++int *offp;
++{
++ Dl_info caller;
++ if (dladdr((const void *)ad, &caller) && caller.dli_sname != NULL) {
++ *symp = caller.dli_sname;
++ *offp = (const char *)ad - (const char *)caller.dli_saddr;
++ }
++}
++#else
++#define GC_caller_func(ad, symp, offp)
++#endif
++
+ void * GC_debug_malloc(size_t lb, GC_EXTRA_PARAMS)
+ {
+ void * result = GC_malloc(lb + DEBUG_BYTES);
+-
++
++#ifdef GC_ADD_CALLER
++ if (s == NULL) {
++ GC_caller_func_offset(ra, &s, &i);
++ if (s == NULL)
++ s = "unknown";
++ }
++#endif
+ if (result == 0) {
+ GC_err_printf("GC_debug_malloc(%lu) returning NIL (",
+ (unsigned long) lb);
+@@ -764,6 +788,13 @@
+ size_t old_sz;
+ hdr * hhdr;
+
++#ifdef GC_ADD_CALLER
++ if (s == NULL) {
++ GC_caller_func_offset(ra, &s, &i);
++ if (s == NULL)
++ s = "unknown";
++ }
++#endif
+ if (p == 0) return(GC_debug_malloc(lb, OPT_RA s, i));
+ if (base == 0) {
+ GC_err_printf("Attempt to reallocate invalid pointer %p\n", p);
+@@ -1041,17 +1072,21 @@
+ }
+
+ #ifdef GC_ADD_CALLER
+-# define RA GC_RETURN_ADDR,
++# ifdef GC_RETURN_ADDR_PARENT
++# define RA GC_RETURN_ADDR_PARENT,
++# else
++# define RA GC_RETURN_ADDR,
++# endif
+ #else
+ # define RA
+ #endif
+
+ void * GC_debug_malloc_replacement(size_t lb)
+ {
+- return GC_debug_malloc(lb, RA "unknown", 0);
++ return GC_debug_malloc(lb, RA NULL, 0);
+ }
+
+ void * GC_debug_realloc_replacement(void *p, size_t lb)
+ {
+- return GC_debug_realloc(p, lb, RA "unknown", 0);
++ return GC_debug_realloc(p, lb, RA NULL, 0);
+ }
diff --git a/devel/boehm-gc-threaded/files/patch-dyn_load.c b/devel/boehm-gc-threaded/files/patch-dyn_load.c
new file mode 100644
index 000000000000..e8b954ecffb8
--- /dev/null
+++ b/devel/boehm-gc-threaded/files/patch-dyn_load.c
@@ -0,0 +1,15 @@
+--- dyn_load.c.orig Thu May 6 08:03:06 2004
++++ dyn_load.c Sun Oct 31 01:53:01 2004
+@@ -97,6 +97,12 @@
+ # else
+ # define ElfW(type) Elf64_##type
+ # endif
++# elif defined(__FreeBSD__)
++# if __ELF_WORD_SIZE == 32
++# define ElfW(type) Elf32_##type
++# else
++# define ElfW(type) Elf64_##type
++# endif
+ # else
+ # if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
+ # define ElfW(type) Elf32_##type
diff --git a/devel/boehm-gc-threaded/files/patch-include-gc.h b/devel/boehm-gc-threaded/files/patch-include-gc.h
new file mode 100644
index 000000000000..44ee87d92268
--- /dev/null
+++ b/devel/boehm-gc-threaded/files/patch-include-gc.h
@@ -0,0 +1,10 @@
+--- include/gc.h.orig Wed Jun 4 17:07:33 2003
++++ include/gc.h Wed May 12 20:03:22 2004
+@@ -487,6 +487,7 @@
+ /* 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)
++# define GC_RETURN_ADDR_PARENT (GC_word)__builtin_return_address(1)
+ # else
+ /* Just pass 0 for gcc compatibility. */
+ # define GC_RETURN_ADDR 0
diff --git a/devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h b/devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h
new file mode 100644
index 000000000000..da83c49ebb91
--- /dev/null
+++ b/devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h
@@ -0,0 +1,63 @@
+--- include/private/gcconfig.h.orig 2008-02-20 22:23:00.000000000 +0300
++++ include/private/gcconfig.h 2009-10-20 01:08:38.000000000 +0400
+@@ -64,7 +64,7 @@
+ /* Determine the machine type: */
+ # if defined(__arm__) || defined(__thumb__)
+ # define ARM32
+-# if !defined(LINUX) && !defined(NETBSD)
++# if !defined(LINUX) && !defined(NETBSD) && !defined(FREEBSD)
+ # define NOSYS
+ # define mach_type_known
+ # endif
+@@ -334,10 +334,26 @@
+ # define X86_64
+ # define mach_type_known
+ # endif
++# if defined(__FreeBSD__) && defined(__amd64__)
++# define X86_64
++# define mach_type_known
++# endif
++# if defined(__FreeBSD__) && defined(__ia64__)
++# define IA64
++# define mach_type_known
++# endif
+ # if defined(FREEBSD) && defined(__sparc__)
+ # define SPARC
+ # define mach_type_known
+ # endif
++# if defined(FREEBSD) && defined(__powerpc__)
++# define POWERPC
++# define mach_type_known
++# endif
++# if defined(FREEBSD) && defined(__arm__)
++# define ARM32
++# define mach_type_known
++# endif
+ # if defined(bsdi) && (defined(i386) || defined(__i386__))
+ # define I386
+ # define BSDI
+@@ -1771,6 +1787,16 @@
+ # define OS_TYPE "MSWINCE"
+ # define DATAEND /* not needed */
+ # endif
++# ifdef FREEBSD
++# define ALIGNMENT 4
++# define OS_TYPE "FREEBSD"
++# ifdef __ELF__
++# define DYNAMIC_LOADING
++# endif
++# define HEURISTIC2
++ extern char etext[];
++# define SEARCH_FOR_DATA_START
++# endif
+ # ifdef NOSYS
+ /* __data_start is usually defined in the target linker script. */
+ extern int __data_start[];
+@@ -1800,6 +1826,7 @@
+ # define OS_TYPE "MSWINCE"
+ # define DATAEND /* not needed */
+ # endif
++
+ # ifdef LINUX
+ # define OS_TYPE "LINUX"
+ # define LINUX_STACKBOTTOM
diff --git a/devel/boehm-gc-threaded/files/patch-os_dep.c b/devel/boehm-gc-threaded/files/patch-os_dep.c
new file mode 100644
index 000000000000..910777fe2b47
--- /dev/null
+++ b/devel/boehm-gc-threaded/files/patch-os_dep.c
@@ -0,0 +1,29 @@
+--- os_dep.c.orig 2008-02-29 22:01:28.000000000 +0300
++++ os_dep.c 2009-10-20 00:48:39.000000000 +0400
+@@ -816,7 +816,7 @@
+ || defined(HURD) || defined(NETBSD)
+ static struct sigaction old_segv_act;
+ # if defined(_sigargs) /* !Irix6.x */ || defined(HPUX) \
+- || defined(HURD) || defined(NETBSD)
++ || defined(HURD) || defined(NETBSD) || defined(FREEBSD)
+ static struct sigaction old_bus_act;
+ # endif
+ # else
+@@ -826,7 +826,7 @@
+ void GC_set_and_save_fault_handler(handler h)
+ {
+ # if defined(SUNOS5SIGS) || defined(IRIX5) \
+- || defined(OSF1) || defined(HURD) || defined(NETBSD)
++ || defined(OSF1) || defined(HURD) || defined(NETBSD) || defined(FREEBSD)
+ struct sigaction act;
+
+ act.sa_handler = h;
+@@ -846,7 +846,7 @@
+ # else
+ (void) sigaction(SIGSEGV, &act, &old_segv_act);
+ # if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \
+- || defined(HPUX) || defined(HURD) || defined(NETBSD)
++ || defined(HPUX) || defined(HURD) || defined(NETBSD) || defined(FREEBSD)
+ /* Under Irix 5.x or HP/UX, we may get SIGBUS. */
+ /* Pthreads doesn't exist under Irix 5.x, so we */
+ /* don't have to worry in the threads case. */
diff --git a/devel/boehm-gc-threaded/pkg-descr b/devel/boehm-gc-threaded/pkg-descr
new file mode 100644
index 000000000000..8c3345931da2
--- /dev/null
+++ b/devel/boehm-gc-threaded/pkg-descr
@@ -0,0 +1,20 @@
+The Boehm-Weiser garbage collection package, for C and C++ -
+garbage collection and memory leak detection libraries.
+
+A garbage collector is something which automatically frees malloc'd
+memory for you by working out what parts of memory your program
+no longer has pointers to. As a result, garbage collectors can also
+inform you of memory leaks (if they find memory they can free, it means
+you have lost all of your pointers to it, but you didn't free it).
+
+C programs may be linked against either of these, and should run (with
+GC or leak detection) without change. C++ programs must include a header
+to use garbage collection, though leak detection should work without
+such source code modifications. See the man page and header files.
+
+This package only brings Boehm-GC libraries with threading support.
+
+-- Mike McGaughey <mmcg@cs.monash.edu.au>
+ps: garbage collection is addictive.
+
+WWW: http://www.hpl.hp.com/personal/Hans_Boehm/gc/