[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#688791: unblock: elfutils/0.153-2



On Mon, Nov 12, 2012 at 03:52:20PM +0100, Kurt Roeckx wrote:
> On Mon, Nov 12, 2012 at 02:15:48PM +0000, Adam D. Barratt wrote:
> > On Sat, 2012-10-27 at 20:08 +0200, Kurt Roeckx wrote:
> > > So Neil told me on IRC to just fix #684825 via t-p-u using the patch
> > > that's in that bug report.
> > > 
> > > I looked in to that and found that to due multi-arch changes in
> > > glibc I now run into #691612.
> > > 
> > > So if I want to fix it via t-p-u I would also need to backport the
> > > multi-arch changes.
> > 
> > Looking at the diff, are there any changes required outside of the
> > --libdir setting in debian/rules and the path changes in *.install?
> 
> As far as I know the changed for multiarch would require:
> - newer debhelper, new compat level
> - control file changes
> - *.install changes
> - the --libdir option to configure

So I uploaded a version that doesn't require multiarch to t-p-u.
The debdiff is attached.


Kurt

diff -Nru elfutils-0.152/debian/changelog elfutils-0.152/debian/changelog
--- elfutils-0.152/debian/changelog	2011-02-26 15:09:58.000000000 +0100
+++ elfutils-0.152/debian/changelog	2012-11-12 21:03:09.000000000 +0100
@@ -1,3 +1,16 @@
+elfutils (0.152-1+wheezy1) testing-proposed-updates; urgency=low
+
+  [ Sébastien Villemot ]
+  * strict-aliasing.diff: new patch taken from upstream (Closes: #684825).
+    Thanks to Mark Wielaard for pointing to the relevant upstream commit.
+
+  [ Kurt Roeckx ]
+  * Use elf_end_unlock.patch from unstable (Closes: #662041)
+  * Use dlopen() with "lib" instead of "$LIB" to open the backends.
+    (Closes: #691612)
+
+ -- Kurt Roeckx <kurt@roeckx.be>  Mon, 12 Nov 2012 20:22:05 +0100
+
 elfutils (0.152-1) unstable; urgency=low
 
   * New upstream release
diff -Nru elfutils-0.152/debian/patches/backend_dlopen.patch elfutils-0.152/debian/patches/backend_dlopen.patch
--- elfutils-0.152/debian/patches/backend_dlopen.patch	1970-01-01 01:00:00.000000000 +0100
+++ elfutils-0.152/debian/patches/backend_dlopen.patch	2012-11-12 21:03:23.000000000 +0100
@@ -0,0 +1,24 @@
+From: Kurt Roeckx <kurt@roeckx.be>
+Subject: Use dlopen() with "lib" instead of "$LIB" to open the backends
+Bug-Debian: http://bugs.debian.org/691612
+Forwarded: not-needed
+
+We give dlopen() an absolute path based on $ORIGIN and $LIB.  But $LIB
+is different in case of multiarch.  Just use "lib" instead.
+
+The other way to solve this is to move the libraries to the multiarch locations
+like done in 0.153-1.
+
+Index: elfutils-0.152/libebl/eblopenbackend.c
+===================================================================
+--- elfutils-0.152.orig/libebl/eblopenbackend.c	2012-11-12 20:42:26.000000000 +0100
++++ elfutils-0.152/libebl/eblopenbackend.c	2012-11-12 20:51:01.000000000 +0100
+@@ -334,7 +334,7 @@
+ #ifndef LIBEBL_SUBDIR
+ # define LIBEBL_SUBDIR PACKAGE
+ #endif
+-#define ORIGINDIR "$ORIGIN/../$LIB/" LIBEBL_SUBDIR "/"
++#define ORIGINDIR "$ORIGIN/../lib/" LIBEBL_SUBDIR "/"
+ 
+ 	/* Give it a try.  At least the machine type matches.  First
+            try to load the module.  */
diff -Nru elfutils-0.152/debian/patches/elf_end_unlock.patch elfutils-0.152/debian/patches/elf_end_unlock.patch
--- elfutils-0.152/debian/patches/elf_end_unlock.patch	1970-01-01 01:00:00.000000000 +0100
+++ elfutils-0.152/debian/patches/elf_end_unlock.patch	2012-11-12 20:24:24.000000000 +0100
@@ -0,0 +1,17 @@
+From: Kurt Roeckx <kurt@roeckx.be>
+Subject: Call rwlock_unlock() before rwlock_fini()
+Applied-Upstream: commit:495501611820a9d5c462fda56045c146f7b922d7
+Bug-Debian: http://bugs.debian.org/662041
+
+diff --git a/libelf/elf_end.c b/libelf/elf_end.c
+index 5112eae..6392eaf 100644
+--- a/libelf/elf_end.c
++++ b/libelf/elf_end.c
+@@ -241,6 +241,7 @@ elf_end (elf)
+ 	munmap (elf->map_address, elf->maximum_size);
+     }
+ 
++  rwlock_unlock (elf->lock);
+   rwlock_fini (elf->lock);
+ 
+   /* Finally the descriptor itself.  */
diff -Nru elfutils-0.152/debian/patches/series elfutils-0.152/debian/patches/series
--- elfutils-0.152/debian/patches/series	2011-02-26 15:11:22.000000000 +0100
+++ elfutils-0.152/debian/patches/series	2012-11-12 20:30:48.000000000 +0100
@@ -7,3 +7,6 @@
 do-autoreconf.diff
 testsuite-ignore-elflint.diff
 elf_additions.diff
+strict-aliasing.diff
+elf_end_unlock.patch
+backend_dlopen.patch
diff -Nru elfutils-0.152/debian/patches/strict-aliasing.diff elfutils-0.152/debian/patches/strict-aliasing.diff
--- elfutils-0.152/debian/patches/strict-aliasing.diff	1970-01-01 01:00:00.000000000 +0100
+++ elfutils-0.152/debian/patches/strict-aliasing.diff	2012-10-27 17:15:08.000000000 +0200
@@ -0,0 +1,69 @@
+Description: Fix strict aliasing issues in MD5 and SHA1 code
+Origin: upstream, http://git.fedorahosted.org/cgit/elfutils.git/commit/?id=32899ac4f69d4ca4856d5282464c1f9cee928c8a
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=684825
+Last-Update: 2012-09-08
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/lib/md5.c
++++ b/lib/md5.c
+@@ -82,6 +82,16 @@
+   return resbuf;
+ }
+ 
++static void
++le64_copy (char *dest, uint64_t x)
++{
++  for (size_t i = 0; i < 8; ++i)
++    {
++      dest[i] = (uint8_t) x;
++      x >>= 8;
++    }
++}
++
+ /* Process the remaining bytes in the internal buffer and the usual
+    prolog according to the standard and write the result to RESBUF.
+ 
+@@ -105,9 +115,10 @@
+   memcpy (&ctx->buffer[bytes], fillbuf, pad);
+ 
+   /* Put the 64-bit file length in *bits* at the end of the buffer.  */
+-  *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
+-  *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
+-							(ctx->total[0] >> 29));
++  const uint64_t bit_length = ((ctx->total[0] << 3)
++                               + ((uint64_t) ((ctx->total[1] << 3) |
++                                              (ctx->total[0] >> 29)) << 32));
++  le64_copy (&ctx->buffer[bytes + pad], bit_length);
+ 
+   /* Process last bytes.  */
+   md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
+--- a/lib/sha1.c
++++ b/lib/sha1.c
+@@ -83,6 +83,13 @@
+   return resbuf;
+ }
+ 
++static void
++be64_copy (char *dest, uint64_t x)
++{
++  for (size_t i = 8; i-- > 0; x >>= 8)
++    dest[i] = (uint8_t) x;
++}
++
+ /* Process the remaining bytes in the internal buffer and the usual
+    prolog according to the standard and write the result to RESBUF.
+ 
+@@ -106,9 +113,10 @@
+   memcpy (&ctx->buffer[bytes], fillbuf, pad);
+ 
+   /* Put the 64-bit file length in *bits* at the end of the buffer.  */
+-  *(sha1_uint32 *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) |
+-						     (ctx->total[0] >> 29));
+-  *(sha1_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP (ctx->total[0] << 3);
++  const uint64_t bit_length = ((ctx->total[0] << 3)
++                               + ((uint64_t) ((ctx->total[1] << 3) |
++                                              (ctx->total[0] >> 29)) << 32));
++  be64_copy (&ctx->buffer[bytes + pad], bit_length);
+ 
+   /* Process last bytes.  */
+   sha1_process_block (ctx->buffer, bytes + pad + 8, ctx);

Reply to: