Upstream-Status: Backport

Index: elfutils-0.148/backends/ChangeLog
===================================================================
--- elfutils-0.148.orig/backends/ChangeLog	2010-04-13 20:08:02.000000000 +0000
+++ elfutils-0.148/backends/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -106,6 +106,10 @@
 	* ppc_attrs.c (ppc_check_object_attribute): Handle tag
 	GNU_Power_ABI_Struct_Return.
 
+2009-01-23  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (libebl_%.so): Use $(LD_AS_NEEDED).
+
 2008-10-04  Ulrich Drepper  <drepper@redhat.com>
 
 	* i386_reloc.def: Fix entries for TLS_GOTDESC, TLS_DESC_CALL, and
@@ -433,6 +437,11 @@
 	* sparc_init.c: Likewise.
 	* x86_64_init.c: Likewise.
 
+2005-11-22  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (LD_AS_NEEDED): New variable, substituted by configure.
+	(libebl_%.so rule): Use it in place of -Wl,--as-needed.
+
 2005-11-19  Roland McGrath  <roland@redhat.com>
 
 	* ppc64_reloc.def: REL30 -> ADDR30.
@@ -455,6 +464,9 @@
 	* Makefile.am (uninstall): Don't try to remove $(pkgincludedir).
 	(CLEANFILES): Add libebl_$(m).so.
 
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
 	* ppc_reloc.def: Update bits per Alan Modra <amodra@bigpond.net.au>.
 	* ppc64_reloc.def: Likewise.
 
Index: elfutils-0.148/backends/Makefile.am
===================================================================
--- elfutils-0.148.orig/backends/Makefile.am	2010-04-13 20:08:02.000000000 +0000
+++ elfutils-0.148/backends/Makefile.am	2010-07-03 13:04:07.000000000 +0000
@@ -103,7 +103,7 @@
 	$(LINK) -shared -o $(@:.map=.so) \
 		-Wl,--whole-archive $< $(cpu_$*) -Wl,--no-whole-archive \
 		-Wl,--version-script,$(@:.so=.map) \
-		-Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(libmudflap)
+		-Wl,-z,defs $(LD_AS_NEEDED) $(libelf) $(libdw) $(libmudflap)
 	$(textrel_check)
 
 libebl_i386.so: $(cpu_i386)
Index: elfutils-0.148/ChangeLog
===================================================================
--- elfutils-0.148.orig/ChangeLog	2010-04-21 14:26:40.000000000 +0000
+++ elfutils-0.148/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -2,6 +2,10 @@
 
 	* configure.ac (LOCALEDIR, DATADIRNAME): Removed.
 
+2009-11-22  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Use sed and expr instead of modern bash extensions.
+
 2009-09-21  Ulrich Drepper  <drepper@redhat.com>
 
 	* configure.ac: Update for more modern autoconf.
@@ -10,6 +14,10 @@
 
 	* configure.ac (zip_LIBS): Check for liblzma too.
 
+2009-08-17  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Check for -fgnu89-inline; add it to WEXTRA if it works.
+
 2009-04-19  Roland McGrath  <roland@redhat.com>
 
 	* configure.ac (eu_version): Round down here, not in version.h macros.
@@ -21,6 +29,8 @@
 
 2009-01-23  Roland McGrath  <roland@redhat.com>
 
+	* configure.ac: Check for __builtin_popcount.
+
 	* configure.ac (zlib check): Check for gzdirect, need zlib >= 1.2.2.3.
 
 	* configure.ac (__thread check): Use AC_LINK_IFELSE, in case of
@@ -101,6 +111,10 @@
 	* configure.ac: Add dummy automake conditional to get dependencies
 	for non-generic linker right.  See src/Makefile.am.
 
+2005-11-22  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Check for --as-needed linker option.
+
 2005-11-18  Roland McGrath  <roland@redhat.com>
 
 	* Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New variable.
@@ -148,6 +162,17 @@
 	* Makefile.am (all_SUBDIRS): Add libdwfl.
 	* configure.ac: Write libdwfl/Makefile.
 
