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

Bug#680713: unblock: libunwind/1.0.1-2



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock


Please unblock package libunwind

The version 1.0.1-2 in unstable fixes the following bugs, which would be of
use for users and us.

  * 20120707_ia64_FTBFS.patch:
    - Cherry pick patch from upstream to fix FTBFS on ia64 (Closes: #680623).

  [ Daigo Moriwaki ]
  * debian/control: Removes libunwind8's Conflicts and Replaces with
    libunwind7. (Closes: #670957)
  * Imports Ubuntu's patch, supporting the armhf architecture.
    Thanks to James Page <james.page@ubuntu.com>.  (Closes: 680308)
    - 20120704_fix_arm_ftbfs.patch
    - debian/control:
      + Supports armhf.
      + libatomic-ops-dev is no longer required for Build-Depends.

Regards,
Daigo

unblock libunwind/1.0.1-2

-- System Information:
Debian Release: 6.0.5
  APT prefers stable
  APT policy: (990, 'stable'), (500, 'stable-updates'), (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores)
Locale: LANG=ja_JP.UTF-8, LC_CTYPE=ja_JP.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -Nru libunwind-1.0.1/debian/changelog libunwind-1.0.1/debian/changelog
--- libunwind-1.0.1/debian/changelog	2012-04-28 15:55:53.000000000 +0900
+++ libunwind-1.0.1/debian/changelog	2012-07-08 13:42:16.000000000 +0900
@@ -1,3 +1,21 @@
+libunwind (1.0.1-2) unstable; urgency=low
+
+  [ Luca Falavigna ]
+  * 20120707_ia64_FTBFS.patch:
+    - Cherry pick patch from upstream to fix FTBFS on ia64 (Closes: #680623).
+
+  [ Daigo Moriwaki ]
+  * debian/control: Removes libunwind8's Conflicts and Replaces with
+    libunwind7. (Closes: #670957)
+  * Imports Ubuntu's patch, supporting the armhf architecture.
+    Thanks to James Page <james.page@ubuntu.com>.  (Closes: 680308)
+    - 20120704_fix_arm_ftbfs.patch
+    - debian/control:
+      + Supports armhf.
+      + libatomic-ops-dev is no longer required for Build-Depends.
+
+ -- Daigo Moriwaki <daigo@debian.org>  Sun, 08 Jul 2012 13:13:11 +0900
+
 libunwind (1.0.1-1) unstable; urgency=low
 
   [ Jari Aalto ]
diff -Nru libunwind-1.0.1/debian/control libunwind-1.0.1/debian/control
--- libunwind-1.0.1/debian/control	2012-04-28 15:55:53.000000000 +0900
+++ libunwind-1.0.1/debian/control	2012-07-08 13:42:16.000000000 +0900
@@ -3,7 +3,7 @@
 Section: libs
 Maintainer: Daigo Moriwaki <daigo@debian.org>
 Uploaders: Matthieu Delahaye <matthieu@debian.org>, Al Stone <ahs3@debian.org>
-Build-Depends: debhelper (>= 9), libatomic-ops-dev (>> 0.5.1), autoconf, automake, libtool, autotools-dev
+Build-Depends: debhelper (>= 9), autoconf, automake, libtool, autotools-dev
 Standards-Version: 3.9.3
 Homepage: http://www.nongnu.org/libunwind
 Vcs-Git: git://git.debian.org/git/collab-maint/libunwind.git
@@ -12,7 +12,7 @@
 
 Package: libunwind8-dev
 Section: libdevel
-Architecture: ia64 i386 amd64 ppc64 powerpc armel
+Architecture: ia64 i386 amd64 ppc64 powerpc armel armhf
 Depends: ${misc:Depends}, libunwind8 (= ${binary:Version})
 Conflicts: libunwind1-dev, libunwind7-dev
 Replaces: libunwind7-dev
@@ -28,10 +28,10 @@
  This package includes the development support files. 
 
 Package: libunwind8
-Architecture: ia64 i386 amd64 ppc64 powerpc armel
+Architecture: ia64 i386 amd64 ppc64 powerpc armel armhf
 Depends: ${misc:Depends}, ${shlibs:Depends}
-Conflicts: libunwind1-dev, libunwind7
-Replaces: libgcc1 (<< 1:4.0.0-2), libunwind7
+Conflicts: libunwind1-dev
+Replaces: libgcc1 (<< 1:4.0.0-2)
 Description: library to determine the call-chain of a program - runtime
  The primary goal of this project is to define a portable and efficient C
  programming interface (API) to determine the call-chain of a program.
@@ -45,7 +45,7 @@
 
 Package: libunwind-setjmp0-dev
 Section: libdevel
-Architecture: ia64 i386 amd64 ppc64 powerpc armel
+Architecture: ia64 i386 amd64 ppc64 powerpc armel armhf
 Depends: ${misc:Depends}, libunwind8-dev (= ${binary:Version}), libunwind-setjmp0 (= ${binary:Version})
 Description: libunwind-based non local goto - development
  The unwind-setjmp library offers a libunwind-based implementation of
@@ -57,7 +57,7 @@
  This package includes the development support files
 
 Package: libunwind-setjmp0
-Architecture: ia64 i386 amd64 ppc64 powerpc armel
+Architecture: ia64 i386 amd64 ppc64 powerpc armel armhf
 Depends: ${misc:Depends}, ${shlibs:Depends}
 Description: libunwind-based non local goto - runtime
  The unwind-setjmp library offers a libunwind-based implementation of
diff -Nru libunwind-1.0.1/debian/patches/20120704_fix_arm_ftbfs.patch libunwind-1.0.1/debian/patches/20120704_fix_arm_ftbfs.patch
--- libunwind-1.0.1/debian/patches/20120704_fix_arm_ftbfs.patch	1970-01-01 09:00:00.000000000 +0900
+++ libunwind-1.0.1/debian/patches/20120704_fix_arm_ftbfs.patch	2012-07-08 13:42:16.000000000 +0900
@@ -0,0 +1,307 @@
+Description: Fix FTBFS on ARM based architectures
+Origin: http://git.savannah.gnu.org/gitweb/?p=libunwind.git;a=commitdiff;h=0eba2169fb19ef0707a2c96201e33769001b5f11
+
+Index: libunwind/include/libunwind-arm.h
+===================================================================
+--- libunwind.orig/include/libunwind-arm.h	2012-07-04 11:28:50.790950000 +0100
++++ libunwind/include/libunwind-arm.h	2012-07-04 11:35:00.514253939 +0100
+@@ -30,7 +30,7 @@
+ #endif
+ 
+ #include <inttypes.h>
+-#include <ucontext.h>
++#include <stddef.h>
+ 
+ #define UNW_TARGET	arm
+ #define UNW_TARGET_ARM	1
+@@ -250,8 +250,14 @@
+   }
+ unw_tdep_save_loc_t;
+ 
+-/* On ARM, we can directly use ucontext_t as the unwind context.  */
+-typedef ucontext_t unw_tdep_context_t;
++/* On ARM, we define our own unw_tdep_context instead of using ucontext_t.
++   This allows us to support systems that don't support getcontext and
++   therefore do not define ucontext_t.  */
++typedef struct unw_tdep_context
++  {
++    unsigned long regs[16];
++  }
++unw_tdep_context_t;
+ 
+ /* There is no getcontext() on ARM.  Use a stub version which only saves GP
+    registers.  FIXME: Not ideal, may not be sufficient for all libunwind
+@@ -259,8 +265,7 @@
+ #ifndef __thumb__
+ #define unw_tdep_getcontext(uc) (({					\
+   unw_tdep_context_t *unw_ctx = (uc);					\
+-  register int unw_base asm ("r0")					\
+-    = (int) (&unw_ctx->uc_mcontext.arm_r0);				\
++  register unsigned long *unw_base asm ("r0") = unw_ctx->regs;		\
+   __asm__ __volatile__ (						\
+     "stmia %[base], {r0-r15}"						\
+     : : [base] "r" (unw_base) : "memory");				\
+@@ -268,8 +273,7 @@
+ #else /* __thumb__ */
+ #define unw_tdep_getcontext(uc) (({					\
+   unw_tdep_context_t *unw_ctx = (uc);					\
+-  register int unw_base asm ("r0")					\
+-    = (int) (&unw_ctx->uc_mcontext.arm_r0);				\
++  register unsigned long *unw_base asm ("r0") = unw_ctx->regs;		\
+   __asm__ __volatile__ (						\
+     ".align 2\nbx pc\nnop\n.code 32\n"					\
+     "stmia %[base], {r0-r15}\n"						\
+Index: libunwind/include/tdep-arm/libunwind_i.h
+===================================================================
+--- libunwind.orig/include/tdep-arm/libunwind_i.h	2012-07-04 11:28:50.790950000 +0100
++++ libunwind/include/tdep-arm/libunwind_i.h	2012-07-04 11:35:00.514253939 +0100
+@@ -274,7 +274,7 @@
+ extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
+ 				     unw_dyn_info_t *di, unw_proc_info_t *pi,
+ 				     int need_unwind_info, void *arg);
+-extern void *tdep_uc_addr (ucontext_t *uc, int reg);
++extern void *tdep_uc_addr (unw_tdep_context_t *uc, int reg);
+ extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip,
+ 			       unsigned long *segbase, unsigned long *mapoff,
+ 			       char *path, size_t pathlen);
+Index: libunwind/src/arm/Gglobal.c
+===================================================================
+--- libunwind.orig/src/arm/Gglobal.c	2012-07-04 11:28:50.790950000 +0100
++++ libunwind/src/arm/Gglobal.c	2012-07-04 11:35:00.514253939 +0100
+@@ -22,7 +22,6 @@
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
+ 
+-#include <ucontext.h>
+ #include "unwind_i.h"
+ #include "dwarf_i.h"
+ 
+@@ -37,7 +36,10 @@
+ 
+ HIDDEN uint8_t dwarf_to_unw_regnum_map[16] =
+   {
+-    R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15
++    /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
++    UNW_ARM_R0, UNW_ARM_R1, UNW_ARM_R2, UNW_ARM_R3, UNW_ARM_R4, UNW_ARM_R5,
++    UNW_ARM_R6, UNW_ARM_R7, UNW_ARM_R8, UNW_ARM_R9, UNW_ARM_R10, UNW_ARM_R11,
++    UNW_ARM_R12, UNW_ARM_R13, UNW_ARM_R14, UNW_ARM_R15
+   };
+ 
+ HIDDEN void
+Index: libunwind/src/arm/Ginit.c
+===================================================================
+--- libunwind.orig/src/arm/Ginit.c	2012-07-04 11:28:50.790950000 +0100
++++ libunwind/src/arm/Ginit.c	2012-07-04 11:35:00.514253939 +0100
+@@ -39,39 +39,18 @@
+ PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space;
+ 
+ static inline void *
+-uc_addr (ucontext_t *uc, int reg)
++uc_addr (unw_tdep_context_t *uc, int reg)
+ {
+-  void *addr;
+-
+-  switch (reg)
+-    {
+-    case UNW_ARM_R0:  addr = &uc->uc_mcontext.arm_r0; break;
+-    case UNW_ARM_R1:  addr = &uc->uc_mcontext.arm_r1; break;
+-    case UNW_ARM_R2:  addr = &uc->uc_mcontext.arm_r2; break;
+-    case UNW_ARM_R3:  addr = &uc->uc_mcontext.arm_r3; break;
+-    case UNW_ARM_R4:  addr = &uc->uc_mcontext.arm_r4; break;
+-    case UNW_ARM_R5:  addr = &uc->uc_mcontext.arm_r5; break;
+-    case UNW_ARM_R6:  addr = &uc->uc_mcontext.arm_r6; break;
+-    case UNW_ARM_R7:  addr = &uc->uc_mcontext.arm_r7; break;
+-    case UNW_ARM_R8:  addr = &uc->uc_mcontext.arm_r8; break;
+-    case UNW_ARM_R9:  addr = &uc->uc_mcontext.arm_r9; break;
+-    case UNW_ARM_R10: addr = &uc->uc_mcontext.arm_r10; break;
+-    case UNW_ARM_R11: addr = &uc->uc_mcontext.arm_fp; break;
+-    case UNW_ARM_R12: addr = &uc->uc_mcontext.arm_ip; break;
+-    case UNW_ARM_R13: addr = &uc->uc_mcontext.arm_sp; break;
+-    case UNW_ARM_R14: addr = &uc->uc_mcontext.arm_lr; break;
+-    case UNW_ARM_R15: addr = &uc->uc_mcontext.arm_pc; break;
+-
+-    default:
+-      addr = NULL;
+-    }
+-  return addr;
++  if (reg >= UNW_ARM_R0 && reg < UNW_ARM_R0 + 16)
++    return &uc->regs[reg - UNW_ARM_R0];
++  else
++    return NULL;
+ }
+ 
+ # ifdef UNW_LOCAL_ONLY
+ 
+ HIDDEN void *
+-tdep_uc_addr (ucontext_t *uc, int reg)
++tdep_uc_addr (unw_tdep_context_t *uc, int reg)
+ {
+   return uc_addr (uc, reg);
+ }
+@@ -115,7 +94,7 @@
+ 	    void *arg)
+ {
+   unw_word_t *addr;
+-  ucontext_t *uc = arg;
++  unw_tdep_context_t *uc = arg;
+ 
+   if (unw_is_fpreg (reg))
+     goto badreg;
+@@ -145,7 +124,7 @@
+ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val,
+ 	      int write, void *arg)
+ {
+-  ucontext_t *uc = arg;
++  unw_tdep_context_t *uc = arg;
+   unw_fpreg_t *addr;
+ 
+   if (!unw_is_fpreg (reg))
+Index: libunwind/src/arm/Ginit_local.c
+===================================================================
+--- libunwind.orig/src/arm/Ginit_local.c	2012-07-04 11:28:50.790950000 +0100
++++ libunwind/src/arm/Ginit_local.c	2012-07-04 11:35:00.514253939 +0100
+@@ -29,7 +29,7 @@
+ #ifdef UNW_REMOTE_ONLY
+ 
+ PROTECTED int
+-unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
++unw_init_local (unw_cursor_t *cursor, unw_context_t *uc)
+ {
+   return -UNW_EINVAL;
+ }
+@@ -37,7 +37,7 @@
+ #else /* !UNW_REMOTE_ONLY */
+ 
+ PROTECTED int
+-unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
++unw_init_local (unw_cursor_t *cursor, unw_context_t *uc)
+ {
+   struct cursor *c = (struct cursor *) cursor;
+ 
+Index: libunwind/src/arm/Gresume.c
+===================================================================
+--- libunwind.orig/src/arm/Gresume.c	2012-07-04 11:28:50.790950000 +0100
++++ libunwind/src/arm/Gresume.c	2012-07-04 11:35:00.518253964 +0100
+@@ -33,23 +33,23 @@
+ {
+ #ifdef __linux__
+   struct cursor *c = (struct cursor *) cursor;
+-  ucontext_t *uc = c->dwarf.as_arg;
++  unw_tdep_context_t *uc = c->dwarf.as_arg;
+ 
+   if (c->sigcontext_format == ARM_SCF_NONE)
+     {
+       /* Since there are no signals involved here we restore the non scratch
+ 	 registers only.  */
+       unsigned long regs[10];
+-      regs[0] = uc->uc_mcontext.arm_r4;
+-      regs[1] = uc->uc_mcontext.arm_r5;
+-      regs[2] = uc->uc_mcontext.arm_r6;
+-      regs[3] = uc->uc_mcontext.arm_r7;
+-      regs[4] = uc->uc_mcontext.arm_r8;
+-      regs[5] = uc->uc_mcontext.arm_r9;
+-      regs[6] = uc->uc_mcontext.arm_r10;
+-      regs[7] = uc->uc_mcontext.arm_fp;
+-      regs[8] = uc->uc_mcontext.arm_sp;
+-      regs[9] = uc->uc_mcontext.arm_lr;
++      regs[0] = uc->regs[4];
++      regs[1] = uc->regs[5];
++      regs[2] = uc->regs[6];
++      regs[3] = uc->regs[7];
++      regs[4] = uc->regs[8];
++      regs[5] = uc->regs[9];
++      regs[6] = uc->regs[10];
++      regs[7] = uc->regs[11]; /* FP */
++      regs[8] = uc->regs[13]; /* SP */
++      regs[9] = uc->regs[14]; /* LR */
+ 
+       asm __volatile__ (
+ 	"ldmia %0, {r4-r12, lr}\n"
+@@ -63,22 +63,22 @@
+       /* In case a signal frame is involved, we're using its trampoline which
+ 	 calls sigreturn.  */
+       struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr;
+-      sc->arm_r0 = uc->uc_mcontext.arm_r0;
+-      sc->arm_r1 = uc->uc_mcontext.arm_r1;
+-      sc->arm_r2 = uc->uc_mcontext.arm_r2;
+-      sc->arm_r3 = uc->uc_mcontext.arm_r3;
+-      sc->arm_r4 = uc->uc_mcontext.arm_r4;
+-      sc->arm_r5 = uc->uc_mcontext.arm_r5;
+-      sc->arm_r6 = uc->uc_mcontext.arm_r6;
+-      sc->arm_r7 = uc->uc_mcontext.arm_r7;
+-      sc->arm_r8 = uc->uc_mcontext.arm_r8;
+-      sc->arm_r9 = uc->uc_mcontext.arm_r9;
+-      sc->arm_r10 = uc->uc_mcontext.arm_r10;
+-      sc->arm_fp = uc->uc_mcontext.arm_fp;
+-      sc->arm_ip = uc->uc_mcontext.arm_ip;
+-      sc->arm_sp = uc->uc_mcontext.arm_sp;
+-      sc->arm_lr = uc->uc_mcontext.arm_lr;
+-      sc->arm_pc = uc->uc_mcontext.arm_pc;
++      sc->arm_r0 = uc->regs[0];
++      sc->arm_r1 = uc->regs[1];
++      sc->arm_r2 = uc->regs[2];
++      sc->arm_r3 = uc->regs[3];
++      sc->arm_r4 = uc->regs[4];
++      sc->arm_r5 = uc->regs[5];
++      sc->arm_r6 = uc->regs[6];
++      sc->arm_r7 = uc->regs[7];
++      sc->arm_r8 = uc->regs[8];
++      sc->arm_r9 = uc->regs[9];
++      sc->arm_r10 = uc->regs[10];
++      sc->arm_fp = uc->regs[11]; /* FP */
++      sc->arm_ip = uc->regs[12]; /* IP */
++      sc->arm_sp = uc->regs[13]; /* SP */
++      sc->arm_lr = uc->regs[14]; /* LR */
++      sc->arm_pc = uc->regs[15]; /* PC */
+       /* clear the ITSTATE bits.  */
+       sc->arm_cpsr &= 0xf9ff03ffUL;
+ 
+Index: libunwind/src/arm/init.h
+===================================================================
+--- libunwind.orig/src/arm/init.h	2012-07-04 11:28:50.790950000 +0100
++++ libunwind/src/arm/init.h	2012-07-04 11:35:00.518253964 +0100
+@@ -29,26 +29,26 @@
+ {
+   int ret, i;
+ 
+-  c->dwarf.loc[R0] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R0);
+-  c->dwarf.loc[R1] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R1);
+-  c->dwarf.loc[R2] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R2);
+-  c->dwarf.loc[R3] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R3);
+-  c->dwarf.loc[R4] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R4);
+-  c->dwarf.loc[R5] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R5);
+-  c->dwarf.loc[R6] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R6);
+-  c->dwarf.loc[R7] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R7);
+-  c->dwarf.loc[R8] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R8);
+-  c->dwarf.loc[R9] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R9);
+-  c->dwarf.loc[R10] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R10);
+-  c->dwarf.loc[R11] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R11);
+-  c->dwarf.loc[R12] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R12);
+-  c->dwarf.loc[R13] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R13);
+-  c->dwarf.loc[R14] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R14);
+-  c->dwarf.loc[R15] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R15);
+-  for (i = R15 + 1; i < DWARF_NUM_PRESERVED_REGS; ++i)
++  c->dwarf.loc[UNW_ARM_R0] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R0);
++  c->dwarf.loc[UNW_ARM_R1] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R1);
++  c->dwarf.loc[UNW_ARM_R2] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R2);
++  c->dwarf.loc[UNW_ARM_R3] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R3);
++  c->dwarf.loc[UNW_ARM_R4] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R4);
++  c->dwarf.loc[UNW_ARM_R5] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R5);
++  c->dwarf.loc[UNW_ARM_R6] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R6);
++  c->dwarf.loc[UNW_ARM_R7] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R7);
++  c->dwarf.loc[UNW_ARM_R8] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R8);
++  c->dwarf.loc[UNW_ARM_R9] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R9);
++  c->dwarf.loc[UNW_ARM_R10] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R10);
++  c->dwarf.loc[UNW_ARM_R11] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R11);
++  c->dwarf.loc[UNW_ARM_R12] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R12);
++  c->dwarf.loc[UNW_ARM_R13] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R13);
++  c->dwarf.loc[UNW_ARM_R14] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R14);
++  c->dwarf.loc[UNW_ARM_R15] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R15);
++  for (i = UNW_ARM_R15 + 1; i < DWARF_NUM_PRESERVED_REGS; ++i)
+     c->dwarf.loc[i] = DWARF_NULL_LOC;
+ 
+-  ret = dwarf_get (&c->dwarf, c->dwarf.loc[R15], &c->dwarf.ip);
++  ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_ARM_R15], &c->dwarf.ip);
+   if (ret < 0)
+     return ret;
+ 
diff -Nru libunwind-1.0.1/debian/patches/20120707_ia64_FTBFS.patch libunwind-1.0.1/debian/patches/20120707_ia64_FTBFS.patch
--- libunwind-1.0.1/debian/patches/20120707_ia64_FTBFS.patch	1970-01-01 09:00:00.000000000 +0900
+++ libunwind-1.0.1/debian/patches/20120707_ia64_FTBFS.patch	2012-07-08 13:42:16.000000000 +0900
@@ -0,0 +1,26 @@
+Index: libunwind-1.0.1/src/ptrace/_UPT_get_dyn_info_list_addr.c
+===================================================================
+--- libunwind-1.0.1.orig/src/ptrace/_UPT_get_dyn_info_list_addr.c	2011-09-11 05:06:41.000000000 +0200
++++ libunwind-1.0.1/src/ptrace/_UPT_get_dyn_info_list_addr.c	2012-07-07 13:36:27.632998530 +0200
+@@ -62,7 +62,7 @@
+ 
+       Debug (16, "checking object %s\n", path);
+ 
+-      di = _UPTi_find_unwind_table (ui, as, path, lo, off);
++      di = _UPTi_find_unwind_table (ui, as, path, lo, off, 0);
+       if (di)
+ 	{
+ 	  res = _Uia64_find_dyn_list (as, di, arg);
+Index: libunwind-1.0.1/src/ptrace/_UPT_internal.h
+===================================================================
+--- libunwind-1.0.1.orig/src/ptrace/_UPT_internal.h	2011-09-11 05:06:41.000000000 +0200
++++ libunwind-1.0.1/src/ptrace/_UPT_internal.h	2012-07-07 13:37:07.880999763 +0200
+@@ -64,7 +64,7 @@
+ 
+ extern int _UPT_reg_offset[UNW_REG_LAST + 1];
+ 
+-extern int _UPTi_find_unwind_table (struct UPT_info *ui,
++extern unw_dyn_info_t *UPTi_find_unwind_table (struct UPT_info *ui,
+ 				    unw_addr_space_t as,
+ 				    char *path,
+ 				    unw_word_t segbase,
diff -Nru libunwind-1.0.1/debian/patches/series libunwind-1.0.1/debian/patches/series
--- libunwind-1.0.1/debian/patches/series	2012-04-28 15:55:53.000000000 +0900
+++ libunwind-1.0.1/debian/patches/series	2012-07-08 13:42:16.000000000 +0900
@@ -1,2 +1,4 @@
 01-rpath.patch
 20120422_tests_Makefile_am.patch
+20120704_fix_arm_ftbfs.patch
+20120707_ia64_FTBFS.patch

Reply to: