-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Robert,
> A small bit of advice: > > - The extra libraries could be linked statically instead of providing them > as packages. This solves the libavl API conflict. > - The alloca and __unused hacks could be done via CFLAGS (other packages > of FreeBSD code do this IIRC) > - Instead of embedding strlcpy() you can use the one in libbsd. I prepared a new version of the patch. Apply it as explained last time. This time I followed your advise and moreover I fixed some problems to get those binaries really working. zdb and zinject seem to be fine now, ztest segfaults after a bit, but that seems to be an upstream issue [1]. I don't know FreeBSD well enough to tell whether this bug has been fixed in trunk or not. The patch now links statically against libavl, adds a libumem0 and a libzpool0 library (both with udeb and -dev) and tweaks some Makefiles to get things working. I replaced the alloca(x) hack by a CFLAGS argument as you suggested, but I still left the __unused hack as is since it appears only a single time. Moreover I added another patch fixing some upstream quirks in ztest by cherry picking some commits from upstream. This gets ztest at least running, but still fails upon a certain point. This patch is DEP-3 complaint to ease tracking for you in future. You may drop it, as soon as you switch to a new(er) upstream branch. [1] http://freebsd.1045724.n5.nabble.com/How-to-run-ZFS-Test-Suite-ztest-td4034131.html - -- with kind regards, Arno Töll GnuPG Key-ID: 0x8408D4C4 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQIcBAEBAgAGBQJNnO2qAAoJELBdpXvEXpo9jd4P/ioYW4MUjw/gj/6YoaWy7nYs 9V/8GD0G6Od1PhCVPc6cjqTiyR7qoB883Io+4fRmpo0a8wd1ZFNU4PjXPV22jSpn y9ZtmD3oTAKOy6DAsn5tLNhVYArNAbuQAQLNp2j8M1NeMZTtfDTtSLfdoJAtoAGw cOcssSWvk+BNV2+WZ4EClab0ogDjSX2wfxmpgsuO0kBkOfOIGvJxK3xmqSOU+DDB yebZZM362fBLbuyxYN1PsV2Sdq57HuVVJ7K6g8kB+2RakyKtP8WSCXa7Es4WjB10 2KhpVQKscl2ajJWJfidUF4RjgO8D3eOt6S0QVeNWa94dqneQ2rMUxH3CkxTQCHU4 8Bn0yuTVrK+UxvwI31QbhEmGTeJ4Q1oNDL2Ptd4JAlOcz3X1zM9yGtsJt3OSLY1D WhEyUQJ3uzTrIdoT+JqAApz0dPVf08iXLTryJeKUorbT24LSWoN0N6hr6ug2LwmL E7TrmXKptiTb7L34gX6dnXySjxKPcFexvXnZ1o/cPSE7BzcAJkXlN7YHi2X8ebFr Xnc1H+GQZ4Fwc6WP0iFAMgzaE3CJ7Bu7Aa1kI+KQQMb5AFO4boMzX2eCGC5sbHI7 jvYXcTAHLkV7aPzjCT79HVlju/0un6w5BcfJQZW/QNSFT1Uy/KIcLYQZLiwValA3 5DDl1a4zCuSwLrg7rk+B =c2FH -----END PGP SIGNATURE-----
diff -ruN debian.orig/control debian/control --- debian.orig/control 2011-03-16 14:57:19.000000000 -0400 +++ debian/control 2011-04-06 18:31:38.000000000 -0400 @@ -4,7 +4,8 @@ Maintainer: GNU/kFreeBSD Maintainers <[email protected]> Uploaders: Aurelien Jarno <[email protected]> Build-Depends: debhelper (>= 7), quilt, freebsd-buildutils, libbsd-dev (>= 0.1.4), - libc0.1-dev (>= 2.10), kfreebsd-kernel-headers (>= 0.51), libgeom-dev, libsbuf-dev + libc0.1-dev (>= 2.10), kfreebsd-kernel-headers (>= 0.51), libgeom-dev, libsbuf-dev, + zlib1g-dev Vcs-Browser: http://svn.debian.org/wsvn/glibc-bsd/trunk/zfsutils/ Vcs-Svn: svn://svn.debian.org/glibc-bsd/trunk/zfsutils/ Standards-Version: 3.9.1 @@ -116,3 +117,58 @@ ZFS filesystems. . This is a minimal package for use in debian-installer. + + +Package: libumem0 +Section: libs +Architecture: kfreebsd-any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: OpenSolaris name-value pair library + This package contains the OpenSolaris libumem library, to detect + memory management bugs in applications + +Package: libumem-dev +Section: libdevel +Architecture: kfreebsd-any +Depends: libumem0 (= ${binary:Version}), ${misc:Depends}, libc0.1-dev | libc-dev +Description: Development files for libnvpair + This package contains the header files and static library needed to + compile applications that use libumem. + +Package: libumem0-udeb +XC-Package-Type: udeb +Section: debian-installer +Architecture: kfreebsd-any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: OpenSolaris name-value pair library + This package contains the OpenSolaris libumem library, to detect + memory management bugs in applications + + +Package: libzpool0 +Section: libs +Architecture: kfreebsd-any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: OpenSolaris name-value pair library + This package contains the OpenSolaris libzpool library. + . + This is a minimal package for use in debian-installer. + +Package: libzpool-dev +Section: libdevel +Architecture: kfreebsd-any +Depends: libzpool0 (= ${binary:Version}), ${misc:Depends}, libc0.1-dev | libc-dev +Description: Development files for libnvpair + This package contains the header files and static library needed to + compile applications that use libzpool. + +Package: libzpool0-udeb +XC-Package-Type: udeb +Section: debian-installer +Architecture: kfreebsd-any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: OpenSolaris name-value pair library + This package contains the OpenSolaris libzpool library. + . + This is a minimal package for use in debian-installer. + diff -ruN debian.orig/libumem0.install debian/libumem0.install --- debian.orig/libumem0.install 1969-12-31 19:00:00.000000000 -0500 +++ debian/libumem0.install 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +cddl/lib/libumem/libumem.so.0 lib diff -ruN debian.orig/libumem0-udeb.install debian/libumem0-udeb.install --- debian.orig/libumem0-udeb.install 1969-12-31 19:00:00.000000000 -0500 +++ debian/libumem0-udeb.install 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +cddl/lib/libumem/libumem.so.0 lib diff -ruN debian.orig/libumem-dev.install debian/libumem-dev.install --- debian.orig/libumem-dev.install 1969-12-31 19:00:00.000000000 -0500 +++ debian/libumem-dev.install 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +cddl/lib/libumem/libumem.a usr/lib diff -ruN debian.orig/libumem-dev.links debian/libumem-dev.links --- debian.orig/libumem-dev.links 1969-12-31 19:00:00.000000000 -0500 +++ debian/libumem-dev.links 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +lib/libumem.so.0 usr/lib/libumem.so diff -ruN debian.orig/libzpool0.install debian/libzpool0.install --- debian.orig/libzpool0.install 1969-12-31 19:00:00.000000000 -0500 +++ debian/libzpool0.install 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +cddl/lib/libzpool/libzpool.so.0 lib diff -ruN debian.orig/libzpool0-udeb.install debian/libzpool0-udeb.install --- debian.orig/libzpool0-udeb.install 1969-12-31 19:00:00.000000000 -0500 +++ debian/libzpool0-udeb.install 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +cddl/lib/libzpool/libzpool.so.0 lib diff -ruN debian.orig/libzpool-dev.install debian/libzpool-dev.install --- debian.orig/libzpool-dev.install 1969-12-31 19:00:00.000000000 -0500 +++ debian/libzpool-dev.install 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +cddl/lib/libzpool/libzpool.a usr/lib diff -ruN debian.orig/libzpool-dev.links debian/libzpool-dev.links --- debian.orig/libzpool-dev.links 1969-12-31 19:00:00.000000000 -0500 +++ debian/libzpool-dev.links 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1 @@ +lib/libzpool.so.0 usr/lib/libzpool.so diff -ruN debian.orig/patches/13_zpool.diff debian/patches/13_zpool.diff --- debian.orig/patches/13_zpool.diff 1969-12-31 19:00:00.000000000 -0500 +++ debian/patches/13_zpool.diff 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1,94 @@ +Index: zfsutils-8.1-patch/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c +=================================================================== +--- zfsutils-8.1-patch.orig/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c 2011-04-06 17:17:31.000000000 -0400 ++++ zfsutils-8.1-patch/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c 2011-04-06 17:17:47.000000000 -0400 +@@ -141,6 +141,9 @@ + extern uint64_t zfs_write_limit_max; + extern kmutex_t zfs_write_limit_lock; + ++ ++#define __unused __attribute__((unused)) ++ + #define ARC_REDUCE_DNLC_PERCENT 3 + uint_t arc_reduce_dnlc_percent = ARC_REDUCE_DNLC_PERCENT; + +Index: zfsutils-8.1-patch/cddl/usr.sbin/zdb/Makefile +=================================================================== +--- zfsutils-8.1-patch.orig/cddl/usr.sbin/zdb/Makefile 2011-04-06 17:17:31.000000000 -0400 ++++ zfsutils-8.1-patch/cddl/usr.sbin/zdb/Makefile 2011-04-06 17:17:47.000000000 -0400 +@@ -18,10 +18,19 @@ + CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common/sys + CFLAGS+= -I${.CURDIR}/../../../cddl/contrib/opensolaris/head + CFLAGS+= -I${.CURDIR}/../../lib/libumem ++CFLAGS+= -D'alloca(x)=__builtin_alloca(x)' ++ + + DPADD= ${LIBAVL} ${LIBGEOM} ${LIBM} ${LIBNVPAIR} ${LIBPTHREAD} ${LIBUMEM} \ + ${LIBUUTIL} ${LIBZ} ${LIBZFS} ${LIBZPOOL} +-LDADD= -lavl -lgeom -lm -lnvpair -lpthread -lumem -luutil -lz -lzfs -lzpool ++ ++LDADD= -lgeom -lm -lnvpair -lpthread -lumem -luutil -lz -lzfs -lzpool ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libumem ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libzpool ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libnvpair ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libuutil ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libzfs ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libavl ${.CURDIR}/../../../cddl/lib/libavl/libavl.a + + CSTD= c99 + +Index: zfsutils-8.1-patch/cddl/usr.bin/zinject/Makefile +=================================================================== +--- zfsutils-8.1-patch.orig/cddl/usr.bin/zinject/Makefile 2011-04-06 17:17:31.000000000 -0400 ++++ zfsutils-8.1-patch/cddl/usr.bin/zinject/Makefile 2011-04-06 17:17:47.000000000 -0400 +@@ -17,9 +17,16 @@ + CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common + CFLAGS+= -I${.CURDIR}/../../contrib/opensolaris/head + CFLAGS+= -I${.CURDIR}/../../lib/libumem ++CFLAGS+= -D'alloca(x)=__builtin_alloca(x)' + + DPADD= ${LIBAVL} ${LIBGEOM} ${LIBM} ${LIBNVPAIR} ${LIBUMEM} ${LIBUUTIL} \ + ${LIBZFS} ${LIBZPOOL} ${LIBUUTIL} +-LDADD= -lavl -lgeom -lm -lnvpair -lumem -luutil -lzfs -lzpool ++LDADD= -lgeom -lm -lnvpair -lumem -luutil -lzfs -lzpool ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libzpool ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libumem ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libnvpair ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libuutil ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libzfs ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libavl ${.CURDIR}/../../../cddl/lib/libavl/libavl.a + + .include <bsd.prog.mk> +Index: zfsutils-8.1-patch/cddl/usr.bin/ztest/Makefile +=================================================================== +--- zfsutils-8.1-patch.orig/cddl/usr.bin/ztest/Makefile 2011-04-06 17:17:31.000000000 -0400 ++++ zfsutils-8.1-patch/cddl/usr.bin/ztest/Makefile 2011-04-06 17:21:32.000000000 -0400 +@@ -14,10 +14,15 @@ + CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common + CFLAGS+= -I${.CURDIR}/../../contrib/opensolaris/head + CFLAGS+= -I${.CURDIR}/../../lib/libumem ++CFLAGS+= -D'alloca(x)=__builtin_alloca(x)' + + DPADD= ${LIBM} ${LIBNVPAIR} ${LIBUMEM} ${LIBZPOOL} \ + ${LIBPTHREAD} ${LIBZ} ${LIBAVL} +-LDADD= -lm -lnvpair -lumem -lzpool -lpthread -lz -lavl ++LDADD= -lm -lnvpair -lumem -lzpool -lpthread -lz -lrt -ldl -lbsd ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libzpool ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libumem ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libnvpair ++LDADD+= -L${.CURDIR}/../../../cddl/lib/libavl ${.CURDIR}/../../../cddl/lib/libavl/libavl.a + + CSTD= c99 + +Index: zfsutils-8.1-patch/cddl/lib/libzpool/Makefile +=================================================================== +--- zfsutils-8.1-patch.orig/cddl/lib/libzpool/Makefile 2011-04-06 17:17:31.000000000 -0400 ++++ zfsutils-8.1-patch/cddl/lib/libzpool/Makefile 2011-04-06 17:17:47.000000000 -0400 +@@ -51,6 +51,7 @@ + CFLAGS+= -I${.CURDIR}/../../../lib/libpthread/thread + CFLAGS+= -I${.CURDIR}/../../../lib/libpthread/sys + CFLAGS+= -I${.CURDIR}/../../../lib/libthr/arch/${MACHINE_ARCH}/include ++CFLAGS+= -D'alloca(x)=__builtin_alloca(x)' + + DPADD= ${LIBPTHREAD} ${LIBZ} + LDADD= -lpthread -lz diff -ruN debian.orig/patches/14_ztest.fix debian/patches/14_ztest.fix --- debian.orig/patches/14_ztest.fix 1969-12-31 19:00:00.000000000 -0500 +++ debian/patches/14_ztest.fix 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1,52 @@ +From: Arno Töll <[email protected]> +Subject: Fix assertion problems for ztest + +* cddl/contrib/opensolaris/cmd/ztest/ztest.c Fix assertion +* cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Fix path problems + +Origin: upstream, + http://freshbsd.org/2010/11/01/10/42/14, + http://freshbsd.org/2010/11/01/10/41/05 + +Cherry pick patches from upstream to get the `ztest' binary working in the + current Debian version of zfsutils. This patch may be removed, as soon + as a more recent vesion of zfsutils is shipped with Debian + +Last-Update: 2011-04-07 + +--- a/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c ++++ b/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c +@@ -306,9 +306,9 @@ + struct timeval tv; + clock_t delta; + +- ASSERT(abstime > 0); ++ abstime += lbolt; + top: +- delta = abstime; ++ delta = abstime - lbolt; + if (delta <= 0) + return (-1); + +@@ -319,7 +319,7 @@ + ts.tv_nsec = tv.tv_usec * 1000 + (delta % hz) * (NANOSEC / hz); + ASSERT(ts.tv_nsec >= 0); + +- if(ts.tv_nsec >= NANOSEC) { ++ if (ts.tv_nsec >= NANOSEC) { + ts.tv_sec++; + ts.tv_nsec -= NANOSEC; + } +--- a/cddl/contrib/opensolaris/cmd/ztest/ztest.c ++++ b/cddl/contrib/opensolaris/cmd/ztest/ztest.c +@@ -2907,8 +2907,8 @@ + int isalen; + FILE *fp; + +- if (realpath(progname, zdb) == NULL) +- assert(!"realpath() failed"); ++ ++ strlcpy(zdb, "/usr/bin/ztest", sizeof(zdb)); + + /* zdb lives in /usr/sbin, while ztest lives in /usr/bin */ + bin = strstr(zdb, "/usr/bin/"); diff -ruN debian.orig/patches/series debian/patches/series --- debian.orig/patches/series 2011-03-16 14:57:19.000000000 -0400 +++ debian/patches/series 2011-04-06 18:31:38.000000000 -0400 @@ -10,3 +10,5 @@ 10_zpool_import.diff 11_endian.diff 12_freebsd.diff +13_zpool.diff +14_ztest.fix diff -ruN debian.orig/rules debian/rules --- debian.orig/rules 2011-03-16 14:57:19.000000000 -0400 +++ debian/rules 2011-04-06 18:31:38.000000000 -0400 @@ -4,7 +4,7 @@ SHELL=bash # Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 +export DH_VERBOSE=1 # This has to be exported to make some magic below work. export DH_OPTIONS @@ -42,8 +42,11 @@ cddl/contrib/opensolaris/lib/libzpool \ sys/cddl/compat/opensolaris \ sys/cddl/contrib/opensolaris \ - cddl/lib/libnvpair \ + cddl/lib/libavl \ + cddl/lib/libnvpair \ cddl/lib/libuutil \ + cddl/lib/libzpool \ + cddl/lib/libumem \ cddl/lib/libzfs \ cddl/sbin/zpool \ cddl/sbin/zfs \ @@ -63,7 +66,7 @@ QUILT_PATCHES=debian/patches quilt push -a || test $$? = 2 touch $@ -build: build-libuutil build-libnvpair build-libzfs build-zfsutils +build: build-libuutil build-libnvpair build-libzfs build-libumem build-libzpool build-zfsutils build-libavl build-libuutil: build-libuutil-stamp build-libuutil-stamp: patch @@ -80,10 +83,35 @@ $(PMAKE) -C $(CURDIR)/cddl/lib/libzfs touch $@ +build-libumem: build-libumem-stamp +build-libumem-stamp: patch + $(PMAKE) -C $(CURDIR)/cddl/lib/libumem + touch $@ + + +build-libzpool: build-libzpool-stamp +build-libzpool-stamp: patch + $(PMAKE) -C $(CURDIR)/cddl/lib/libzpool + touch $@ + +build-libzfs: build-libzfs-stamp +build-libzfs-stamp: patch build-libnvpair-stamp build-libuutil-stamp + $(PMAKE) -C $(CURDIR)/cddl/lib/libzfs + touch $@ + +build-libavl: build-libavl-stamp +build-libavl-stamp: patch + $(PMAKE) -C $(CURDIR)/cddl/lib/libavl + touch $@ + build-zfsutils: build-zfsutils-stamp -build-zfsutils-stamp: patch build-libzfs-stamp build-libnvpair-stamp build-libuutil-stamp +build-zfsutils-stamp: patch build-libzfs-stamp build-libnvpair-stamp build-libuutil-stamp build-libumem build-libzpool build-libavl $(PMAKE) -C $(CURDIR)/cddl/sbin/zpool $(PMAKE) -C $(CURDIR)/cddl/sbin/zfs + + $(PMAKE) -C $(CURDIR)/cddl/usr.sbin/zdb + $(PMAKE) -C $(CURDIR)/cddl/usr.bin/zinject + $(PMAKE) -C $(CURDIR)/cddl/usr.bin/ztest/ touch $@ clean: @@ -98,6 +126,14 @@ $(PMAKE) -C $(CURDIR)/cddl/sbin/zpool clean $(PMAKE) -C $(CURDIR)/cddl/sbin/zfs clean + + $(PMAKE) -C $(CURDIR)/cddl/lib/libumem clean + $(PMAKE) -C $(CURDIR)/cddl/lib/libzpool clean + $(PMAKE) -C $(CURDIR)/cddl/lib/libavl clean + $(PMAKE) -C $(CURDIR)/cddl/usr.sbin/zdb clean + $(PMAKE) -C $(CURDIR)/cddl/usr.bin/ztest clean + $(PMAKE) -C $(CURDIR)/cddl/usr.bin/zinject clean + QUILT_PATCHES=debian/patches quilt pop -a -R || test $$? = 2 rm -rf .pc rm -f *stamp @@ -108,7 +144,7 @@ dh_testroot dh_prep -s dh_installdirs -s - dh_install -s + dh_install -s --fail-missing # Build architecture-independent files here. binary-indep: build install @@ -135,6 +171,8 @@ dh_makeshlibs -plibnvpair0 --add-udeb=libnvpair0-udeb dh_makeshlibs -plibuutil0 --add-udeb=libuutil0-udeb dh_makeshlibs -plibzfs0 --add-udeb=libzfs0-udeb + dh_makeshlibs -pzpool0 --add-udeb=libzpool0-udeb + dh_makeshlibs -pumem0 --add-udeb=libumem0-udeb.install dh_makeshlibs -pzfsutils --add-udeb=zfsutils-udeb dh_installdeb -a dh_shlibdeps -a diff -ruN debian.orig/umem0.debhelper.log debian/umem0.debhelper.log --- debian.orig/umem0.debhelper.log 1969-12-31 19:00:00.000000000 -0500 +++ debian/umem0.debhelper.log 2011-04-06 18:31:38.000000000 -0400 @@ -0,0 +1,3 @@ +dh_makeshlibs +dh_makeshlibs +dh_makeshlibs diff -ruN debian.orig/zfsutils.install debian/zfsutils.install --- debian.orig/zfsutils.install 2011-03-16 14:57:19.000000000 -0400 +++ debian/zfsutils.install 2011-04-06 18:31:38.000000000 -0400 @@ -1,2 +1,5 @@ -cddl/sbin/zpool/zpool /sbin -cddl/sbin/zfs/zfs /sbin +cddl/sbin/zpool/zpool /sbin +cddl/sbin/zfs/zfs /sbin +cddl/usr.bin/zinject/zinject /usr/bin +cddl/usr.bin/ztest/ztest /usr/bin +cddl/usr.sbin/zdb/zdb /usr/sbin