+2005-05-31  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac (WEXTRA): Check for -Wextra and set this substitution.
+
+	* configure.ac: Check for struct stat st_?tim members.
+	* src/strip.c (process_file): Use st_?time if st_?tim are not there.
+
+	* configure.ac: Check for futimes function.
+	* src/strip.c (handle_elf) [! HAVE_FUTIMES]: Use utimes instead.
+	(handle_ar) [! HAVE_FUTIMES]: Likewise.
+
 2005-05-19  Roland McGrath  <roland@redhat.com>
 
 	* configure.ac [AH_BOTTOM] (INTDECL, _INTDECL): New macros.
Index: elfutils-0.148/config/eu.am
===================================================================
--- elfutils-0.148.orig/config/eu.am	2010-04-21 14:26:40.000000000 +0000
+++ elfutils-0.148/config/eu.am	2010-07-03 13:04:07.000000000 +0000
@@ -25,11 +25,14 @@
 ## <http://www.openinventionnetwork.com>.
 ##
 
+WEXTRA = @WEXTRA@
+LD_AS_NEEDED = @LD_AS_NEEDED@
+
 DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"'
 INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I..
 AM_CFLAGS = -std=gnu99 -Wall -Wshadow \
 	    $(if $($(*F)_no_Werror),,-Werror) \
-	    $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
+	    $(if $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) \
 	    $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2) \
 	    $($(*F)_CFLAGS)
 
Index: elfutils-0.148/config.h.in
===================================================================
--- elfutils-0.148.orig/config.h.in	2010-06-28 19:07:37.000000000 +0000
+++ elfutils-0.148/config.h.in	2010-07-03 13:04:07.000000000 +0000
@@ -1,5 +1,8 @@
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
+/* Have __builtin_popcount. */
+#undef HAVE_BUILTIN_POPCOUNT
+
 /* $libdir subdirectory containing libebl modules. */
 #undef LIBEBL_SUBDIR
 
@@ -55,4 +58,7 @@
 /* Define for large files, on AIX-style hosts. */
 #undef _LARGE_FILES
 
+/* Stubbed out if missing compiler support. */
+#undef __thread
+
 #include <eu-config.h>
Index: elfutils-0.148/configure.ac
===================================================================
--- elfutils-0.148.orig/configure.ac	2010-06-28 19:07:26.000000000 +0000
+++ elfutils-0.148/configure.ac	2010-07-03 13:04:07.000000000 +0000
@@ -73,6 +73,54 @@
 AS_IF([test "x$ac_cv_c99" != xyes],
       AC_MSG_ERROR([gcc with C99 support required]))
 
+AC_CACHE_CHECK([for -Wextra option to $CC], ac_cv_cc_wextra, [dnl
+old_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Wextra"
+AC_COMPILE_IFELSE([void foo (void) { }],
+		  ac_cv_cc_wextra=yes, ac_cv_cc_wextra=no)
+CFLAGS="$old_CFLAGS"])
+AC_SUBST(WEXTRA)
+AS_IF([test "x$ac_cv_cc_wextra" = xyes], [WEXTRA=-Wextra], [WEXTRA=-W])
+
+AC_CACHE_CHECK([for -fgnu89-inline option to $CC], ac_cv_cc_gnu89_inline, [dnl
+old_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fgnu89-inline -Werror"
+AC_COMPILE_IFELSE([
+void foo (void)
+{
+  inline void bar (void) {}
+  bar ();
+}
+extern inline void baz (void) {}
+], ac_cv_cc_gnu89_inline=yes, ac_cv_cc_gnu89_inline=no)
+CFLAGS="$old_CFLAGS"])
+AS_IF([test "x$ac_cv_cc_gnu89_inline" = xyes],
+      [WEXTRA="${WEXTRA:+$WEXTRA }-fgnu89-inline"])
+
+AC_CACHE_CHECK([for --as-needed linker option],
+	       ac_cv_as_needed, [dnl
+cat > conftest.c <<EOF
+int main (void) { return 0; }
+EOF
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+			    -fPIC -shared -o conftest.so conftest.c
+			    -Wl,--as-needed 1>&AS_MESSAGE_LOG_FD])
+then
+  ac_cv_as_needed=yes
+else
+  ac_cv_as_needed=no
+fi
+rm -f conftest*])
+AS_IF([test "x$ac_cv_as_needed" = xyes],
+      [LD_AS_NEEDED=-Wl,--as-needed], [LD_AS_NEEDED=])
+AC_SUBST(LD_AS_NEEDED)
+
+AC_CACHE_CHECK([for __builtin_popcount], ac_cv_popcount, [dnl
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[exit (__builtin_popcount (127));]])],
+	       ac_cv_popcount=yes, ac_cv_popcount=no)])
+AS_IF([test "x$ac_cv_popcount" = xyes],
+      [AC_DEFINE([HAVE_BUILTIN_POPCOUNT], [1], [Have __builtin_popcount.])])
+
 AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
 # Use the same flags that we use for our DSOs, so the test is representative.
 # Some old compiler/linker/libc combinations fail some ways and not others.
