diff options
author | Stanislav Sedov <stas@FreeBSD.org> | 2009-12-18 04:08:01 +0000 |
---|---|---|
committer | Stanislav Sedov <stas@FreeBSD.org> | 2009-12-18 04:08:01 +0000 |
commit | 3c4f18635e797c2c88ac9a2448c03cac8d8bca2d (patch) | |
tree | f22e1d2467845bdb4597598236e90df704d20c08 /devel/boehm-gc-threaded | |
parent | 006d834cf51b82687d48e8ded28e85adca64353c (diff) |
Notes
Diffstat (limited to 'devel/boehm-gc-threaded')
-rw-r--r-- | devel/boehm-gc-threaded/Makefile | 66 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/distinfo | 3 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-dbg_mlc.c | 77 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-dyn_load.c | 15 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-include-gc.h | 10 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h | 63 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-os_dep.c | 29 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/pkg-descr | 20 |
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/ |