--- /dev/null
+--- elfutils-0.137/src/addr2line.c.orig 2008-08-09 06:06:44.000000000 +0200
++++ elfutils-0.137/src/addr2line.c 2008-09-09 22:15:16.304992337 +0200
+@@ -374,8 +374,13 @@ handle_address (const char *string, Dwfl
+ bool parsed = false;
+ int n;
+ char *name = NULL;
++#if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 7) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
+ if (sscanf (string, "(%m[^)])%" PRIiMAX "%n", &name, &addr, &n) == 2
+ && string[n] == '\0')
++#else
++ if (sscanf (string, "(%a[^)])%" PRIiMAX "%n", &name, &addr, &n) == 2
++ && string[n] == '\0')
++#endif
+ {
+ /* It was (section)+offset. This makes sense if there is
+ only one module to look in for a section. */
+@@ -415,8 +420,13 @@ handle_address (const char *string, Dwfl
+ }
+ }
+ }
++#if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 7) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
+ else if (sscanf (string, "%m[^-+]%" PRIiMAX "%n", &name, &addr, &n) == 2
+ && string[n] == '\0')
++#else
++ else if (sscanf (string, "%a[^-+]%" PRIiMAX "%n", &name, &addr, &n) == 2
++ && string[n] == '\0')
++#endif
+ {
+ /* It was symbol+offset. */
+ GElf_Sym sym;
+--- elfutils-0.137/src/Makefile.am.orig 2008-09-09 21:30:37.592989823 +0200
++++ elfutils-0.137/src/Makefile.am 2008-09-09 22:36:04.380988147 +0200
+@@ -35,7 +35,7 @@
+ AM_CFLAGS += -Wall -Wshadow -std=gnu99 $(native_ld_cflags) \
+ $(if $($(*F)_no_Werror),,-Werror) \
+ $(if $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) \
+- $(if $($(*F)_no_Wformat),,-Wformat=2) $(CFLAGS_$(*F))
++ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $(CFLAGS_$(*F))
+
+ INCLUDES = -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \
+ -I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \
+@@ -109,6 +109,7 @@
+ nm_no_Wformat = yes
+ size_no_Wformat = yes
+ strings_no_Wformat = yes
++addr2line_no_Wformat = yes
+ # XXX While the file is not finished, don't warn about this
+ ldgeneric_no_Wunused = yes
+