@@ -88,7 +136,10 @@
 CFLAGS="$save_CFLAGS"
 LDFLAGS="$save_LDFLAGS"])
 AS_IF([test "x$ac_cv_tls" != xyes],
-      AC_MSG_ERROR([__thread support required]))
+      [AS_IF([test "$use_locks" = yes],
+	     [AC_MSG_ERROR([--enable-thread-safety requires __thread support])],
+	     [AC_DEFINE([__thread], [/* empty: no multi-thread support */],
+			[Stubbed out if missing compiler support.])])])
 
 dnl This test must come as early as possible after the compiler configuration
 dnl tests, because the choice of the file model can (in principle) affect
@@ -251,7 +302,7 @@
 
 # 1.234<whatever> -> 1234<whatever>
 case "$PACKAGE_VERSION" in
-[[0-9]].*) eu_version="${PACKAGE_VERSION/./}" ;;
+[[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
 *)     	   AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
 esac
 case "$eu_version" in
@@ -280,6 +331,6 @@
 esac
 
 # Round up to the next release API (x.y) version.
-[eu_version=$[($eu_version + 999) / 1000]]
+eu_version=`expr \( $eu_version + 999 \) / 1000`
 
 AC_OUTPUT
Index: elfutils-0.148/lib/ChangeLog
===================================================================
--- elfutils-0.148.orig/lib/ChangeLog	2010-06-28 19:05:56.000000000 +0000
+++ elfutils-0.148/lib/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -14,6 +14,9 @@
 
 2009-01-23  Roland McGrath  <roland@redhat.com>
 
+	* eu-config.h [! HAVE_BUILTIN_POPCOUNT]
+	(__builtin_popcount): New inline function.
+
 	* eu-config.h: Add multiple inclusion protection.
 
 2009-01-17  Ulrich Drepper  <drepper@redhat.com>
@@ -70,6 +73,11 @@
 	* Makefile.am (libeu_a_SOURCES): Add it.
 	* system.h: Declare crc32_file.
 
+2005-02-07  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
 2005-04-30  Ulrich Drepper  <drepper@redhat.com>
 
 	* Makefile.am: Use -ffunction-sections for xmalloc.c.
Index: elfutils-0.148/lib/eu-config.h
===================================================================
--- elfutils-0.148.orig/lib/eu-config.h	2009-08-12 14:23:22.000000000 +0000
+++ elfutils-0.148/lib/eu-config.h	2010-07-03 13:04:07.000000000 +0000
@@ -182,6 +182,17 @@
 /* This macro is used by the tests conditionalize for standalone building.  */
 #define ELFUTILS_HEADER(name) <lib##name.h>
 
+#ifndef HAVE_BUILTIN_POPCOUNT
+# define __builtin_popcount hakmem_popcount
+static inline unsigned int __attribute__ ((unused))
+hakmem_popcount (unsigned int x)
+{
+  /* HAKMEM 169 */
+  unsigned int n = x - ((x >> 1) & 033333333333) - ((x >> 2) & 011111111111);
+  return ((n + (n >> 3)) & 030707070707) % 63;
+}
+#endif	/* HAVE_BUILTIN_POPCOUNT */
+
 
 #ifdef SHARED
 # define OLD_VERSION(name, version) \
Index: elfutils-0.148/libasm/ChangeLog
===================================================================
--- elfutils-0.148.orig/libasm/ChangeLog	2010-03-05 05:48:23.000000000 +0000
+++ elfutils-0.148/libasm/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -67,6 +67,11 @@
 	* asm_error.c: Add new error ASM_E_IOERROR.
 	* libasmP.h: Add ASM_E_IOERROR definition.
 
+2005-05-31  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
 2005-02-15  Ulrich Drepper  <drepper@redhat.com>
 
 	* Makefile.am (AM_CFLAGS): Add -Wunused -Wextra -Wformat=2.
Index: elfutils-0.148/libcpu/ChangeLog
===================================================================
--- elfutils-0.148.orig/libcpu/ChangeLog	2010-03-05 05:48:23.000000000 +0000
+++ elfutils-0.148/libcpu/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -9,6 +9,9 @@
 
 2009-01-23  Roland McGrath  <roland@redhat.com>
 
+	* i386_disasm.c (i386_disasm): Add abort after assert-constant for old
+	compilers that don't realize it's noreturn.
+
 	* Makefile.am (i386_parse_CFLAGS): Use quotes around command
 	substitution that can produce leading whitespace.
 
@@ -338,6 +341,11 @@
 	* defs/i386.doc: New file.
 	* defs/x86_64: New file.
 
+2005-04-04  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it instead of -Wextra.
+
 2005-02-15  Ulrich Drepper  <drepper@redhat.com>
 
 	* Makefile (AM_CFLAGS): Add -Wunused -Wextra -Wformat=2.
Index: elfutils-0.148/libcpu/i386_disasm.c
===================================================================
--- elfutils-0.148.orig/libcpu/i386_disasm.c	2009-01-08 20:56:36.000000000 +0000
+++ elfutils-0.148/libcpu/i386_disasm.c	2010-07-03 13:04:07.000000000 +0000
@@ -791,6 +791,7 @@
 
 			default:
 			  assert (! "INVALID not handled");
+			  abort ();
 			}
 		    }
 		  else
