On Wed, 2021-02-03 at 23:37 -0500, George Koehler wrote:
> On Tue, 2 Feb 2021 18:40:50 -0500 (EST)
> k...@intricatesoftware.com wrote:
>
> >
> > Update to 8.0.4 with the following additional changes:
> > - Use mmap via the configure argument instead of hard-coding it.
> > - Define USE_MMAP_ANON for all OpenBSD arch to match upstream
> > code conventions.
> > - Remove unused ELF_CLASS define for OpenBSD.
> > - Remove old HAVE_DL_ITERATE_PHDR workaround for OpenBSD.
> > - Don't use old GC_find_limit_openbsd() which is only needed for
> > uthreads.
> >
> > I've tested this on i386, amd64, sparc64 and aarch64 using the
> > port's regress tests and by using w3m....
> Your update to 8.0.4 passes the port's "make test" on powerpc and
> powerpc64. It works with net/clic on powerpc64. ok gkoehler@
>
> This update fixes -fno-common
>
> I like how you adjusted the patches, and you tested the port on
> multiple platforms. I had added the mmap patch along with the
> powerpc64 support, but upstream has changed their mmap code, so you
> needed to adjust the patch. Defining USE_MMAP_ANON for each arch
> is exactly what upstream does for systems like Mac (DARWIN). Another
> way is at include/private/gcconfig.h.orig:2906, where upstream defines
> USE_MMAP_ANON for all arches of LINUX. --George
Thanks for the review and tests. Indeed I missed that part of
gcconfig.h, thanks for pointing it out. My intent was to have
the configure argument control the use of mmap, but I see that
I didn't get that quite right due to this part:
#if defined(USE_MMAP_ANON) && !defined(USE_MMAP)
# define USE_MMAP 1
#elif defined(LINUX) && defined(USE_MMAP)
/* The kernel may do a somewhat better job merging mappings etc. */
/* with anonymous mappings. */
# define USE_MMAP_ANON
#endif
The way I have it now it always uses mmap, so I'd like to
revise that to remove the USE_MMAP_ANON per arch and adjust
this section above as follows to allow the configure argument
to control the use of mmap:
#if defined(USE_MMAP_ANON) && !defined(USE_MMAP)
# define USE_MMAP 1
#elif defined(LINUX) && defined(USE_MMAP)
/* The kernel may do a somewhat better job merging mappings etc. */
/* with anonymous mappings. */
# define USE_MMAP_ANON
#elif defined(OPENBSD) && defined(USE_MMAP)
# define USE_MMAP_ANON
#endif
I'm not sure if my MUA will mangle the in-line diff so I'll
attach it was well.
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/Makefile,v
retrieving revision 1.75
diff -u -p -u -r1.75 Makefile
--- Makefile 24 Aug 2020 21:31:13 -0000 1.75
+++ Makefile 4 Feb 2021 14:13:31 -0000
@@ -3,8 +3,8 @@
COMMENT-main= garbage collection and memory leak detection for C and C++
COMMENT-atomic= access to hardware provided atomic memory operations
-VERSION= 7.6.0
-LIBAO_VERSION= 7.6.6
+VERSION= 8.0.4
+LIBAO_VERSION= 7.6.10
# has various machine-dependent parts; updates definitely need
# tests on more than just amd64.
@@ -12,7 +12,6 @@ DISTNAME= gc-${VERSION}
PKGNAME-atomic= libatomic_ops-${LIBAO_VERSION}
PKGNAME-main= boehm-gc-${VERSION}
-REVISION= 6
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
libatomic_ops-${LIBAO_VERSION}${EXTRACT_SUFX}
@@ -20,11 +19,11 @@ DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
MULTI_PACKAGES= -main -atomic
DEBUG_PACKAGES= ${BUILD_PACKAGES}
-SHARED_LIBS += gc 4.0 # 1.3
-SHARED_LIBS += gccpp 0.0 # 1.3
-SHARED_LIBS += cord 2.3 # 1.3
-SHARED_LIBS += atomic_ops 2.0 # 1.3
-SHARED_LIBS += atomic_ops_gpl 2.0 # 1.3
+SHARED_LIBS += gc 5.0 # 5.3
+SHARED_LIBS += gccpp 1.0 # 5.0
+SHARED_LIBS += cord 3.0 # 5.0
+SHARED_LIBS += atomic_ops 3.0 # 2.1
+SHARED_LIBS += atomic_ops_gpl 3.0 # 2.2
CATEGORIES= devel
@@ -49,7 +48,9 @@ CONFIGURE_STYLE= gnu
CONFIGURE_ARGS= --with-libatomic-ops=no \
--enable-cplusplus \
- --enable-threads=pthreads
+ --enable-threads=pthreads \
+ --enable-mmap \
+ --enable-static=yes
post-extract:
@perl -pi -e "s,/usr/local,${PREFIX},g" ${WRKSRC}/doc/gc.man
Index: distinfo
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/distinfo,v
retrieving revision 1.11
diff -u -p -u -r1.11 distinfo
--- distinfo 30 Dec 2018 17:08:09 -0000 1.11
+++ distinfo 4 Feb 2021 14:13:31 -0000
@@ -1,4 +1,4 @@
-SHA256 (gc-7.6.0.tar.gz) = oUoosRKb6Q5VzW9xEn/8VZThCR1dVBMVKMJM0MA7fZA=
-SHA256 (libatomic_ops-7.6.6.tar.gz) =
mf6rxfVId/MU20+t6xCfCz4dGlSvtrSz37oecH444HQ=
-SIZE (gc-7.6.0.tar.gz) = 1111751
-SIZE (libatomic_ops-7.6.6.tar.gz) = 498187
+SHA256 (gc-8.0.4.tar.gz) = Q2oN3GexrAsEBbYalnW8qeB1yBVvTevR0G86VsfNKJ0=
+SHA256 (libatomic_ops-7.6.10.tar.gz) =
WH7fYIF/Vtrx4as4pLPHKbjoRv9ntPYqYVcYNwjwma8=
+SIZE (gc-8.0.4.tar.gz) = 1160528
+SIZE (libatomic_ops-7.6.10.tar.gz) = 503734
Index: patches/patch-bdw-gc_pc_in
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/patches/patch-bdw-gc_pc_in,v
retrieving revision 1.1
diff -u -p -u -r1.1 patch-bdw-gc_pc_in
--- patches/patch-bdw-gc_pc_in 9 Dec 2009 20:36:49 -0000 1.1
+++ patches/patch-bdw-gc_pc_in 4 Feb 2021 14:13:31 -0000
@@ -1,10 +1,11 @@
$OpenBSD: patch-bdw-gc_pc_in,v 1.1 2009/12/09 20:36:49 sthen Exp $
---- bdw-gc.pc.in.orig Mon Dec 7 10:57:34 2009
-+++ bdw-gc.pc.in Mon Dec 7 10:57:46 2009
+Index: bdw-gc.pc.in
+--- bdw-gc.pc.in.orig
++++ bdw-gc.pc.in
@@ -6,5 +6,5 @@ includedir=@includedir@
Name: Boehm-Demers-Weiser Conservative Garbage Collector
Description: A garbage collector for C and C++
Version: @PACKAGE_VERSION@
--Libs: -L${libdir} -lgc
-+Libs: -L${libdir} -lgc -pthread
+-Libs: -L${libdir} @ATOMIC_OPS_LIBS@ -lgc
++Libs: -L${libdir} @ATOMIC_OPS_LIBS@ -lgc -pthread
Cflags: -I${includedir}
Index: patches/patch-dyn_load_c
===================================================================
RCS file: patches/patch-dyn_load_c
diff -N patches/patch-dyn_load_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-dyn_load_c 4 Feb 2021 14:13:31 -0000
@@ -0,0 +1,33 @@
+$OpenBSD$
+
+- Remove old HAVE_DL_ITERATE_PHDR workaround for OpenBSD
+
+Index: dyn_load.c
+--- dyn_load.c.orig
++++ dyn_load.c
+@@ -81,13 +81,6 @@ STATIC GC_has_static_roots_func GC_has_static_roots =
+ # define ELFSIZE ARCH_ELFSIZE
+ #endif
+
+-#if defined(OPENBSD)
+-# include <sys/param.h>
+-# if (OpenBSD >= 200519) && !defined(HAVE_DL_ITERATE_PHDR)
+-# define HAVE_DL_ITERATE_PHDR
+-# endif
+-#endif /* OPENBSD */
+-
+ #if defined(SCO_ELF) || defined(DGUX) || defined(HURD) \
+ || (defined(__ELF__) && (defined(LINUX) || defined(FREEBSD) \
+ || defined(NACL) || defined(NETBSD) \
+@@ -150,8 +143,10 @@ STATIC GC_has_static_roots_func GC_has_static_roots =
+ # elif defined(NETBSD) || defined(OPENBSD)
+ # if ELFSIZE == 32
+ # define ElfW(type) Elf32_##type
+-# else
++# elif ELFSIZE == 64
+ # define ElfW(type) Elf64_##type
++# else
++# error Missing required ELFSIZE define
+ # endif
+ # else
+ # if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
Index: patches/patch-include_gc_config_macros_h
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/patches/patch-include_gc_config_macros_h,v
retrieving revision 1.3
diff -u -p -u -r1.3 patch-include_gc_config_macros_h
--- patches/patch-include_gc_config_macros_h 9 Feb 2014 06:01:54 -0000
1.3
+++ patches/patch-include_gc_config_macros_h 4 Feb 2021 14:13:31 -0000
@@ -1,21 +1,24 @@
-$OpenBSD: patch-include_gc_config_macros_h,v 1.3 2014/02/09 06:01:54 shadchin
Exp $
---- include/gc_config_macros.h.orig Sat Jan 18 23:56:01 2014
-+++ include/gc_config_macros.h Sat Jan 18 23:54:59 2014
-@@ -87,14 +87,14 @@
- # if defined(__mips) && !defined(__linux__)
- # define GC_IRIX_THREADS
- # endif
--# if defined(__sparc) && !defined(__linux__) \
-+# if defined(__OpenBSD__)
+$OpenBSD$
+
+- make sure the check for GC_OPENBSD_THREADS is before any arch
+ specific checks
+
+Index: include/gc_config_macros.h
+--- include/gc_config_macros.h.orig
++++ include/gc_config_macros.h
+@@ -83,13 +83,13 @@
+ #elif defined(GC_THREADS)
+ # if defined(__linux__)
+ # define GC_LINUX_THREADS
++# elif defined(__OpenBSD__)
+# define GC_OPENBSD_THREADS
-+# elif defined(__sparc) && !defined(__linux__) \
- || defined(sun) && (defined(i386) || defined(__i386__) \
- || defined(__amd64__))
- # define GC_SOLARIS_THREADS
- # elif defined(__APPLE__) && defined(__MACH__)
- # define GC_DARWIN_THREADS
+ # elif defined(_PA_RISC1_1) || defined(_PA_RISC2_0) || defined(hppa) \
+ || defined(__HPPA) || (defined(__ia64) && defined(_HPUX_SOURCE))
+ # define GC_HPUX_THREADS
+ # elif defined(__HAIKU__)
+ # define GC_HAIKU_THREADS
-# elif defined(__OpenBSD__)
-# define GC_OPENBSD_THREADS
- # elif !defined(GC_LINUX_THREADS) && !defined(GC_HPUX_THREADS) \
- && !defined(GC_OSF1_THREADS) && !defined(GC_IRIX_THREADS)
- /* FIXME: Should we really need for FreeBSD and NetBSD to check */
+ # elif defined(__DragonFly__) || defined(__FreeBSD_kernel__) \
+ || (defined(__FreeBSD__) && !defined(SN_TARGET_ORBIS))
+ # define GC_FREEBSD_THREADS
Index: patches/patch-include_private_gcconfig_h
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/patches/patch-include_private_gcconfig_h,v
retrieving revision 1.23
diff -u -p -u -r1.23 patch-include_private_gcconfig_h
--- patches/patch-include_private_gcconfig_h 24 Aug 2020 21:31:13 -0000
1.23
+++ patches/patch-include_private_gcconfig_h 4 Feb 2021 14:13:31 -0000
@@ -1,46 +1,36 @@
-$OpenBSD: patch-include_private_gcconfig_h,v 1.23 2020/08/24 21:31:13 gkoehler
Exp $
+$OpenBSD$
-- use mmap, not sbrk, on OpenBSD
+- define USE_MMAP_ANON on OpenBSD when USE_MMAP is defined
- All OpenBSD mips platforms are 64-bit, so correct the wordsize and alignment
- use __data_start instead of _fdata on OpenBSD/mips64
- add support for OpenBSD/aarch64 and powerpc64
+- Remove unused ELF_CLASS for OpenBSD
Index: include/private/gcconfig.h
--- include/private/gcconfig.h.orig
+++ include/private/gcconfig.h
-@@ -76,6 +76,10 @@
- /* And one for OpenBSD: */
- # if defined(__OpenBSD__)
- # define OPENBSD
-+# ifndef USE_MMAP
-+# define USE_MMAP
-+# endif
-+# define USE_MMAP_ANON
- # endif
-
- /* And one for FreeBSD: */
-@@ -102,7 +106,8 @@
- # endif
+@@ -160,7 +160,8 @@ EXTERN_C_BEGIN
# if defined(__aarch64__)
# define AARCH64
--# if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD)
-+# if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
-+ && !defined(OPENBSD)
+ # if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
+- && !defined(NETBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX)
++ && !defined(NETBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX) \
++ && !defined(OPENBSD)
# define NOSYS
# define mach_type_known
# endif
-@@ -137,6 +142,10 @@
+@@ -196,6 +197,10 @@ EXTERN_C_BEGIN
# define ARM32
# define mach_type_known
# endif
+# if defined(OPENBSD) && defined(__aarch64__)
-+# define AARCH64
-+# define mach_type_known
++# define AARCH64
++# define mach_type_known
+# endif
# if defined(OPENBSD) && defined(__sh__)
# define SH
# define mach_type_known
-@@ -962,7 +971,12 @@
+@@ -1076,7 +1081,12 @@ EXTERN_C_BEGIN
# endif
# ifdef OPENBSD
# define OS_TYPE "OPENBSD"
@@ -52,44 +42,69 @@ Index: include/private/gcconfig.h
+# define ALIGNMENT 4
+# endif
# ifndef GC_OPENBSD_THREADS
+ EXTERN_C_END
# include <sys/param.h>
- # include <uvm/uvm_extern.h>
-@@ -1712,14 +1726,15 @@
+@@ -1847,7 +1857,8 @@ EXTERN_C_BEGIN
# endif
# ifdef OPENBSD
- # define OS_TYPE "OPENBSD"
--# define ALIGNMENT 4
-+# define CPP_WORDSZ 64
-+# define ALIGNMENT 8
+ # define OS_TYPE "OPENBSD"
+-# define ALIGNMENT 4
++# define CPP_WORDSZ 64
++# define ALIGNMENT 8
# ifndef GC_OPENBSD_THREADS
- # include <sys/param.h>
- # include <uvm/uvm_extern.h>
- # define STACKBOTTOM ((ptr_t)USRSTACK)
- # endif
-- extern int _fdata[];
--# define DATASTART ((ptr_t)_fdata)
-+ extern int __data_start[];
-+# define DATASTART ((ptr_t)__data_start)
- extern int _end[];
- # define DATAEND ((ptr_t)(&_end))
- # define DYNAMIC_LOADING
-@@ -2165,6 +2180,19 @@
- extern char etext[];
- # define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext)
- # define DATASTART_USES_BSDGETDATASTART
-+# endif
+ EXTERN_C_END
+ # include <sys/param.h>
+@@ -1859,8 +1870,8 @@ EXTERN_C_BEGIN
+ # define HEURISTIC2
+ # endif
+ # endif
+- extern int _fdata[];
+-# define DATASTART ((ptr_t)_fdata)
++ extern int __data_start[];
++# define DATASTART ((ptr_t)__data_start)
+ extern int _end[];
+ # define DATAEND ((ptr_t)(&_end))
+ # define DYNAMIC_LOADING
+@@ -2019,7 +2030,6 @@ EXTERN_C_BEGIN
+ # endif
+ # ifdef OPENBSD
+ # define OS_TYPE "OPENBSD"
+-# define ELF_CLASS ELFCLASS64
+ # ifndef GC_OPENBSD_THREADS
+ EXTERN_C_END
+ # include <sys/param.h>
+@@ -2345,6 +2355,17 @@ EXTERN_C_BEGIN
+ void *switch_get_stack_bottom(void);
+ # define STACKBOTTOM ((ptr_t)switch_get_stack_bottom())
+ # endif
+# ifdef OPENBSD
+# define OS_TYPE "OPENBSD"
+# ifndef GC_OPENBSD_THREADS
-+# include <sys/param.h>
-+# include <uvm/uvm_extern.h>
-+# define STACKBOTTOM ((ptr_t)USRSTACK)
++# define HEURISTIC2
+# endif
+ extern int __data_start[];
+# define DATASTART ((ptr_t)__data_start)
+ extern int _end[];
+# define DATAEND ((ptr_t)(&_end))
+# define DYNAMIC_LOADING
- # endif
++# endif
# ifdef NOSYS
/* __data_start is usually defined in the target linker script. */
+ extern int __data_start[];
+@@ -2604,7 +2625,6 @@ EXTERN_C_BEGIN
+ # endif
+ # ifdef OPENBSD
+ # define OS_TYPE "OPENBSD"
+-# define ELF_CLASS ELFCLASS64
+ # ifndef GC_OPENBSD_THREADS
+ EXTERN_C_END
+ # include <sys/param.h>
+@@ -2906,6 +2926,8 @@ EXTERN_C_BEGIN
+ #elif defined(LINUX) && defined(USE_MMAP)
+ /* The kernel may do a somewhat better job merging mappings etc. */
+ /* with anonymous mappings. */
++# define USE_MMAP_ANON
++#elif defined(OPENBSD) && defined(USE_MMAP)
+ # define USE_MMAP_ANON
+ #endif
+
Index: patches/patch-os_dep_c
===================================================================
RCS file: patches/patch-os_dep_c
diff -N patches/patch-os_dep_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-os_dep_c 4 Feb 2021 14:13:31 -0000
@@ -0,0 +1,57 @@
+$OpenBSD$
+
+- GC_find_limit_openbsd is only needed for uthreads
+
+Index: os_dep.c
+--- os_dep.c.orig
++++ os_dep.c
+@@ -514,23 +514,22 @@ GC_INNER char * GC_get_maps(void)
+ static struct sigaction old_segv_act;
+ STATIC JMP_BUF GC_jmp_buf_openbsd;
+
+-# ifdef THREADS
++ STATIC void GC_fault_handler_openbsd(int sig GC_ATTR_UNUSED)
++ {
++ LONGJMP(GC_jmp_buf_openbsd, 1);
++ }
++
++# ifdef GC_OPENBSD_UTHREADS
+ # include <sys/syscall.h>
+ EXTERN_C_BEGIN
+ extern sigset_t __syscall(quad_t, ...);
+ EXTERN_C_END
+-# endif
+
+ /* Don't use GC_find_limit() because siglongjmp() outside of the */
+ /* signal handler by-passes our userland pthreads lib, leaving */
+ /* SIGSEGV and SIGPROF masked. Instead, use this custom one that */
+ /* works-around the issues. */
+
+- STATIC void GC_fault_handler_openbsd(int sig GC_ATTR_UNUSED)
+- {
+- LONGJMP(GC_jmp_buf_openbsd, 1);
+- }
+-
+ /* Return the first non-addressable location > p or bound. */
+ /* Requires the allocation lock. */
+ STATIC ptr_t GC_find_limit_openbsd(ptr_t p, ptr_t bound)
+@@ -573,6 +572,7 @@ GC_INNER char * GC_get_maps(void)
+ sigaction(SIGSEGV, &old_segv_act, 0);
+ return(result);
+ }
++# endif
+
+ /* Return first addressable location > p or bound. */
+ /* Requires the allocation lock. */
+@@ -2004,7 +2004,11 @@ void GC_register_data_segments(void)
+ ABORT_ARG2("Wrong DATASTART/END pair",
+ ": %p .. %p", (void *)region_start, (void *)DATAEND);
+ for (;;) {
++# ifdef GC_OPENBSD_UTHREADS
+ ptr_t region_end = GC_find_limit_openbsd(region_start, DATAEND);
++# else
++ ptr_t region_end = GC_find_limit_with_bound(region_start, TRUE, DATAEND);
++# endif
+
+ GC_add_roots_inner(region_start, region_end, FALSE);
+ if ((word)region_end >= (word)DATAEND)
Index: pkg/PLIST-atomic
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/pkg/PLIST-atomic,v
retrieving revision 1.6
diff -u -p -u -r1.6 PLIST-atomic
--- pkg/PLIST-atomic 30 Dec 2018 17:08:09 -0000 1.6
+++ pkg/PLIST-atomic 4 Feb 2021 14:13:31 -0000
@@ -75,10 +75,10 @@ include/atomic_ops/sysdeps/test_and_set_
include/atomic_ops/sysdeps/test_and_set_t_is_char.h
include/atomic_ops_malloc.h
include/atomic_ops_stack.h
-lib/libatomic_ops.a
+@static-lib lib/libatomic_ops.a
lib/libatomic_ops.la
@lib lib/libatomic_ops.so.${LIBatomic_ops_VERSION}
-lib/libatomic_ops_gpl.a
+@static-lib lib/libatomic_ops_gpl.a
lib/libatomic_ops_gpl.la
@lib lib/libatomic_ops_gpl.so.${LIBatomic_ops_gpl_VERSION}
lib/pkgconfig/atomic_ops.pc
Index: pkg/PLIST-main
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/pkg/PLIST-main,v
retrieving revision 1.5
diff -u -p -u -r1.5 PLIST-main
--- pkg/PLIST-main 12 Nov 2016 10:33:04 -0000 1.5
+++ pkg/PLIST-main 4 Feb 2021 14:13:31 -0000
@@ -20,51 +20,50 @@ include/gc/gc_typed.h
include/gc/gc_version.h
include/gc/javaxfc.h
include/gc/leak_detector.h
-include/gc/weakpointer.h
include/gc_cpp.h
-lib/libcord.a
+@static-lib lib/libcord.a
lib/libcord.la
@lib lib/libcord.so.${LIBcord_VERSION}
-lib/libgc.a
+@static-lib lib/libgc.a
lib/libgc.la
@lib lib/libgc.so.${LIBgc_VERSION}
-lib/libgccpp.a
+@static-lib lib/libgccpp.a
lib/libgccpp.la
@lib lib/libgccpp.so.${LIBgccpp_VERSION}
lib/pkgconfig/bdw-gc.pc
@man man/man3/gc.3
-share/gc/
-share/gc/AUTHORS
-share/gc/README.DGUX386
-share/gc/README.Mac
-share/gc/README.OS2
-share/gc/README.amiga
-share/gc/README.arm.cross
-share/gc/README.autoconf
-share/gc/README.cmake
-share/gc/README.cords
-share/gc/README.darwin
-share/gc/README.environment
-share/gc/README.ews4800
-share/gc/README.hp
-share/gc/README.linux
-share/gc/README.macros
-share/gc/README.md
-share/gc/README.rs6000
-share/gc/README.sgi
-share/gc/README.solaris2
-share/gc/README.symbian
-share/gc/README.uts
-share/gc/README.win32
-share/gc/README.win64
-share/gc/debugging.html
-share/gc/finalization.html
@comment share/gc/gc.man
-share/gc/gcdescr.html
-share/gc/gcinterface.html
-share/gc/leak.html
-share/gc/overview.html
-share/gc/porting.html
-share/gc/scale.html
-share/gc/simple_example.html
-share/gc/tree.html
+share/doc/gc/
+share/doc/gc/AUTHORS
+share/doc/gc/README.DGUX386
+share/doc/gc/README.Mac
+share/doc/gc/README.OS2
+share/doc/gc/README.amiga
+share/doc/gc/README.arm.cross
+share/doc/gc/README.autoconf
+share/doc/gc/README.cmake
+share/doc/gc/README.cords
+share/doc/gc/README.darwin
+share/doc/gc/README.environment
+share/doc/gc/README.ews4800
+share/doc/gc/README.hp
+share/doc/gc/README.linux
+share/doc/gc/README.macros
+share/doc/gc/README.md
+share/doc/gc/README.rs6000
+share/doc/gc/README.sgi
+share/doc/gc/README.solaris2
+share/doc/gc/README.symbian
+share/doc/gc/README.uts
+share/doc/gc/README.win32
+share/doc/gc/README.win64
+share/doc/gc/debugging.md
+share/doc/gc/finalization.md
+share/doc/gc/gcdescr.md
+share/doc/gc/gcinterface.md
+share/doc/gc/leak.md
+share/doc/gc/overview.md
+share/doc/gc/porting.md
+share/doc/gc/scale.md
+share/doc/gc/simple_example.md
+share/doc/gc/tree.md
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/Makefile,v
retrieving revision 1.75
diff -u -p -u -r1.75 Makefile
--- Makefile 24 Aug 2020 21:31:13 -0000 1.75
+++ Makefile 4 Feb 2021 14:13:31 -0000
@@ -3,8 +3,8 @@
COMMENT-main= garbage collection and memory leak detection for C and C++
COMMENT-atomic= access to hardware provided atomic memory operations
-VERSION= 7.6.0
-LIBAO_VERSION= 7.6.6
+VERSION= 8.0.4
+LIBAO_VERSION= 7.6.10
# has various machine-dependent parts; updates definitely need
# tests on more than just amd64.
@@ -12,7 +12,6 @@ DISTNAME= gc-${VERSION}
PKGNAME-atomic= libatomic_ops-${LIBAO_VERSION}
PKGNAME-main= boehm-gc-${VERSION}
-REVISION= 6
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
libatomic_ops-${LIBAO_VERSION}${EXTRACT_SUFX}
@@ -20,11 +19,11 @@ DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
MULTI_PACKAGES= -main -atomic
DEBUG_PACKAGES= ${BUILD_PACKAGES}
-SHARED_LIBS += gc 4.0 # 1.3
-SHARED_LIBS += gccpp 0.0 # 1.3
-SHARED_LIBS += cord 2.3 # 1.3
-SHARED_LIBS += atomic_ops 2.0 # 1.3
-SHARED_LIBS += atomic_ops_gpl 2.0 # 1.3
+SHARED_LIBS += gc 5.0 # 5.3
+SHARED_LIBS += gccpp 1.0 # 5.0
+SHARED_LIBS += cord 3.0 # 5.0
+SHARED_LIBS += atomic_ops 3.0 # 2.1
+SHARED_LIBS += atomic_ops_gpl 3.0 # 2.2
CATEGORIES= devel
@@ -49,7 +48,9 @@ CONFIGURE_STYLE= gnu
CONFIGURE_ARGS= --with-libatomic-ops=no \
--enable-cplusplus \
- --enable-threads=pthreads
+ --enable-threads=pthreads \
+ --enable-mmap \
+ --enable-static=yes
post-extract:
@perl -pi -e "s,/usr/local,${PREFIX},g" ${WRKSRC}/doc/gc.man
Index: distinfo
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/distinfo,v
retrieving revision 1.11
diff -u -p -u -r1.11 distinfo
--- distinfo 30 Dec 2018 17:08:09 -0000 1.11
+++ distinfo 4 Feb 2021 14:13:31 -0000
@@ -1,4 +1,4 @@
-SHA256 (gc-7.6.0.tar.gz) = oUoosRKb6Q5VzW9xEn/8VZThCR1dVBMVKMJM0MA7fZA=
-SHA256 (libatomic_ops-7.6.6.tar.gz) = mf6rxfVId/MU20+t6xCfCz4dGlSvtrSz37oecH444HQ=
-SIZE (gc-7.6.0.tar.gz) = 1111751
-SIZE (libatomic_ops-7.6.6.tar.gz) = 498187
+SHA256 (gc-8.0.4.tar.gz) = Q2oN3GexrAsEBbYalnW8qeB1yBVvTevR0G86VsfNKJ0=
+SHA256 (libatomic_ops-7.6.10.tar.gz) = WH7fYIF/Vtrx4as4pLPHKbjoRv9ntPYqYVcYNwjwma8=
+SIZE (gc-8.0.4.tar.gz) = 1160528
+SIZE (libatomic_ops-7.6.10.tar.gz) = 503734
Index: patches/patch-bdw-gc_pc_in
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/patches/patch-bdw-gc_pc_in,v
retrieving revision 1.1
diff -u -p -u -r1.1 patch-bdw-gc_pc_in
--- patches/patch-bdw-gc_pc_in 9 Dec 2009 20:36:49 -0000 1.1
+++ patches/patch-bdw-gc_pc_in 4 Feb 2021 14:13:31 -0000
@@ -1,10 +1,11 @@
$OpenBSD: patch-bdw-gc_pc_in,v 1.1 2009/12/09 20:36:49 sthen Exp $
---- bdw-gc.pc.in.orig Mon Dec 7 10:57:34 2009
-+++ bdw-gc.pc.in Mon Dec 7 10:57:46 2009
+Index: bdw-gc.pc.in
+--- bdw-gc.pc.in.orig
++++ bdw-gc.pc.in
@@ -6,5 +6,5 @@ includedir=@includedir@
Name: Boehm-Demers-Weiser Conservative Garbage Collector
Description: A garbage collector for C and C++
Version: @PACKAGE_VERSION@
--Libs: -L${libdir} -lgc
-+Libs: -L${libdir} -lgc -pthread
+-Libs: -L${libdir} @ATOMIC_OPS_LIBS@ -lgc
++Libs: -L${libdir} @ATOMIC_OPS_LIBS@ -lgc -pthread
Cflags: -I${includedir}
Index: patches/patch-dyn_load_c
===================================================================
RCS file: patches/patch-dyn_load_c
diff -N patches/patch-dyn_load_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-dyn_load_c 4 Feb 2021 14:13:31 -0000
@@ -0,0 +1,33 @@
+$OpenBSD$
+
+- Remove old HAVE_DL_ITERATE_PHDR workaround for OpenBSD
+
+Index: dyn_load.c
+--- dyn_load.c.orig
++++ dyn_load.c
+@@ -81,13 +81,6 @@ STATIC GC_has_static_roots_func GC_has_static_roots =
+ # define ELFSIZE ARCH_ELFSIZE
+ #endif
+
+-#if defined(OPENBSD)
+-# include <sys/param.h>
+-# if (OpenBSD >= 200519) && !defined(HAVE_DL_ITERATE_PHDR)
+-# define HAVE_DL_ITERATE_PHDR
+-# endif
+-#endif /* OPENBSD */
+-
+ #if defined(SCO_ELF) || defined(DGUX) || defined(HURD) \
+ || (defined(__ELF__) && (defined(LINUX) || defined(FREEBSD) \
+ || defined(NACL) || defined(NETBSD) \
+@@ -150,8 +143,10 @@ STATIC GC_has_static_roots_func GC_has_static_roots =
+ # elif defined(NETBSD) || defined(OPENBSD)
+ # if ELFSIZE == 32
+ # define ElfW(type) Elf32_##type
+-# else
++# elif ELFSIZE == 64
+ # define ElfW(type) Elf64_##type
++# else
++# error Missing required ELFSIZE define
+ # endif
+ # else
+ # if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32
Index: patches/patch-include_gc_config_macros_h
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/patches/patch-include_gc_config_macros_h,v
retrieving revision 1.3
diff -u -p -u -r1.3 patch-include_gc_config_macros_h
--- patches/patch-include_gc_config_macros_h 9 Feb 2014 06:01:54 -0000 1.3
+++ patches/patch-include_gc_config_macros_h 4 Feb 2021 14:13:31 -0000
@@ -1,21 +1,24 @@
-$OpenBSD: patch-include_gc_config_macros_h,v 1.3 2014/02/09 06:01:54 shadchin Exp $
---- include/gc_config_macros.h.orig Sat Jan 18 23:56:01 2014
-+++ include/gc_config_macros.h Sat Jan 18 23:54:59 2014
-@@ -87,14 +87,14 @@
- # if defined(__mips) && !defined(__linux__)
- # define GC_IRIX_THREADS
- # endif
--# if defined(__sparc) && !defined(__linux__) \
-+# if defined(__OpenBSD__)
+$OpenBSD$
+
+- make sure the check for GC_OPENBSD_THREADS is before any arch
+ specific checks
+
+Index: include/gc_config_macros.h
+--- include/gc_config_macros.h.orig
++++ include/gc_config_macros.h
+@@ -83,13 +83,13 @@
+ #elif defined(GC_THREADS)
+ # if defined(__linux__)
+ # define GC_LINUX_THREADS
++# elif defined(__OpenBSD__)
+# define GC_OPENBSD_THREADS
-+# elif defined(__sparc) && !defined(__linux__) \
- || defined(sun) && (defined(i386) || defined(__i386__) \
- || defined(__amd64__))
- # define GC_SOLARIS_THREADS
- # elif defined(__APPLE__) && defined(__MACH__)
- # define GC_DARWIN_THREADS
+ # elif defined(_PA_RISC1_1) || defined(_PA_RISC2_0) || defined(hppa) \
+ || defined(__HPPA) || (defined(__ia64) && defined(_HPUX_SOURCE))
+ # define GC_HPUX_THREADS
+ # elif defined(__HAIKU__)
+ # define GC_HAIKU_THREADS
-# elif defined(__OpenBSD__)
-# define GC_OPENBSD_THREADS
- # elif !defined(GC_LINUX_THREADS) && !defined(GC_HPUX_THREADS) \
- && !defined(GC_OSF1_THREADS) && !defined(GC_IRIX_THREADS)
- /* FIXME: Should we really need for FreeBSD and NetBSD to check */
+ # elif defined(__DragonFly__) || defined(__FreeBSD_kernel__) \
+ || (defined(__FreeBSD__) && !defined(SN_TARGET_ORBIS))
+ # define GC_FREEBSD_THREADS
Index: patches/patch-include_private_gcconfig_h
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/patches/patch-include_private_gcconfig_h,v
retrieving revision 1.23
diff -u -p -u -r1.23 patch-include_private_gcconfig_h
--- patches/patch-include_private_gcconfig_h 24 Aug 2020 21:31:13 -0000 1.23
+++ patches/patch-include_private_gcconfig_h 4 Feb 2021 14:13:31 -0000
@@ -1,46 +1,36 @@
-$OpenBSD: patch-include_private_gcconfig_h,v 1.23 2020/08/24 21:31:13 gkoehler Exp $
+$OpenBSD$
-- use mmap, not sbrk, on OpenBSD
+- define USE_MMAP_ANON on OpenBSD when USE_MMAP is defined
- All OpenBSD mips platforms are 64-bit, so correct the wordsize and alignment
- use __data_start instead of _fdata on OpenBSD/mips64
- add support for OpenBSD/aarch64 and powerpc64
+- Remove unused ELF_CLASS for OpenBSD
Index: include/private/gcconfig.h
--- include/private/gcconfig.h.orig
+++ include/private/gcconfig.h
-@@ -76,6 +76,10 @@
- /* And one for OpenBSD: */
- # if defined(__OpenBSD__)
- # define OPENBSD
-+# ifndef USE_MMAP
-+# define USE_MMAP
-+# endif
-+# define USE_MMAP_ANON
- # endif
-
- /* And one for FreeBSD: */
-@@ -102,7 +106,8 @@
- # endif
+@@ -160,7 +160,8 @@ EXTERN_C_BEGIN
# if defined(__aarch64__)
# define AARCH64
--# if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD)
-+# if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
-+ && !defined(OPENBSD)
+ # if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
+- && !defined(NETBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX)
++ && !defined(NETBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX) \
++ && !defined(OPENBSD)
# define NOSYS
# define mach_type_known
# endif
-@@ -137,6 +142,10 @@
+@@ -196,6 +197,10 @@ EXTERN_C_BEGIN
# define ARM32
# define mach_type_known
# endif
+# if defined(OPENBSD) && defined(__aarch64__)
-+# define AARCH64
-+# define mach_type_known
++# define AARCH64
++# define mach_type_known
+# endif
# if defined(OPENBSD) && defined(__sh__)
# define SH
# define mach_type_known
-@@ -962,7 +971,12 @@
+@@ -1076,7 +1081,12 @@ EXTERN_C_BEGIN
# endif
# ifdef OPENBSD
# define OS_TYPE "OPENBSD"
@@ -52,44 +42,69 @@ Index: include/private/gcconfig.h
+# define ALIGNMENT 4
+# endif
# ifndef GC_OPENBSD_THREADS
+ EXTERN_C_END
# include <sys/param.h>
- # include <uvm/uvm_extern.h>
-@@ -1712,14 +1726,15 @@
+@@ -1847,7 +1857,8 @@ EXTERN_C_BEGIN
# endif
# ifdef OPENBSD
- # define OS_TYPE "OPENBSD"
--# define ALIGNMENT 4
-+# define CPP_WORDSZ 64
-+# define ALIGNMENT 8
+ # define OS_TYPE "OPENBSD"
+-# define ALIGNMENT 4
++# define CPP_WORDSZ 64
++# define ALIGNMENT 8
# ifndef GC_OPENBSD_THREADS
- # include <sys/param.h>
- # include <uvm/uvm_extern.h>
- # define STACKBOTTOM ((ptr_t)USRSTACK)
- # endif
-- extern int _fdata[];
--# define DATASTART ((ptr_t)_fdata)
-+ extern int __data_start[];
-+# define DATASTART ((ptr_t)__data_start)
- extern int _end[];
- # define DATAEND ((ptr_t)(&_end))
- # define DYNAMIC_LOADING
-@@ -2165,6 +2180,19 @@
- extern char etext[];
- # define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext)
- # define DATASTART_USES_BSDGETDATASTART
-+# endif
+ EXTERN_C_END
+ # include <sys/param.h>
+@@ -1859,8 +1870,8 @@ EXTERN_C_BEGIN
+ # define HEURISTIC2
+ # endif
+ # endif
+- extern int _fdata[];
+-# define DATASTART ((ptr_t)_fdata)
++ extern int __data_start[];
++# define DATASTART ((ptr_t)__data_start)
+ extern int _end[];
+ # define DATAEND ((ptr_t)(&_end))
+ # define DYNAMIC_LOADING
+@@ -2019,7 +2030,6 @@ EXTERN_C_BEGIN
+ # endif
+ # ifdef OPENBSD
+ # define OS_TYPE "OPENBSD"
+-# define ELF_CLASS ELFCLASS64
+ # ifndef GC_OPENBSD_THREADS
+ EXTERN_C_END
+ # include <sys/param.h>
+@@ -2345,6 +2355,17 @@ EXTERN_C_BEGIN
+ void *switch_get_stack_bottom(void);
+ # define STACKBOTTOM ((ptr_t)switch_get_stack_bottom())
+ # endif
+# ifdef OPENBSD
+# define OS_TYPE "OPENBSD"
+# ifndef GC_OPENBSD_THREADS
-+# include <sys/param.h>
-+# include <uvm/uvm_extern.h>
-+# define STACKBOTTOM ((ptr_t)USRSTACK)
++# define HEURISTIC2
+# endif
+ extern int __data_start[];
+# define DATASTART ((ptr_t)__data_start)
+ extern int _end[];
+# define DATAEND ((ptr_t)(&_end))
+# define DYNAMIC_LOADING
- # endif
++# endif
# ifdef NOSYS
/* __data_start is usually defined in the target linker script. */
+ extern int __data_start[];
+@@ -2604,7 +2625,6 @@ EXTERN_C_BEGIN
+ # endif
+ # ifdef OPENBSD
+ # define OS_TYPE "OPENBSD"
+-# define ELF_CLASS ELFCLASS64
+ # ifndef GC_OPENBSD_THREADS
+ EXTERN_C_END
+ # include <sys/param.h>
+@@ -2906,6 +2926,8 @@ EXTERN_C_BEGIN
+ #elif defined(LINUX) && defined(USE_MMAP)
+ /* The kernel may do a somewhat better job merging mappings etc. */
+ /* with anonymous mappings. */
++# define USE_MMAP_ANON
++#elif defined(OPENBSD) && defined(USE_MMAP)
+ # define USE_MMAP_ANON
+ #endif
+
Index: patches/patch-os_dep_c
===================================================================
RCS file: patches/patch-os_dep_c
diff -N patches/patch-os_dep_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-os_dep_c 4 Feb 2021 14:13:31 -0000
@@ -0,0 +1,57 @@
+$OpenBSD$
+
+- GC_find_limit_openbsd is only needed for uthreads
+
+Index: os_dep.c
+--- os_dep.c.orig
++++ os_dep.c
+@@ -514,23 +514,22 @@ GC_INNER char * GC_get_maps(void)
+ static struct sigaction old_segv_act;
+ STATIC JMP_BUF GC_jmp_buf_openbsd;
+
+-# ifdef THREADS
++ STATIC void GC_fault_handler_openbsd(int sig GC_ATTR_UNUSED)
++ {
++ LONGJMP(GC_jmp_buf_openbsd, 1);
++ }
++
++# ifdef GC_OPENBSD_UTHREADS
+ # include <sys/syscall.h>
+ EXTERN_C_BEGIN
+ extern sigset_t __syscall(quad_t, ...);
+ EXTERN_C_END
+-# endif
+
+ /* Don't use GC_find_limit() because siglongjmp() outside of the */
+ /* signal handler by-passes our userland pthreads lib, leaving */
+ /* SIGSEGV and SIGPROF masked. Instead, use this custom one that */
+ /* works-around the issues. */
+
+- STATIC void GC_fault_handler_openbsd(int sig GC_ATTR_UNUSED)
+- {
+- LONGJMP(GC_jmp_buf_openbsd, 1);
+- }
+-
+ /* Return the first non-addressable location > p or bound. */
+ /* Requires the allocation lock. */
+ STATIC ptr_t GC_find_limit_openbsd(ptr_t p, ptr_t bound)
+@@ -573,6 +572,7 @@ GC_INNER char * GC_get_maps(void)
+ sigaction(SIGSEGV, &old_segv_act, 0);
+ return(result);
+ }
++# endif
+
+ /* Return first addressable location > p or bound. */
+ /* Requires the allocation lock. */
+@@ -2004,7 +2004,11 @@ void GC_register_data_segments(void)
+ ABORT_ARG2("Wrong DATASTART/END pair",
+ ": %p .. %p", (void *)region_start, (void *)DATAEND);
+ for (;;) {
++# ifdef GC_OPENBSD_UTHREADS
+ ptr_t region_end = GC_find_limit_openbsd(region_start, DATAEND);
++# else
++ ptr_t region_end = GC_find_limit_with_bound(region_start, TRUE, DATAEND);
++# endif
+
+ GC_add_roots_inner(region_start, region_end, FALSE);
+ if ((word)region_end >= (word)DATAEND)
Index: pkg/PLIST-atomic
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/pkg/PLIST-atomic,v
retrieving revision 1.6
diff -u -p -u -r1.6 PLIST-atomic
--- pkg/PLIST-atomic 30 Dec 2018 17:08:09 -0000 1.6
+++ pkg/PLIST-atomic 4 Feb 2021 14:13:31 -0000
@@ -75,10 +75,10 @@ include/atomic_ops/sysdeps/test_and_set_
include/atomic_ops/sysdeps/test_and_set_t_is_char.h
include/atomic_ops_malloc.h
include/atomic_ops_stack.h
-lib/libatomic_ops.a
+@static-lib lib/libatomic_ops.a
lib/libatomic_ops.la
@lib lib/libatomic_ops.so.${LIBatomic_ops_VERSION}
-lib/libatomic_ops_gpl.a
+@static-lib lib/libatomic_ops_gpl.a
lib/libatomic_ops_gpl.la
@lib lib/libatomic_ops_gpl.so.${LIBatomic_ops_gpl_VERSION}
lib/pkgconfig/atomic_ops.pc
Index: pkg/PLIST-main
===================================================================
RCS file: /cvs/ports/devel/boehm-gc/pkg/PLIST-main,v
retrieving revision 1.5
diff -u -p -u -r1.5 PLIST-main
--- pkg/PLIST-main 12 Nov 2016 10:33:04 -0000 1.5
+++ pkg/PLIST-main 4 Feb 2021 14:13:31 -0000
@@ -20,51 +20,50 @@ include/gc/gc_typed.h
include/gc/gc_version.h
include/gc/javaxfc.h
include/gc/leak_detector.h
-include/gc/weakpointer.h
include/gc_cpp.h
-lib/libcord.a
+@static-lib lib/libcord.a
lib/libcord.la
@lib lib/libcord.so.${LIBcord_VERSION}
-lib/libgc.a
+@static-lib lib/libgc.a
lib/libgc.la
@lib lib/libgc.so.${LIBgc_VERSION}
-lib/libgccpp.a
+@static-lib lib/libgccpp.a
lib/libgccpp.la
@lib lib/libgccpp.so.${LIBgccpp_VERSION}
lib/pkgconfig/bdw-gc.pc
@man man/man3/gc.3
-share/gc/
-share/gc/AUTHORS
-share/gc/README.DGUX386
-share/gc/README.Mac
-share/gc/README.OS2
-share/gc/README.amiga
-share/gc/README.arm.cross
-share/gc/README.autoconf
-share/gc/README.cmake
-share/gc/README.cords
-share/gc/README.darwin
-share/gc/README.environment
-share/gc/README.ews4800
-share/gc/README.hp
-share/gc/README.linux
-share/gc/README.macros
-share/gc/README.md
-share/gc/README.rs6000
-share/gc/README.sgi
-share/gc/README.solaris2
-share/gc/README.symbian
-share/gc/README.uts
-share/gc/README.win32
-share/gc/README.win64
-share/gc/debugging.html
-share/gc/finalization.html
@comment share/gc/gc.man
-share/gc/gcdescr.html
-share/gc/gcinterface.html
-share/gc/leak.html
-share/gc/overview.html
-share/gc/porting.html
-share/gc/scale.html
-share/gc/simple_example.html
-share/gc/tree.html
+share/doc/gc/
+share/doc/gc/AUTHORS
+share/doc/gc/README.DGUX386
+share/doc/gc/README.Mac
+share/doc/gc/README.OS2
+share/doc/gc/README.amiga
+share/doc/gc/README.arm.cross
+share/doc/gc/README.autoconf
+share/doc/gc/README.cmake
+share/doc/gc/README.cords
+share/doc/gc/README.darwin
+share/doc/gc/README.environment
+share/doc/gc/README.ews4800
+share/doc/gc/README.hp
+share/doc/gc/README.linux
+share/doc/gc/README.macros
+share/doc/gc/README.md
+share/doc/gc/README.rs6000
+share/doc/gc/README.sgi
+share/doc/gc/README.solaris2
+share/doc/gc/README.symbian
+share/doc/gc/README.uts
+share/doc/gc/README.win32
+share/doc/gc/README.win64
+share/doc/gc/debugging.md
+share/doc/gc/finalization.md
+share/doc/gc/gcdescr.md
+share/doc/gc/gcinterface.md
+share/doc/gc/leak.md
+share/doc/gc/overview.md
+share/doc/gc/porting.md
+share/doc/gc/scale.md
+share/doc/gc/simple_example.md
+share/doc/gc/tree.md