From 042546e3a12601034b99d0f4c52565989e03a0e1 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Thu, 13 Aug 2015 20:48:12 +0200 Subject: [PATCH] Add liblockdep packages liblockdep is in fairly bad shape - one patch needed to make it build at all, another to make it build in a separate directory successfully, and a third to fix the soname. And the install rule doesn't install its public headers. But maybe it will be useful. --- debian/build/tools/Makefile | 1 + debian/build/tools/lib/lockdep/Makefile | 26 +++++++++ debian/build/tools/lib/lockdep/lockdep.in | 2 + debian/liblockdep-dev.docs | 1 + debian/liblockdep-dev.install | 3 ++ debian/lockdep.install | 1 + debian/patches/lockdep-fix-headers.patch | 62 ++++++++++++++++++++++ debian/patches/lockdep-fix-oot-build.patch | 33 ++++++++++++ debian/patches/lockdep-fix-soname.patch | 11 ++++ debian/patches/series | 3 ++ debian/rules.real | 26 ++++++++- debian/templates/control.main.in | 25 +++++++++ 12 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 debian/build/tools/lib/lockdep/Makefile create mode 100644 debian/build/tools/lib/lockdep/lockdep.in create mode 100644 debian/liblockdep-dev.docs create mode 100644 debian/liblockdep-dev.install create mode 100644 debian/lockdep.install create mode 100644 debian/patches/lockdep-fix-headers.patch create mode 100644 debian/patches/lockdep-fix-oot-build.patch create mode 100644 debian/patches/lockdep-fix-soname.patch diff --git a/debian/build/tools/Makefile b/debian/build/tools/Makefile index 06bc26609..a3cdd8728 100644 --- a/debian/build/tools/Makefile +++ b/debian/build/tools/Makefile @@ -1,5 +1,6 @@ SUBDIRS = \ hv \ + lib/lockdep \ perf \ usb/usbip diff --git a/debian/build/tools/lib/lockdep/Makefile b/debian/build/tools/lib/lockdep/Makefile new file mode 100644 index 000000000..7c8408ffc --- /dev/null +++ b/debian/build/tools/lib/lockdep/Makefile @@ -0,0 +1,26 @@ +srcdir := $(top_srcdir)/tools/lib/lockdep + +DEB_HOST_MULTIARCH := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + +MAKE_LOCKDEP := $(MAKE) -C $(srcdir) O=$(CURDIR)/out V=1 \ + prefix=/usr libdir_relative=lib/$(DEB_HOST_MULTIARCH) \ + LIBLOCKDEP_VERSION=$(VERSION) + +unexport CFLAGS + +all: + mkdir -p out + $(MAKE_LOCKDEP) + +install: + $(MAKE_LOCKDEP) install + mkdir -p $(DESTDIR)/usr/include + cp -R $(srcdir)/include/liblockdep $(DESTDIR)/usr/include/ + ln -s liblockdep.so.$(VERSION) \ + $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/liblockdep.so +# Upstream lockdep preload script is not suitable for installation + sed 's/@VERSION@/$(VERSION)/' lockdep.in > $(DESTDIR)/usr/bin/lockdep + chmod 755 $(DESTDIR)/usr/bin/lockdep + +clean: + rm -rf out diff --git a/debian/build/tools/lib/lockdep/lockdep.in b/debian/build/tools/lib/lockdep/lockdep.in new file mode 100644 index 000000000..4a0d03ac5 --- /dev/null +++ b/debian/build/tools/lib/lockdep/lockdep.in @@ -0,0 +1,2 @@ +#!/bin/sh +LD_PRELOAD="liblockdep.so.@VERSION@ $LD_PRELOAD" exec "$@" diff --git a/debian/liblockdep-dev.docs b/debian/liblockdep-dev.docs new file mode 100644 index 000000000..15b2bbe12 --- /dev/null +++ b/debian/liblockdep-dev.docs @@ -0,0 +1 @@ +Documentation/locking/lockdep-design.txt diff --git a/debian/liblockdep-dev.install b/debian/liblockdep-dev.install new file mode 100644 index 000000000..bd857244b --- /dev/null +++ b/debian/liblockdep-dev.install @@ -0,0 +1,3 @@ +usr/include/liblockdep +usr/lib/*/liblockdep.a +usr/lib/*/liblockdep.so diff --git a/debian/lockdep.install b/debian/lockdep.install new file mode 100644 index 000000000..236942003 --- /dev/null +++ b/debian/lockdep.install @@ -0,0 +1 @@ +usr/bin/lockdep diff --git a/debian/patches/lockdep-fix-headers.patch b/debian/patches/lockdep-fix-headers.patch new file mode 100644 index 000000000..c0e3ced12 --- /dev/null +++ b/debian/patches/lockdep-fix-headers.patch @@ -0,0 +1,62 @@ +--- /dev/null ++++ b/tools/lib/lockdep/uinclude/linux/export.h +@@ -0,0 +1,10 @@ ++#ifndef _LINUX_EXPORT_H ++#define _LINUX_EXPORT_H ++ ++#define EXPORT_SYMBOL(sym) ++#define EXPORT_SYMBOL_GPL(sym) ++#define EXPORT_SYMBOL_GPL_FUTURE(sym) ++#define EXPORT_UNUSED_SYMBOL(sym) ++#define EXPORT_UNUSED_SYMBOL_GPL(sym) ++ ++#endif /* _LINUX_EXPORT_H */ +--- a/tools/lib/lockdep/uinclude/linux/kernel.h ++++ b/tools/lib/lockdep/uinclude/linux/kernel.h +@@ -23,7 +23,7 @@ + #define WARN_ON(x) (x) + #define WARN_ON_ONCE(x) (x) + #define likely(x) (x) +-#define WARN(x, y, z) (x) ++#define WARN(x, y...) (x) + #define uninitialized_var(x) x + #define __init + #define noinline +--- a/tools/lib/lockdep/preload.c ++++ b/tools/lib/lockdep/preload.c +@@ -5,7 +5,7 @@ + #include + #include + #include "include/liblockdep/mutex.h" +-#include "../../../include/linux/rbtree.h" ++#include + + /** + * struct lock_lookup - liblockdep's view of a single unique lock +--- a/tools/lib/lockdep/uinclude/linux/rbtree.h ++++ b/tools/lib/lockdep/uinclude/linux/rbtree.h +@@ -1 +1 @@ +-#include "../../../include/linux/rbtree.h" ++#include "../../include/linux/rbtree.h" +--- a/tools/lib/lockdep/uinclude/linux/compiler.h ++++ b/tools/lib/lockdep/uinclude/linux/compiler.h +@@ -4,4 +4,10 @@ + #define __used __attribute__((__unused__)) + #define unlikely + ++#define __ACCESS_ONCE(x) ({ \ ++ __attribute__((__unused__)) typeof(x) __var = (__force typeof(x)) 0; \ ++ (volatile typeof(x) *)&(x); }) ++#define ACCESS_ONCE(x) (*__ACCESS_ONCE(x)) ++#define WRITE_ONCE(x, val) (ACCESS_ONCE(x) = (val)) ++ + #endif +--- a/tools/lib/lockdep/uinclude/linux/rcu.h ++++ b/tools/lib/lockdep/uinclude/linux/rcu.h +@@ -18,4 +18,6 @@ static inline bool rcu_is_watching(void) + return false; + } + ++#define RCU_INIT_POINTER(p, v) (p = v) ++ + #endif diff --git a/debian/patches/lockdep-fix-oot-build.patch b/debian/patches/lockdep-fix-oot-build.patch new file mode 100644 index 000000000..20117433a --- /dev/null +++ b/debian/patches/lockdep-fix-oot-build.patch @@ -0,0 +1,33 @@ +--- a/tools/lib/lockdep/Makefile ++++ b/tools/lib/lockdep/Makefile +@@ -98,7 +98,7 @@ build := -f $(srctree)/tools/build/Makef + + do_compile_shared_library = \ + ($(print_shared_lib_compile) \ +- $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='"$@"';$(shell ln -s $@ liblockdep.so)) ++ $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='"$(@F)"';$(shell ln -s $(@F) $(@D)/liblockdep.so)) + + do_build_static_lib = \ + ($(print_static_lib_build) \ +@@ -116,10 +116,10 @@ all_cmd: $(CMD_TARGETS) + $(LIB_IN): force + $(Q)$(MAKE) $(build)=liblockdep + +-liblockdep.so.$(LIBLOCKDEP_VERSION): $(LIB_IN) ++$(OUTPUT)liblockdep.so.$(LIBLOCKDEP_VERSION): $(LIB_IN) + $(Q)$(do_compile_shared_library) + +-liblockdep.a: $(LIB_IN) ++$(OUTPUT)liblockdep.a: $(LIB_IN) + $(Q)$(do_build_static_lib) + + tags: force +@@ -147,7 +147,7 @@ install_lib: all_cmd + install: install_lib + + clean: +- $(RM) *.o *~ $(TARGETS) *.a *liblockdep*.so* $(VERSION_FILES) .*.d ++ $(RM) $(OUTPUT)*.o *~ $(TARGETS) $(OUTPUT)*.a $(OUTPUT)*liblockdep*.so* $(VERSION_FILES) $(OUTPUT).*.d + $(RM) tags TAGS + + PHONY += force diff --git a/debian/patches/lockdep-fix-soname.patch b/debian/patches/lockdep-fix-soname.patch new file mode 100644 index 000000000..dab83d6d1 --- /dev/null +++ b/debian/patches/lockdep-fix-soname.patch @@ -0,0 +1,11 @@ +--- a/tools/lib/lockdep/Makefile ++++ b/tools/lib/lockdep/Makefile +@@ -98,7 +98,7 @@ build := -f $(srctree)/tools/build/Makef + + do_compile_shared_library = \ + ($(print_shared_lib_compile) \ +- $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='"$(@F)"';$(shell ln -s $(@F) $(@D)liblockdep.so)) ++ $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='$(@F)';$(shell ln -s $(@F) $(@D)/liblockdep.so)) + + do_build_static_lib = \ + ($(print_static_lib_build) \ diff --git a/debian/patches/series b/debian/patches/series index d2cc300b9..e1943ce42 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -7,3 +7,6 @@ kbuild-fix-recordmcount-dependency.patch usbip-include-uninstalled-linux-usbip-h.patch tools-perf-man-date.patch tools-perf-add-empty-build-files-for-architectures-lacking.patch +lockdep-fix-oot-build.patch +lockdep-fix-headers.patch +lockdep-fix-soname.patch diff --git a/debian/rules.real b/debian/rules.real index 3f2669fb1..feaafa62f 100644 --- a/debian/rules.real +++ b/debian/rules.real @@ -3,7 +3,7 @@ export KBUILD_BUILD_TIMESTAMP := $(shell dpkg-parsechangelog | sed -ne 's,^Date: include debian/rules.defs -binary-arch: install-kbuild install-usbip +binary-arch: install-kbuild install-usbip install-lockdep ifneq ($(filter alpha amd64 arm64 armel armhf hppa i386 mips mips64 mips64el mipsel powerpc powerpcspe ppc64 ppc64el s390 s390x sh4 sparc sparc64 x32,$(DEB_BUILD_ARCH)),) binary-arch: install-perf endif @@ -103,3 +103,27 @@ install-hyperv-daemons: $(STAMPS_DIR)/build dh_gencontrol dh_md5sums dh_builddeb + +install-lockdep: DH_OPTIONS = -plockdep -pliblockdep$(VERSION) -pliblockdep-dev +install-lockdep: DIR = $(CURDIR)/debian/tmp +install-lockdep: $(STAMPS_DIR)/build + dh_testdir + dh_testroot + dh_prep + $(MAKE) -C $(BUILD_DIR)/tools/lib/lockdep install top_srcdir=$(CURDIR) \ + DESTDIR=$(DIR) + env -u DH_OPTIONS dh_install -pliblockdep$(VERSION) \ + 'usr/lib/*/liblockdep.so.*' + dh_install + dh_installchangelogs + dh_installdocs + dh_strip + dh_compress + dh_fixperms + env -u DH_OPTIONS dh_makeshlibs -pliblockdep$(VERSION) \ + liblockdep$(VERSION) + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb diff --git a/debian/templates/control.main.in b/debian/templates/control.main.in index e76b88637..cb88ca5d3 100644 --- a/debian/templates/control.main.in +++ b/debian/templates/control.main.in @@ -70,3 +70,28 @@ Description: Support daemons for Linux running on Hyper-V . hv_vss_daemon provides the volume shadow copy service (VSS), allowing the host to freeze the guest filesystems while taking a snapshot. + +Package: lockdep +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends}, liblockdep@version@ +Recommends: liblockdep-dev +Section: devel +Multi-Arch: allowed +Description: Runtime locking correctness validator + TBD + +Package: liblockdep@version@ +Architecture: linux-any +Depends: ${shlibs:Depends}, ${misc:Depends} +Section: libs +Multi-Arch: same +Description: Runtime locking correctness validator - shared library + TBD + +Package: liblockdep-dev +Architecture: linux-any +Depends: ${shlibs:Depends}, ${misc:Depends} +Section: libdevel +Multi-Arch: same +Description: Runtime locking correctness validator - development files + TBD