Index: elfutils-0.148/libdw/ChangeLog
===================================================================
--- elfutils-0.148.orig/libdw/ChangeLog	2010-06-28 19:05:56.000000000 +0000
+++ elfutils-0.148/libdw/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -276,6 +276,10 @@
 
 	* dwarf_hasattr_integrate.c: Integrate DW_AT_specification too.
 
+2009-08-17  Roland McGrath  <roland@redhat.com>
+
+	* libdw.h: Disable extern inlines for GCC 4.2.
+
 2009-08-10  Roland McGrath  <roland@redhat.com>
 
 	* dwarf_getscopevar.c: Use dwarf_diename.
@@ -1044,6 +1048,11 @@
 
 2005-05-31  Roland McGrath  <roland@redhat.com>
 
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
+2005-05-31  Roland McGrath  <roland@redhat.com>
+
 	* dwarf_formref_die.c (dwarf_formref_die): Add CU header offset to
 	formref offset.
 
Index: elfutils-0.148/libdw/libdw.h
===================================================================
--- elfutils-0.148.orig/libdw/libdw.h	2010-06-28 19:05:56.000000000 +0000
+++ elfutils-0.148/libdw/libdw.h	2010-07-03 13:04:07.000000000 +0000
@@ -842,7 +842,7 @@
 
 
 /* Inline optimizations.  */
