- Add port for boehm-gc garbage collector variant with malloc redirection.
This port will install only shared libraries with malloc redirection enabled, that will allow for easy dependency handling for ports that required libgc build with specific features and will allow to avoid hacks of building own version of libgc library.
This commit is contained in:
parent
0db1ed5e69
commit
006d834cf5
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=246110
9 changed files with 279 additions and 0 deletions
|
@ -110,6 +110,7 @@
|
|||
SUBDIR += bnfc
|
||||
SUBDIR += boaconstructor
|
||||
SUBDIR += boehm-gc
|
||||
SUBDIR += boehm-gc-redirect
|
||||
SUBDIR += bonobo
|
||||
SUBDIR += bonobo-conf
|
||||
SUBDIR += boost-all
|
||||
|
|
61
devel/boehm-gc-redirect/Makefile
Normal file
61
devel/boehm-gc-redirect/Makefile
Normal file
|
@ -0,0 +1,61 @@
|
|||
# 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 --disable-threads \
|
||||
--enable-redirect-malloc
|
||||
CONFIGURE_ENV= CFLAGSS="${CFLAGS} LIBS="${LIBS}
|
||||
MAKE_JOBS_UNSAFE= yes
|
||||
INSTLIBS= cord gc gccpp
|
||||
GC_VARIANT= redirect
|
||||
SOVER= 1
|
||||
|
||||
OPTIONS= 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_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>
|
3
devel/boehm-gc-redirect/distinfo
Normal file
3
devel/boehm-gc-redirect/distinfo
Normal file
|
@ -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
|
77
devel/boehm-gc-redirect/files/patch-dbg_mlc.c
Normal file
77
devel/boehm-gc-redirect/files/patch-dbg_mlc.c
Normal file
|
@ -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);
|
||||
}
|
15
devel/boehm-gc-redirect/files/patch-dyn_load.c
Normal file
15
devel/boehm-gc-redirect/files/patch-dyn_load.c
Normal file
|
@ -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
|
10
devel/boehm-gc-redirect/files/patch-include-gc.h
Normal file
10
devel/boehm-gc-redirect/files/patch-include-gc.h
Normal file
|
@ -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
|
|
@ -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
|
29
devel/boehm-gc-redirect/files/patch-os_dep.c
Normal file
29
devel/boehm-gc-redirect/files/patch-os_dep.c
Normal file
|
@ -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. */
|
20
devel/boehm-gc-redirect/pkg-descr
Normal file
20
devel/boehm-gc-redirect/pkg-descr
Normal file
|
@ -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 malloc redirection.
|
||||
|
||||
-- Mike McGaughey <mmcg@cs.monash.edu.au>
|
||||
ps: garbage collection is addictive.
|
||||
|
||||
WWW: http://www.hpl.hp.com/personal/Hans_Boehm/gc/
|
Loading…
Reference in a new issue