-#ifdef __OPTIMIZE__
+#if defined __OPTIMIZE__ && !(__GNUC__ == 4 && __GNUC_MINOR__ == 2)
 /* Return attribute code of given attribute.  */
 __libdw_extern_inline unsigned int
 dwarf_whatattr (Dwarf_Attribute *attr)
Index: elfutils-0.148/libdwfl/ChangeLog
===================================================================
--- elfutils-0.148.orig/libdwfl/ChangeLog	2010-06-28 19:05:56.000000000 +0000
+++ elfutils-0.148/libdwfl/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -1265,6 +1265,11 @@
 
 2005-07-21  Roland McGrath  <roland@redhat.com>
 
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
+2005-07-21  Roland McGrath  <roland@redhat.com>
+
 	* Makefile.am (noinst_HEADERS): Add loc2c.c.
 
 	* test2.c (main): Check sscanf result to quiet warning.
Index: elfutils-0.148/libebl/ChangeLog
===================================================================
--- elfutils-0.148.orig/libebl/ChangeLog	2010-03-05 05:48:23.000000000 +0000
+++ elfutils-0.148/libebl/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -624,6 +624,11 @@
 	* Makefile.am (libebl_*_so_SOURCES): Set to $(*_SRCS) so dependency
 	tracking works right.
 
+2005-05-31  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
 2005-05-21  Ulrich Drepper  <drepper@redhat.com>
 
 	* libebl_x86_64.map: Add x86_64_core_note.
Index: elfutils-0.148/libelf/ChangeLog
===================================================================
--- elfutils-0.148.orig/libelf/ChangeLog	2010-06-14 21:17:20.000000000 +0000
+++ elfutils-0.148/libelf/ChangeLog	2010-07-03 13:04:07.000000000 +0000
@@ -657,6 +657,11 @@
 
 	* elf.h: Update from glibc.
 
+2005-05-31  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
 2005-05-08  Roland McGrath  <roland@redhat.com>
 
 	* elf_begin.c (read_file) [_MUDFLAP]: Don't use mmap for now.
Index: elfutils-0.148/libelf/common.h
===================================================================
--- elfutils-0.148.orig/libelf/common.h	2009-01-08 20:56:36.000000000 +0000
+++ elfutils-0.148/libelf/common.h	2010-07-03 13:04:07.000000000 +0000
@@ -160,7 +160,7 @@
   (Var) = (sizeof (Var) == 1						      \
 	   ? (unsigned char) (Var)					      \
 	   : (sizeof (Var) == 2						      \
-	      ? bswap_16 (Var)						      \
+	      ? (unsigned short int) bswap_16 (Var)			      \
 	      : (sizeof (Var) == 4					      \
 		 ? bswap_32 (Var)					      \
 		 : bswap_64 (Var))))
@@ -169,7 +169,7 @@
   (Dst) = (sizeof (Var) == 1						      \
 	   ? (unsigned char) (Var)					      \
 	   : (sizeof (Var) == 2						      \
-	      ? bswap_16 (Var)						      \
+	      ? (unsigned short int) bswap_16 (Var)			      \
 	      : (sizeof (Var) == 4					      \
 		 ? bswap_32 (Var)					      \
 		 : bswap_64 (Var))))
Index: elfutils-0.148/src/addr2line.c
===================================================================
--- elfutils-0.148.orig/src/addr2line.c	2010-05-28 14:38:30.000000000 +0000
+++ elfutils-0.148/src/addr2line.c	2010-07-03 13:05:40.000000000 +0000
@@ -447,10 +447,10 @@
       bool parsed = false;
       int i, j;
       char *name = NULL;
-      if (sscanf (string, "(%m[^)])%" PRIiMAX "%n", &name, &addr, &i) == 2
+      if (sscanf (string, "(%a[^)])%" PRIiMAX "%n", &name, &addr, &i) == 2
 	  && string[i] == '\0')
 	parsed = adjust_to_section (name, &addr, dwfl);
-      switch (sscanf (string, "%m[^-+]%n%" PRIiMAX "%n", &name, &i, &addr, &j))
+      switch (sscanf (string, "%a[^-+]%n%" PRIiMAX "%n", &name, &i, &addr, &j))
 	{
 	default:
 	  break;
Index: elfutils-0.148/src/ChangeLog
===================================================================
--- elfutils-0.148.orig/src/ChangeLog	2010-06-28 19:05:56.000000000 +0000
+++ elfutils-0.148/src/ChangeLog	2010-07-03 13:04:08.000000000 +0000
@@ -165,8 +165,16 @@
 	* readelf.c (attr_callback): Use print_block only when we don't use
 	print_ops.
 
+2009-08-17  Roland McGrath  <roland@redhat.com>
+
+	* ld.h: Disable extern inlines for GCC 4.2.
+
 2009-08-14  Roland McGrath  <roland@redhat.com>
 
+	* strings.c (read_block): Conditionalize posix_fadvise use
+	on [POSIX_FADV_SEQUENTIAL].
+	From Petr Salinger <Petr.Salinger@seznam.cz>.
+
 	* ar.c (do_oper_extract): Use pathconf instead of statfs.
 
 2009-08-01  Ulrich Drepper  <drepper@redhat.com>
@@ -330,6 +338,8 @@
 	* readelf.c (print_debug_frame_section): Use t instead of j formats
 	for ptrdiff_t OFFSET.
 
+	* addr2line.c (handle_address): Use %a instead of %m for compatibility.
+
 2009-01-21  Ulrich Drepper  <drepper@redhat.com>
 
 	* elflint.c (check_program_header): Fix typo in .eh_frame_hdr section
@@ -513,6 +523,11 @@
 	that matches its PT_LOAD's p_flags &~ PF_W.  On sparc, PF_X really
 	is valid in RELRO.
 
+2008-03-01  Roland McGrath  <roland@redhat.com>
+
+	* readelf.c (dump_archive_index): Tweak portability hack
+	to match [__GNUC__ < 4] too.
+
 2008-02-29  Roland McGrath  <roland@redhat.com>
 
 	* readelf.c (print_attributes): Add a cast.
@@ -764,6 +779,8 @@
 
 	* readelf.c (hex_dump): Fix rounding error in whitespace calculation.
 
+	* Makefile.am (readelf_no_Werror): New variable.
+
 2007-10-15  Roland McGrath  <roland@redhat.com>
 
 	* make-debug-archive.in: New file.
@@ -1203,6 +1220,10 @@
 	* elflint.c (valid_e_machine): Add EM_ALPHA.
 	Reported by Christian Aichinger <Greek0@gmx.net>.
 
+	* strings.c (map_file): Define POSIX_MADV_SEQUENTIAL to
+	MADV_SEQUENTIAL if undefined.  	Don't call posix_madvise
+	if neither is defined.
+
 2006-08-08  Ulrich Drepper  <drepper@redhat.com>
 
 	* elflint.c (check_dynamic): Don't require DT_HASH for DT_SYMTAB.
@@ -1279,6 +1300,10 @@
 	* Makefile.am: Add hacks to create dependency files for non-generic
 	linker.
 
+2006-04-05  Roland McGrath  <roland@redhat.com>
+
+	* strings.c (MAP_POPULATE): Define to 0 if undefined.
+
 2006-06-12  Ulrich Drepper  <drepper@redhat.com>
 
 	* ldgeneric.c (ld_generic_generate_sections): Don't create .interp
@@ -1627,6 +1652,11 @@
 	* readelf.c (print_debug_loc_section): Fix indentation for larger
 	address size.
 
+2005-05-31  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
 2005-05-30  Roland McGrath  <roland@redhat.com>
 
 	* readelf.c (print_debug_line_section): Print section offset of each
Index: elfutils-0.148/src/findtextrel.c
===================================================================
--- elfutils-0.148.orig/src/findtextrel.c	2009-02-11 01:12:59.000000000 +0000
+++ elfutils-0.148/src/findtextrel.c	2010-07-03 13:04:08.000000000 +0000
@@ -490,7 +490,11 @@
 
 
 static void
-check_rel (size_t nsegments, struct segments segments[nsegments],
+check_rel (size_t nsegments, struct segments segments[
+#if __GNUC__ >= 4
+						      nsegments
+#endif
+	   ],
 	   GElf_Addr addr, Elf *elf, Elf_Scn *symscn, Dwarf *dw,
 	   const char *fname, bool more_than_one, void **knownsrcs)
 {
Index: elfutils-0.148/src/ld.h
===================================================================
--- elfutils-0.148.orig/src/ld.h	2009-06-13 22:39:51.000000000 +0000
+++ elfutils-0.148/src/ld.h	2010-07-03 13:04:08.000000000 +0000
@@ -1122,6 +1122,7 @@
 
 /* Checked whether the symbol is undefined and referenced from a DSO.  */
 extern bool linked_from_dso_p (struct scninfo *scninfo, size_t symidx);
+#if defined __OPTIMIZE__ && !(__GNUC__ == 4 && __GNUC_MINOR__ == 2)
 #ifdef __GNUC_STDC_INLINE__
 __attribute__ ((__gnu_inline__))
 #endif
@@ -1139,5 +1140,6 @@
 
   return sym->defined && sym->in_dso;
 }
+#endif	/* Optimizing and not GCC 4.2.  */
 
 #endif	/* ld.h */
Index: elfutils-0.148/src/Makefile.am
===================================================================
--- elfutils-0.148.orig/src/Makefile.am	2010-03-05 05:48:23.000000000 +0000
+++ elfutils-0.148/src/Makefile.am	2010-07-03 13:04:08.000000000 +0000
@@ -99,6 +99,9 @@
 # XXX While the file is not finished, don't warn about this
 ldgeneric_no_Wunused = yes
 
+# Buggy old compilers.
+readelf_no_Werror = yes
+
 readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
 nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl
 size_LDADD = $(libelf) $(libeu) $(libmudflap)

Index: elfutils-0.148/src/readelf.c
===================================================================
--- elfutils-0.148.orig/src/readelf.c	2010-06-28 19:05:56.000000000 +0000
+++ elfutils-0.148/src/readelf.c	2010-07-03 13:04:08.000000000 +0000
@@ -7845,7 +7845,7 @@
 	  if (unlikely (elf_rand (elf, as_off) == 0)
 	      || unlikely ((subelf = elf_begin (-1, ELF_C_READ_MMAP, elf))
 			   == NULL))
-#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 7)
+#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 7) || __GNUC__ < 4
 	    while (1)
 #endif
 	      error (EXIT_FAILURE, 0,
Index: elfutils-0.148/src/strings.c
===================================================================
--- elfutils-0.148.orig/src/strings.c	2009-02-11 01:12:59.000000000 +0000
+++ elfutils-0.148/src/strings.c	2010-07-03 13:04:08.000000000 +0000
@@ -51,6 +51,10 @@
 
 #include <system.h>
 
+#ifndef MAP_POPULATE
+# define MAP_POPULATE 0
+#endif
+
 
 /* Prototypes of local functions.  */
 static int read_fd (int fd, const char *fname, off64_t fdlen);
@@ -491,8 +495,13 @@
 		    fd, start_off);
       if (mem != MAP_FAILED)
 	{
+#if !defined POSIX_MADV_SEQUENTIAL && defined MADV_SEQUENTIAL
+# define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL
+#endif
+#ifdef POSIX_MADV_SEQUENTIAL
 	  /* We will go through the mapping sequentially.  */
 	  (void) posix_madvise (mem, map_size, POSIX_MADV_SEQUENTIAL);
+#endif
 	  break;
 	}
       if (errno != EINVAL && errno != ENOMEM)
@@ -586,9 +595,11 @@
       elfmap_off = from & ~(ps - 1);
       elfmap_base = elfmap = map_file (fd, elfmap_off, fdlen, &elfmap_size);
 
+#ifdef POSIX_FADV_SEQUENTIAL
       if (unlikely (elfmap == MAP_FAILED))
 	/* Let the kernel know we are going to read everything in sequence.  */
 	(void) posix_fadvise (fd, 0, 0, POSIX_FADV_SEQUENTIAL);
+#endif
     }
 
   if (unlikely (elfmap == MAP_FAILED))
Index: elfutils-0.148/src/strip.c
===================================================================
--- elfutils-0.148.orig/src/strip.c	2010-01-15 09:05:55.000000000 +0000
+++ elfutils-0.148/src/strip.c	2010-07-03 13:04:08.000000000 +0000
@@ -53,6 +53,12 @@
 #include <libebl.h>
 #include <system.h>
 
+#ifdef HAVE_FUTIMES
+# define FUTIMES(fd, fname, tvp) futimes (fd, tvp)
+#else
+# define FUTIMES(fd, fname, tvp) utimes (fname, tvp)
+#endif
+
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
@@ -301,8 +307,18 @@
 
       /* If we have to preserve the timestamp, we need it in the
 	 format utimes() understands.  */
+#ifdef HAVE_STRUCT_STAT_ST_ATIM
       TIMESPEC_TO_TIMEVAL (&tv[0], &pre_st.st_atim);
+#else
+      tv[0].tv_sec = pre_st.st_atime;
+      tv[0].tv_usec = 0;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
       TIMESPEC_TO_TIMEVAL (&tv[1], &pre_st.st_mtim);
+#else
+      tv[1].tv_sec = pre_st.st_atime;
+      tv[1].tv_usec = 0;
+#endif
     }
 
   /* Open the file.  */
@@ -1747,7 +1763,7 @@
   /* If requested, preserve the timestamp.  */
   if (tvp != NULL)
     {
-      if (futimes (fd, tvp) != 0)
+      if (FUTIMES (fd, output_fname, tvp) != 0)
 	{
 	  error (0, errno, gettext ("\
 cannot set access and modification date of '%s'"),
@@ -1804,7 +1820,7 @@
 
   if (tvp != NULL)
     {
-      if (unlikely (futimes (fd, tvp) != 0))
+      if (unlikely (FUTIMES (fd, fname, tvp) != 0))
 	{
 	  error (0, errno, gettext ("\
 cannot set access and modification date of '%s'"), fname);
Index: elfutils-0.148/tests/ChangeLog
===================================================================
--- elfutils-0.148.orig/tests/ChangeLog	2010-06-28 19:05:56.000000000 +0000
+++ elfutils-0.148/tests/ChangeLog	2010-07-03 13:04:08.000000000 +0000
@@ -154,6 +154,8 @@
 
 2008-01-21  Roland McGrath  <roland@redhat.com>
 
+	* line2addr.c (main): Revert last change.
+
 	* testfile45.S.bz2: Add tests for cltq, cqto.
 	* testfile45.expect.bz2: Adjust.
 
@@ -862,6 +864,11 @@
 	* Makefile.am (TESTS): Add run-elflint-test.sh.
 	(EXTRA_DIST): Add run-elflint-test.sh and testfile18.bz2.
 
+2005-05-31  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (WEXTRA): New variable, substituted by configure.
+	(AM_CFLAGS): Use it in place of -Wextra.
+
 2005-05-24  Ulrich Drepper  <drepper@redhat.com>
 
 	* get-files.c (main): Use correct format specifier.
Index: elfutils-0.148/tests/line2addr.c
===================================================================
--- elfutils-0.148.orig/tests/line2addr.c	2009-01-08 20:56:37.000000000 +0000
+++ elfutils-0.148/tests/line2addr.c	2010-07-03 13:04:08.000000000 +0000
@@ -132,7 +132,7 @@
     {
       struct args a = { .arg = argv[cnt] };
 
-      switch (sscanf (a.arg, "%m[^:]:%d", &a.file, &a.line))
+      switch (sscanf (a.arg, "%a[^:]:%d", &a.file, &a.line))
 	{
 	default:
 	case 0:
