From d6d5aa021673f4c8ff7b10e946305a0c50df3b3d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 20 May 2014 11:46:03 +0200 Subject: [PATCH 01/11] Update to 0.159. --- .gitignore | 1 + Makefile | 2 +- elfutils-0.158-CVE-2014-0172.patch | 28 - elfutils-0.158-mod-e_type.patch | 62 - elfutils-portability.patch | 785 +++++++------ elfutils-robustify.patch | 1756 ---------------------------- elfutils.spec | 50 +- sources | 2 +- 8 files changed, 448 insertions(+), 2238 deletions(-) delete mode 100644 elfutils-0.158-CVE-2014-0172.patch delete mode 100644 elfutils-0.158-mod-e_type.patch delete mode 100644 elfutils-robustify.patch diff --git a/.gitignore b/.gitignore index e95d6aa..6a82bc6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /hello_aarch64.ko.bz2 /testfile_aarch64_core.bz2 /elfutils-0.158.tar.bz2 +/elfutils-0.159.tar.bz2 diff --git a/Makefile b/Makefile index f3b9195..b5ce206 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -patches := $(patsubst %,elfutils-%.patch,robustify portability) +patches := $(patsubst %,elfutils-%.patch,portability) .PHONY: patches patches: $(patches) diff --git a/elfutils-0.158-CVE-2014-0172.patch b/elfutils-0.158-CVE-2014-0172.patch deleted file mode 100644 index 3b76360..0000000 --- a/elfutils-0.158-CVE-2014-0172.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 7f1eec317db79627b473c5b149a22a1b20d1f68f -Author: Mark Wielaard -Date: Wed Apr 9 11:33:23 2014 +0200 - - CVE-2014-0172 Check for overflow before calling malloc to uncompress data. - - https://bugzilla.redhat.com/show_bug.cgi?id=1085663 - - Reported-by: Florian Weimer - Signed-off-by: Mark Wielaard - -diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c -index 79daeac..34ea373 100644 ---- a/libdw/dwarf_begin_elf.c -+++ b/libdw/dwarf_begin_elf.c -@@ -282,6 +282,12 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp) - memcpy (&size, data->d_buf + 4, sizeof size); - size = be64toh (size); - -+ /* Check for unsigned overflow so malloc always allocated -+ enough memory for both the Elf_Data header and the -+ uncompressed section data. */ -+ if (unlikely (sizeof (Elf_Data) + size < size)) -+ break; -+ - Elf_Data *zdata = malloc (sizeof (Elf_Data) + size); - if (unlikely (zdata == NULL)) - break; diff --git a/elfutils-0.158-mod-e_type.patch b/elfutils-0.158-mod-e_type.patch deleted file mode 100644 index 5e2918f..0000000 --- a/elfutils-0.158-mod-e_type.patch +++ /dev/null @@ -1,62 +0,0 @@ -commit 65cefbd0793c0f9e90a326d7bebf0a47c93294ad -Author: Josh Stone -Date: Tue Mar 11 10:19:28 2014 -0700 - - libdwfl: dwfl_module_getdwarf.c (open_elf) only (re)set mod->e_type once. - - As noted in https://sourceware.org/bugzilla/show_bug.cgi?id=16676#c2 for - systemtap, the heuristic used by open_elf to set the kernel Dwfl_Module - type to ET_DYN, even if the underlying ELF file e_type was set to - ET_EXEC, could trigger erroneously for non-kernel/non-main (debug or - aux) files. Make sure we only set the e_type of the module once when - processing the main file (when the phdrs can be trusted). - -diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c -index c4bd739..f8de80b 100644 ---- a/libdwfl/dwfl_module_getdwarf.c -+++ b/libdwfl/dwfl_module_getdwarf.c -@@ -1,5 +1,5 @@ - /* Find debugging and symbol information for a module in libdwfl. -- Copyright (C) 2005-2012 Red Hat, Inc. -+ Copyright (C) 2005-2012, 2014 Red Hat, Inc. - This file is part of elfutils. - - This file is free software; you can redistribute it and/or modify -@@ -77,7 +77,7 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) - return DWFL_E (LIBELF, elf_errno ()); - } - -- if (mod->e_type != ET_REL) -+ if (ehdr->e_type != ET_REL) - { - /* In any non-ET_REL file, we compute the "synchronization address". - -@@ -131,11 +131,24 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) - } - } - -- mod->e_type = ehdr->e_type; -+ /* We only want to set the module e_type explictly once, derived from -+ the main ELF file. (It might be changed for the kernel, because -+ that is special - see below.) open_elf is always called first for -+ the main ELF file, because both find_dw and find_symtab call -+ __libdwfl_getelf first to open the main file. So don't let debug -+ or aux files override the module e_type. The kernel heuristic -+ below could otherwise trigger for non-kernel/non-main files, since -+ their phdrs might not match the actual load addresses. */ -+ if (file == &mod->main) -+ { -+ mod->e_type = ehdr->e_type; - -- /* Relocatable Linux kernels are ET_EXEC but act like ET_DYN. */ -- if (mod->e_type == ET_EXEC && file->vaddr != mod->low_addr) -- mod->e_type = ET_DYN; -+ /* Relocatable Linux kernels are ET_EXEC but act like ET_DYN. */ -+ if (mod->e_type == ET_EXEC && file->vaddr != mod->low_addr) -+ mod->e_type = ET_DYN; -+ } -+ else -+ assert (mod->main.elf != NULL); - - return DWFL_E_NOERROR; - } diff --git a/elfutils-portability.patch b/elfutils-portability.patch index a34ba29..7a36434 100644 --- a/elfutils-portability.patch +++ b/elfutils-portability.patch @@ -1,6 +1,6 @@ --- elfutils/backends/ChangeLog +++ elfutils/backends/ChangeLog -@@ -292,6 +292,10 @@ +@@ -364,6 +364,10 @@ * ppc_attrs.c (ppc_check_object_attribute): Handle tag GNU_Power_ABI_Struct_Return. @@ -11,7 +11,7 @@ 2008-10-04 Ulrich Drepper * i386_reloc.def: Fix entries for TLS_GOTDESC, TLS_DESC_CALL, and -@@ -619,6 +623,11 @@ +@@ -691,6 +695,11 @@ * sparc_init.c: Likewise. * x86_64_init.c: Likewise. @@ -23,7 +23,7 @@ 2005-11-19 Roland McGrath * ppc64_reloc.def: REL30 -> ADDR30. -@@ -641,6 +650,9 @@ +@@ -713,6 +722,9 @@ * Makefile.am (uninstall): Don't try to remove $(pkgincludedir). (CLEANFILES): Add libebl_$(m).so. @@ -35,28 +35,26 @@ --- elfutils/backends/Makefile.am +++ elfutils/backends/Makefile.am -@@ -124,7 +124,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a +@@ -119,7 +119,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a $(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) +- -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) ++ -Wl,-z,defs $(LD_AS_NEEDED) $(libelf) $(libdw) $(textrel_check) libebl_i386.so: $(cpu_i386) --- elfutils/backends/Makefile.in +++ elfutils/backends/Makefile.in -@@ -83,7 +83,8 @@ host_triplet = @host@ +@@ -83,6 +83,7 @@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(noinst_HEADERS) ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap subdir = backends ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ -@@ -284,6 +285,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -285,6 +286,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -64,7 +62,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -315,6 +317,7 @@ SHELL = @SHELL@ +@@ -316,6 +318,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -72,31 +70,35 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -378,10 +381,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr +@@ -378,11 +381,11 @@ zip_LIBS = @zip_LIBS@ + AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ +- $(if $($(*F)_no_Werror),,-Werror) \ +- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ +- $($(*F)_CFLAGS) +- ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ ++ $($(*F)_no_Werror),,-Werror) $(if \ + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) -+ $(am__append_1) $(am__append_2) - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -888,7 +890,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda $(foreach m,$(modules), libebl_$(m).map \ + libebl_$(m).so $(am_libebl_$(m)_pic_a_OBJECTS)) +@@ -885,7 +888,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a $(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) +- -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) ++ -Wl,-z,defs $(LD_AS_NEEDED) $(libelf) $(libdw) $(textrel_check) libebl_i386.so: $(cpu_i386) --- elfutils/ChangeLog +++ elfutils/ChangeLog -@@ -118,6 +118,8 @@ +@@ -148,6 +148,8 @@ 2012-01-24 Mark Wielaard @@ -105,7 +107,7 @@ * COPYING: Fix address. Updated version from gnulib. 2012-01-23 Mark Wielaard -@@ -136,6 +138,9 @@ +@@ -166,6 +168,9 @@ 2011-10-08 Mike Frysinger @@ -115,7 +117,7 @@ * configure.ac: Fix use of AC_ARG_ENABLE to handle $enableval correctly. 2011-10-02 Ulrich Drepper -@@ -157,6 +162,10 @@ +@@ -187,6 +192,10 @@ * configure.ac (LOCALEDIR, DATADIRNAME): Removed. @@ -126,7 +128,7 @@ 2009-09-21 Ulrich Drepper * configure.ac: Update for more modern autoconf. -@@ -165,6 +174,10 @@ +@@ -195,6 +204,10 @@ * configure.ac (zip_LIBS): Check for liblzma too. @@ -137,7 +139,7 @@ 2009-04-19 Roland McGrath * configure.ac (eu_version): Round down here, not in version.h macros. -@@ -176,6 +189,8 @@ +@@ -206,6 +219,8 @@ 2009-01-23 Roland McGrath @@ -146,7 +148,7 @@ * configure.ac (zlib check): Check for gzdirect, need zlib >= 1.2.2.3. * configure.ac (__thread check): Use AC_LINK_IFELSE, in case of -@@ -256,6 +271,10 @@ +@@ -286,6 +301,10 @@ * configure.ac: Add dummy automake conditional to get dependencies for non-generic linker right. See src/Makefile.am. @@ -157,7 +159,7 @@ 2005-11-18 Roland McGrath * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New variable. -@@ -303,6 +322,17 @@ +@@ -333,6 +352,17 @@ * Makefile.am (all_SUBDIRS): Add libdwfl. * configure.ac: Write libdwfl/Makefile. @@ -177,7 +179,7 @@ * configure.ac [AH_BOTTOM] (INTDECL, _INTDECL): New macros. --- elfutils/config/ChangeLog +++ elfutils/config/ChangeLog -@@ -44,6 +44,10 @@ +@@ -58,6 +58,10 @@ * known-dwarf.awk: Use gawk. @@ -193,12 +195,12 @@ @@ -1,6 +1,6 @@ ## Common automake fragments for elfutils subdirectory makefiles. ## --## Copyright (C) 2010 Red Hat, Inc. -+## Copyright (C) 2010-2011 Red Hat, Inc. +-## Copyright (C) 2010, 2014 Red Hat, Inc. ++## Copyright (C) 2010-2011, 2014 Red Hat, Inc. ## ## This file is part of elfutils. ## -@@ -29,14 +29,20 @@ +@@ -29,13 +29,21 @@ ## not, see . ## @@ -207,20 +209,21 @@ + DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. - AM_CFLAGS = -std=gnu99 -Wall -Wshadow \ -- $(if $($(*F)_no_Werror),,-Werror) \ +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ ++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) \ ++ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2) \ $($(*F)_CFLAGS) +if BUILD_WERROR +AM_CFLAGS += $(if $($(*F)_no_Werror),,-Werror) +endif + - if MUDFLAP - AM_CFLAGS += -fmudflap - libmudflap = -lmudflap + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + + %.os: %.c %.o --- elfutils/config/Makefile.in +++ elfutils/config/Makefile.in @@ -146,6 +146,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -241,9 +244,9 @@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ --- elfutils/config.h.in +++ elfutils/config.h.in -@@ -6,6 +6,9 @@ - /* Defined if libdw should support GNU ref_alt FORM, dwz multi files. */ - #undef ENABLE_DWZ +@@ -3,6 +3,9 @@ + /* Should ar and ranlib use -D behavior by default? */ + #undef DEFAULT_AR_DETERMINISTIC +/* Have __builtin_popcount. */ +#undef HAVE_BUILTIN_POPCOUNT @@ -251,7 +254,7 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -@@ -102,4 +105,7 @@ +@@ -99,4 +102,7 @@ /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES @@ -270,7 +273,7 @@ BUILD_STATIC_FALSE BUILD_STATIC_TRUE USE_VALGRIND_FALSE -@@ -678,6 +680,8 @@ NEVER_TRUE +@@ -676,6 +678,8 @@ NEVER_TRUE base_cpu NATIVE_LD_FALSE NATIVE_LD_TRUE @@ -279,7 +282,7 @@ NM READELF ac_ct_AR -@@ -802,6 +806,7 @@ enable_debugpred +@@ -796,6 +800,7 @@ enable_debugpred enable_gprof enable_gcov enable_valgrind @@ -287,7 +290,7 @@ enable_tests_rpath enable_libebl_subdir with_zlib -@@ -1461,6 +1466,7 @@ Optional Features: +@@ -1452,6 +1457,7 @@ Optional Features: --enable-gprof build binaries with gprof support --enable-gcov build binaries with gcov support --enable-valgrind run all tests under valgrind @@ -295,7 +298,7 @@ --enable-tests-rpath build $ORIGIN-using rpath into tests --enable-libebl-subdir=DIR install libebl_CPU modules in $(libdir)/DIR -@@ -4709,6 +4715,130 @@ if test "x$ac_cv_c99" != xyes; then : +@@ -4674,6 +4680,130 @@ if test "x$ac_cv_c99" != xyes; then : as_fn_error $? "gcc with C99 support required" "$LINENO" 5 fi @@ -426,7 +429,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __thread support" >&5 $as_echo_n "checking for __thread support... " >&6; } if ${ac_cv_tls+:} false; then : -@@ -4745,7 +4875,13 @@ fi +@@ -4710,7 +4840,13 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 $as_echo "$ac_cv_tls" >&6; } if test "x$ac_cv_tls" != xyes; then : @@ -441,7 +444,7 @@ fi # Check whether --enable-largefile was given. -@@ -5155,6 +5291,22 @@ else +@@ -5077,6 +5213,22 @@ else fi @@ -464,7 +467,7 @@ # Check whether --enable-tests-rpath was given. if test "${enable_tests_rpath+set}" = set; then : enableval=$enable_tests_rpath; tests_use_rpath=$enableval -@@ -5875,7 +6027,7 @@ case "$eu_version" in +@@ -5800,7 +5952,7 @@ case "$eu_version" in esac # Round up to the next release API (x.y) version. @@ -473,7 +476,7 @@ ac_ext=c ac_cpp='$CPP $CPPFLAGS' -@@ -6613,6 +6765,10 @@ if test -z "${BUILD_STATIC_TRUE}" && tes +@@ -6530,6 +6682,10 @@ if test -z "${BUILD_STATIC_TRUE}" && tes as_fn_error $? "conditional \"BUILD_STATIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi @@ -486,7 +489,7 @@ Usually this means the macro was only invoked conditionally." "$LINENO" 5 --- elfutils/configure.ac +++ elfutils/configure.ac -@@ -99,6 +99,54 @@ CFLAGS="$old_CFLAGS"]) +@@ -89,6 +89,54 @@ CFLAGS="$old_CFLAGS"]) AS_IF([test "x$ac_cv_c99" != xyes], AC_MSG_ERROR([gcc with C99 support required])) @@ -541,7 +544,7 @@ 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. -@@ -114,7 +162,10 @@ static __thread int a; int foo (int b) { +@@ -104,7 +152,10 @@ static __thread int a; int foo (int b) { CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS"]) AS_IF([test "x$ac_cv_tls" != xyes], @@ -553,9 +556,9 @@ 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 -@@ -213,6 +264,11 @@ AM_CONDITIONAL(USE_VALGRIND, test "$use_ +@@ -183,6 +234,11 @@ AM_CONDITIONAL(USE_VALGRIND, test "$use_ AM_CONDITIONAL(BUILD_STATIC, [dnl - test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes]) + test "$use_gprof" = yes -o "$use_gcov" = yes]) +AC_ARG_ENABLE([werror], +AS_HELP_STRING([--disable-werror],[do not build with -Werror]), @@ -565,7 +568,7 @@ AC_ARG_ENABLE([tests-rpath], AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]), [tests_use_rpath=$enableval], [tests_use_rpath=no]) -@@ -324,7 +380,7 @@ case "$eu_version" in +@@ -297,7 +353,7 @@ case "$eu_version" in esac # Round up to the next release API (x.y) version. @@ -576,7 +579,7 @@ --- elfutils/lib/ChangeLog +++ elfutils/lib/ChangeLog -@@ -61,6 +61,9 @@ +@@ -65,6 +65,9 @@ 2009-01-23 Roland McGrath @@ -586,7 +589,7 @@ * eu-config.h: Add multiple inclusion protection. 2009-01-17 Ulrich Drepper -@@ -117,6 +120,11 @@ +@@ -121,6 +124,11 @@ * Makefile.am (libeu_a_SOURCES): Add it. * system.h: Declare crc32_file. @@ -620,17 +623,15 @@ # define OLD_VERSION(name, version) \ --- elfutils/lib/Makefile.in +++ elfutils/lib/Makefile.in -@@ -82,7 +82,8 @@ host_triplet = @host@ +@@ -82,6 +82,7 @@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(noinst_HEADERS) ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ -@@ -198,6 +199,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -197,6 +198,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -638,7 +639,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -229,6 +231,7 @@ SHELL = @SHELL@ +@@ -228,6 +230,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -646,22 +647,23 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -291,10 +294,9 @@ zip_LIBS = @zip_LIBS@ +@@ -289,9 +292,11 @@ top_srcdir = @top_srcdir@ + zip_LIBS = @zip_LIBS@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ + $($(*F)_no_Werror),,-Werror) $(if \ +- $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) -fpic + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) -fpic -+ $(am__append_1) $(am__append_2) -fpic - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) -fpic + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda + textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi --- elfutils/libasm/ChangeLog +++ elfutils/libasm/ChangeLog -@@ -75,6 +75,11 @@ +@@ -79,6 +79,11 @@ * asm_error.c: Add new error ASM_E_IOERROR. * libasmP.h: Add ASM_E_IOERROR definition. @@ -675,21 +677,18 @@ * Makefile.am (AM_CFLAGS): Add -Wunused -Wextra -Wformat=2. --- elfutils/libasm/Makefile.in +++ elfutils/libasm/Makefile.in -@@ -83,10 +83,11 @@ host_triplet = @host@ +@@ -83,8 +83,9 @@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap - @MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) - @MUDFLAP_TRUE@am_libasm_pic_a_OBJECTS = --@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_2 = -lpthread -+@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_3 = -lpthread + noinst_PROGRAMS = $(am__EXEEXT_1) +-@USE_LOCKS_TRUE@am__append_1 = -lpthread ++@USE_LOCKS_TRUE@am__append_2 = -lpthread subdir = libasm ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ -@@ -250,6 +251,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -248,6 +249,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -697,7 +696,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -281,6 +283,7 @@ SHELL = @SHELL@ +@@ -279,6 +281,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -705,31 +704,35 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -344,10 +347,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr +@@ -341,11 +344,11 @@ zip_LIBS = @zip_LIBS@ + AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl \ -I$(top_srcdir)/libdw - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ +- $(if $($(*F)_no_Werror),,-Werror) \ +- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ +- $($(*F)_CFLAGS) +- ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ ++ $($(*F)_no_Werror),,-Werror) $(if \ + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) -+ $(am__append_1) $(am__append_2) - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -376,7 +378,7 @@ libasm_a_SOURCES = asm_begin.c asm_abort ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda $(am_libasm_pic_a_OBJECTS) \ + libasm.so.$(VERSION) +@@ -370,7 +373,7 @@ libasm_a_SOURCES = asm_begin.c asm_abort - @MUDFLAP_FALSE@libasm_pic_a_SOURCES = - @MUDFLAP_FALSE@am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os) --@MUDFLAP_FALSE@libasm_so_LDLIBS = $(am__append_2) -+@MUDFLAP_FALSE@libasm_so_LDLIBS = $(am__append_3) - @MUDFLAP_FALSE@libasm_so_SOURCES = + libasm_pic_a_SOURCES = + am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os) +-libasm_so_LDLIBS = $(am__append_1) ++libasm_so_LDLIBS = $(am__append_2) + libasm_so_SOURCES = noinst_HEADERS = libasmP.h symbolhash.h EXTRA_DIST = libasm.map --- elfutils/libcpu/ChangeLog +++ elfutils/libcpu/ChangeLog -@@ -47,6 +47,9 @@ +@@ -51,6 +51,9 @@ 2009-01-23 Roland McGrath @@ -739,7 +742,7 @@ * Makefile.am (i386_parse_CFLAGS): Use quotes around command substitution that can produce leading whitespace. -@@ -376,6 +379,11 @@ +@@ -380,6 +383,11 @@ * defs/i386.doc: New file. * defs/x86_64: New file. @@ -763,17 +766,15 @@ else --- elfutils/libcpu/Makefile.in +++ elfutils/libcpu/Makefile.in -@@ -84,7 +84,8 @@ DIST_COMMON = $(top_srcdir)/config/eu.am +@@ -84,6 +84,7 @@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.am i386_lex.c i386_parse.c \ $(top_srcdir)/config/depcomp $(top_srcdir)/config/ylwrap \ $(am__noinst_HEADERS_DIST) ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap @MAINTAINER_MODE_TRUE@noinst_PROGRAMS = i386_gendis$(EXEEXT) subdir = libcpu ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -225,6 +226,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -223,6 +224,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -781,7 +782,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = lex.$( * libdw.h (dwarf_offdie): Fix documentation to mention .debug_info. -@@ -705,6 +709,10 @@ +@@ -779,6 +783,10 @@ * dwarf_hasattr_integrate.c: Integrate DW_AT_specification too. @@ -826,7 +829,7 @@ 2009-08-10 Roland McGrath * dwarf_getscopevar.c: Use dwarf_diename. -@@ -1473,6 +1481,11 @@ +@@ -1547,6 +1555,11 @@ 2005-05-31 Roland McGrath @@ -840,7 +843,7 @@ --- elfutils/libdw/dwarf_begin_elf.c +++ elfutils/libdw/dwarf_begin_elf.c -@@ -48,6 +48,14 @@ +@@ -47,6 +47,14 @@ #if USE_ZLIB # include # define crc32 loser_crc32 @@ -857,7 +860,7 @@ #endif --- elfutils/libdw/libdw.h +++ elfutils/libdw/libdw.h -@@ -879,7 +879,7 @@ extern Dwarf_OOM dwarf_new_oom_handler ( +@@ -891,7 +891,7 @@ extern Dwarf_OOM dwarf_new_oom_handler ( /* Inline optimizations. */ @@ -868,18 +871,16 @@ dwarf_whatattr (Dwarf_Attribute *attr) --- elfutils/libdw/Makefile.in +++ elfutils/libdw/Makefile.in -@@ -84,8 +84,9 @@ DIST_COMMON = $(top_srcdir)/config/eu.am +@@ -84,7 +84,8 @@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS) \ ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap --@BUILD_STATIC_TRUE@am__append_2 = -fpic +-@BUILD_STATIC_TRUE@am__append_1 = -fpic +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap -+@BUILD_STATIC_TRUE@am__append_3 = -fpic - @MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) - @MUDFLAP_TRUE@am_libdw_pic_a_OBJECTS = ++@BUILD_STATIC_TRUE@am__append_2 = -fpic + noinst_PROGRAMS = $(am__EXEEXT_1) subdir = libdw + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -295,6 +296,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -896,22 +897,67 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -388,10 +391,9 @@ zip_LIBS = @zip_LIBS@ +@@ -387,10 +390,11 @@ top_srcdir = @top_srcdir@ + zip_LIBS = @zip_LIBS@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ + $($(*F)_no_Werror),,-Werror) $(if \ +- $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) \ +- $(am__append_1) + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) $(am__append_2) -+ $(am__append_1) $(am__append_2) $(am__append_3) - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) $(am__append_2) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda + textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi +--- elfutils/libdwelf/Makefile.in ++++ elfutils/libdwelf/Makefile.in +@@ -82,6 +82,7 @@ host_triplet = @host@ + DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog ++@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) + subdir = libdwelf + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -227,6 +228,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + LDFLAGS = @LDFLAGS@ ++LD_AS_NEEDED = @LD_AS_NEEDED@ + LEX = @LEX@ + LEXLIB = @LEXLIB@ + LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +@@ -258,6 +260,7 @@ SHELL = @SHELL@ + STRIP = @STRIP@ + USE_NLS = @USE_NLS@ + VERSION = 1 ++WEXTRA = @WEXTRA@ + XGETTEXT = @XGETTEXT@ + XGETTEXT_015 = @XGETTEXT_015@ + XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +@@ -320,11 +323,11 @@ zip_LIBS = @zip_LIBS@ + AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ + -I$(srcdir)/../libelf -I$(srcdir)/../libdw \ + -I$(srcdir)/../libdwfl -I$(srcdir)/../libebl +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ +- $(if $($(*F)_no_Werror),,-Werror) \ +- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ +- $($(*F)_CFLAGS) +- ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ ++ $($(*F)_no_Werror),,-Werror) $(if \ ++ $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda $(am_libdwelf_pic_a_OBJECTS) + textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi --- elfutils/libdwfl/ChangeLog +++ elfutils/libdwfl/ChangeLog -@@ -283,6 +283,21 @@ +@@ -421,6 +421,21 @@ (dwfl_module_addrsym) (i_to_symfile): New function. (dwfl_module_addrsym) (search_table): Use it. @@ -933,7 +979,7 @@ 2013-11-07 Jan Kratochvil Mark Wielaard -@@ -2048,6 +2063,11 @@ +@@ -2186,6 +2201,11 @@ 2005-07-21 Roland McGrath @@ -985,56 +1031,51 @@ # define MIN(a, b) ((a) < (b) ? (a) : (b)) --- elfutils/libdwfl/linux-pid-attach.c +++ elfutils/libdwfl/linux-pid-attach.c -@@ -268,13 +268,24 @@ pid_thread_detach (Dwfl_Thread *thread, - pid_arg->tid_attached = 0; - if (! pid_arg->assume_ptrace_stopped) - { -+ // Older kernels (tested kernel-2.6.18-348.12.1.el5.x86_64) need special -+ // handling of the detachment to keep the process State: T (stopped). -+ if (pid_arg->tid_was_stopped) -+ syscall (__NR_tkill, tid, SIGSTOP); - /* This handling is needed only on older Linux kernels such as -- 2.6.32-358.23.2.el6.ppc64. Later kernels such as -- 3.11.7-200.fc19.x86_64 remember the T (stopped) state -- themselves and no longer need to pass SIGSTOP during -- PTRACE_DETACH. */ -+ 2.6.32-358.23.2.el6.ppc64. Later kernels such as 3.11.7-200.fc19.x86_64 -+ remember the T (stopped) state themselves and no longer need to pass -+ SIGSTOP during PTRACE_DETACH. */ - ptrace (PTRACE_DETACH, tid, NULL, - (void *) (intptr_t) (pid_arg->tid_was_stopped ? SIGSTOP : 0)); -+ if (pid_arg->tid_was_stopped) -+ { -+ // Wait till the SIGSTOP settles down. -+ int i; -+ for (i = 0; i < 100000; i++) -+ if (linux_proc_pid_is_stopped (tid)) -+ break; -+ } - } +@@ -255,6 +255,11 @@ void + internal_function + __libdwfl_ptrace_detach (pid_t tid, bool tid_was_stopped) + { ++ // Older kernels (tested kernel-2.6.18-348.12.1.el5.x86_64) need special ++ // handling of the detachment to keep the process State: T (stopped). ++ if (tid_was_stopped) ++ syscall (__NR_tkill, tid, SIGSTOP); ++ + /* This handling is needed only on older Linux kernels such as + 2.6.32-358.23.2.el6.ppc64. Later kernels such as + 3.11.7-200.fc19.x86_64 remember the T (stopped) state +@@ -262,6 +267,15 @@ __libdwfl_ptrace_detach (pid_t tid, bool + PTRACE_DETACH. */ + ptrace (PTRACE_DETACH, tid, NULL, + (void *) (intptr_t) (tid_was_stopped ? SIGSTOP : 0)); ++ ++ if (tid_was_stopped) ++ { ++ // Wait till the SIGSTOP settles down. ++ int i; ++ for (i = 0; i < 100000; i++) ++ if (linux_proc_pid_is_stopped (tid)) ++ break; ++ } } + static void --- elfutils/libdwfl/Makefile.in +++ elfutils/libdwfl/Makefile.in -@@ -82,11 +82,12 @@ host_triplet = @host@ +@@ -82,9 +82,10 @@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap --@MUDFLAP_FALSE@am__append_2 = libdwfl_pic.a --@ZLIB_TRUE@am__append_3 = gzip.c --@BZLIB_TRUE@am__append_4 = bzip2.c --@LZMA_TRUE@am__append_5 = lzma.c +-@ZLIB_TRUE@am__append_1 = gzip.c +-@BZLIB_TRUE@am__append_2 = bzip2.c +-@LZMA_TRUE@am__append_3 = lzma.c +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap -+@MUDFLAP_FALSE@am__append_3 = libdwfl_pic.a -+@ZLIB_TRUE@am__append_4 = gzip.c -+@BZLIB_TRUE@am__append_5 = bzip2.c -+@LZMA_TRUE@am__append_6 = lzma.c - @MUDFLAP_TRUE@am_libdwfl_pic_a_OBJECTS = ++@ZLIB_TRUE@am__append_2 = gzip.c ++@BZLIB_TRUE@am__append_3 = bzip2.c ++@LZMA_TRUE@am__append_4 = lzma.c subdir = libdwfl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -289,6 +290,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -286,6 +287,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1042,7 +1083,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -320,6 +322,7 @@ SHELL = @SHELL@ +@@ -317,6 +319,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -1050,42 +1091,37 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -383,10 +386,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr +@@ -379,11 +382,11 @@ zip_LIBS = @zip_LIBS@ + AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. -I$(srcdir) \ -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ - -I$(srcdir)/../libdw - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ + -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ +- $(if $($(*F)_no_Werror),,-Werror) \ +- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ +- $($(*F)_CFLAGS) +- ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ ++ $($(*F)_no_Werror),,-Werror) $(if \ + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) -+ $(am__append_1) $(am__append_2) - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -394,7 +396,7 @@ COMPILE.os = $(filter-out -fprofile-arcs - ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda $(am_libdwfl_pic_a_OBJECTS) textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi --noinst_LIBRARIES = libdwfl.a $(am__append_2) -+noinst_LIBRARIES = libdwfl.a $(am__append_3) - pkginclude_HEADERS = libdwfl.h - libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c \ - dwfl_version.c dwfl_module.c dwfl_report_elf.c relocate.c \ -@@ -417,8 +419,8 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_en +@@ -410,8 +413,8 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_en dwfl_module_register_names.c dwfl_segment_report_module.c \ link_map.c core-file.c open.c image-header.c dwfl_frame.c \ frame_unwind.c dwfl_frame_pc.c linux-pid-attach.c \ -- linux-core-attach.c dwfl_frame_regs.c $(am__append_3) \ -- $(am__append_4) $(am__append_5) -+ linux-core-attach.c dwfl_frame_regs.c $(am__append_4) \ -+ $(am__append_5) $(am__append_6) - @MUDFLAP_FALSE@libdwfl = $(libdw) - @MUDFLAP_TRUE@libdwfl = libdwfl.a $(libdw) $(libebl) $(libelf) $(libeu) - @MUDFLAP_FALSE@libdw = ../libdw/libdw.so +- linux-core-attach.c dwfl_frame_regs.c $(am__append_1) \ +- $(am__append_2) $(am__append_3) ++ linux-core-attach.c dwfl_frame_regs.c $(am__append_2) \ ++ $(am__append_3) $(am__append_4) + libdwfl = $(libdw) + libdw = ../libdw/libdw.so + libelf = ../libelf/libelf.so --- elfutils/libebl/ChangeLog +++ elfutils/libebl/ChangeLog -@@ -738,6 +738,11 @@ +@@ -748,6 +748,11 @@ * Makefile.am (libebl_*_so_SOURCES): Set to $(*_SRCS) so dependency tracking works right. @@ -1099,13 +1135,11 @@ * libebl_x86_64.map: Add x86_64_core_note. --- elfutils/libebl/Makefile.in +++ elfutils/libebl/Makefile.in -@@ -82,7 +82,8 @@ host_triplet = @host@ +@@ -82,6 +82,7 @@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap subdir = libebl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ @@ -1125,22 +1159,23 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -343,10 +346,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr +@@ -342,9 +345,11 @@ zip_LIBS = @zip_LIBS@ + AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf -I$(srcdir)/../libdw \ -I$(srcdir)/../libasm - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ + $($(*F)_no_Werror),,-Werror) $(if \ +- $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) -fpic + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) -fpic -+ $(am__append_1) $(am__append_2) -fpic - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) -fpic + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda $(am_libebl_pic_a_OBJECTS) + textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi --- elfutils/libelf/ChangeLog +++ elfutils/libelf/ChangeLog -@@ -85,6 +85,11 @@ +@@ -135,6 +135,11 @@ * elf-knowledge.h (SECTION_STRIP_P): Remove < SHT_NUM check. @@ -1152,7 +1187,7 @@ 2011-02-26 Mark Wielaard * elf_end.c (elf_end): Call rwlock_unlock before rwlock_fini. -@@ -762,6 +767,11 @@ +@@ -812,6 +817,11 @@ * elf.h: Update from glibc. @@ -1206,23 +1241,20 @@ } --- elfutils/libelf/Makefile.in +++ elfutils/libelf/Makefile.in -@@ -84,11 +84,12 @@ DIST_COMMON = $(top_srcdir)/config/eu.am +@@ -84,9 +84,10 @@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS) \ ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap --@BUILD_STATIC_TRUE@am__append_2 = -fpic +-@BUILD_STATIC_TRUE@am__append_1 = -fpic +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap -+@BUILD_STATIC_TRUE@am__append_3 = -fpic - @MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) - @MUDFLAP_TRUE@am_libelf_pic_a_OBJECTS = --@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_3 = -lpthread -+@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_4 = -lpthread ++@BUILD_STATIC_TRUE@am__append_2 = -fpic + noinst_PROGRAMS = $(am__EXEEXT_1) +-@USE_LOCKS_TRUE@am__append_2 = -lpthread ++@USE_LOCKS_TRUE@am__append_3 = -lpthread subdir = libelf ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ -@@ -293,6 +294,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -291,6 +292,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1230,7 +1262,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -324,6 +326,7 @@ SHELL = @SHELL@ +@@ -322,6 +324,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -1238,26 +1270,28 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -385,10 +388,9 @@ top_srcdir = @top_srcdir@ +@@ -382,10 +385,11 @@ top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ AM_CPPFLAGS = -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 \ +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ + $($(*F)_no_Werror),,-Werror) $(if \ +- $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) \ +- $(am__append_1) + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) $(am__append_2) -+ $(am__append_1) $(am__append_2) $(am__append_3) - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -453,7 +455,7 @@ libelf_a_SOURCES = elf_version.c elf_has ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) $(am__append_2) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda $(am_libelf_pic_a_OBJECTS) \ + libelf.so.$(VERSION) +@@ -446,7 +450,7 @@ libelf_a_SOURCES = elf_version.c elf_has - @MUDFLAP_FALSE@libelf_pic_a_SOURCES = - @MUDFLAP_FALSE@am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os) --@MUDFLAP_FALSE@libelf_so_LDLIBS = $(am__append_3) -+@MUDFLAP_FALSE@libelf_so_LDLIBS = $(am__append_4) - @MUDFLAP_FALSE@libelf_so_SOURCES = + libelf_pic_a_SOURCES = + am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os) +-libelf_so_LDLIBS = $(am__append_2) ++libelf_so_LDLIBS = $(am__append_3) + libelf_so_SOURCES = noinst_HEADERS = elf.h abstract.h common.h exttypes.h gelf_xlate.h libelfP.h \ version_xlate.h gnuhash_xlate.h note_xlate.h dl-hash.h --- elfutils/m4/Makefile.in @@ -1313,7 +1347,7 @@ break; --- elfutils/src/ChangeLog +++ elfutils/src/ChangeLog -@@ -964,8 +964,16 @@ +@@ -1112,8 +1112,16 @@ * readelf.c (attr_callback): Use print_block only when we don't use print_ops. @@ -1330,7 +1364,7 @@ * ar.c (do_oper_extract): Use pathconf instead of statfs. 2009-08-01 Ulrich Drepper -@@ -1129,6 +1137,8 @@ +@@ -1277,6 +1285,8 @@ * readelf.c (print_debug_frame_section): Use t instead of j formats for ptrdiff_t OFFSET. @@ -1339,7 +1373,7 @@ 2009-01-21 Ulrich Drepper * elflint.c (check_program_header): Fix typo in .eh_frame_hdr section -@@ -1312,6 +1322,11 @@ +@@ -1460,6 +1470,11 @@ that matches its PT_LOAD's p_flags &~ PF_W. On sparc, PF_X really is valid in RELRO. @@ -1351,7 +1385,7 @@ 2008-02-29 Roland McGrath * readelf.c (print_attributes): Add a cast. -@@ -1563,6 +1578,8 @@ +@@ -1711,6 +1726,8 @@ * readelf.c (hex_dump): Fix rounding error in whitespace calculation. @@ -1360,7 +1394,7 @@ 2007-10-15 Roland McGrath * make-debug-archive.in: New file. -@@ -2002,6 +2019,10 @@ +@@ -2150,6 +2167,10 @@ * elflint.c (valid_e_machine): Add EM_ALPHA. Reported by Christian Aichinger . @@ -1371,7 +1405,7 @@ 2006-08-08 Ulrich Drepper * elflint.c (check_dynamic): Don't require DT_HASH for DT_SYMTAB. -@@ -2078,6 +2099,10 @@ +@@ -2226,6 +2247,10 @@ * Makefile.am: Add hacks to create dependency files for non-generic linker. @@ -1382,7 +1416,7 @@ 2006-06-12 Ulrich Drepper * ldgeneric.c (ld_generic_generate_sections): Don't create .interp -@@ -2426,6 +2451,11 @@ +@@ -2574,6 +2599,11 @@ * readelf.c (print_debug_loc_section): Fix indentation for larger address size. @@ -1428,50 +1462,50 @@ #endif /* ld.h */ --- elfutils/src/Makefile.am +++ elfutils/src/Makefile.am -@@ -95,6 +95,9 @@ addr2line_no_Wformat = yes +@@ -89,6 +89,11 @@ endif # XXX While the file is not finished, don't warn about this ldgeneric_no_Wunused = yes -+# Buggy old compilers. ++# Buggy old compilers or libc headers. +readelf_no_Werror = yes ++strings_no_Werror = yes ++addr2line_no_Wformat = yes + - readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl - nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ + readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl + nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl \ $(demanglelib) --- elfutils/src/Makefile.in +++ elfutils/src/Makefile.in -@@ -85,7 +85,8 @@ DIST_COMMON = $(top_srcdir)/config/eu.am +@@ -85,6 +85,7 @@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.am ldlex.c ldscript.c \ $(top_srcdir)/config/depcomp $(top_srcdir)/config/ylwrap \ $(noinst_HEADERS) ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap bin_PROGRAMS = readelf$(EXEEXT) nm$(EXEEXT) size$(EXEEXT) \ strip$(EXEEXT) ld$(EXEEXT) elflint$(EXEEXT) \ findtextrel$(EXEEXT) addr2line$(EXEEXT) elfcmp$(EXEEXT) \ -@@ -94,9 +95,9 @@ bin_PROGRAMS = readelf$(EXEEXT) nm$(EXEE +@@ -93,9 +94,9 @@ bin_PROGRAMS = readelf$(EXEEXT) nm$(EXEE @NATIVE_LD_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) # We never build this library but we need to get the dependency files # of all the linker backends that might be used in a non-generic linker. --@NEVER_TRUE@am__append_2 = libdummy.a -+@NEVER_TRUE@am__append_3 = libdummy.a +-@NEVER_TRUE@am__append_1 = libdummy.a ++@NEVER_TRUE@am__append_2 = libdummy.a # -ldl is always needed for libebl. --@NATIVE_LD_TRUE@am__append_3 = libld_elf.a -+@NATIVE_LD_TRUE@am__append_4 = libld_elf.a +-@NATIVE_LD_TRUE@am__append_2 = libld_elf.a ++@NATIVE_LD_TRUE@am__append_3 = libld_elf.a @NATIVE_LD_TRUE@am_libld_elf_i386_pic_a_OBJECTS = subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -164,7 +165,7 @@ am_ld_OBJECTS = ld.$(OBJEXT) ldgeneric.$ +@@ -159,7 +160,7 @@ am_ld_OBJECTS = ld.$(OBJEXT) ldgeneric.$ + ldscript.$(OBJEXT) symbolhash.$(OBJEXT) sectionhash.$(OBJEXT) \ versionhash.$(OBJEXT) ld_OBJECTS = $(am_ld_OBJECTS) - ld_DEPENDENCIES = $(libebl) $(libelf) $(libeu) $(am__DEPENDENCIES_1) \ -- $(am__append_3) -+ $(am__append_4) +-ld_DEPENDENCIES = $(libebl) $(libelf) $(libeu) $(am__append_2) ++ld_DEPENDENCIES = $(libebl) $(libelf) $(libeu) $(am__append_3) ld_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(ld_LDFLAGS) $(LDFLAGS) -o \ $@ am_libld_elf_i386_so_OBJECTS = -@@ -347,6 +348,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -340,6 +341,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1479,7 +1513,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -378,6 +380,7 @@ SHELL = @SHELL@ +@@ -371,6 +373,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -1487,52 +1521,57 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -442,10 +445,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr - -I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \ - -I$(srcdir)/../libasm - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ +@@ -434,11 +437,11 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr + -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ + -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ + -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ +- $(if $($(*F)_no_Werror),,-Werror) \ +- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ +- $($(*F)_CFLAGS) +- ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ ++ $($(*F)_no_Werror),,-Werror) $(if \ + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) -+ $(am__append_1) $(am__append_2) - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -461,8 +463,8 @@ AM_LFLAGS = -Pld -olex.yy.c ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda make-debug-archive none_ld.os \ + $(ld_modules:.c=.os) *.gconv +@@ -449,8 +452,8 @@ AM_LFLAGS = -Pld -olex.yy.c native_ld = @native_ld@ ld_dsos = libld_elf_i386_pic.a @NATIVE_LD_FALSE@noinst_LIBRARIES = libld_elf.a libar.a $(ld_dsos) \ --@NATIVE_LD_FALSE@ $(am__append_2) --@NATIVE_LD_TRUE@noinst_LIBRARIES = libld_elf.a libar.a $(am__append_2) -+@NATIVE_LD_FALSE@ $(am__append_3) -+@NATIVE_LD_TRUE@noinst_LIBRARIES = libld_elf.a libar.a $(am__append_3) +-@NATIVE_LD_FALSE@ $(am__append_1) +-@NATIVE_LD_TRUE@noinst_LIBRARIES = libld_elf.a libar.a $(am__append_1) ++@NATIVE_LD_FALSE@ $(am__append_2) ++@NATIVE_LD_TRUE@noinst_LIBRARIES = libld_elf.a libar.a $(am__append_2) @NATIVE_LD_TRUE@native_ld_cflags = -DBASE_ELF_NAME=elf_$(base_cpu) @NEVER_TRUE@libdummy_a_SOURCES = i386_ld.c ld_SOURCES = ld.c ldgeneric.c ldlex.l ldscript.y symbolhash.c sectionhash.c \ -@@ -491,6 +493,9 @@ strings_no_Wformat = yes - addr2line_no_Wformat = yes +@@ -476,13 +479,18 @@ libeu = ../lib/libeu.a + # XXX While the file is not finished, don't warn about this ldgeneric_no_Wunused = yes + -+# Buggy old compilers. ++# Buggy old compilers or libc headers. +readelf_no_Werror = yes - readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl - nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ ++strings_no_Werror = yes ++addr2line_no_Wformat = yes + readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl + nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl \ $(demanglelib) -@@ -498,7 +503,7 @@ nm_LDADD = $(libdw) $(libebl) $(libelf) - size_LDADD = $(libelf) $(libeu) $(libmudflap) - strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl - ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ -- $(am__append_3) -+ $(am__append_4) + + size_LDADD = $(libelf) $(libeu) + strip_LDADD = $(libebl) $(libelf) $(libeu) -ldl +-ld_LDADD = $(libebl) $(libelf) $(libeu) -ldl $(am__append_2) ++ld_LDADD = $(libebl) $(libelf) $(libeu) -ldl $(am__append_3) ld_LDFLAGS = -rdynamic - elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl - findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) + elflint_LDADD = $(libebl) $(libelf) $(libeu) -ldl + findtextrel_LDADD = $(libdw) $(libelf) --- elfutils/src/readelf.c +++ elfutils/src/readelf.c -@@ -4171,10 +4171,12 @@ listptr_base (struct listptr *p) +@@ -4239,10 +4239,12 @@ listptr_base (struct listptr *p) return base; } @@ -1547,7 +1586,7 @@ struct listptr *p1 = (void *) a; struct listptr *p2 = (void *) b; -@@ -4263,8 +4265,11 @@ static void +@@ -4331,8 +4333,11 @@ static void sort_listptr (struct listptr_table *table, const char *name) { if (table->n > 0) @@ -1561,7 +1600,7 @@ } static bool -@@ -9151,7 +9156,7 @@ dump_archive_index (Elf *elf, const char +@@ -9252,7 +9257,7 @@ dump_archive_index (Elf *elf, const char if (unlikely (elf_rand (elf, as_off) == 0) || unlikely ((subelf = elf_begin (-1, ELF_C_READ_MMAP, elf)) == NULL)) @@ -1583,7 +1622,7 @@ /* Prototypes of local functions. */ static int read_fd (int fd, const char *fname, off64_t fdlen); -@@ -483,8 +487,13 @@ map_file (int fd, off64_t start_off, off +@@ -489,8 +493,13 @@ map_file (int fd, off64_t start_off, off fd, start_off); if (mem != MAP_FAILED) { @@ -1597,7 +1636,7 @@ break; } if (errno != EINVAL && errno != ENOMEM) -@@ -576,9 +585,11 @@ read_block (int fd, const char *fname, o +@@ -581,9 +590,11 @@ read_block (int fd, const char *fname, o elfmap_off = from & ~(ps - 1); elfmap_base = elfmap = map_file (fd, elfmap_off, fdlen, &elfmap_size); @@ -1643,7 +1682,7 @@ } /* Open the file. */ -@@ -2060,7 +2076,7 @@ while computing checksum for debug infor +@@ -2086,7 +2102,7 @@ while computing checksum for debug infor /* If requested, preserve the timestamp. */ if (tvp != NULL) { @@ -1652,7 +1691,7 @@ { error (0, errno, gettext ("\ cannot set access and modification date of '%s'"), -@@ -2117,7 +2133,7 @@ handle_ar (int fd, Elf *elf, const char +@@ -2143,7 +2159,7 @@ handle_ar (int fd, Elf *elf, const char if (tvp != NULL) { @@ -1670,10 +1709,10 @@ +#include #include ELFUTILS_HEADER(dwfl) - static int + #ifndef __linux__ --- elfutils/tests/ChangeLog +++ elfutils/tests/ChangeLog -@@ -123,6 +123,13 @@ +@@ -283,6 +283,13 @@ 2013-12-02 Jan Kratochvil @@ -1687,7 +1726,7 @@ * Makefile.am (check_PROGRAMS): Add backtrace, backtrace-child, backtrace-data and backtrace-dwarf. (BUILT_SOURCES, clean-local, backtrace-child-biarch): New. -@@ -987,6 +994,8 @@ +@@ -1147,6 +1154,8 @@ 2008-01-21 Roland McGrath @@ -1696,7 +1735,7 @@ * testfile45.S.bz2: Add tests for cltq, cqto. * testfile45.expect.bz2: Adjust. -@@ -1695,6 +1704,11 @@ +@@ -1855,6 +1864,11 @@ * Makefile.am (TESTS): Add run-elflint-test.sh. (EXTRA_DIST): Add run-elflint-test.sh and testfile18.bz2. @@ -1719,59 +1758,67 @@ { default: case 0: +--- elfutils/tests/Makefile.am ++++ elfutils/tests/Makefile.am +@@ -356,6 +356,7 @@ get_lines_LDADD = $(libdw) $(libelf) + get_files_LDADD = $(libdw) $(libelf) + get_aranges_LDADD = $(libdw) $(libelf) + allfcts_LDADD = $(libdw) $(libelf) ++line2addr_no_Wformat = yes + line2addr_LDADD = $(libdw) + addrscopes_LDADD = $(libdw) + funcscopes_LDADD = $(libdw) --- elfutils/tests/Makefile.in +++ elfutils/tests/Makefile.in -@@ -80,14 +80,15 @@ host_triplet = @host@ +@@ -80,13 +80,14 @@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ $(top_srcdir)/config/test-driver ChangeLog --@MUDFLAP_TRUE@am__append_1 = -fmudflap --@STANDALONE_FALSE@am__append_2 = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ +-@STANDALONE_FALSE@am__append_1 = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) -+@MUDFLAP_TRUE@am__append_2 = -fmudflap -+@STANDALONE_FALSE@am__append_3 = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ - @STANDALONE_FALSE@ -I$(top_srcdir)/libdwfl \ ++@STANDALONE_FALSE@am__append_2 = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ + @STANDALONE_FALSE@ -I$(top_srcdir)/libdwfl -I$(top_srcdir)/libdwelf \ @STANDALONE_FALSE@ -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \ @STANDALONE_FALSE@ -I$(top_srcdir)/lib -I.. --@STANDALONE_FALSE@am__append_3 = -Wl,-rpath-link,../libasm:../libdw:../libelf --@TESTS_RPATH_TRUE@am__append_4 = -Wl,-rpath,$(BUILD_RPATH) -+@STANDALONE_FALSE@am__append_4 = -Wl,-rpath-link,../libasm:../libdw:../libelf -+@TESTS_RPATH_TRUE@am__append_5 = -Wl,-rpath,$(BUILD_RPATH) +-@STANDALONE_FALSE@am__append_2 = -Wl,-rpath-link,../libasm:../libdw:../libelf +-@TESTS_RPATH_TRUE@am__append_3 = -Wl,-rpath,$(BUILD_RPATH) ++@STANDALONE_FALSE@am__append_3 = -Wl,-rpath-link,../libasm:../libdw:../libelf ++@TESTS_RPATH_TRUE@am__append_4 = -Wl,-rpath,$(BUILD_RPATH) check_PROGRAMS = arextract$(EXEEXT) arsymtest$(EXEEXT) \ newfile$(EXEEXT) saridx$(EXEEXT) scnnames$(EXEEXT) \ sectiondump$(EXEEXT) showptable$(EXEEXT) update1$(EXEEXT) \ @@ -111,7 +112,7 @@ check_PROGRAMS = arextract$(EXEEXT) arsy - varlocs$(EXEEXT) backtrace$(EXEEXT) backtrace-child$(EXEEXT) \ backtrace-data$(EXEEXT) backtrace-dwarf$(EXEEXT) \ + debuglink$(EXEEXT) debugaltlink$(EXEEXT) buildid$(EXEEXT) \ $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_4) --@BIARCH_TRUE@am__append_5 = backtrace-child-biarch -+@BIARCH_TRUE@am__append_6 = backtrace-child-biarch +-@BIARCH_TRUE@am__append_4 = backtrace-child-biarch ++@BIARCH_TRUE@am__append_5 = backtrace-child-biarch TESTS = run-arextract.sh run-arsymtest.sh newfile$(EXEEXT) \ test-nlist$(EXEEXT) update1$(EXEEXT) update2$(EXEEXT) \ update3$(EXEEXT) update4$(EXEEXT) run-show-die-info.sh \ -@@ -151,14 +152,14 @@ TESTS = run-arextract.sh run-arsymtest.s - run-backtrace-native-core-biarch.sh \ - run-backtrace-core-x86_64.sh run-backtrace-core-i386.sh \ - run-backtrace-core-ppc.sh run-backtrace-core-s390x.sh \ -- run-backtrace-core-s390.sh $(am__EXEEXT_2) $(am__append_8) \ -- $(am__EXEEXT_4) $(am__append_11) --@STANDALONE_FALSE@am__append_6 = msg_tst md5-sha1-test -+ run-backtrace-core-s390.sh $(am__EXEEXT_2) $(am__append_9) \ -+ $(am__EXEEXT_4) $(am__append_12) - @STANDALONE_FALSE@am__append_7 = msg_tst md5-sha1-test --@LZMA_TRUE@am__append_8 = run-readelf-s.sh run-dwflsyms.sh +@@ -155,14 +156,14 @@ TESTS = run-arextract.sh run-arsymtest.s + run-backtrace-core-s390.sh run-backtrace-core-aarch64.sh \ + run-backtrace-demangle.sh run-stack-d-test.sh \ + run-stack-i-test.sh run-readelf-dwz-multi.sh \ +- run-allfcts-multi.sh $(am__EXEEXT_2) $(am__append_7) \ +- $(am__append_8) $(am__EXEEXT_4) +-@STANDALONE_FALSE@am__append_5 = msg_tst md5-sha1-test ++ run-allfcts-multi.sh $(am__EXEEXT_2) $(am__append_8) \ ++ $(am__append_9) $(am__EXEEXT_4) + @STANDALONE_FALSE@am__append_6 = msg_tst md5-sha1-test +-@LZMA_TRUE@am__append_7 = run-readelf-s.sh run-dwflsyms.sh +-@ZLIB_TRUE@am__append_8 = run-readelf-zdebug.sh -@HAVE_LIBASM_TRUE@am__append_9 = $(asm_TESTS) -+@STANDALONE_FALSE@am__append_8 = msg_tst md5-sha1-test -+@LZMA_TRUE@am__append_9 = run-readelf-s.sh run-dwflsyms.sh ++@STANDALONE_FALSE@am__append_7 = msg_tst md5-sha1-test ++@LZMA_TRUE@am__append_8 = run-readelf-s.sh run-dwflsyms.sh ++@ZLIB_TRUE@am__append_9 = run-readelf-zdebug.sh @HAVE_LIBASM_TRUE@am__append_10 = $(asm_TESTS) --@ENABLE_DWZ_TRUE@am__append_11 = run-readelf-dwz-multi.sh run-allfcts-multi.sh +@HAVE_LIBASM_TRUE@am__append_11 = $(asm_TESTS) -+@ENABLE_DWZ_TRUE@am__append_12 = run-readelf-dwz-multi.sh run-allfcts-multi.sh subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ -@@ -780,6 +781,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -768,6 +769,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1779,7 +1826,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -811,6 +813,7 @@ SHELL = @SHELL@ +@@ -799,6 +801,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -1787,28 +1834,36 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -870,12 +873,11 @@ top_build_prefix = @top_build_prefix@ +@@ -858,17 +861,17 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ --AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_2) -+AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_3) - AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ -- $($(*F)_no_Werror),,-Werror) $(if \ -- $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ +-AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_1) +-AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ +- $(if $($(*F)_no_Werror),,-Werror) \ +- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ +- $($(*F)_CFLAGS) +- ++AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_2) ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ ++ $($(*F)_no_Werror),,-Werror) $(if \ + $($(*F)_no_Wunused),,-Wunused $(WEXTRA)) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ -- $(am__append_1) -+ $(am__append_1) $(am__append_2) - @MUDFLAP_FALSE@libmudflap = - @MUDFLAP_TRUE@libmudflap = -lmudflap - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -885,7 +887,7 @@ CLEANFILES = *.gcno *.gcda ++ $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ ++ $(am__append_1) + COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) + CLEANFILES = *.gcno *.gcda textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi - @MUDFLAP_FALSE@BUILD_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf - @MUDFLAP_TRUE@BUILD_RPATH = \$$ORIGIN/../backends --AM_LDFLAGS = $(am__append_3) $(am__append_4) -+AM_LDFLAGS = $(am__append_4) $(am__append_5) + BUILD_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf +-AM_LDFLAGS = $(am__append_2) $(am__append_3) ++AM_LDFLAGS = $(am__append_3) $(am__append_4) @TESTS_RPATH_FALSE@tests_rpath = no @TESTS_RPATH_TRUE@tests_rpath = yes asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ +@@ -1077,6 +1080,7 @@ get_lines_LDADD = $(libdw) $(libelf) + get_files_LDADD = $(libdw) $(libelf) + get_aranges_LDADD = $(libdw) $(libelf) + allfcts_LDADD = $(libdw) $(libelf) ++line2addr_no_Wformat = yes + line2addr_LDADD = $(libdw) + addrscopes_LDADD = $(libdw) + funcscopes_LDADD = $(libdw) diff --git a/elfutils-robustify.patch b/elfutils-robustify.patch deleted file mode 100644 index f358a85..0000000 --- a/elfutils-robustify.patch +++ /dev/null @@ -1,1756 +0,0 @@ ---- elfutils/libdwfl/ChangeLog -+++ elfutils/libdwfl/ChangeLog -@@ -680,6 +680,11 @@ - * dwfl_module_getdwarf.c (open_elf): Clear errno before CBFAIL. - Reported by Kurt Roeckx . - -+2011-03-23 Petr Machata -+ -+ * relocate.c (relocate_section): Use gelf_fsize instead of relying -+ on shdr->sh_entsize. -+ - 2011-02-11 Roland McGrath - - * linux-kernel-modules.c (try_kernel_name): Try .gz, .bz2, .xz ---- elfutils/libdwfl/relocate.c -+++ elfutils/libdwfl/relocate.c -@@ -1,5 +1,5 @@ - /* Relocate debug information. -- Copyright (C) 2005-2010 Red Hat, Inc. -+ Copyright (C) 2005-2011 Red Hat, Inc. - This file is part of elfutils. - - This file is free software; you can redistribute it and/or modify -@@ -456,7 +456,10 @@ relocate_section (Dwfl_Module *mod, Elf - } - } - -- size_t nrels = shdr->sh_size / shdr->sh_entsize; -+ size_t sh_entsize -+ = gelf_fsize (relocated, shdr->sh_type == SHT_REL ? ELF_T_REL : ELF_T_RELA, -+ 1, EV_CURRENT); -+ size_t nrels = shdr->sh_size / sh_entsize; - size_t complete = 0; - if (shdr->sh_type == SHT_REL) - for (size_t relidx = 0; !result && relidx < nrels; ++relidx) -@@ -558,7 +561,7 @@ relocate_section (Dwfl_Module *mod, Elf - nrels = next; - } - -- shdr->sh_size = reldata->d_size = nrels * shdr->sh_entsize; -+ shdr->sh_size = reldata->d_size = nrels * sh_entsize; - gelf_update_shdr (scn, shdr); - } - ---- elfutils/libelf/ChangeLog -+++ elfutils/libelf/ChangeLog -@@ -754,10 +754,53 @@ - If section content hasn't been read yet, do it before looking for the - block size. If no section data present, infer size of section header. - -+2005-05-14 Jakub Jelinek -+ -+ * libelfP.h (INVALID_NDX): Define. -+ * gelf_getdyn.c (gelf_getdyn): Use it. Remove ndx < 0 test if any. -+ * gelf_getlib.c (gelf_getlib): Likewise. -+ * gelf_getmove.c (gelf_getmove): Likewise. -+ * gelf_getrel.c (gelf_getrel): Likewise. -+ * gelf_getrela.c (gelf_getrela): Likewise. -+ * gelf_getsym.c (gelf_getsym): Likewise. -+ * gelf_getsyminfo.c (gelf_getsyminfo): Likewise. -+ * gelf_getsymshndx.c (gelf_getsymshndx): Likewise. -+ * gelf_getversym.c (gelf_getversym): Likewise. -+ * gelf_update_dyn.c (gelf_update_dyn): Likewise. -+ * gelf_update_lib.c (gelf_update_lib): Likewise. -+ * gelf_update_move.c (gelf_update_move): Likewise. -+ * gelf_update_rel.c (gelf_update_rel): Likewise. -+ * gelf_update_rela.c (gelf_update_rela): Likewise. -+ * gelf_update_sym.c (gelf_update_sym): Likewise. -+ * gelf_update_syminfo.c (gelf_update_syminfo): Likewise. -+ * gelf_update_symshndx.c (gelf_update_symshndx): Likewise. -+ * gelf_update_versym.c (gelf_update_versym): Likewise. -+ * elf_newscn.c (elf_newscn): Check for overflow. -+ * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Likewise. -+ (__elfw2(LIBELFBITS,updatefile)): Likewise. -+ * elf_begin.c (file_read_elf): Likewise. -+ * elf32_newphdr.c (elfw2(LIBELFBITS,newphdr)): Likewise. -+ * elf_getarsym.c (elf_getarsym): Likewise. -+ * elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)): Likewise. - 2005-05-11 Ulrich Drepper - - * elf.h: Update again. - -+2005-05-17 Jakub Jelinek -+ -+ * elf32_getphdr.c (elfw2(LIBELFBITS,getphdr)): Check if program header -+ table fits into object's bounds. -+ * elf_getshstrndx.c (elf_getshstrndx): Add elf->start_offset to -+ elf->map_address. Check if first section header fits into object's -+ bounds. -+ * elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)): -+ Check if section header table fits into object's bounds. -+ * elf_begin.c (get_shnum): Ensure section headers fits into -+ object's bounds. -+ (file_read_elf): Make sure scncnt is small enough to allocate both -+ ElfXX_Shdr and Elf_Scn array. Make sure section and program header -+ tables fit into object's bounds. Avoid memory leak on failure. -+ - 2005-05-09 Ulrich Drepper - - * elf.h: Update from glibc. ---- elfutils/libelf/elf32_getphdr.c -+++ elfutils/libelf/elf32_getphdr.c -@@ -93,6 +93,16 @@ __elfw2(LIBELFBITS,getphdr_wrlock) (elf) - - if (elf->map_address != NULL) - { -+ /* First see whether the information in the ELF header is -+ valid and it does not ask for too much. */ -+ if (unlikely (ehdr->e_phoff >= elf->maximum_size) -+ || unlikely (elf->maximum_size - ehdr->e_phoff < size)) -+ { -+ /* Something is wrong. */ -+ __libelf_seterrno (ELF_E_INVALID_PHDR); -+ goto out; -+ } -+ - /* All the data is already mapped. Use it. */ - void *file_phdr = ((char *) elf->map_address - + elf->start_offset + ehdr->e_phoff); ---- elfutils/libelf/elf32_getshdr.c -+++ elfutils/libelf/elf32_getshdr.c -@@ -60,7 +60,8 @@ load_shdr_wrlock (Elf_Scn *scn) - goto out; - - size_t shnum; -- if (__elf_getshdrnum_rdlock (elf, &shnum) != 0) -+ if (__elf_getshdrnum_rdlock (elf, &shnum) != 0 -+ || shnum > SIZE_MAX / sizeof (ElfW2(LIBELFBITS,Shdr))) - goto out; - size_t size = shnum * sizeof (ElfW2(LIBELFBITS,Shdr)); - -@@ -77,6 +78,16 @@ load_shdr_wrlock (Elf_Scn *scn) - - if (elf->map_address != NULL) - { -+ /* First see whether the information in the ELF header is -+ valid and it does not ask for too much. */ -+ if (unlikely (ehdr->e_shoff >= elf->maximum_size) -+ || unlikely (elf->maximum_size - ehdr->e_shoff < size)) -+ { -+ /* Something is wrong. */ -+ __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); -+ goto free_and_out; -+ } -+ - ElfW2(LIBELFBITS,Shdr) *notcvt; - - /* All the data is already mapped. If we could use it ---- elfutils/libelf/elf32_newphdr.c -+++ elfutils/libelf/elf32_newphdr.c -@@ -114,6 +114,12 @@ elfw2(LIBELFBITS,newphdr) (elf, count) - || count == PN_XNUM - || elf->state.ELFW(elf,LIBELFBITS).phdr == NULL) - { -+ if (unlikely (count > SIZE_MAX / sizeof (ElfW2(LIBELFBITS,Phdr)))) -+ { -+ result = NULL; -+ goto out; -+ } -+ - /* Allocate a new program header with the appropriate number of - elements. */ - result = (ElfW2(LIBELFBITS,Phdr) *) ---- elfutils/libelf/elf32_updatefile.c -+++ elfutils/libelf/elf32_updatefile.c -@@ -202,6 +202,9 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf - /* Write all the sections. Well, only those which are modified. */ - if (shnum > 0) - { -+ if (unlikely (shnum > SIZE_MAX / sizeof (Elf_Scn *))) -+ return 1; -+ - Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns; - Elf_Scn **scns = (Elf_Scn **) alloca (shnum * sizeof (Elf_Scn *)); - char *const shdr_start = ((char *) elf->map_address + elf->start_offset -@@ -624,6 +627,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf - /* Write all the sections. Well, only those which are modified. */ - if (shnum > 0) - { -+ if (unlikely (shnum > SIZE_MAX / (sizeof (Elf_Scn *) -+ + sizeof (ElfW2(LIBELFBITS,Shdr))))) -+ return 1; -+ - off_t shdr_offset = elf->start_offset + ehdr->e_shoff; - #if EV_NUM != 2 - xfct_t shdr_fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_SHDR]; ---- elfutils/libelf/elf_begin.c -+++ elfutils/libelf/elf_begin.c -@@ -144,7 +144,8 @@ get_shnum (void *map_address, unsigned c - - if (unlikely (result == 0) && ehdr.e32->e_shoff != 0) - { -- if (ehdr.e32->e_shoff + sizeof (Elf32_Shdr) > maxsize) -+ if (unlikely (ehdr.e32->e_shoff >= maxsize) -+ || unlikely (maxsize - ehdr.e32->e_shoff < sizeof (Elf32_Shdr))) - /* Cannot read the first section header. */ - return 0; - -@@ -192,7 +193,8 @@ get_shnum (void *map_address, unsigned c - - if (unlikely (result == 0) && ehdr.e64->e_shoff != 0) - { -- if (ehdr.e64->e_shoff + sizeof (Elf64_Shdr) > maxsize) -+ if (unlikely (ehdr.e64->e_shoff >= maxsize) -+ || unlikely (ehdr.e64->e_shoff + sizeof (Elf64_Shdr) > maxsize)) - /* Cannot read the first section header. */ - return 0; - -@@ -264,6 +266,15 @@ file_read_elf (int fildes, void *map_add - /* Could not determine the number of sections. */ - return NULL; - -+ /* Check for too many sections. */ -+ if (e_ident[EI_CLASS] == ELFCLASS32) -+ { -+ if (scncnt > SIZE_MAX / (sizeof (Elf_Scn) + sizeof (Elf32_Shdr))) -+ return NULL; -+ } -+ else if (scncnt > SIZE_MAX / (sizeof (Elf_Scn) + sizeof (Elf64_Shdr))) -+ return NULL; -+ - /* We can now allocate the memory. Even if there are no section headers, - we allocate space for a zeroth section in case we need it later. */ - const size_t scnmax = (scncnt ?: (cmd == ELF_C_RDWR || cmd == ELF_C_RDWR_MMAP) -@@ -303,6 +314,16 @@ file_read_elf (int fildes, void *map_add - { - /* We can use the mmapped memory. */ - elf->state.elf32.ehdr = ehdr; -+ -+ if (unlikely (ehdr->e_shoff >= maxsize) -+ || unlikely (maxsize - ehdr->e_shoff -+ < scncnt * sizeof (Elf32_Shdr))) -+ { -+ free_and_out: -+ free (elf); -+ __libelf_seterrno (ELF_E_INVALID_FILE); -+ return NULL; -+ } - elf->state.elf32.shdr - = (Elf32_Shdr *) ((char *) ehdr + ehdr->e_shoff); - -@@ -389,6 +410,11 @@ file_read_elf (int fildes, void *map_add - { - /* We can use the mmapped memory. */ - elf->state.elf64.ehdr = ehdr; -+ -+ if (unlikely (ehdr->e_shoff >= maxsize) -+ || unlikely (ehdr->e_shoff -+ + scncnt * sizeof (Elf32_Shdr) > maxsize)) -+ goto free_and_out; - elf->state.elf64.shdr - = (Elf64_Shdr *) ((char *) ehdr + ehdr->e_shoff); - ---- elfutils/libelf/elf_getarsym.c -+++ elfutils/libelf/elf_getarsym.c -@@ -183,6 +183,9 @@ elf_getarsym (elf, ptr) - size_t index_size = atol (tmpbuf); - - if (SARMAG + sizeof (struct ar_hdr) + index_size > elf->maximum_size -+#if SIZE_MAX <= 4294967295U -+ || n >= SIZE_MAX / sizeof (Elf_Arsym) -+#endif - || n * w > index_size) - { - /* This index table cannot be right since it does not fit into ---- elfutils/libelf/elf_getshdrstrndx.c -+++ elfutils/libelf/elf_getshdrstrndx.c -@@ -104,10 +104,25 @@ elf_getshdrstrndx (elf, dst) - if (elf->map_address != NULL - && elf->state.elf32.ehdr->e_ident[EI_DATA] == MY_ELFDATA - && (ALLOW_UNALIGNED -- || (((size_t) ((char *) elf->map_address + offset)) -+ || (((size_t) ((char *) elf->map_address -+ + elf->start_offset + offset)) - & (__alignof__ (Elf32_Shdr) - 1)) == 0)) -- /* We can directly access the memory. */ -- num = ((Elf32_Shdr *) (elf->map_address + offset))->sh_link; -+ { -+ /* First see whether the information in the ELF header is -+ valid and it does not ask for too much. */ -+ if (unlikely (elf->maximum_size - offset -+ < sizeof (Elf32_Shdr))) -+ { -+ /* Something is wrong. */ -+ __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); -+ result = -1; -+ goto out; -+ } -+ -+ /* We can directly access the memory. */ -+ num = ((Elf32_Shdr *) (elf->map_address + elf->start_offset -+ + offset))->sh_link; -+ } - else - { - /* We avoid reading in all the section headers. Just read -@@ -142,10 +157,25 @@ elf_getshdrstrndx (elf, dst) - if (elf->map_address != NULL - && elf->state.elf64.ehdr->e_ident[EI_DATA] == MY_ELFDATA - && (ALLOW_UNALIGNED -- || (((size_t) ((char *) elf->map_address + offset)) -+ || (((size_t) ((char *) elf->map_address -+ + elf->start_offset + offset)) - & (__alignof__ (Elf64_Shdr) - 1)) == 0)) -- /* We can directly access the memory. */ -- num = ((Elf64_Shdr *) (elf->map_address + offset))->sh_link; -+ { -+ /* First see whether the information in the ELF header is -+ valid and it does not ask for too much. */ -+ if (unlikely (elf->maximum_size - offset -+ < sizeof (Elf64_Shdr))) -+ { -+ /* Something is wrong. */ -+ __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); -+ result = -1; -+ goto out; -+ } -+ -+ /* We can directly access the memory. */ -+ num = ((Elf64_Shdr *) (elf->map_address + elf->start_offset -+ + offset))->sh_link; -+ } - else - { - /* We avoid reading in all the section headers. Just read ---- elfutils/libelf/elf_newscn.c -+++ elfutils/libelf/elf_newscn.c -@@ -83,10 +83,18 @@ elf_newscn (elf) - else - { - /* We must allocate a new element. */ -- Elf_ScnList *newp; -+ Elf_ScnList *newp = NULL; - - assert (elf->state.elf.scnincr > 0); - -+ if ( -+#if SIZE_MAX <= 4294967295U -+ likely (elf->state.elf.scnincr -+ < SIZE_MAX / 2 / sizeof (Elf_Scn) - sizeof (Elf_ScnList)) -+#else -+ 1 -+#endif -+ ) - newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList) - + ((elf->state.elf.scnincr *= 2) - * sizeof (Elf_Scn)), 1); ---- elfutils/libelf/gelf_getdyn.c -+++ elfutils/libelf/gelf_getdyn.c -@@ -1,5 +1,5 @@ - /* Get information from dynamic table at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -72,7 +72,7 @@ gelf_getdyn (data, ndx, dst) - table entries has to be adopted. The user better has provided - a buffer where we can store the information. While copying the - data we are converting the format. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Dyn, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -93,7 +93,7 @@ gelf_getdyn (data, ndx, dst) - - /* The data is already in the correct form. Just make sure the - index is OK. */ -- if (unlikely ((ndx + 1) * sizeof (GElf_Dyn) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, GElf_Dyn, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_getlib.c -+++ elfutils/libelf/gelf_getlib.c -@@ -1,5 +1,5 @@ - /* Get library from table at the given index. -- Copyright (C) 2004 Red Hat, Inc. -+ Copyright (C) 2004-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2004. - -@@ -65,7 +65,7 @@ gelf_getlib (data, ndx, dst) - /* The data is already in the correct form. Just make sure the - index is OK. */ - GElf_Lib *result = NULL; -- if (unlikely ((ndx + 1) * sizeof (GElf_Lib) > data->d_size)) -+ if (INVALID_NDX (ndx, GElf_Lib, data)) - __libelf_seterrno (ELF_E_INVALID_INDEX); - else - { ---- elfutils/libelf/gelf_getmove.c -+++ elfutils/libelf/gelf_getmove.c -@@ -1,5 +1,5 @@ - /* Get move structure at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -62,7 +62,7 @@ gelf_getmove (data, ndx, dst) - - /* The data is already in the correct form. Just make sure the - index is OK. */ -- if (unlikely ((ndx + 1) * sizeof (GElf_Move) > data->d_size)) -+ if (INVALID_NDX (ndx, GElf_Move, data)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_getrela.c -+++ elfutils/libelf/gelf_getrela.c -@@ -1,5 +1,5 @@ - /* Get RELA relocation information at given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -50,12 +50,6 @@ gelf_getrela (data, ndx, dst) - if (data_scn == NULL) - return NULL; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return NULL; -- } -- - if (unlikely (data_scn->d.d_type != ELF_T_RELA)) - { - __libelf_seterrno (ELF_E_INVALID_HANDLE); -@@ -72,7 +66,7 @@ gelf_getrela (data, ndx, dst) - if (scn->elf->class == ELFCLASS32) - { - /* We have to convert the data. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - result = NULL; -@@ -93,7 +87,7 @@ gelf_getrela (data, ndx, dst) - { - /* Simply copy the data after we made sure we are actually getting - correct data. */ -- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - result = NULL; ---- elfutils/libelf/gelf_getrel.c -+++ elfutils/libelf/gelf_getrel.c -@@ -1,5 +1,5 @@ - /* Get REL relocation information at given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -50,12 +50,6 @@ gelf_getrel (data, ndx, dst) - if (data_scn == NULL) - return NULL; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return NULL; -- } -- - if (unlikely (data_scn->d.d_type != ELF_T_REL)) - { - __libelf_seterrno (ELF_E_INVALID_HANDLE); -@@ -72,7 +66,7 @@ gelf_getrel (data, ndx, dst) - if (scn->elf->class == ELFCLASS32) - { - /* We have to convert the data. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Rel, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - result = NULL; -@@ -92,7 +86,7 @@ gelf_getrel (data, ndx, dst) - { - /* Simply copy the data after we made sure we are actually getting - correct data. */ -- if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Rel, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - result = NULL; ---- elfutils/libelf/gelf_getsym.c -+++ elfutils/libelf/gelf_getsym.c -@@ -1,5 +1,5 @@ - /* Get symbol information from symbol table at the given index. -- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 1999-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 1999. - -@@ -69,7 +69,7 @@ gelf_getsym (data, ndx, dst) - table entries has to be adopted. The user better has provided - a buffer where we can store the information. While copying the - data we are converting the format. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data->d_size)) -+ if (INVALID_NDX (ndx, Elf32_Sym, data)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -98,7 +98,7 @@ gelf_getsym (data, ndx, dst) - - /* The data is already in the correct form. Just make sure the - index is OK. */ -- if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > data->d_size)) -+ if (INVALID_NDX (ndx, GElf_Sym, data)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_getsyminfo.c -+++ elfutils/libelf/gelf_getsyminfo.c -@@ -1,5 +1,5 @@ - /* Get additional symbol information from symbol table at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -63,7 +63,7 @@ gelf_getsyminfo (data, ndx, dst) - - /* The data is already in the correct form. Just make sure the - index is OK. */ -- if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data->d_size)) -+ if (INVALID_NDX (ndx, GElf_Syminfo, data)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_getsymshndx.c -+++ elfutils/libelf/gelf_getsymshndx.c -@@ -1,6 +1,6 @@ - /* Get symbol information and separate section index from symbol table - at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -69,7 +69,7 @@ gelf_getsymshndx (symdata, shndxdata, nd - section index table. */ - if (likely (shndxdata_scn != NULL)) - { -- if (unlikely ((ndx + 1) * sizeof (Elf32_Word) > shndxdata_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Word, &shndxdata_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -89,7 +89,7 @@ gelf_getsymshndx (symdata, shndxdata, nd - table entries has to be adopted. The user better has provided - a buffer where we can store the information. While copying the - data we are converting the format. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata->d_size)) -+ if (INVALID_NDX (ndx, Elf32_Sym, symdata)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -118,7 +118,7 @@ gelf_getsymshndx (symdata, shndxdata, nd - - /* The data is already in the correct form. Just make sure the - index is OK. */ -- if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > symdata->d_size)) -+ if (INVALID_NDX (ndx, GElf_Sym, symdata)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_getversym.c -+++ elfutils/libelf/gelf_getversym.c -@@ -1,5 +1,5 @@ - /* Get symbol version information at the given index. -- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 1999-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 1999. - -@@ -71,7 +71,7 @@ gelf_getversym (data, ndx, dst) - - /* The data is already in the correct form. Just make sure the - index is OK. */ -- if (unlikely ((ndx + 1) * sizeof (GElf_Versym) > data->d_size)) -+ if (INVALID_NDX (ndx, GElf_Versym, data)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - result = NULL; ---- elfutils/libelf/gelf_update_dyn.c -+++ elfutils/libelf/gelf_update_dyn.c -@@ -1,5 +1,5 @@ - /* Update information in dynamic table at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -50,12 +50,6 @@ gelf_update_dyn (data, ndx, src) - if (data == NULL) - return 0; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return 0; -- } -- - if (unlikely (data_scn->d.d_type != ELF_T_DYN)) - { - /* The type of the data better should match. */ -@@ -81,7 +75,7 @@ gelf_update_dyn (data, ndx, src) - } - - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Dyn, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -95,7 +89,7 @@ gelf_update_dyn (data, ndx, src) - else - { - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf64_Dyn) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Dyn, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_update_lib.c -+++ elfutils/libelf/gelf_update_lib.c -@@ -1,5 +1,5 @@ - /* Update library in table at the given index. -- Copyright (C) 2004 Red Hat, Inc. -+ Copyright (C) 2004-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2004. - -@@ -47,12 +47,6 @@ gelf_update_lib (data, ndx, src) - if (data == NULL) - return 0; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return 0; -- } -- - Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data; - if (unlikely (data_scn->d.d_type != ELF_T_LIB)) - { -@@ -66,7 +60,7 @@ gelf_update_lib (data, ndx, src) - - /* Check whether we have to resize the data buffer. */ - int result = 0; -- if (unlikely ((ndx + 1) * sizeof (Elf64_Lib) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Lib, &data_scn->d)) - __libelf_seterrno (ELF_E_INVALID_INDEX); - else - { ---- elfutils/libelf/gelf_update_move.c -+++ elfutils/libelf/gelf_update_move.c -@@ -1,5 +1,5 @@ - /* Update move structure at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -54,8 +54,7 @@ gelf_update_move (data, ndx, src) - assert (sizeof (GElf_Move) == sizeof (Elf64_Move)); - - /* Check whether we have to resize the data buffer. */ -- if (unlikely (ndx < 0) -- || unlikely ((ndx + 1) * sizeof (GElf_Move) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, GElf_Move, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; ---- elfutils/libelf/gelf_update_rela.c -+++ elfutils/libelf/gelf_update_rela.c -@@ -1,5 +1,5 @@ - /* Update RELA relocation information at given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -47,12 +47,6 @@ gelf_update_rela (Elf_Data *dst, int ndx - if (dst == NULL) - return 0; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return 0; -- } -- - if (unlikely (data_scn->d.d_type != ELF_T_RELA)) - { - /* The type of the data better should match. */ -@@ -80,7 +74,7 @@ gelf_update_rela (Elf_Data *dst, int ndx - } - - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -96,7 +90,7 @@ gelf_update_rela (Elf_Data *dst, int ndx - else - { - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_update_rel.c -+++ elfutils/libelf/gelf_update_rel.c -@@ -1,5 +1,5 @@ - /* Update REL relocation information at given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -47,12 +47,6 @@ gelf_update_rel (Elf_Data *dst, int ndx, - if (dst == NULL) - return 0; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return 0; -- } -- - if (unlikely (data_scn->d.d_type != ELF_T_REL)) - { - /* The type of the data better should match. */ -@@ -78,7 +72,7 @@ gelf_update_rel (Elf_Data *dst, int ndx, - } - - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Rel, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -93,7 +87,7 @@ gelf_update_rel (Elf_Data *dst, int ndx, - else - { - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Rel, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_update_sym.c -+++ elfutils/libelf/gelf_update_sym.c -@@ -1,5 +1,5 @@ - /* Update symbol information in symbol table at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -51,12 +51,6 @@ gelf_update_sym (data, ndx, src) - if (data == NULL) - return 0; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return 0; -- } -- - if (unlikely (data_scn->d.d_type != ELF_T_SYM)) - { - /* The type of the data better should match. */ -@@ -81,7 +75,7 @@ gelf_update_sym (data, ndx, src) - } - - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Sym, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -104,7 +98,7 @@ gelf_update_sym (data, ndx, src) - else - { - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Sym, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_update_syminfo.c -+++ elfutils/libelf/gelf_update_syminfo.c -@@ -1,5 +1,5 @@ - /* Update additional symbol information in symbol table at the given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -51,12 +51,6 @@ gelf_update_syminfo (data, ndx, src) - if (data == NULL) - return 0; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return 0; -- } -- - if (unlikely (data_scn->d.d_type != ELF_T_SYMINFO)) - { - /* The type of the data better should match. */ -@@ -72,7 +66,7 @@ gelf_update_syminfo (data, ndx, src) - rwlock_wrlock (scn->elf->lock); - - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, GElf_Syminfo, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_update_symshndx.c -+++ elfutils/libelf/gelf_update_symshndx.c -@@ -1,6 +1,6 @@ - /* Update symbol information and section index in symbol table at the - given index. -- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2000-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2000. - -@@ -56,12 +56,6 @@ gelf_update_symshndx (symdata, shndxdata - if (symdata == NULL) - return 0; - -- if (unlikely (ndx < 0)) -- { -- __libelf_seterrno (ELF_E_INVALID_INDEX); -- return 0; -- } -- - if (unlikely (symdata_scn->d.d_type != ELF_T_SYM)) - { - /* The type of the data better should match. */ -@@ -107,7 +101,7 @@ gelf_update_symshndx (symdata, shndxdata - } - - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf32_Sym, &symdata_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; -@@ -130,7 +124,7 @@ gelf_update_symshndx (symdata, shndxdata - else - { - /* Check whether we have to resize the data buffer. */ -- if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > symdata_scn->d.d_size)) -+ if (INVALID_NDX (ndx, Elf64_Sym, &symdata_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - goto out; ---- elfutils/libelf/gelf_update_versym.c -+++ elfutils/libelf/gelf_update_versym.c -@@ -1,5 +1,5 @@ - /* Update symbol version information. -- Copyright (C) 2001, 2002 Red Hat, Inc. -+ Copyright (C) 2001-2009 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 2001. - -@@ -54,8 +54,7 @@ gelf_update_versym (data, ndx, src) - assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym)); - - /* Check whether we have to resize the data buffer. */ -- if (unlikely (ndx < 0) -- || unlikely ((ndx + 1) * sizeof (GElf_Versym) > data_scn->d.d_size)) -+ if (INVALID_NDX (ndx, GElf_Versym, &data_scn->d)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; ---- elfutils/libelf/libelfP.h -+++ elfutils/libelf/libelfP.h -@@ -587,4 +587,8 @@ extern uint32_t __libelf_crc32 (uint32_t - /* Align offset to 4 bytes as needed for note name and descriptor data. */ - #define NOTE_ALIGN(n) (((n) + 3) & -4U) - -+/* Convenience macro. */ -+#define INVALID_NDX(ndx, type, data) \ -+ unlikely ((data)->d_size / sizeof (type) <= (unsigned int) (ndx)) -+ - #endif /* libelfP.h */ ---- elfutils/src/ChangeLog -+++ elfutils/src/ChangeLog -@@ -702,6 +702,12 @@ - - * readelf.c (dwarf_attr_string): Grok DW_AT_GNU_odr_signature. - -+2011-03-23 Petr Machata -+ -+ * readelf.c (handle_dynamic, handle_relocs_rel) -+ (handle_relocs_rela, handle_versym, print_liblist): -+ Use gelf_fsize instead of relying on shdr->sh_entsize. -+ - 2011-02-11 Roland McGrath - - * elfcmp.c (verbose): New variable. -@@ -2414,6 +2420,16 @@ - object symbols or symbols with unknown type. - (check_rel): Likewise. - -+2005-06-09 Roland McGrath -+ -+ * readelf.c (handle_dynamic, handle_symtab): Check for bogus sh_link. -+ (handle_verneed, handle_verdef, handle_versym, handle_hash): Likewise. -+ (handle_scngrp): Check for bogus sh_info. -+ -+ * strip.c (handle_elf): Check for bogus values in sh_link, sh_info, -+ st_shndx, e_shstrndx, and SHT_GROUP or SHT_SYMTAB_SHNDX data. -+ Don't use assert on input values, instead bail with "illformed" error. -+ - 2005-06-08 Roland McGrath - - * readelf.c (print_ops): Add consts. -@@ -2459,6 +2475,19 @@ - - * readelf.c (dwarf_tag_string): Add new tags. - -+2005-05-17 Jakub Jelinek -+ -+ * elflint.c (check_hash): Don't check entries beyond end of section. -+ (check_note): Don't crash if gelf_rawchunk fails. -+ (section_name): Return if gelf_getshdr returns NULL. -+ -+2005-05-14 Jakub Jelinek -+ -+ * elflint.c (section_name): Return "" instead of -+ crashing on invalid section name. -+ (check_symtab, is_rel_dyn, check_rela, check_rel, check_dynamic, -+ check_symtab_shndx, check_hash, check_versym): Robustify. -+ - 2005-05-08 Roland McGrath - - * strip.c (handle_elf): Don't translate hash and versym data formats, ---- elfutils/src/elflint.c -+++ elfutils/src/elflint.c -@@ -123,6 +123,10 @@ static uint32_t shstrndx; - /* Array to count references in section groups. */ - static int *scnref; - -+/* Numbers of sections and program headers. */ -+static unsigned int shnum; -+static unsigned int phnum; -+ - - int - main (int argc, char *argv[]) -@@ -311,10 +315,19 @@ section_name (Ebl *ebl, int idx) - { - GElf_Shdr shdr_mem; - GElf_Shdr *shdr; -+ const char *ret; -+ -+ if ((unsigned int) idx > shnum) -+ return ""; - - shdr = gelf_getshdr (elf_getscn (ebl->elf, idx), &shdr_mem); -+ if (shdr == NULL) -+ return ""; - -- return elf_strptr (ebl->elf, shstrndx, shdr->sh_name); -+ ret = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); -+ if (ret == NULL) -+ return ""; -+ return ret; - } - - -@@ -337,11 +350,6 @@ static const int valid_e_machine[] = - (sizeof (valid_e_machine) / sizeof (valid_e_machine[0])) - - --/* Numbers of sections and program headers. */ --static unsigned int shnum; --static unsigned int phnum; -- -- - static void - check_elf_header (Ebl *ebl, GElf_Ehdr *ehdr, size_t size) - { -@@ -625,7 +633,8 @@ section [%2d] '%s': symbol table cannot - } - } - -- if (shdr->sh_entsize != gelf_fsize (ebl->elf, ELF_T_SYM, 1, EV_CURRENT)) -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_SYM, 1, EV_CURRENT); -+ if (shdr->sh_entsize != sh_entsize) - ERROR (gettext ("\ - section [%2u] '%s': entry size is does not match ElfXX_Sym\n"), - idx, section_name (ebl, idx)); -@@ -663,7 +672,7 @@ section [%2d] '%s': XINDEX for zeroth en - xndxscnidx, section_name (ebl, xndxscnidx)); - } - -- for (size_t cnt = 1; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) -+ for (size_t cnt = 1; cnt < shdr->sh_size / sh_entsize; ++cnt) - { - sym = gelf_getsymshndx (data, xndxdata, cnt, &sym_mem, &xndx); - if (sym == NULL) -@@ -683,7 +692,8 @@ section [%2d] '%s': symbol %zu: invalid - else - { - name = elf_strptr (ebl->elf, shdr->sh_link, sym->st_name); -- assert (name != NULL); -+ assert (name != NULL -+ || strshdr->sh_type != SHT_STRTAB); - } - - if (sym->st_shndx == SHN_XINDEX) -@@ -1040,9 +1050,11 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e - { - GElf_Shdr rcshdr_mem; - const GElf_Shdr *rcshdr = gelf_getshdr (scn, &rcshdr_mem); -- assert (rcshdr != NULL); - -- if (rcshdr->sh_type == SHT_DYNAMIC) -+ if (rcshdr == NULL) -+ break; -+ -+ if (rcshdr->sh_type == SHT_DYNAMIC && rcshdr->sh_entsize) - { - /* Found the dynamic section. Look through it. */ - Elf_Data *d = elf_getdata (scn, NULL); -@@ -1052,7 +1064,9 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e - { - GElf_Dyn dyn_mem; - GElf_Dyn *dyn = gelf_getdyn (d, cnt, &dyn_mem); -- assert (dyn != NULL); -+ -+ if (dyn == NULL) -+ break; - - if (dyn->d_tag == DT_RELCOUNT) - { -@@ -1066,7 +1080,9 @@ section [%2d] '%s': DT_RELCOUNT used for - /* Does the number specified number of relative - relocations exceed the total number of - relocations? */ -- if (dyn->d_un.d_val > shdr->sh_size / shdr->sh_entsize) -+ if (shdr->sh_entsize != 0 -+ && dyn->d_un.d_val > (shdr->sh_size -+ / shdr->sh_entsize)) - ERROR (gettext ("\ - section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"), - idx, section_name (ebl, idx), -@@ -1226,7 +1242,8 @@ section [%2d] '%s': no relocations for m - } - } - -- if (shdr->sh_entsize != gelf_fsize (ebl->elf, reltype, 1, EV_CURRENT)) -+ size_t sh_entsize = gelf_fsize (ebl->elf, reltype, 1, EV_CURRENT); -+ if (shdr->sh_entsize != sh_entsize) - ERROR (gettext (reltype == ELF_T_RELA ? "\ - section [%2d] '%s': section entry size does not match ElfXX_Rela\n" : "\ - section [%2d] '%s': section entry size does not match ElfXX_Rel\n"), -@@ -1449,7 +1466,8 @@ check_rela (Ebl *ebl, GElf_Ehdr *ehdr, G - Elf_Data *symdata = elf_getdata (symscn, NULL); - enum load_state state = state_undecided; - -- for (size_t cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_RELA, 1, EV_CURRENT); -+ for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) - { - GElf_Rela rela_mem; - GElf_Rela *rela = gelf_getrela (data, cnt, &rela_mem); -@@ -1499,7 +1517,8 @@ check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GE - Elf_Data *symdata = elf_getdata (symscn, NULL); - enum load_state state = state_undecided; - -- for (size_t cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_REL, 1, EV_CURRENT); -+ for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) - { - GElf_Rel rel_mem; - GElf_Rel *rel = gelf_getrel (data, cnt, &rel_mem); -@@ -1598,7 +1617,8 @@ section [%2d] '%s': referenced as string - shdr->sh_link, section_name (ebl, shdr->sh_link), - idx, section_name (ebl, idx)); - -- if (shdr->sh_entsize != gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT)) -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); -+ if (shdr->sh_entsize != sh_entsize) - ERROR (gettext ("\ - section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"), - idx, section_name (ebl, idx)); -@@ -1608,7 +1628,7 @@ section [%2d] '%s': section entry size d - idx, section_name (ebl, idx)); - - bool non_null_warned = false; -- for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) -+ for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) - { - GElf_Dyn dyn_mem; - GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem); -@@ -1880,6 +1900,8 @@ section [%2d] '%s': entry size does not - idx, section_name (ebl, idx)); - - if (symshdr != NULL -+ && shdr->sh_entsize -+ && symshdr->sh_entsize - && (shdr->sh_size / shdr->sh_entsize - < symshdr->sh_size / symshdr->sh_entsize)) - ERROR (gettext ("\ -@@ -1906,6 +1928,12 @@ section [%2d] '%s': extended section ind - } - - Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL); -+ if (data == NULL) -+ { -+ ERROR (gettext ("section [%2d] '%s': cannot get section data\n"), -+ idx, section_name (ebl, idx)); -+ return; -+ } - - if (*((Elf32_Word *) data->d_buf) != 0) - ERROR (gettext ("symbol 0 should have zero extended section index\n")); -@@ -1948,7 +1976,7 @@ section [%2d] '%s': hash table section i - - size_t maxidx = nchain; - -- if (symshdr != NULL) -+ if (symshdr != NULL && symshdr->sh_entsize != 0) - { - size_t symsize = symshdr->sh_size / symshdr->sh_entsize; - -@@ -1959,18 +1987,28 @@ section [%2d] '%s': hash table section i - maxidx = symsize; - } - -+ Elf32_Word *buf = (Elf32_Word *) data->d_buf; -+ Elf32_Word *end = (Elf32_Word *) ((char *) data->d_buf + shdr->sh_size); - size_t cnt; - for (cnt = 2; cnt < 2 + nbucket; ++cnt) -- if (((Elf32_Word *) data->d_buf)[cnt] >= maxidx) -+ { -+ if (buf + cnt >= end) -+ break; -+ else if (buf[cnt] >= maxidx) - ERROR (gettext ("\ - section [%2d] '%s': hash bucket reference %zu out of bounds\n"), - idx, section_name (ebl, idx), cnt - 2); -+ } - - for (; cnt < 2 + nbucket + nchain; ++cnt) -- if (((Elf32_Word *) data->d_buf)[cnt] >= maxidx) -+ { -+ if (buf + cnt >= end) -+ break; -+ else if (buf[cnt] >= maxidx) - ERROR (gettext ("\ - section [%2d] '%s': hash chain reference %zu out of bounds\n"), - idx, section_name (ebl, idx), cnt - 2 - nbucket); -+ } - } - - -@@ -2000,18 +2038,28 @@ section [%2d] '%s': hash table section i - maxidx = symsize; - } - -+ Elf64_Xword *buf = (Elf64_Xword *) data->d_buf; -+ Elf64_Xword *end = (Elf64_Xword *) ((char *) data->d_buf + shdr->sh_size); - size_t cnt; - for (cnt = 2; cnt < 2 + nbucket; ++cnt) -- if (((Elf64_Xword *) data->d_buf)[cnt] >= maxidx) -+ { -+ if (buf + cnt >= end) -+ break; -+ else if (buf[cnt] >= maxidx) - ERROR (gettext ("\ - section [%2d] '%s': hash bucket reference %zu out of bounds\n"), - idx, section_name (ebl, idx), cnt - 2); -+ } - - for (; cnt < 2 + nbucket + nchain; ++cnt) -- if (((Elf64_Xword *) data->d_buf)[cnt] >= maxidx) -+ { -+ if (buf + cnt >= end) -+ break; -+ else if (buf[cnt] >= maxidx) - ERROR (gettext ("\ - section [%2d] '%s': hash chain reference %" PRIu64 " out of bounds\n"), -- idx, section_name (ebl, idx), (uint64_t) (cnt - 2 - nbucket)); -+ idx, section_name (ebl, idx), (uint64_t) cnt - 2 - nbucket); -+ } - } - - -@@ -2036,7 +2084,7 @@ section [%2d] '%s': bitmask size not pow - if (shdr->sh_size < (4 + bitmask_words + nbuckets) * sizeof (Elf32_Word)) - { - ERROR (gettext ("\ --section [%2d] '%s': hash table section is too small (is %ld, expected at least%ld)\n"), -+section [%2d] '%s': hash table section is too small (is %ld, expected at least %ld)\n"), - idx, section_name (ebl, idx), (long int) shdr->sh_size, - (long int) ((4 + bitmask_words + nbuckets) * sizeof (Elf32_Word))); - return; -@@ -2708,8 +2756,9 @@ section [%2d] '%s' refers in sh_link to - - /* The number of elements in the version symbol table must be the - same as the number of symbols. */ -- if (shdr->sh_size / shdr->sh_entsize -- != symshdr->sh_size / symshdr->sh_entsize) -+ if (shdr->sh_entsize && symshdr->sh_entsize -+ && (shdr->sh_size / shdr->sh_entsize -+ != symshdr->sh_size / symshdr->sh_entsize)) - ERROR (gettext ("\ - section [%2d] '%s' has different number of entries than symbol table [%2d] '%s'\n"), - idx, section_name (ebl, idx), ---- elfutils/src/readelf.c -+++ elfutils/src/readelf.c -@@ -1364,6 +1364,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G - Elf32_Word *grpref = (Elf32_Word *) data->d_buf; - - GElf_Sym sym_mem; -+ GElf_Sym *sym = gelf_getsym (symdata, shdr->sh_info, &sym_mem); -+ - printf ((grpref[0] & GRP_COMDAT) - ? ngettext ("\ - \nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n", -@@ -1376,8 +1378,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G - data->d_size / sizeof (Elf32_Word) - 1), - elf_ndxscn (scn), - elf_strptr (ebl->elf, shstrndx, shdr->sh_name), -- elf_strptr (ebl->elf, symshdr->sh_link, -- gelf_getsym (symdata, shdr->sh_info, &sym_mem)->st_name) -+ (sym == NULL ? NULL -+ : elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name)) - ?: gettext (""), - data->d_size / sizeof (Elf32_Word) - 1); - -@@ -1528,10 +1530,12 @@ static void - handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) - { - int class = gelf_getclass (ebl->elf); -- GElf_Shdr glink; -+ GElf_Shdr glink_mem; -+ GElf_Shdr *glink; - Elf_Data *data; - size_t cnt; - size_t shstrndx; -+ size_t sh_entsize; - - /* Get the data of the section. */ - data = elf_getdata (scn, NULL); -@@ -1543,21 +1547,26 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, - error (EXIT_FAILURE, 0, - gettext ("cannot get section header string table index")); - -+ sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); -+ -+ glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); -+ if (glink == NULL) -+ error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), -+ elf_ndxscn (scn)); -+ - printf (ngettext ("\ - \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", - "\ - \nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", -- shdr->sh_size / shdr->sh_entsize), -- (unsigned long int) (shdr->sh_size / shdr->sh_entsize), -+ shdr->sh_size / sh_entsize), -+ (unsigned long int) (shdr->sh_size / sh_entsize), - class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, - shdr->sh_offset, - (int) shdr->sh_link, -- elf_strptr (ebl->elf, shstrndx, -- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -- &glink)->sh_name)); -+ elf_strptr (ebl->elf, shstrndx, glink->sh_name)); - fputs_unlocked (gettext (" Type Value\n"), stdout); - -- for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) -+ for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) - { - GElf_Dyn dynmem; - GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); -@@ -1706,7 +1715,8 @@ static void - handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) - { - int class = gelf_getclass (ebl->elf); -- int nentries = shdr->sh_size / shdr->sh_entsize; -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_REL, 1, EV_CURRENT); -+ int nentries = shdr->sh_size / sh_entsize; - - /* Get the data of the section. */ - Elf_Data *data = elf_getdata (scn, NULL); -@@ -1892,7 +1902,8 @@ static void - handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) - { - int class = gelf_getclass (ebl->elf); -- int nentries = shdr->sh_size / shdr->sh_entsize; -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_RELA, 1, EV_CURRENT); -+ int nentries = shdr->sh_size / sh_entsize; - - /* Get the data of the section. */ - Elf_Data *data = elf_getdata (scn, NULL); -@@ -2139,6 +2150,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G - error (EXIT_FAILURE, 0, - gettext ("cannot get section header string table index")); - -+ GElf_Shdr glink_mem; -+ GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -+ &glink_mem); -+ if (glink == NULL) -+ error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), -+ elf_ndxscn (scn)); -+ - /* Now we can compute the number of entries in the section. */ - unsigned int nsyms = data->d_size / (class == ELFCLASS32 - ? sizeof (Elf32_Sym) -@@ -2149,15 +2167,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G - nsyms), - (unsigned int) elf_ndxscn (scn), - elf_strptr (ebl->elf, shstrndx, shdr->sh_name), nsyms); -- GElf_Shdr glink; - printf (ngettext (" %lu local symbol String table: [%2u] '%s'\n", - " %lu local symbols String table: [%2u] '%s'\n", - shdr->sh_info), - (unsigned long int) shdr->sh_info, - (unsigned int) shdr->sh_link, -- elf_strptr (ebl->elf, shstrndx, -- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -- &glink)->sh_name)); -+ elf_strptr (ebl->elf, shstrndx, glink->sh_name)); - - fputs_unlocked (class == ELFCLASS32 - ? gettext ("\ -@@ -2393,7 +2408,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, - error (EXIT_FAILURE, 0, - gettext ("cannot get section header string table index")); - -- GElf_Shdr glink; -+ GElf_Shdr glink_mem; -+ GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -+ &glink_mem); -+ if (glink == NULL) -+ error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), -+ elf_ndxscn (scn)); -+ - printf (ngettext ("\ - \nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", - "\ -@@ -2404,9 +2425,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, - class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, - shdr->sh_offset, - (unsigned int) shdr->sh_link, -- elf_strptr (ebl->elf, shstrndx, -- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -- &glink)->sh_name)); -+ elf_strptr (ebl->elf, shstrndx, glink->sh_name)); - - unsigned int offset = 0; - for (int cnt = shdr->sh_info; --cnt >= 0; ) -@@ -2459,8 +2478,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G - error (EXIT_FAILURE, 0, - gettext ("cannot get section header string table index")); - -+ GElf_Shdr glink_mem; -+ GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -+ &glink_mem); -+ if (glink == NULL) -+ error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), -+ elf_ndxscn (scn)); -+ - int class = gelf_getclass (ebl->elf); -- GElf_Shdr glink; - printf (ngettext ("\ - \nVersion definition section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", - "\ -@@ -2472,9 +2497,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G - class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, - shdr->sh_offset, - (unsigned int) shdr->sh_link, -- elf_strptr (ebl->elf, shstrndx, -- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -- &glink)->sh_name)); -+ elf_strptr (ebl->elf, shstrndx, glink->sh_name)); - - unsigned int offset = 0; - for (int cnt = shdr->sh_info; --cnt >= 0; ) -@@ -2736,25 +2759,30 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G - filename = NULL; - } - -+ GElf_Shdr glink_mem; -+ GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -+ &glink_mem); -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_HALF, 1, EV_CURRENT); -+ if (glink == NULL) -+ error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), -+ elf_ndxscn (scn)); -+ - /* Print the header. */ -- GElf_Shdr glink; - printf (ngettext ("\ - \nVersion symbols section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'", - "\ - \nVersion symbols section [%2u] '%s' contains %d entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'", -- shdr->sh_size / shdr->sh_entsize), -+ shdr->sh_size / sh_entsize), - (unsigned int) elf_ndxscn (scn), - elf_strptr (ebl->elf, shstrndx, shdr->sh_name), -- (int) (shdr->sh_size / shdr->sh_entsize), -+ (int) (shdr->sh_size / sh_entsize), - class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, - shdr->sh_offset, - (unsigned int) shdr->sh_link, -- elf_strptr (ebl->elf, shstrndx, -- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -- &glink)->sh_name)); -+ elf_strptr (ebl->elf, shstrndx, glink->sh_name)); - - /* Now we can finally look at the actual contents of this section. */ -- for (unsigned int cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) -+ for (unsigned int cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) - { - if (cnt % 2 == 0) - printf ("\n %4d:", cnt); -@@ -2803,7 +2831,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, - for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt) - ++counts[lengths[cnt]]; - -- GElf_Shdr glink; -+ GElf_Shdr glink_mem; -+ GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, -+ shdr->sh_link), -+ &glink_mem); -+ if (glink == NULL) -+ { -+ error (0, 0, gettext ("invalid sh_link value in section %Zu"), -+ elf_ndxscn (scn)); -+ return; -+ } -+ - printf (ngettext ("\ - \nHistogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", - "\ -@@ -2816,9 +2854,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, - shdr->sh_addr, - shdr->sh_offset, - (unsigned int) shdr->sh_link, -- elf_strptr (ebl->elf, shstrndx, -- gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), -- &glink)->sh_name)); -+ elf_strptr (ebl->elf, shstrndx, glink->sh_name)); - - if (extrastr != NULL) - fputs (extrastr, stdout); -@@ -3078,7 +3114,8 @@ print_liblist (Ebl *ebl) - - if (shdr != NULL && shdr->sh_type == SHT_GNU_LIBLIST) - { -- int nentries = shdr->sh_size / shdr->sh_entsize; -+ size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_LIB, 1, EV_CURRENT); -+ int nentries = shdr->sh_size / sh_entsize; - printf (ngettext ("\ - \nLibrary list section [%2zu] '%s' at offset %#0" PRIx64 " contains %d entry:\n", - "\ -@@ -4398,6 +4435,16 @@ print_decoded_aranges_section (Ebl *ebl, - return; - } - -+ GElf_Shdr glink_mem; -+ GElf_Shdr *glink; -+ glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); -+ if (glink == NULL) -+ { -+ error (0, 0, gettext ("invalid sh_link value in section %Zu"), -+ elf_ndxscn (scn)); -+ return; -+ } -+ - printf (ngettext ("\ - \nDWARF section [%2zu] '%s' at offset %#" PRIx64 " contains %zu entry:\n", - "\ ---- elfutils/src/strip.c -+++ elfutils/src/strip.c -@@ -565,6 +565,11 @@ handle_elf (int fd, Elf *elf, const char - goto fail_close; - } - -+ if (shstrndx >= shnum) -+ goto illformed; -+ -+#define elf_assert(test) do { if (!(test)) goto illformed; } while (0) -+ - /* Storage for section information. We leave room for two more - entries since we unconditionally create a section header string - table. Maybe some weird tool created an ELF file without one. -@@ -586,7 +591,7 @@ handle_elf (int fd, Elf *elf, const char - { - /* This should always be true (i.e., there should not be any - holes in the numbering). */ -- assert (elf_ndxscn (scn) == cnt); -+ elf_assert (elf_ndxscn (scn) == cnt); - - shdr_info[cnt].scn = scn; - -@@ -599,6 +604,7 @@ handle_elf (int fd, Elf *elf, const char - shdr_info[cnt].shdr.sh_name); - if (shdr_info[cnt].name == NULL) - { -+ illformed: - error (0, 0, gettext ("illformed file '%s'"), fname); - goto fail_close; - } -@@ -608,6 +614,8 @@ handle_elf (int fd, Elf *elf, const char - - /* Remember the shdr.sh_link value. */ - shdr_info[cnt].old_sh_link = shdr_info[cnt].shdr.sh_link; -+ if (shdr_info[cnt].old_sh_link >= shnum) -+ goto illformed; - - /* Sections in files other than relocatable object files which - are not loaded can be freely moved by us. In relocatable -@@ -620,7 +628,7 @@ handle_elf (int fd, Elf *elf, const char - appropriate reference. */ - if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB_SHNDX)) - { -- assert (shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0); -+ elf_assert (shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0); - shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx = cnt; - } - else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GROUP)) -@@ -637,7 +645,12 @@ handle_elf (int fd, Elf *elf, const char - for (inner = 1; - inner < shdr_info[cnt].data->d_size / sizeof (Elf32_Word); - ++inner) -+ { -+ if (grpref[inner] < shnum) - shdr_info[grpref[inner]].group_idx = cnt; -+ else -+ goto illformed; -+ } - - if (inner == 1 || (inner == 2 && (grpref[0] & GRP_COMDAT) == 0)) - /* If the section group contains only one element and this -@@ -648,7 +661,7 @@ handle_elf (int fd, Elf *elf, const char - } - else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym)) - { -- assert (shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0); -+ elf_assert (shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0); - shdr_info[shdr_info[cnt].shdr.sh_link].version_idx = cnt; - } - -@@ -656,7 +669,7 @@ handle_elf (int fd, Elf *elf, const char - discarded right away. */ - if ((shdr_info[cnt].shdr.sh_flags & SHF_GROUP) != 0) - { -- assert (shdr_info[cnt].group_idx != 0); -+ elf_assert (shdr_info[cnt].group_idx != 0); - - if (shdr_info[shdr_info[cnt].group_idx].idx == 0) - { -@@ -732,10 +745,14 @@ handle_elf (int fd, Elf *elf, const char - { - /* If a relocation section is marked as being removed make - sure the section it is relocating is removed, too. */ -- if ((shdr_info[cnt].shdr.sh_type == SHT_REL -+ if (shdr_info[cnt].shdr.sh_type == SHT_REL - || shdr_info[cnt].shdr.sh_type == SHT_RELA) -- && shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0) -- shdr_info[cnt].idx = 1; -+ { -+ if (shdr_info[cnt].shdr.sh_info >= shnum) -+ goto illformed; -+ else if (shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0) -+ shdr_info[cnt].idx = 1; -+ } - - /* If a group section is marked as being removed make - sure all the sections it contains are being removed, too. */ -@@ -779,7 +796,7 @@ handle_elf (int fd, Elf *elf, const char - if (shdr_info[cnt].symtab_idx != 0 - && shdr_info[shdr_info[cnt].symtab_idx].data == NULL) - { -- assert (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB); -+ elf_assert (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB); - - shdr_info[shdr_info[cnt].symtab_idx].data - = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn, -@@ -819,6 +836,9 @@ handle_elf (int fd, Elf *elf, const char - else if (scnidx == SHN_XINDEX) - scnidx = xndx; - -+ if (scnidx >= shnum) -+ goto illformed; -+ - if (shdr_info[scnidx].idx == 0) - /* This symbol table has a real symbol in - a discarded section. So preserve the -@@ -849,12 +869,16 @@ handle_elf (int fd, Elf *elf, const char - } - - /* Handle references through sh_info. */ -- if (SH_INFO_LINK_P (&shdr_info[cnt].shdr) -- && shdr_info[shdr_info[cnt].shdr.sh_info].idx == 0) -+ if (SH_INFO_LINK_P (&shdr_info[cnt].shdr)) -+ { -+ if (shdr_info[cnt].shdr.sh_info >= shnum) -+ goto illformed; -+ else if ( shdr_info[shdr_info[cnt].shdr.sh_info].idx == 0) - { - shdr_info[shdr_info[cnt].shdr.sh_info].idx = 1; - changes |= shdr_info[cnt].shdr.sh_info < cnt; - } -+ } - - /* Mark the section as investigated. */ - shdr_info[cnt].idx = 2; -@@ -995,7 +1019,7 @@ handle_elf (int fd, Elf *elf, const char - error (EXIT_FAILURE, 0, gettext ("while generating output file: %s"), - elf_errmsg (-1)); - -- assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); -+ elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); - - /* Add this name to the section header string table. */ - shdr_info[cnt].se = ebl_strtabadd (shst, shdr_info[cnt].name, 0); -@@ -1032,7 +1056,7 @@ handle_elf (int fd, Elf *elf, const char - error (EXIT_FAILURE, 0, - gettext ("while create section header section: %s"), - elf_errmsg (-1)); -- assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); -+ elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); - - shdr_info[cnt].data = elf_newdata (shdr_info[cnt].newscn); - if (shdr_info[cnt].data == NULL) -@@ -1089,7 +1113,7 @@ handle_elf (int fd, Elf *elf, const char - error (EXIT_FAILURE, 0, - gettext ("while create section header section: %s"), - elf_errmsg (-1)); -- assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); -+ elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); - - /* Finalize the string table and fill in the correct indices in the - section headers. */ -@@ -1179,20 +1203,20 @@ handle_elf (int fd, Elf *elf, const char - shndxdata = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn, - NULL); - -- assert ((versiondata->d_size / sizeof (Elf32_Word)) -+ elf_assert ((versiondata->d_size / sizeof (Elf32_Word)) - >= shdr_info[cnt].data->d_size / elsize); - } - - if (shdr_info[cnt].version_idx != 0) - { -- assert (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM); -+ elf_assert (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM); - /* This section has associated version - information. We have to modify that - information, too. */ - versiondata = elf_getdata (shdr_info[shdr_info[cnt].version_idx].scn, - NULL); - -- assert ((versiondata->d_size / sizeof (GElf_Versym)) -+ elf_assert ((versiondata->d_size / sizeof (GElf_Versym)) - >= shdr_info[cnt].data->d_size / elsize); - } - -@@ -1247,7 +1271,7 @@ handle_elf (int fd, Elf *elf, const char - sec = shdr_info[sym->st_shndx].idx; - else - { -- assert (shndxdata != NULL); -+ elf_assert (shndxdata != NULL); - - sec = shdr_info[xshndx].idx; - } -@@ -1268,7 +1292,7 @@ handle_elf (int fd, Elf *elf, const char - nxshndx = sec; - } - -- assert (sec < SHN_LORESERVE || shndxdata != NULL); -+ elf_assert (sec < SHN_LORESERVE || shndxdata != NULL); - - if ((inner != destidx || nshndx != sym->st_shndx - || (shndxdata != NULL && nxshndx != xshndx)) -@@ -1295,9 +1319,11 @@ handle_elf (int fd, Elf *elf, const char - { - size_t sidx = (sym->st_shndx != SHN_XINDEX - ? sym->st_shndx : xshndx); -- assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION -- || (shdr_info[sidx].shdr.sh_type == SHT_GROUP -- && shdr_info[sidx].shdr.sh_info == inner)); -+ elf_assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION -+ || ((shdr_info[sidx].shdr.sh_type -+ == SHT_GROUP) -+ && (shdr_info[sidx].shdr.sh_info -+ == inner))); - } - } - -@@ -1485,11 +1511,11 @@ handle_elf (int fd, Elf *elf, const char - { - GElf_Sym sym_mem; - GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); -- assert (sym != NULL); -+ elf_assert (sym != NULL); - - const char *name = elf_strptr (elf, strshndx, - sym->st_name); -- assert (name != NULL); -+ elf_assert (name != NULL); - size_t hidx = elf_hash (name) % nbucket; - - if (bucket[hidx] == 0) -@@ -1508,8 +1534,8 @@ handle_elf (int fd, Elf *elf, const char - else - { - /* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */ -- assert (shdr_info[cnt].shdr.sh_entsize -- == sizeof (Elf64_Xword)); -+ elf_assert (shdr_info[cnt].shdr.sh_entsize -+ == sizeof (Elf64_Xword)); - - Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; - -@@ -1539,11 +1565,11 @@ handle_elf (int fd, Elf *elf, const char - { - GElf_Sym sym_mem; - GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); -- assert (sym != NULL); -+ elf_assert (sym != NULL); - - const char *name = elf_strptr (elf, strshndx, - sym->st_name); -- assert (name != NULL); -+ elf_assert (name != NULL); - size_t hidx = elf_hash (name) % nbucket; - - if (bucket[hidx] == 0) diff --git a/elfutils.spec b/elfutils.spec index 3bbd621..39ad06b 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects -Version: 0.158 -%global baserelease 3 +Version: 0.159 +%global baserelease 1 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -44,11 +44,7 @@ Group: Development/Tools Source: %{?source_url}%{name}-%{version}.tar.bz2 -Patch1: %{?source_url}elfutils-robustify.patch -Patch2: %{?source_url}elfutils-portability.patch - -Patch3: elfutils-0.158-mod-e_type.patch -Patch4: elfutils-0.158-CVE-2014-0172.patch +Patch1: %{?source_url}elfutils-portability.patch %if !%{compat} Release: %{baserelease}%{?dist} @@ -88,11 +84,11 @@ BuildRequires: xz-devel %global _program_prefix eu- %description -Elfutils is a collection of utilities, including ld (a linker), -nm (for listing symbols from object files), size (for listing the -section sizes of an object or archive file), strip (for discarding -symbols), readelf (to see the raw ELF file structures), and elflint -(to check for well-formed ELF files). +Elfutils is a collection of utilities, including stack (to show +backtraces), nm (for listing symbols from object files), size +(for listing the section sizes of an object or archive file), +strip (for discarding symbols), readelf (to see the raw ELF file +structures), and elflint (to check for well-formed ELF files). %package libs @@ -199,10 +195,8 @@ for libelf. : 'separate_devel_static=%separate_devel_static' : 'scanf_has_m=%scanf_has_m' -%patch1 -p1 -b .robustify - %if %{portability} -%patch2 -p1 -b .portability +%patch1 -p1 -b .portability sleep 1 find . \( -name Makefile.in -o -name aclocal.m4 \) -print | xargs touch sleep 1 @@ -213,20 +207,18 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %endif %endif -%patch3 -p1 -b .e_type -%patch4 -p1 -b .CVE-2014-0172 - find . -name \*.sh ! -perm -0100 -print | xargs chmod +x %build # Remove -Wall from default flags. The makefiles enable enough warnings # themselves, and they use -Werror. Appending -Wall defeats the cases where # the makefiles disable some specific warnings for specific code. -# Also remove -Werror=format-security which doesn't work without -# -Wformat (enabled by -Wall). We enable -Wformat explicitly for some -# files later. -RPM_OPT_FLAGS=${RPM_OPT_FLAGS/-Wall/} -RPM_OPT_FLAGS=${RPM_OPT_FLAGS/-Werror=format-security/} +# But add -Wformat explicitly for use with -Werror=format-security which +# doesn't work without -Wformat (enabled by -Wall). +RPM_OPT_FLAGS="${RPM_OPT_FLAGS/-Wall/}" +%if !%{compat} +RPM_OPT_FLAGS="${RPM_OPT_FLAGS} -Wformat" +%endif %if %{compat} # Some older glibc headers can run afoul of -Werror all by themselves. @@ -238,7 +230,7 @@ COMPAT_CONFIG_FLAGS="" %endif trap 'cat config.log' EXIT -%configure --enable-dwz $COMPAT_CONFIG_FLAGS CFLAGS="$RPM_OPT_FLAGS -fexceptions" +%configure $COMPAT_CONFIG_FLAGS CFLAGS="$RPM_OPT_FLAGS -fexceptions" trap '' EXIT make -s %{?_smp_mflags} @@ -308,6 +300,7 @@ rm -rf ${RPM_BUILD_ROOT} %{_includedir}/elfutils/libebl.h %{_includedir}/elfutils/libdw.h %{_includedir}/elfutils/libdwfl.h +%{_includedir}/elfutils/libdwelf.h %{_includedir}/elfutils/version.h %{_libdir}/libebl.a %{_libdir}/libasm.so @@ -335,7 +328,14 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog -* Tue Apr 10 2014 Mark Wielaard - 0.158-3 +* Mon May 19 2014 Mark Wielaard - 0.159-1 +- Update to 0.159. + - Remove integrated upstream patches: + robustify.patch, mod-e_type.patch and CVE-2014-0172.patch. + - Remove special handling of now default compile and configure flags: + Don't remove -Werror=format-security, don't configure --enable-dwz. + +* Thu Apr 10 2014 Mark Wielaard - 0.158-3 - Add elfutils-0.158-CVE-2014-0172.patch (#1085729) * Tue Mar 11 2014 Mark Wielaard - 0.158-2 diff --git a/sources b/sources index 97cd061..fb3c1c7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -050a4909e452d01ab4747fd69d4036e0 elfutils-0.158.tar.bz2 +1f45a18231c782ccd0966059e2e42ea9 elfutils-0.159.tar.bz2 From ffa9599c7ddfead60c1b064546a91a5f1d605bf8 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sat, 7 Jun 2014 05:07:18 -0500 Subject: [PATCH 02/11] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild --- elfutils.spec | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/elfutils.spec b/elfutils.spec index 39ad06b..25f8251 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 1 +%global baserelease 2 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -47,9 +47,9 @@ Source: %{?source_url}%{name}-%{version}.tar.bz2 Patch1: %{?source_url}elfutils-portability.patch %if !%{compat} -Release: %{baserelease}%{?dist} +Release: %{baserelease}%{?dist}.1 %else -Release: 0.%{baserelease} +Release: 0.%{baserelease}.1 %endif Requires: elfutils-libelf%{depsuffix} = %{version}-%{release} @@ -328,6 +328,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Sat Jun 07 2014 Fedora Release Engineering - 0.159-2.1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + * Mon May 19 2014 Mark Wielaard - 0.159-1 - Update to 0.159. - Remove integrated upstream patches: From 2e16caff896ff62c61ab2ff96265ac24a4ec83e8 Mon Sep 17 00:00:00 2001 From: Kyle McMartin Date: Mon, 9 Jun 2014 14:11:40 -0400 Subject: [PATCH 03/11] AArch64: handle new glibc-headers which provides proper GETREGSET structs. --- elfutils-aarch64-user_regs_struct.patch | 35 +++++++++++++++++++++++++ elfutils.spec | 12 ++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 elfutils-aarch64-user_regs_struct.patch diff --git a/elfutils-aarch64-user_regs_struct.patch b/elfutils-aarch64-user_regs_struct.patch new file mode 100644 index 0000000..38240bc --- /dev/null +++ b/elfutils-aarch64-user_regs_struct.patch @@ -0,0 +1,35 @@ +diff --git a/backends/aarch64_initreg.c b/backends/aarch64_initreg.c +index 2492d56..8d68a6e 100644 +--- a/backends/aarch64_initreg.c ++++ b/backends/aarch64_initreg.c +@@ -51,7 +51,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + #else /* __aarch64__ */ + + /* General registers. */ +- struct user_pt_regs gregs; ++ struct user_regs_struct gregs; + struct iovec iovec; + iovec.iov_base = &gregs; + iovec.iov_len = sizeof (gregs); +@@ -69,7 +69,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + /* ELR cannot be found. */ + + /* FP registers (only 64bits are used). */ +- struct user_fpsimd_state fregs; ++ struct user_fpsimd_struct fregs; + iovec.iov_base = &fregs; + iovec.iov_len = sizeof (fregs); + if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec) != 0) +diff --git a/backends/arm_initreg.c b/backends/arm_initreg.c +index 5837383..1edf62b 100644 +--- a/backends/arm_initreg.c ++++ b/backends/arm_initreg.c +@@ -67,7 +67,7 @@ arm_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + #elif defined __aarch64__ + /* Compat mode: arm compatible code running on aarch64 */ + int i; +- struct user_pt_regs gregs; ++ struct user_regs_struct gregs; + struct iovec iovec; + iovec.iov_base = &gregs; + iovec.iov_len = sizeof (gregs); diff --git a/elfutils.spec b/elfutils.spec index 25f8251..4eeea86 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 2 +%global baserelease 3 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -45,11 +45,12 @@ Group: Development/Tools Source: %{?source_url}%{name}-%{version}.tar.bz2 Patch1: %{?source_url}elfutils-portability.patch +Patch2: elfutils-aarch64-user_regs_struct.patch %if !%{compat} -Release: %{baserelease}%{?dist}.1 +Release: %{baserelease}%{?dist} %else -Release: 0.%{baserelease}.1 +Release: 0.%{baserelease} %endif Requires: elfutils-libelf%{depsuffix} = %{version}-%{release} @@ -207,6 +208,8 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %endif %endif +%patch2 -p1 -b .aa64~1 + find . -name \*.sh ! -perm -0100 -print | xargs chmod +x %build @@ -328,6 +331,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Mon Jun 09 2014 Kyle McMartin - 0.159-3 +- AArch64: handle new glibc-headers which provides proper GETREGSET structs. + * Sat Jun 07 2014 Fedora Release Engineering - 0.159-2.1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild From 1648a11415e3b39cec8ea91daf847940df9aab6c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 10 Jun 2014 15:28:11 +0200 Subject: [PATCH 04/11] 0.159-4 Add elfutils-0.159-argp-attach.patch (#1107654) --- elfutils-0.159-argp-attach.patch | 359 +++++++++++++++++++++++++++++++ elfutils.spec | 7 +- 2 files changed, 365 insertions(+), 1 deletion(-) create mode 100644 elfutils-0.159-argp-attach.patch diff --git a/elfutils-0.159-argp-attach.patch b/elfutils-0.159-argp-attach.patch new file mode 100644 index 0000000..8db0540 --- /dev/null +++ b/elfutils-0.159-argp-attach.patch @@ -0,0 +1,359 @@ +commit 68b1afa36d2389c4f2fb526d0b134e5a3c68dedb +Author: Mark Wielaard +Date: Tue Jun 10 15:09:23 2014 +0200 + + libdwfl: dwfl_standard_argp should not fail when not able to attach Dwfl. + + As pointed out in https://bugzilla.redhat.com/show_bug.cgi?id=1107654 + commit 191080 introduced a thinko that caused dwfl_standard_argp + to fail if the Dwfl couldn't be attached. Instead of generating a warning + as the comment intended, the failure would be fatal. But even warning + about dwfl_core_file_attach () or dwfl_linux_proc_attach () failing + would be a mistake. The caller/user might not be interested in such + a non-fatal issue. So just ignore if the call failed for whatever reason. + If the caller is interested in warning up front about this issue, then + dwfl_pid () should be called to check the Dwfl is attached. Things should + work just fine for anything that doesn't call any of the dwfl_state related + functions. + + Signed-off-by: Mark Wielaard + +diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c +index 8d2bc6a..42b7e78 100644 +--- a/libdwfl/argp-std.c ++++ b/libdwfl/argp-std.c +@@ -171,10 +171,9 @@ parse_opt (int key, char *arg, struct argp_state *state) + if (result != 0) + return fail (dwfl, result, arg); + +- result = INTUSE(dwfl_linux_proc_attach) (dwfl, atoi (arg), false); +- if (result != 0) +- /* Non-fatal to not be able to attach to process. */ +- failure (dwfl, result, _("cannot attach to process")); ++ /* Non-fatal to not be able to attach to process, ignore error. */ ++ INTUSE(dwfl_linux_proc_attach) (dwfl, atoi (arg), false); ++ + opt->dwfl = dwfl; + } + else +@@ -301,10 +300,8 @@ parse_opt (int key, char *arg, struct argp_state *state) + return fail (dwfl, result, opt->core); + } + +- result = INTUSE(dwfl_core_file_attach) (dwfl, core); +- if (result < 0) +- /* Non-fatal to not be able to attach to core. */ +- failure (dwfl, result, _("cannot attach to core")); ++ /* Non-fatal to not be able to attach to core, ignore error. */ ++ INTUSE(dwfl_core_file_attach) (dwfl, core); + + /* From now we leak FD and CORE. */ + +commit 14beac3b6f22b8d7a054980f74c4f8d33b969fc4 +Author: Mark Wielaard +Date: Wed Jun 11 15:14:23 2014 +0200 + + libdwfl: Record dwfl_attach_state error and return it on failure. + + When dwfl_attach_state fails functions that need the process state should + return the error that caused the attach to fail. Use this in the backtrace + test to signal any attach failure. This makes sure that architectures that + don't provide unwinder support get properly detected (and the tests SKIPs) + Also don't assert when trying to attach a non-core ELF file, but return an + error to indicate failure. + + Signed-off-by: Mark Wielaard + +diff --git a/libdwfl/dwfl_frame.c b/libdwfl/dwfl_frame.c +index fd0b9ae..f6f86c0 100644 +--- a/libdwfl/dwfl_frame.c ++++ b/libdwfl/dwfl_frame.c +@@ -117,6 +117,7 @@ __libdwfl_process_free (Dwfl_Process *process) + if (process->ebl_close) + ebl_closebackend (process->ebl); + free (process); ++ dwfl->attacherr = DWFL_E_NOERROR; + } + + /* Allocate new Dwfl_Process for DWFL. */ +@@ -134,17 +135,24 @@ bool + dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, + const Dwfl_Thread_Callbacks *thread_callbacks, void *arg) + { +- if (thread_callbacks == NULL || thread_callbacks->next_thread == NULL +- || thread_callbacks->set_initial_registers == NULL) ++ if (dwfl->process != NULL) + { +- __libdwfl_seterrno (DWFL_E_INVALID_ARGUMENT); ++ __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); + return false; + } +- if (dwfl->process != NULL) ++ ++ /* Reset any previous error, we are just going to try again. */ ++ dwfl->attacherr = DWFL_E_NOERROR; ++ if (thread_callbacks == NULL || thread_callbacks->next_thread == NULL ++ || thread_callbacks->set_initial_registers == NULL) + { +- __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); ++ dwfl->attacherr = DWFL_E_INVALID_ARGUMENT; ++ fail: ++ dwfl->attacherr = __libdwfl_canon_error (dwfl->attacherr); ++ __libdwfl_seterrno (dwfl->attacherr); + return false; + } ++ + Ebl *ebl; + bool ebl_close; + if (elf != NULL) +@@ -180,8 +188,8 @@ dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, + if (ebl == NULL) + { + /* Not identified EBL from any of the modules. */ +- __libdwfl_seterrno (DWFL_E_PROCESS_NO_ARCH); +- return false; ++ dwfl->attacherr = DWFL_E_PROCESS_NO_ARCH; ++ goto fail; + } + process_alloc (dwfl); + Dwfl_Process *process = dwfl->process; +@@ -189,8 +197,8 @@ dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, + { + if (ebl_close) + ebl_closebackend (ebl); +- __libdwfl_seterrno (DWFL_E_NOMEM); +- return false; ++ dwfl->attacherr = DWFL_E_NOMEM; ++ goto fail; + } + process->ebl = ebl; + process->ebl_close = ebl_close; +@@ -204,6 +212,12 @@ INTDEF(dwfl_attach_state) + pid_t + dwfl_pid (Dwfl *dwfl) + { ++ if (dwfl->attacherr != DWFL_E_NOERROR) ++ { ++ __libdwfl_seterrno (dwfl->attacherr); ++ return -1; ++ } ++ + if (dwfl->process == NULL) + { + __libdwfl_seterrno (DWFL_E_NO_ATTACH_STATE); +@@ -238,6 +252,12 @@ int + dwfl_getthreads (Dwfl *dwfl, int (*callback) (Dwfl_Thread *thread, void *arg), + void *arg) + { ++ if (dwfl->attacherr != DWFL_E_NOERROR) ++ { ++ __libdwfl_seterrno (dwfl->attacherr); ++ return -1; ++ } ++ + Dwfl_Process *process = dwfl->process; + if (process == NULL) + { +@@ -309,6 +329,12 @@ getthread (Dwfl *dwfl, pid_t tid, + int (*callback) (Dwfl_Thread *thread, void *arg), + void *arg) + { ++ if (dwfl->attacherr != DWFL_E_NOERROR) ++ { ++ __libdwfl_seterrno (dwfl->attacherr); ++ return -1; ++ } ++ + Dwfl_Process *process = dwfl->process; + if (process == NULL) + { +diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h +index 9b03d8a..30c0f8a 100644 +--- a/libdwfl/libdwflP.h ++++ b/libdwfl/libdwflP.h +@@ -91,7 +91,8 @@ typedef struct Dwfl_Process Dwfl_Process; + DWFL_ERROR (ATTACH_STATE_CONFLICT, N_("Dwfl already has attached state")) \ + DWFL_ERROR (NO_ATTACH_STATE, N_("Dwfl has no attached state")) \ + DWFL_ERROR (NO_UNWIND, N_("Unwinding not supported for this architecture")) \ +- DWFL_ERROR (INVALID_ARGUMENT, N_("Invalid argument")) ++ DWFL_ERROR (INVALID_ARGUMENT, N_("Invalid argument")) \ ++ DWFL_ERROR (NO_CORE_FILE, N_("Not an ET_CORE ELF file")) + + #define DWFL_ERROR(name, text) DWFL_E_##name, + typedef enum { DWFL_ERRORS DWFL_E_NUM } Dwfl_Error; +@@ -110,6 +111,7 @@ struct Dwfl + Dwfl_Module *modulelist; /* List in order used by full traversals. */ + + Dwfl_Process *process; ++ Dwfl_Error attacherr; /* Previous error attaching process. */ + + GElf_Addr offline_next_address; + +diff --git a/libdwfl/linux-core-attach.c b/libdwfl/linux-core-attach.c +index 1002788..7ef3f25 100644 +--- a/libdwfl/linux-core-attach.c ++++ b/libdwfl/linux-core-attach.c +@@ -309,33 +309,41 @@ static const Dwfl_Thread_Callbacks core_thread_callbacks = + int + dwfl_core_file_attach (Dwfl *dwfl, Elf *core) + { ++ Dwfl_Error err = DWFL_E_NOERROR; + Ebl *ebl = ebl_openbackend (core); + if (ebl == NULL) + { +- __libdwfl_seterrno (DWFL_E_LIBEBL); ++ err = DWFL_E_LIBEBL; ++ fail_err: ++ if (dwfl->process == NULL && dwfl->attacherr == DWFL_E_NOERROR) ++ dwfl->attacherr = __libdwfl_canon_error (err); ++ __libdwfl_seterrno (err); + return -1; + } + size_t nregs = ebl_frame_nregs (ebl); + if (nregs == 0) + { +- __libdwfl_seterrno (DWFL_E_NO_UNWIND); ++ err = DWFL_E_NO_UNWIND; ++ fail: + ebl_closebackend (ebl); +- return -1; ++ goto fail_err; + } + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (core, &ehdr_mem); + if (ehdr == NULL) + { +- __libdwfl_seterrno (DWFL_E_LIBELF); +- ebl_closebackend (ebl); +- return -1; ++ err = DWFL_E_LIBELF; ++ goto fail; ++ } ++ if (ehdr->e_type != ET_CORE) ++ { ++ err = DWFL_E_NO_CORE_FILE; ++ goto fail; + } +- assert (ehdr->e_type == ET_CORE); + size_t phnum; + if (elf_getphdrnum (core, &phnum) < 0) + { +- __libdwfl_seterrno (DWFL_E_LIBELF); +- ebl_closebackend (ebl); +- return -1; ++ err = DWFL_E_LIBELF; ++ goto fail; + } + pid_t pid = -1; + Elf_Data *note_data = NULL; +@@ -351,8 +359,8 @@ dwfl_core_file_attach (Dwfl *dwfl, Elf *core) + } + if (note_data == NULL) + { +- ebl_closebackend (ebl); +- return DWFL_E_LIBELF; ++ err = DWFL_E_LIBELF; ++ goto fail; + } + size_t offset = 0; + GElf_Nhdr nhdr; +@@ -394,16 +402,14 @@ dwfl_core_file_attach (Dwfl *dwfl, Elf *core) + if (pid == -1) + { + /* No valid NT_PRPSINFO recognized in this CORE. */ +- __libdwfl_seterrno (DWFL_E_BADELF); +- ebl_closebackend (ebl); +- return -1; ++ err = DWFL_E_BADELF; ++ goto fail; + } + struct core_arg *core_arg = malloc (sizeof *core_arg); + if (core_arg == NULL) + { +- __libdwfl_seterrno (DWFL_E_NOMEM); +- ebl_closebackend (ebl); +- return -1; ++ err = DWFL_E_NOMEM; ++ goto fail; + } + core_arg->core = core; + core_arg->note_data = note_data; +diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c +index 8aee721..d60955e 100644 +--- a/libdwfl/linux-pid-attach.c ++++ b/libdwfl/linux-pid-attach.c +@@ -290,13 +290,23 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped) + { + char buffer[36]; + FILE *procfile; ++ int err = 0; /* The errno to return and set for dwfl->attcherr. */ + + /* Make sure to report the actual PID (thread group leader) to + dwfl_attach_state. */ + snprintf (buffer, sizeof (buffer), "/proc/%ld/status", (long) pid); + procfile = fopen (buffer, "r"); + if (procfile == NULL) +- return errno; ++ { ++ err = errno; ++ fail: ++ if (dwfl->process == NULL && dwfl->attacherr == DWFL_E_NOERROR) ++ { ++ errno = err; ++ dwfl->attacherr = __libdwfl_canon_error (DWFL_E_ERRNO); ++ } ++ return err; ++ } + + char *line = NULL; + size_t linelen = 0; +@@ -317,19 +327,26 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped) + fclose (procfile); + + if (pid == 0) +- return ESRCH; ++ { ++ err = ESRCH; ++ goto fail; ++ } + + char dirname[64]; + int i = snprintf (dirname, sizeof (dirname), "/proc/%ld/task", (long) pid); + assert (i > 0 && i < (ssize_t) sizeof (dirname) - 1); + DIR *dir = opendir (dirname); + if (dir == NULL) +- return errno; ++ { ++ err = errno; ++ goto fail; ++ } + struct __libdwfl_pid_arg *pid_arg = malloc (sizeof *pid_arg); + if (pid_arg == NULL) + { + closedir (dir); +- return ENOMEM; ++ err = ENOMEM; ++ goto fail; + } + pid_arg->dir = dir; + pid_arg->tid_attached = 0; +diff --git a/tests/backtrace.c b/tests/backtrace.c +index 1a4709b..ce0bd17 100644 +--- a/tests/backtrace.c ++++ b/tests/backtrace.c +@@ -1,5 +1,5 @@ + /* Test program for unwinding of frames. +- Copyright (C) 2013 Red Hat, Inc. ++ Copyright (C) 2013, 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify +@@ -459,6 +459,9 @@ main (int argc __attribute__ ((unused)), char **argv) + }; + (void) argp_parse (&argp, argc, argv, 0, NULL, &dwfl); + assert (dwfl != NULL); ++ /* We want to make sure the dwfl was properly attached. */ ++ if (dwfl_pid (dwfl) < 0) ++ error (2, 0, "dwfl_pid: %s", dwfl_errmsg (-1)); + dump (dwfl); + dwfl_end (dwfl); + return 0; diff --git a/elfutils.spec b/elfutils.spec index 4eeea86..d7fad74 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 3 +%global baserelease 4 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -46,6 +46,7 @@ Source: %{?source_url}%{name}-%{version}.tar.bz2 Patch1: %{?source_url}elfutils-portability.patch Patch2: elfutils-aarch64-user_regs_struct.patch +Patch3: elfutils-0.159-argp-attach.patch %if !%{compat} Release: %{baserelease}%{?dist} @@ -209,6 +210,7 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %endif %patch2 -p1 -b .aa64~1 +%patch3 -p1 -b .argp-attach find . -name \*.sh ! -perm -0100 -print | xargs chmod +x @@ -331,6 +333,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Tue Jun 10 2014 Mark Wielaard - 0.159-4 +- Add elfutils-0.159-argp-attach.patch (#1107654) + * Mon Jun 09 2014 Kyle McMartin - 0.159-3 - AArch64: handle new glibc-headers which provides proper GETREGSET structs. From 16224b3d3228b1c47ee18213e02cff3b88b03e07 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 4 Jul 2014 15:14:59 +0200 Subject: [PATCH 05/11] 0.159-5 aarch64-bool-ret, elf.h update and ppc64le-elfv2-abi patch. Resolves: #1110249 --- elfutils-0.159-aarch64-bool-ret.patch | 23 ++++++ elfutils-0.159-elf-h.patch | 70 ++++++++++++++++++ elfutils-0.159-ppc64le-elfv2-abi.patch | 99 ++++++++++++++++++++++++++ elfutils.spec | 13 +++- 4 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 elfutils-0.159-aarch64-bool-ret.patch create mode 100644 elfutils-0.159-elf-h.patch create mode 100644 elfutils-0.159-ppc64le-elfv2-abi.patch diff --git a/elfutils-0.159-aarch64-bool-ret.patch b/elfutils-0.159-aarch64-bool-ret.patch new file mode 100644 index 0000000..959baee --- /dev/null +++ b/elfutils-0.159-aarch64-bool-ret.patch @@ -0,0 +1,23 @@ +commit 5e9668ccaf3d34567b313b13327ff9b31e4e5ba6 +Author: Mark Wielaard +Date: Fri Jul 4 13:26:12 2014 +0200 + + backends: aarch64_return_value_location should handle DW_ATE_boolean. + + Found with run-native-test.sh om debian arm64. + http://bugs.debian.org/753552 + + Signed-off-by: Mark Wielaard + +diff --git a/backends/aarch64_retval.c b/backends/aarch64_retval.c +index 0ed7d56..68de307 100644 +--- a/backends/aarch64_retval.c ++++ b/backends/aarch64_retval.c +@@ -357,6 +357,7 @@ aarch64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + size of the argument is less than or equal to 8 bytes + [...] the argument is copied to the least significant + bits in x[NGRN]. */ ++ case DW_ATE_boolean: + case DW_ATE_signed: + case DW_ATE_unsigned: + case DW_ATE_unsigned_char: diff --git a/elfutils-0.159-elf-h.patch b/elfutils-0.159-elf-h.patch new file mode 100644 index 0000000..7376d87 --- /dev/null +++ b/elfutils-0.159-elf-h.patch @@ -0,0 +1,70 @@ +commit 16e2d351bf31d0ce09ce9632ff196cbd973b656b +Author: Mark Wielaard +Date: Fri Jul 4 13:39:18 2014 +0200 + + Update elf.h from glibc. + + Includes new bits needed for ppc64le ELFv2 abi. + https://bugzilla.redhat.com/show_bug.cgi?id=1110249 + + Signed-off-by: Mark Wielaard + +diff --git a/libelf/elf.h b/libelf/elf.h +index a05ea3b..40e87b2 100644 +--- a/libelf/elf.h ++++ b/libelf/elf.h +@@ -1,5 +1,5 @@ + /* This file defines standard ELF types, structures, and macros. +- Copyright (C) 1995-2013 Free Software Foundation, Inc. ++ Copyright (C) 1995-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -2252,6 +2252,17 @@ typedef Elf32_Addr Elf32_Conflict; + #define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */ + #define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */ + #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */ ++#define R_PPC64_TLSGD 107 /* none (sym+add)@tlsgd */ ++#define R_PPC64_TLSLD 108 /* none (sym+add)@tlsld */ ++#define R_PPC64_TOCSAVE 109 /* none */ ++ ++/* Added when HA and HI relocs were changed to report overflows. */ ++#define R_PPC64_ADDR16_HIGH 110 ++#define R_PPC64_ADDR16_HIGHA 111 ++#define R_PPC64_TPREL16_HIGH 112 ++#define R_PPC64_TPREL16_HIGHA 113 ++#define R_PPC64_DTPREL16_HIGH 114 ++#define R_PPC64_DTPREL16_HIGHA 115 + + /* GNU extension to support local ifunc. */ + #define R_PPC64_JMP_IREL 247 +@@ -2261,12 +2272,29 @@ typedef Elf32_Addr Elf32_Conflict; + #define R_PPC64_REL16_HI 251 /* half16 (sym+add-.)@h */ + #define R_PPC64_REL16_HA 252 /* half16 (sym+add-.)@ha */ + ++/* e_flags bits specifying ABI. ++ 1 for original function descriptor using ABI, ++ 2 for revised ABI without function descriptors, ++ 0 for unspecified or not using any features affected by the differences. */ ++#define EF_PPC64_ABI 3 ++ + /* PowerPC64 specific values for the Dyn d_tag field. */ + #define DT_PPC64_GLINK (DT_LOPROC + 0) + #define DT_PPC64_OPD (DT_LOPROC + 1) + #define DT_PPC64_OPDSZ (DT_LOPROC + 2) ++#define DT_PPC64_OPT (DT_LOPROC + 3) + #define DT_PPC64_NUM 3 + ++/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry. */ ++#define PPC64_OPT_TLS 1 ++#define PPC64_OPT_MULTI_TOC 2 ++ ++/* PowerPC64 specific values for the Elf64_Sym st_other field. */ ++#define STO_PPC64_LOCAL_BIT 5 ++#define STO_PPC64_LOCAL_MASK (7 << STO_PPC64_LOCAL_BIT) ++#define PPC64_LOCAL_ENTRY_OFFSET(other) \ ++ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2) ++ + + /* ARM specific declarations */ + diff --git a/elfutils-0.159-ppc64le-elfv2-abi.patch b/elfutils-0.159-ppc64le-elfv2-abi.patch new file mode 100644 index 0000000..2bf1b06 --- /dev/null +++ b/elfutils-0.159-ppc64le-elfv2-abi.patch @@ -0,0 +1,99 @@ +commit a95c4ad24cf83b2b0273fee73162bf476cebec8f +Author: Mark Wielaard +Date: Fri Jul 4 14:30:48 2014 +0200 + + Add ppc64le ELFv2 abi support to backends and elflint. + + The big endian vs little endian changes are already handled by detecting + the EI_DATA data encoding. And the function descriptors are already not + used when we see there is no .opd section. This change adds new checks + for st_other bits, new relocations and recognizes DT_PPC64_OPT. + + Signed-off-by: Menanteau Guy + Signed-off-by: Mark Wielaard + +diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c +index e52231c..7ea2b23 100644 +--- a/backends/ppc64_init.c ++++ b/backends/ppc64_init.c +@@ -61,6 +61,7 @@ ppc64_init (elf, machine, eh, ehlen) + HOOK (eh, machine_flag_check); + HOOK (eh, copy_reloc_p); + HOOK (eh, check_special_symbol); ++ HOOK (eh, check_st_other_bits); + HOOK (eh, bss_plt_p); + HOOK (eh, return_value_location); + HOOK (eh, register_info); +diff --git a/backends/ppc64_reloc.def b/backends/ppc64_reloc.def +index 6366f46..3a693cf 100644 +--- a/backends/ppc64_reloc.def ++++ b/backends/ppc64_reloc.def +@@ -132,6 +132,21 @@ RELOC_TYPE (DTPREL16_HIGHER, REL) + RELOC_TYPE (DTPREL16_HIGHERA, REL) + RELOC_TYPE (DTPREL16_HIGHEST, REL) + RELOC_TYPE (DTPREL16_HIGHESTA, REL) ++RELOC_TYPE (TLSGD, REL) ++RELOC_TYPE (TLSLD, REL) ++RELOC_TYPE (TOCSAVE, REL) ++RELOC_TYPE (ADDR16_HIGH, REL) ++RELOC_TYPE (ADDR16_HIGHA, REL) ++RELOC_TYPE (TPREL16_HIGH, REL) ++RELOC_TYPE (TPREL16_HIGHA, REL) ++RELOC_TYPE (DTPREL16_HIGH, REL) ++RELOC_TYPE (DTPREL16_HIGHA, REL) ++RELOC_TYPE (JMP_IREL, REL) ++RELOC_TYPE (IRELATIVE, REL) ++RELOC_TYPE (REL16, REL) ++RELOC_TYPE (REL16_LO, REL) ++RELOC_TYPE (REL16_HI, REL) ++RELOC_TYPE (REL16_HA, REL) + + /* Notes from Alan Modra: + +diff --git a/backends/ppc64_symbol.c b/backends/ppc64_symbol.c +index 212d414..5a020d8 100644 +--- a/backends/ppc64_symbol.c ++++ b/backends/ppc64_symbol.c +@@ -72,6 +72,8 @@ ppc64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)), + return "PPC64_OPD"; + case DT_PPC64_OPDSZ: + return "PPC64_OPDSZ"; ++ case DT_PPC64_OPT: ++ return "PPC64_OPT"; + default: + break; + } +@@ -84,7 +86,8 @@ ppc64_dynamic_tag_check (int64_t tag) + { + return (tag == DT_PPC64_GLINK + || tag == DT_PPC64_OPD +- || tag == DT_PPC64_OPDSZ); ++ || tag == DT_PPC64_OPDSZ ++ || tag == DT_PPC64_OPT); + } + + +@@ -120,3 +123,9 @@ ppc64_machine_flag_check (GElf_Word flags) + { + return flags == 0 || flags == 1 || flags == 2; + } ++ ++bool ++ppc64_check_st_other_bits (unsigned char st_other) ++{ ++ return (PPC64_LOCAL_ENTRY_OFFSET (st_other) != 0); ++} +diff --git a/src/elflint.c b/src/elflint.c +index 5568c65..d6a4774 100644 +--- a/src/elflint.c ++++ b/src/elflint.c +@@ -799,7 +799,8 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"), + && strcmp (name, "__fini_array_end") != 0 + && strcmp (name, "__bss_start") != 0 + && strcmp (name, "__bss_start__") != 0 +- && strcmp (name, "__TMC_END__") != 0)) ++ && strcmp (name, "__TMC_END__") != 0 ++ && strcmp (name, ".TOC.") != 0)) + ERROR (gettext ("\ + section [%2d] '%s': symbol %zu: st_value out of bounds\n"), + idx, section_name (ebl, idx), cnt); diff --git a/elfutils.spec b/elfutils.spec index d7fad74..9790611 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 4 +%global baserelease 5 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -47,6 +47,9 @@ Source: %{?source_url}%{name}-%{version}.tar.bz2 Patch1: %{?source_url}elfutils-portability.patch Patch2: elfutils-aarch64-user_regs_struct.patch Patch3: elfutils-0.159-argp-attach.patch +Patch4: elfutils-0.159-aarch64-bool-ret.patch +Patch5: elfutils-0.159-elf-h.patch +Patch6: elfutils-0.159-ppc64le-elfv2-abi.patch %if !%{compat} Release: %{baserelease}%{?dist} @@ -211,6 +214,9 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %patch2 -p1 -b .aa64~1 %patch3 -p1 -b .argp-attach +%patch4 -p1 -b .aarch64-ret-bool +%patch5 -p1 -b .elf-h +%patch6 -p1 -b .ppc64le-elfv2-abi find . -name \*.sh ! -perm -0100 -print | xargs chmod +x @@ -333,6 +339,11 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Fri Jul 4 2014 Mark Wielaard - 0.159-5 +- Add elfutils-0.159-aarch64-bool-ret.patch +- Add elfutils-0.159-elf-h.patch +- Add elfutils-0.159-ppc64le-elfv2-abi.patch (#1110249) + * Tue Jun 10 2014 Mark Wielaard - 0.159-4 - Add elfutils-0.159-argp-attach.patch (#1107654) From 77215a9ded63c8317650a0ea08994fa8afad0f6e Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Sat, 12 Jul 2014 10:38:00 -0400 Subject: [PATCH 06/11] fix license handling --- elfutils.spec | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/elfutils.spec b/elfutils.spec index 9790611..d46d37f 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 5 +%global baserelease 6 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -275,7 +275,9 @@ rm -rf ${RPM_BUILD_ROOT} %files %defattr(-,root,root) -%doc COPYING COPYING-GPLV2 COPYING-LGPLV3 README TODO CONTRIBUTING +%{!?_licensedir:%global license %%doc} +%license COPYING COPYING-GPLV2 COPYING-LGPLV3 +%doc README TODO CONTRIBUTING %{_bindir}/eu-addr2line %{_bindir}/eu-ar %{_bindir}/eu-elfcmp @@ -295,6 +297,8 @@ rm -rf ${RPM_BUILD_ROOT} %files libs %defattr(-,root,root) +%{!?_licensedir:%global license %%doc} +%license COPYING-GPLV2 COPYING-LGPLV3 %{_libdir}/libasm-%{version}.so %{_libdir}/libasm.so.* %{_libdir}/libdw-%{version}.so @@ -324,6 +328,8 @@ rm -rf ${RPM_BUILD_ROOT} %files -f %{name}.lang libelf %defattr(-,root,root) +%{!?_licensedir:%global license %%doc} +%license COPYING-GPLV2 COPYING-LGPLV3 %{_libdir}/libelf-%{version}.so %{_libdir}/libelf.so.* @@ -339,6 +345,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Sat Jul 12 2014 Tom Callaway - 0.159-6 +- fix license handling + * Fri Jul 4 2014 Mark Wielaard - 0.159-5 - Add elfutils-0.159-aarch64-bool-ret.patch - Add elfutils-0.159-elf-h.patch From 7e31ec20e15000ab20d9fe739288876afe28446f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Jul 2014 15:57:24 +0200 Subject: [PATCH 07/11] 0.159-7 Add configure check to elfutils-aarch64-user_regs_struct.patch. --- elfutils-aarch64-user_regs_struct.patch | 181 +++++++++++++++++++++++- elfutils.spec | 5 +- 2 files changed, 180 insertions(+), 6 deletions(-) diff --git a/elfutils-aarch64-user_regs_struct.patch b/elfutils-aarch64-user_regs_struct.patch index 38240bc..4a8b7b0 100644 --- a/elfutils-aarch64-user_regs_struct.patch +++ b/elfutils-aarch64-user_regs_struct.patch @@ -1,8 +1,42 @@ +commit 5df2dc63e96808afb1602d4338e30dbca560a656 +Author: Kyle McMartin +Date: Mon Jun 9 21:06:26 2014 +0200 + + aarch64: use defined register structures + + glibc now supplies these (compatible) structs instead of including the + kernel's header, so let's use them. Annoyingly this will + cause new elfutils to FTBFS on old glibc, and vice versa. So include a + new configure check for the new struct names and use the old ones if + they are not avilable. + + Signed-off-by: Kyle McMartin + Signed-off-by: Mark Wielaard + diff --git a/backends/aarch64_initreg.c b/backends/aarch64_initreg.c -index 2492d56..8d68a6e 100644 +index 2492d56..9706205 100644 --- a/backends/aarch64_initreg.c +++ b/backends/aarch64_initreg.c -@@ -51,7 +51,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), +@@ -1,5 +1,5 @@ + /* Fetch live process registers from TID. +- Copyright (C) 2013 Red Hat, Inc. ++ Copyright (C) 2013, 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify +@@ -36,6 +36,11 @@ + # include + # include + # include ++/* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ ++# ifndef HAVE_SYS_USER_REGS ++# define user_regs_struct user_pt_regs ++# define user_fpsimd_struct user_fpsimd_state ++# endif + #endif + + #define BACKEND aarch64_ +@@ -51,7 +56,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), #else /* __aarch64__ */ /* General registers. */ @@ -11,7 +45,7 @@ index 2492d56..8d68a6e 100644 struct iovec iovec; iovec.iov_base = &gregs; iovec.iov_len = sizeof (gregs); -@@ -69,7 +69,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), +@@ -69,7 +74,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), /* ELR cannot be found. */ /* FP registers (only 64bits are used). */ @@ -21,10 +55,21 @@ index 2492d56..8d68a6e 100644 iovec.iov_len = sizeof (fregs); if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec) != 0) diff --git a/backends/arm_initreg.c b/backends/arm_initreg.c -index 5837383..1edf62b 100644 +index 5837383..a0a9be9 100644 --- a/backends/arm_initreg.c +++ b/backends/arm_initreg.c -@@ -67,7 +67,7 @@ arm_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), +@@ -40,6 +40,10 @@ + # include + # include + # include ++/* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ ++# ifndef HAVE_SYS_USER_REGS ++# define user_regs_struct user_pt_regs ++# endif + #endif + + #define BACKEND arm_ +@@ -67,7 +71,7 @@ arm_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), #elif defined __aarch64__ /* Compat mode: arm compatible code running on aarch64 */ int i; @@ -33,3 +78,129 @@ index 5837383..1edf62b 100644 struct iovec iovec; iovec.iov_base = &gregs; iovec.iov_len = sizeof (gregs); +diff --git a/configure.ac b/configure.ac +index 1d79597..f9c3c30 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -301,6 +301,19 @@ eu_version=$(( (eu_version + 999) / 1000 )) + + AC_CHECK_SIZEOF(long) + ++# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead ++# of the user_regs_struct from sys/user.h. They are structurally the same ++# but we get either one or the other. ++AC_CHECK_TYPE([struct user_regs_struct], ++ [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no], ++ [[#include ] ++ [#include ] ++ [#include ]]) ++if test "$sys_user_has_user_regs" = "yes"; then ++ AC_DEFINE(HAVE_SYS_USER_REGS, 1, ++ [Define to 1 if defines struct user_regs_struct]) ++fi ++ + # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. + # Likewise in a 32-bit build on a host where $CC -m64 works. + utrace_BIARCH +diff -ur elfutils-0.159.orig/configure elfutils-0.159/configure +--- elfutils-0.159.orig/configure 2014-07-18 14:30:42.842641862 +0200 ++++ elfutils-0.159/configure 2014-07-18 14:31:24.142166792 +0200 +@@ -1939,6 +1939,60 @@ + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + + } # ac_fn_c_check_header_compile ++ ++# ac_fn_c_check_type LINENO TYPE VAR INCLUDES ++# ------------------------------------------- ++# Tests whether TYPE exists after having included INCLUDES, setting cache ++# variable VAR accordingly. ++ac_fn_c_check_type () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 ++$as_echo_n "checking for $2... " >&6; } ++if eval \${$3+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ eval "$3=no" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++if (sizeof ($2)) ++ return 0; ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++if (sizeof (($2))) ++ return 0; ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ++else ++ eval "$3=yes" ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++eval ac_res=\$$3 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ ++} # ac_fn_c_check_type + cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. +@@ -6233,6 +6287,25 @@ + + + ++# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead ++# of the user_regs_struct from sys/user.h. They are structurally the same ++# but we get either one or the other. ++ac_fn_c_check_type "$LINENO" "struct user_regs_struct" "ac_cv_type_struct_user_regs_struct" "#include ++ #include ++ #include ++" ++if test "x$ac_cv_type_struct_user_regs_struct" = xyes; then : ++ sys_user_has_user_regs=yes ++else ++ sys_user_has_user_regs=no ++fi ++ ++if test "$sys_user_has_user_regs" = "yes"; then ++ ++$as_echo "#define HAVE_SYS_USER_REGS 1" >>confdefs.h ++ ++fi ++ + # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. + # Likewise in a 32-bit build on a host where $CC -m64 works. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking $CC option for 32-bit word size" >&5 +--- elfutils-0.159.orig/config.h.in 2014-07-18 14:30:42.813641492 +0200 ++++ elfutils-0.159/config.h.in 2014-07-18 15:19:18.000000000 +0200 +@@ -27,6 +27,9 @@ + /* Define to 1 if you have the header file. */ + #undef HAVE_SYS_TYPES_H + ++/* Define to 1 if defines struct user_regs_struct */ ++#undef HAVE_SYS_USER_REGS ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_UNISTD_H + diff --git a/elfutils.spec b/elfutils.spec index d46d37f..60cfd48 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 6 +%global baserelease 7 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -345,6 +345,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Fri Jul 18 2014 Mark Wielaard - 0.159-7 +- Add configure check to elfutils-aarch64-user_regs_struct.patch. + * Sat Jul 12 2014 Tom Callaway - 0.159-6 - fix license handling From 424774223cefe678a38803ec308a020ae2d3414f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 28 Jul 2014 23:50:58 +0200 Subject: [PATCH 08/11] 0.159-8 - Add elfutils-0.159-report_r_debug.patch (#1112610) --- elfutils-0.159-report_r_debug.patch | 50 +++++++++++++++++++++++++++++ elfutils.spec | 7 +++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 elfutils-0.159-report_r_debug.patch diff --git a/elfutils-0.159-report_r_debug.patch b/elfutils-0.159-report_r_debug.patch new file mode 100644 index 0000000..b02e7c6 --- /dev/null +++ b/elfutils-0.159-report_r_debug.patch @@ -0,0 +1,50 @@ +commit 475849fdb25265706772905b856cd7028c566a71 +Author: Jan Kratochvil +Date: Thu Jul 24 20:47:17 2014 +0200 + + Fix report_r_debug for prelinked libraries + + Signed-off-by: Jan Kratochvil + +diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c +index 2913d9f..272f89b 100644 +--- a/libdwfl/link_map.c ++++ b/libdwfl/link_map.c +@@ -321,7 +321,11 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, + if (read_addrs (next, 4)) + return release_buffer (-1); + +- GElf_Addr l_addr = addrs[0]; ++ /* Unused: l_addr is the difference between the address in memory ++ and the ELF file when the core was created. We need to ++ recalculate the difference below because the ELF file we use ++ might be differently pre-linked. */ ++ // GElf_Addr l_addr = addrs[0]; + GElf_Addr l_name = addrs[1]; + GElf_Addr l_ld = addrs[2]; + next = addrs[3]; +@@ -432,11 +436,14 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, + + if (valid) + { ++ // It is like l_addr but it handles differently prelinked ++ // files at core dumping vs. core loading time. ++ GElf_Addr base = l_ld - elf_dynamic_vaddr; + if (r_debug_info_module == NULL) + { + // XXX hook for sysroot + mod = __libdwfl_report_elf (dwfl, basename (name), +- name, fd, elf, l_addr, ++ name, fd, elf, base, + true, true); + if (mod != NULL) + { +@@ -444,7 +451,7 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, + fd = -1; + } + } +- else if (__libdwfl_elf_address_range (elf, l_addr, true, ++ else if (__libdwfl_elf_address_range (elf, base, true, + true, NULL, NULL, + &r_debug_info_module->start, + &r_debug_info_module->end, diff --git a/elfutils.spec b/elfutils.spec index 60cfd48..6ddaffa 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 7 +%global baserelease 8 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -50,6 +50,7 @@ Patch3: elfutils-0.159-argp-attach.patch Patch4: elfutils-0.159-aarch64-bool-ret.patch Patch5: elfutils-0.159-elf-h.patch Patch6: elfutils-0.159-ppc64le-elfv2-abi.patch +Patch7: elfutils-0.159-report_r_debug.patch %if !%{compat} Release: %{baserelease}%{?dist} @@ -217,6 +218,7 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %patch4 -p1 -b .aarch64-ret-bool %patch5 -p1 -b .elf-h %patch6 -p1 -b .ppc64le-elfv2-abi +%patch7 -p1 -b .report_r_debug find . -name \*.sh ! -perm -0100 -print | xargs chmod +x @@ -345,6 +347,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Mon Jul 28 2014 Mark Wielaard - 0.159-8 +- Add elfutils-0.159-report_r_debug.patch (#1112610) + * Fri Jul 18 2014 Mark Wielaard - 0.159-7 - Add configure check to elfutils-aarch64-user_regs_struct.patch. From 22078585e9ea0e7bc3d5cb8c5729af3b0c3d527c Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sat, 16 Aug 2014 10:34:57 +0000 Subject: [PATCH 09/11] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild --- elfutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/elfutils.spec b/elfutils.spec index 6ddaffa..a0e73a9 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 8 +%global baserelease 9 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -347,6 +347,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Sat Aug 16 2014 Fedora Release Engineering - 0.159-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + * Mon Jul 28 2014 Mark Wielaard - 0.159-8 - Add elfutils-0.159-report_r_debug.patch (#1112610) From f586210c4cd0d10dac2ee271f724c0ed67904ebc Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 16 Aug 2014 12:58:57 +0200 Subject: [PATCH 10/11] 0.159-10 Add elfutils-0.159-ko_xz.patch --- elfutils-0.159-ko_xz.patch | 24 ++++++++++++++++++++++++ elfutils.spec | 7 ++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 elfutils-0.159-ko_xz.patch diff --git a/elfutils-0.159-ko_xz.patch b/elfutils-0.159-ko_xz.patch new file mode 100644 index 0000000..f5795f2 --- /dev/null +++ b/elfutils-0.159-ko_xz.patch @@ -0,0 +1,24 @@ +Subject: [PATCH] libdwfl: Handle LZMA .ko.xz compressed kernel modules. + +Linux kernel modules can not just be compressed with gz and bz2, but also +with xz. + +Signed-off-by: Mark Wielaard + +diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c +index 1ad7d2f..e4065d8 100644 +--- a/libdwfl/linux-kernel-modules.c ++++ b/libdwfl/linux-kernel-modules.c +@@ -302,6 +302,9 @@ check_suffix (const FTSENT *f, size_t namelen) + #if USE_BZLIB + TRY (".ko.bz2"); + #endif ++#if USE_LZMA ++ TRY (".ko.xz"); ++#endif + + return 0; + +-- +1.8.3.1 + diff --git a/elfutils.spec b/elfutils.spec index a0e73a9..750c9dd 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.159 -%global baserelease 9 +%global baserelease 10 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -51,6 +51,7 @@ Patch4: elfutils-0.159-aarch64-bool-ret.patch Patch5: elfutils-0.159-elf-h.patch Patch6: elfutils-0.159-ppc64le-elfv2-abi.patch Patch7: elfutils-0.159-report_r_debug.patch +Patch8: elfutils-0.159-ko_xz.patch %if !%{compat} Release: %{baserelease}%{?dist} @@ -219,6 +220,7 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %patch5 -p1 -b .elf-h %patch6 -p1 -b .ppc64le-elfv2-abi %patch7 -p1 -b .report_r_debug +%patch8 -p1 -b .ko_xz find . -name \*.sh ! -perm -0100 -print | xargs chmod +x @@ -347,6 +349,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Sat Aug 16 2014 Mark Wielaard - 0.159-10 +- Add elfutils-0.159-ko_xz.patch + * Sat Aug 16 2014 Fedora Release Engineering - 0.159-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild From c8523f8a3b5b3ed1f3a61b48a7cbf340389d2bba Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 27 Aug 2014 12:05:19 +0200 Subject: [PATCH 11/11] Update to 0.160. --- .gitignore | 6 +- elfutils-0.159-aarch64-bool-ret.patch | 23 -- elfutils-0.159-argp-attach.patch | 359 ------------------------ elfutils-0.159-elf-h.patch | 70 ----- elfutils-0.159-ko_xz.patch | 24 -- elfutils-0.159-ppc64le-elfv2-abi.patch | 99 ------- elfutils-0.159-report_r_debug.patch | 50 ---- elfutils-aarch64-user_regs_struct.patch | 206 -------------- elfutils-portability.patch | 88 +++--- elfutils.spec | 30 +- sources | 2 +- 11 files changed, 59 insertions(+), 898 deletions(-) delete mode 100644 elfutils-0.159-aarch64-bool-ret.patch delete mode 100644 elfutils-0.159-argp-attach.patch delete mode 100644 elfutils-0.159-elf-h.patch delete mode 100644 elfutils-0.159-ko_xz.patch delete mode 100644 elfutils-0.159-ppc64le-elfv2-abi.patch delete mode 100644 elfutils-0.159-report_r_debug.patch delete mode 100644 elfutils-aarch64-user_regs_struct.patch diff --git a/.gitignore b/.gitignore index 6a82bc6..720bb73 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,3 @@ -/elfutils-0.156.tar.bz2 -/elfutils-0.157.tar.bz2 -/funcretval_test_aarch64.bz2 -/hello_aarch64.ko.bz2 -/testfile_aarch64_core.bz2 /elfutils-0.158.tar.bz2 /elfutils-0.159.tar.bz2 +/elfutils-0.160.tar.bz2 diff --git a/elfutils-0.159-aarch64-bool-ret.patch b/elfutils-0.159-aarch64-bool-ret.patch deleted file mode 100644 index 959baee..0000000 --- a/elfutils-0.159-aarch64-bool-ret.patch +++ /dev/null @@ -1,23 +0,0 @@ -commit 5e9668ccaf3d34567b313b13327ff9b31e4e5ba6 -Author: Mark Wielaard -Date: Fri Jul 4 13:26:12 2014 +0200 - - backends: aarch64_return_value_location should handle DW_ATE_boolean. - - Found with run-native-test.sh om debian arm64. - http://bugs.debian.org/753552 - - Signed-off-by: Mark Wielaard - -diff --git a/backends/aarch64_retval.c b/backends/aarch64_retval.c -index 0ed7d56..68de307 100644 ---- a/backends/aarch64_retval.c -+++ b/backends/aarch64_retval.c -@@ -357,6 +357,7 @@ aarch64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) - size of the argument is less than or equal to 8 bytes - [...] the argument is copied to the least significant - bits in x[NGRN]. */ -+ case DW_ATE_boolean: - case DW_ATE_signed: - case DW_ATE_unsigned: - case DW_ATE_unsigned_char: diff --git a/elfutils-0.159-argp-attach.patch b/elfutils-0.159-argp-attach.patch deleted file mode 100644 index 8db0540..0000000 --- a/elfutils-0.159-argp-attach.patch +++ /dev/null @@ -1,359 +0,0 @@ -commit 68b1afa36d2389c4f2fb526d0b134e5a3c68dedb -Author: Mark Wielaard -Date: Tue Jun 10 15:09:23 2014 +0200 - - libdwfl: dwfl_standard_argp should not fail when not able to attach Dwfl. - - As pointed out in https://bugzilla.redhat.com/show_bug.cgi?id=1107654 - commit 191080 introduced a thinko that caused dwfl_standard_argp - to fail if the Dwfl couldn't be attached. Instead of generating a warning - as the comment intended, the failure would be fatal. But even warning - about dwfl_core_file_attach () or dwfl_linux_proc_attach () failing - would be a mistake. The caller/user might not be interested in such - a non-fatal issue. So just ignore if the call failed for whatever reason. - If the caller is interested in warning up front about this issue, then - dwfl_pid () should be called to check the Dwfl is attached. Things should - work just fine for anything that doesn't call any of the dwfl_state related - functions. - - Signed-off-by: Mark Wielaard - -diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c -index 8d2bc6a..42b7e78 100644 ---- a/libdwfl/argp-std.c -+++ b/libdwfl/argp-std.c -@@ -171,10 +171,9 @@ parse_opt (int key, char *arg, struct argp_state *state) - if (result != 0) - return fail (dwfl, result, arg); - -- result = INTUSE(dwfl_linux_proc_attach) (dwfl, atoi (arg), false); -- if (result != 0) -- /* Non-fatal to not be able to attach to process. */ -- failure (dwfl, result, _("cannot attach to process")); -+ /* Non-fatal to not be able to attach to process, ignore error. */ -+ INTUSE(dwfl_linux_proc_attach) (dwfl, atoi (arg), false); -+ - opt->dwfl = dwfl; - } - else -@@ -301,10 +300,8 @@ parse_opt (int key, char *arg, struct argp_state *state) - return fail (dwfl, result, opt->core); - } - -- result = INTUSE(dwfl_core_file_attach) (dwfl, core); -- if (result < 0) -- /* Non-fatal to not be able to attach to core. */ -- failure (dwfl, result, _("cannot attach to core")); -+ /* Non-fatal to not be able to attach to core, ignore error. */ -+ INTUSE(dwfl_core_file_attach) (dwfl, core); - - /* From now we leak FD and CORE. */ - -commit 14beac3b6f22b8d7a054980f74c4f8d33b969fc4 -Author: Mark Wielaard -Date: Wed Jun 11 15:14:23 2014 +0200 - - libdwfl: Record dwfl_attach_state error and return it on failure. - - When dwfl_attach_state fails functions that need the process state should - return the error that caused the attach to fail. Use this in the backtrace - test to signal any attach failure. This makes sure that architectures that - don't provide unwinder support get properly detected (and the tests SKIPs) - Also don't assert when trying to attach a non-core ELF file, but return an - error to indicate failure. - - Signed-off-by: Mark Wielaard - -diff --git a/libdwfl/dwfl_frame.c b/libdwfl/dwfl_frame.c -index fd0b9ae..f6f86c0 100644 ---- a/libdwfl/dwfl_frame.c -+++ b/libdwfl/dwfl_frame.c -@@ -117,6 +117,7 @@ __libdwfl_process_free (Dwfl_Process *process) - if (process->ebl_close) - ebl_closebackend (process->ebl); - free (process); -+ dwfl->attacherr = DWFL_E_NOERROR; - } - - /* Allocate new Dwfl_Process for DWFL. */ -@@ -134,17 +135,24 @@ bool - dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, - const Dwfl_Thread_Callbacks *thread_callbacks, void *arg) - { -- if (thread_callbacks == NULL || thread_callbacks->next_thread == NULL -- || thread_callbacks->set_initial_registers == NULL) -+ if (dwfl->process != NULL) - { -- __libdwfl_seterrno (DWFL_E_INVALID_ARGUMENT); -+ __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); - return false; - } -- if (dwfl->process != NULL) -+ -+ /* Reset any previous error, we are just going to try again. */ -+ dwfl->attacherr = DWFL_E_NOERROR; -+ if (thread_callbacks == NULL || thread_callbacks->next_thread == NULL -+ || thread_callbacks->set_initial_registers == NULL) - { -- __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); -+ dwfl->attacherr = DWFL_E_INVALID_ARGUMENT; -+ fail: -+ dwfl->attacherr = __libdwfl_canon_error (dwfl->attacherr); -+ __libdwfl_seterrno (dwfl->attacherr); - return false; - } -+ - Ebl *ebl; - bool ebl_close; - if (elf != NULL) -@@ -180,8 +188,8 @@ dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, - if (ebl == NULL) - { - /* Not identified EBL from any of the modules. */ -- __libdwfl_seterrno (DWFL_E_PROCESS_NO_ARCH); -- return false; -+ dwfl->attacherr = DWFL_E_PROCESS_NO_ARCH; -+ goto fail; - } - process_alloc (dwfl); - Dwfl_Process *process = dwfl->process; -@@ -189,8 +197,8 @@ dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, - { - if (ebl_close) - ebl_closebackend (ebl); -- __libdwfl_seterrno (DWFL_E_NOMEM); -- return false; -+ dwfl->attacherr = DWFL_E_NOMEM; -+ goto fail; - } - process->ebl = ebl; - process->ebl_close = ebl_close; -@@ -204,6 +212,12 @@ INTDEF(dwfl_attach_state) - pid_t - dwfl_pid (Dwfl *dwfl) - { -+ if (dwfl->attacherr != DWFL_E_NOERROR) -+ { -+ __libdwfl_seterrno (dwfl->attacherr); -+ return -1; -+ } -+ - if (dwfl->process == NULL) - { - __libdwfl_seterrno (DWFL_E_NO_ATTACH_STATE); -@@ -238,6 +252,12 @@ int - dwfl_getthreads (Dwfl *dwfl, int (*callback) (Dwfl_Thread *thread, void *arg), - void *arg) - { -+ if (dwfl->attacherr != DWFL_E_NOERROR) -+ { -+ __libdwfl_seterrno (dwfl->attacherr); -+ return -1; -+ } -+ - Dwfl_Process *process = dwfl->process; - if (process == NULL) - { -@@ -309,6 +329,12 @@ getthread (Dwfl *dwfl, pid_t tid, - int (*callback) (Dwfl_Thread *thread, void *arg), - void *arg) - { -+ if (dwfl->attacherr != DWFL_E_NOERROR) -+ { -+ __libdwfl_seterrno (dwfl->attacherr); -+ return -1; -+ } -+ - Dwfl_Process *process = dwfl->process; - if (process == NULL) - { -diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h -index 9b03d8a..30c0f8a 100644 ---- a/libdwfl/libdwflP.h -+++ b/libdwfl/libdwflP.h -@@ -91,7 +91,8 @@ typedef struct Dwfl_Process Dwfl_Process; - DWFL_ERROR (ATTACH_STATE_CONFLICT, N_("Dwfl already has attached state")) \ - DWFL_ERROR (NO_ATTACH_STATE, N_("Dwfl has no attached state")) \ - DWFL_ERROR (NO_UNWIND, N_("Unwinding not supported for this architecture")) \ -- DWFL_ERROR (INVALID_ARGUMENT, N_("Invalid argument")) -+ DWFL_ERROR (INVALID_ARGUMENT, N_("Invalid argument")) \ -+ DWFL_ERROR (NO_CORE_FILE, N_("Not an ET_CORE ELF file")) - - #define DWFL_ERROR(name, text) DWFL_E_##name, - typedef enum { DWFL_ERRORS DWFL_E_NUM } Dwfl_Error; -@@ -110,6 +111,7 @@ struct Dwfl - Dwfl_Module *modulelist; /* List in order used by full traversals. */ - - Dwfl_Process *process; -+ Dwfl_Error attacherr; /* Previous error attaching process. */ - - GElf_Addr offline_next_address; - -diff --git a/libdwfl/linux-core-attach.c b/libdwfl/linux-core-attach.c -index 1002788..7ef3f25 100644 ---- a/libdwfl/linux-core-attach.c -+++ b/libdwfl/linux-core-attach.c -@@ -309,33 +309,41 @@ static const Dwfl_Thread_Callbacks core_thread_callbacks = - int - dwfl_core_file_attach (Dwfl *dwfl, Elf *core) - { -+ Dwfl_Error err = DWFL_E_NOERROR; - Ebl *ebl = ebl_openbackend (core); - if (ebl == NULL) - { -- __libdwfl_seterrno (DWFL_E_LIBEBL); -+ err = DWFL_E_LIBEBL; -+ fail_err: -+ if (dwfl->process == NULL && dwfl->attacherr == DWFL_E_NOERROR) -+ dwfl->attacherr = __libdwfl_canon_error (err); -+ __libdwfl_seterrno (err); - return -1; - } - size_t nregs = ebl_frame_nregs (ebl); - if (nregs == 0) - { -- __libdwfl_seterrno (DWFL_E_NO_UNWIND); -+ err = DWFL_E_NO_UNWIND; -+ fail: - ebl_closebackend (ebl); -- return -1; -+ goto fail_err; - } - GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (core, &ehdr_mem); - if (ehdr == NULL) - { -- __libdwfl_seterrno (DWFL_E_LIBELF); -- ebl_closebackend (ebl); -- return -1; -+ err = DWFL_E_LIBELF; -+ goto fail; -+ } -+ if (ehdr->e_type != ET_CORE) -+ { -+ err = DWFL_E_NO_CORE_FILE; -+ goto fail; - } -- assert (ehdr->e_type == ET_CORE); - size_t phnum; - if (elf_getphdrnum (core, &phnum) < 0) - { -- __libdwfl_seterrno (DWFL_E_LIBELF); -- ebl_closebackend (ebl); -- return -1; -+ err = DWFL_E_LIBELF; -+ goto fail; - } - pid_t pid = -1; - Elf_Data *note_data = NULL; -@@ -351,8 +359,8 @@ dwfl_core_file_attach (Dwfl *dwfl, Elf *core) - } - if (note_data == NULL) - { -- ebl_closebackend (ebl); -- return DWFL_E_LIBELF; -+ err = DWFL_E_LIBELF; -+ goto fail; - } - size_t offset = 0; - GElf_Nhdr nhdr; -@@ -394,16 +402,14 @@ dwfl_core_file_attach (Dwfl *dwfl, Elf *core) - if (pid == -1) - { - /* No valid NT_PRPSINFO recognized in this CORE. */ -- __libdwfl_seterrno (DWFL_E_BADELF); -- ebl_closebackend (ebl); -- return -1; -+ err = DWFL_E_BADELF; -+ goto fail; - } - struct core_arg *core_arg = malloc (sizeof *core_arg); - if (core_arg == NULL) - { -- __libdwfl_seterrno (DWFL_E_NOMEM); -- ebl_closebackend (ebl); -- return -1; -+ err = DWFL_E_NOMEM; -+ goto fail; - } - core_arg->core = core; - core_arg->note_data = note_data; -diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c -index 8aee721..d60955e 100644 ---- a/libdwfl/linux-pid-attach.c -+++ b/libdwfl/linux-pid-attach.c -@@ -290,13 +290,23 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped) - { - char buffer[36]; - FILE *procfile; -+ int err = 0; /* The errno to return and set for dwfl->attcherr. */ - - /* Make sure to report the actual PID (thread group leader) to - dwfl_attach_state. */ - snprintf (buffer, sizeof (buffer), "/proc/%ld/status", (long) pid); - procfile = fopen (buffer, "r"); - if (procfile == NULL) -- return errno; -+ { -+ err = errno; -+ fail: -+ if (dwfl->process == NULL && dwfl->attacherr == DWFL_E_NOERROR) -+ { -+ errno = err; -+ dwfl->attacherr = __libdwfl_canon_error (DWFL_E_ERRNO); -+ } -+ return err; -+ } - - char *line = NULL; - size_t linelen = 0; -@@ -317,19 +327,26 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped) - fclose (procfile); - - if (pid == 0) -- return ESRCH; -+ { -+ err = ESRCH; -+ goto fail; -+ } - - char dirname[64]; - int i = snprintf (dirname, sizeof (dirname), "/proc/%ld/task", (long) pid); - assert (i > 0 && i < (ssize_t) sizeof (dirname) - 1); - DIR *dir = opendir (dirname); - if (dir == NULL) -- return errno; -+ { -+ err = errno; -+ goto fail; -+ } - struct __libdwfl_pid_arg *pid_arg = malloc (sizeof *pid_arg); - if (pid_arg == NULL) - { - closedir (dir); -- return ENOMEM; -+ err = ENOMEM; -+ goto fail; - } - pid_arg->dir = dir; - pid_arg->tid_attached = 0; -diff --git a/tests/backtrace.c b/tests/backtrace.c -index 1a4709b..ce0bd17 100644 ---- a/tests/backtrace.c -+++ b/tests/backtrace.c -@@ -1,5 +1,5 @@ - /* Test program for unwinding of frames. -- Copyright (C) 2013 Red Hat, Inc. -+ Copyright (C) 2013, 2014 Red Hat, Inc. - This file is part of elfutils. - - This file is free software; you can redistribute it and/or modify -@@ -459,6 +459,9 @@ main (int argc __attribute__ ((unused)), char **argv) - }; - (void) argp_parse (&argp, argc, argv, 0, NULL, &dwfl); - assert (dwfl != NULL); -+ /* We want to make sure the dwfl was properly attached. */ -+ if (dwfl_pid (dwfl) < 0) -+ error (2, 0, "dwfl_pid: %s", dwfl_errmsg (-1)); - dump (dwfl); - dwfl_end (dwfl); - return 0; diff --git a/elfutils-0.159-elf-h.patch b/elfutils-0.159-elf-h.patch deleted file mode 100644 index 7376d87..0000000 --- a/elfutils-0.159-elf-h.patch +++ /dev/null @@ -1,70 +0,0 @@ -commit 16e2d351bf31d0ce09ce9632ff196cbd973b656b -Author: Mark Wielaard -Date: Fri Jul 4 13:39:18 2014 +0200 - - Update elf.h from glibc. - - Includes new bits needed for ppc64le ELFv2 abi. - https://bugzilla.redhat.com/show_bug.cgi?id=1110249 - - Signed-off-by: Mark Wielaard - -diff --git a/libelf/elf.h b/libelf/elf.h -index a05ea3b..40e87b2 100644 ---- a/libelf/elf.h -+++ b/libelf/elf.h -@@ -1,5 +1,5 @@ - /* This file defines standard ELF types, structures, and macros. -- Copyright (C) 1995-2013 Free Software Foundation, Inc. -+ Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -2252,6 +2252,17 @@ typedef Elf32_Addr Elf32_Conflict; - #define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */ - #define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */ - #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */ -+#define R_PPC64_TLSGD 107 /* none (sym+add)@tlsgd */ -+#define R_PPC64_TLSLD 108 /* none (sym+add)@tlsld */ -+#define R_PPC64_TOCSAVE 109 /* none */ -+ -+/* Added when HA and HI relocs were changed to report overflows. */ -+#define R_PPC64_ADDR16_HIGH 110 -+#define R_PPC64_ADDR16_HIGHA 111 -+#define R_PPC64_TPREL16_HIGH 112 -+#define R_PPC64_TPREL16_HIGHA 113 -+#define R_PPC64_DTPREL16_HIGH 114 -+#define R_PPC64_DTPREL16_HIGHA 115 - - /* GNU extension to support local ifunc. */ - #define R_PPC64_JMP_IREL 247 -@@ -2261,12 +2272,29 @@ typedef Elf32_Addr Elf32_Conflict; - #define R_PPC64_REL16_HI 251 /* half16 (sym+add-.)@h */ - #define R_PPC64_REL16_HA 252 /* half16 (sym+add-.)@ha */ - -+/* e_flags bits specifying ABI. -+ 1 for original function descriptor using ABI, -+ 2 for revised ABI without function descriptors, -+ 0 for unspecified or not using any features affected by the differences. */ -+#define EF_PPC64_ABI 3 -+ - /* PowerPC64 specific values for the Dyn d_tag field. */ - #define DT_PPC64_GLINK (DT_LOPROC + 0) - #define DT_PPC64_OPD (DT_LOPROC + 1) - #define DT_PPC64_OPDSZ (DT_LOPROC + 2) -+#define DT_PPC64_OPT (DT_LOPROC + 3) - #define DT_PPC64_NUM 3 - -+/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry. */ -+#define PPC64_OPT_TLS 1 -+#define PPC64_OPT_MULTI_TOC 2 -+ -+/* PowerPC64 specific values for the Elf64_Sym st_other field. */ -+#define STO_PPC64_LOCAL_BIT 5 -+#define STO_PPC64_LOCAL_MASK (7 << STO_PPC64_LOCAL_BIT) -+#define PPC64_LOCAL_ENTRY_OFFSET(other) \ -+ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2) -+ - - /* ARM specific declarations */ - diff --git a/elfutils-0.159-ko_xz.patch b/elfutils-0.159-ko_xz.patch deleted file mode 100644 index f5795f2..0000000 --- a/elfutils-0.159-ko_xz.patch +++ /dev/null @@ -1,24 +0,0 @@ -Subject: [PATCH] libdwfl: Handle LZMA .ko.xz compressed kernel modules. - -Linux kernel modules can not just be compressed with gz and bz2, but also -with xz. - -Signed-off-by: Mark Wielaard - -diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c -index 1ad7d2f..e4065d8 100644 ---- a/libdwfl/linux-kernel-modules.c -+++ b/libdwfl/linux-kernel-modules.c -@@ -302,6 +302,9 @@ check_suffix (const FTSENT *f, size_t namelen) - #if USE_BZLIB - TRY (".ko.bz2"); - #endif -+#if USE_LZMA -+ TRY (".ko.xz"); -+#endif - - return 0; - --- -1.8.3.1 - diff --git a/elfutils-0.159-ppc64le-elfv2-abi.patch b/elfutils-0.159-ppc64le-elfv2-abi.patch deleted file mode 100644 index 2bf1b06..0000000 --- a/elfutils-0.159-ppc64le-elfv2-abi.patch +++ /dev/null @@ -1,99 +0,0 @@ -commit a95c4ad24cf83b2b0273fee73162bf476cebec8f -Author: Mark Wielaard -Date: Fri Jul 4 14:30:48 2014 +0200 - - Add ppc64le ELFv2 abi support to backends and elflint. - - The big endian vs little endian changes are already handled by detecting - the EI_DATA data encoding. And the function descriptors are already not - used when we see there is no .opd section. This change adds new checks - for st_other bits, new relocations and recognizes DT_PPC64_OPT. - - Signed-off-by: Menanteau Guy - Signed-off-by: Mark Wielaard - -diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c -index e52231c..7ea2b23 100644 ---- a/backends/ppc64_init.c -+++ b/backends/ppc64_init.c -@@ -61,6 +61,7 @@ ppc64_init (elf, machine, eh, ehlen) - HOOK (eh, machine_flag_check); - HOOK (eh, copy_reloc_p); - HOOK (eh, check_special_symbol); -+ HOOK (eh, check_st_other_bits); - HOOK (eh, bss_plt_p); - HOOK (eh, return_value_location); - HOOK (eh, register_info); -diff --git a/backends/ppc64_reloc.def b/backends/ppc64_reloc.def -index 6366f46..3a693cf 100644 ---- a/backends/ppc64_reloc.def -+++ b/backends/ppc64_reloc.def -@@ -132,6 +132,21 @@ RELOC_TYPE (DTPREL16_HIGHER, REL) - RELOC_TYPE (DTPREL16_HIGHERA, REL) - RELOC_TYPE (DTPREL16_HIGHEST, REL) - RELOC_TYPE (DTPREL16_HIGHESTA, REL) -+RELOC_TYPE (TLSGD, REL) -+RELOC_TYPE (TLSLD, REL) -+RELOC_TYPE (TOCSAVE, REL) -+RELOC_TYPE (ADDR16_HIGH, REL) -+RELOC_TYPE (ADDR16_HIGHA, REL) -+RELOC_TYPE (TPREL16_HIGH, REL) -+RELOC_TYPE (TPREL16_HIGHA, REL) -+RELOC_TYPE (DTPREL16_HIGH, REL) -+RELOC_TYPE (DTPREL16_HIGHA, REL) -+RELOC_TYPE (JMP_IREL, REL) -+RELOC_TYPE (IRELATIVE, REL) -+RELOC_TYPE (REL16, REL) -+RELOC_TYPE (REL16_LO, REL) -+RELOC_TYPE (REL16_HI, REL) -+RELOC_TYPE (REL16_HA, REL) - - /* Notes from Alan Modra: - -diff --git a/backends/ppc64_symbol.c b/backends/ppc64_symbol.c -index 212d414..5a020d8 100644 ---- a/backends/ppc64_symbol.c -+++ b/backends/ppc64_symbol.c -@@ -72,6 +72,8 @@ ppc64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)), - return "PPC64_OPD"; - case DT_PPC64_OPDSZ: - return "PPC64_OPDSZ"; -+ case DT_PPC64_OPT: -+ return "PPC64_OPT"; - default: - break; - } -@@ -84,7 +86,8 @@ ppc64_dynamic_tag_check (int64_t tag) - { - return (tag == DT_PPC64_GLINK - || tag == DT_PPC64_OPD -- || tag == DT_PPC64_OPDSZ); -+ || tag == DT_PPC64_OPDSZ -+ || tag == DT_PPC64_OPT); - } - - -@@ -120,3 +123,9 @@ ppc64_machine_flag_check (GElf_Word flags) - { - return flags == 0 || flags == 1 || flags == 2; - } -+ -+bool -+ppc64_check_st_other_bits (unsigned char st_other) -+{ -+ return (PPC64_LOCAL_ENTRY_OFFSET (st_other) != 0); -+} -diff --git a/src/elflint.c b/src/elflint.c -index 5568c65..d6a4774 100644 ---- a/src/elflint.c -+++ b/src/elflint.c -@@ -799,7 +799,8 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"), - && strcmp (name, "__fini_array_end") != 0 - && strcmp (name, "__bss_start") != 0 - && strcmp (name, "__bss_start__") != 0 -- && strcmp (name, "__TMC_END__") != 0)) -+ && strcmp (name, "__TMC_END__") != 0 -+ && strcmp (name, ".TOC.") != 0)) - ERROR (gettext ("\ - section [%2d] '%s': symbol %zu: st_value out of bounds\n"), - idx, section_name (ebl, idx), cnt); diff --git a/elfutils-0.159-report_r_debug.patch b/elfutils-0.159-report_r_debug.patch deleted file mode 100644 index b02e7c6..0000000 --- a/elfutils-0.159-report_r_debug.patch +++ /dev/null @@ -1,50 +0,0 @@ -commit 475849fdb25265706772905b856cd7028c566a71 -Author: Jan Kratochvil -Date: Thu Jul 24 20:47:17 2014 +0200 - - Fix report_r_debug for prelinked libraries - - Signed-off-by: Jan Kratochvil - -diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c -index 2913d9f..272f89b 100644 ---- a/libdwfl/link_map.c -+++ b/libdwfl/link_map.c -@@ -321,7 +321,11 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, - if (read_addrs (next, 4)) - return release_buffer (-1); - -- GElf_Addr l_addr = addrs[0]; -+ /* Unused: l_addr is the difference between the address in memory -+ and the ELF file when the core was created. We need to -+ recalculate the difference below because the ELF file we use -+ might be differently pre-linked. */ -+ // GElf_Addr l_addr = addrs[0]; - GElf_Addr l_name = addrs[1]; - GElf_Addr l_ld = addrs[2]; - next = addrs[3]; -@@ -432,11 +436,14 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, - - if (valid) - { -+ // It is like l_addr but it handles differently prelinked -+ // files at core dumping vs. core loading time. -+ GElf_Addr base = l_ld - elf_dynamic_vaddr; - if (r_debug_info_module == NULL) - { - // XXX hook for sysroot - mod = __libdwfl_report_elf (dwfl, basename (name), -- name, fd, elf, l_addr, -+ name, fd, elf, base, - true, true); - if (mod != NULL) - { -@@ -444,7 +451,7 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, - fd = -1; - } - } -- else if (__libdwfl_elf_address_range (elf, l_addr, true, -+ else if (__libdwfl_elf_address_range (elf, base, true, - true, NULL, NULL, - &r_debug_info_module->start, - &r_debug_info_module->end, diff --git a/elfutils-aarch64-user_regs_struct.patch b/elfutils-aarch64-user_regs_struct.patch deleted file mode 100644 index 4a8b7b0..0000000 --- a/elfutils-aarch64-user_regs_struct.patch +++ /dev/null @@ -1,206 +0,0 @@ -commit 5df2dc63e96808afb1602d4338e30dbca560a656 -Author: Kyle McMartin -Date: Mon Jun 9 21:06:26 2014 +0200 - - aarch64: use defined register structures - - glibc now supplies these (compatible) structs instead of including the - kernel's header, so let's use them. Annoyingly this will - cause new elfutils to FTBFS on old glibc, and vice versa. So include a - new configure check for the new struct names and use the old ones if - they are not avilable. - - Signed-off-by: Kyle McMartin - Signed-off-by: Mark Wielaard - -diff --git a/backends/aarch64_initreg.c b/backends/aarch64_initreg.c -index 2492d56..9706205 100644 ---- a/backends/aarch64_initreg.c -+++ b/backends/aarch64_initreg.c -@@ -1,5 +1,5 @@ - /* Fetch live process registers from TID. -- Copyright (C) 2013 Red Hat, Inc. -+ Copyright (C) 2013, 2014 Red Hat, Inc. - This file is part of elfutils. - - This file is free software; you can redistribute it and/or modify -@@ -36,6 +36,11 @@ - # include - # include - # include -+/* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ -+# ifndef HAVE_SYS_USER_REGS -+# define user_regs_struct user_pt_regs -+# define user_fpsimd_struct user_fpsimd_state -+# endif - #endif - - #define BACKEND aarch64_ -@@ -51,7 +56,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), - #else /* __aarch64__ */ - - /* General registers. */ -- struct user_pt_regs gregs; -+ struct user_regs_struct gregs; - struct iovec iovec; - iovec.iov_base = &gregs; - iovec.iov_len = sizeof (gregs); -@@ -69,7 +74,7 @@ aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), - /* ELR cannot be found. */ - - /* FP registers (only 64bits are used). */ -- struct user_fpsimd_state fregs; -+ struct user_fpsimd_struct fregs; - iovec.iov_base = &fregs; - iovec.iov_len = sizeof (fregs); - if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec) != 0) -diff --git a/backends/arm_initreg.c b/backends/arm_initreg.c -index 5837383..a0a9be9 100644 ---- a/backends/arm_initreg.c -+++ b/backends/arm_initreg.c -@@ -40,6 +40,10 @@ - # include - # include - # include -+/* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ -+# ifndef HAVE_SYS_USER_REGS -+# define user_regs_struct user_pt_regs -+# endif - #endif - - #define BACKEND arm_ -@@ -67,7 +71,7 @@ arm_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), - #elif defined __aarch64__ - /* Compat mode: arm compatible code running on aarch64 */ - int i; -- struct user_pt_regs gregs; -+ struct user_regs_struct gregs; - struct iovec iovec; - iovec.iov_base = &gregs; - iovec.iov_len = sizeof (gregs); -diff --git a/configure.ac b/configure.ac -index 1d79597..f9c3c30 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -301,6 +301,19 @@ eu_version=$(( (eu_version + 999) / 1000 )) - - AC_CHECK_SIZEOF(long) - -+# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead -+# of the user_regs_struct from sys/user.h. They are structurally the same -+# but we get either one or the other. -+AC_CHECK_TYPE([struct user_regs_struct], -+ [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no], -+ [[#include ] -+ [#include ] -+ [#include ]]) -+if test "$sys_user_has_user_regs" = "yes"; then -+ AC_DEFINE(HAVE_SYS_USER_REGS, 1, -+ [Define to 1 if defines struct user_regs_struct]) -+fi -+ - # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. - # Likewise in a 32-bit build on a host where $CC -m64 works. - utrace_BIARCH -diff -ur elfutils-0.159.orig/configure elfutils-0.159/configure ---- elfutils-0.159.orig/configure 2014-07-18 14:30:42.842641862 +0200 -+++ elfutils-0.159/configure 2014-07-18 14:31:24.142166792 +0200 -@@ -1939,6 +1939,60 @@ - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_header_compile -+ -+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -+# ------------------------------------------- -+# Tests whether TYPE exists after having included INCLUDES, setting cache -+# variable VAR accordingly. -+ac_fn_c_check_type () -+{ -+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -+$as_echo_n "checking for $2... " >&6; } -+if eval \${$3+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ eval "$3=no" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+$4 -+int -+main () -+{ -+if (sizeof ($2)) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+$4 -+int -+main () -+{ -+if (sizeof (($2))) -+ return 0; -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ -+else -+ eval "$3=yes" -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+eval ac_res=\$$3 -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -+ -+} # ac_fn_c_check_type - cat >config.log <<_ACEOF - This file contains any messages produced by compilers while - running configure, to aid debugging if configure makes a mistake. -@@ -6233,6 +6287,25 @@ - - - -+# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead -+# of the user_regs_struct from sys/user.h. They are structurally the same -+# but we get either one or the other. -+ac_fn_c_check_type "$LINENO" "struct user_regs_struct" "ac_cv_type_struct_user_regs_struct" "#include -+ #include -+ #include -+" -+if test "x$ac_cv_type_struct_user_regs_struct" = xyes; then : -+ sys_user_has_user_regs=yes -+else -+ sys_user_has_user_regs=no -+fi -+ -+if test "$sys_user_has_user_regs" = "yes"; then -+ -+$as_echo "#define HAVE_SYS_USER_REGS 1" >>confdefs.h -+ -+fi -+ - # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. - # Likewise in a 32-bit build on a host where $CC -m64 works. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking $CC option for 32-bit word size" >&5 ---- elfutils-0.159.orig/config.h.in 2014-07-18 14:30:42.813641492 +0200 -+++ elfutils-0.159/config.h.in 2014-07-18 15:19:18.000000000 +0200 -@@ -27,6 +27,9 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_SYS_TYPES_H - -+/* Define to 1 if defines struct user_regs_struct */ -+#undef HAVE_SYS_USER_REGS -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_UNISTD_H - diff --git a/elfutils-portability.patch b/elfutils-portability.patch index 7a36434..44d729f 100644 --- a/elfutils-portability.patch +++ b/elfutils-portability.patch @@ -1,6 +1,6 @@ --- elfutils/backends/ChangeLog +++ elfutils/backends/ChangeLog -@@ -364,6 +364,10 @@ +@@ -413,6 +413,10 @@ * ppc_attrs.c (ppc_check_object_attribute): Handle tag GNU_Power_ABI_Struct_Return. @@ -11,7 +11,7 @@ 2008-10-04 Ulrich Drepper * i386_reloc.def: Fix entries for TLS_GOTDESC, TLS_DESC_CALL, and -@@ -691,6 +695,11 @@ +@@ -740,6 +744,11 @@ * sparc_init.c: Likewise. * x86_64_init.c: Likewise. @@ -23,7 +23,7 @@ 2005-11-19 Roland McGrath * ppc64_reloc.def: REL30 -> ADDR30. -@@ -713,6 +722,9 @@ +@@ -762,6 +771,9 @@ * Makefile.am (uninstall): Don't try to remove $(pkgincludedir). (CLEANFILES): Add libebl_$(m).so. @@ -98,7 +98,7 @@ libebl_i386.so: $(cpu_i386) --- elfutils/ChangeLog +++ elfutils/ChangeLog -@@ -148,6 +148,8 @@ +@@ -170,6 +170,8 @@ 2012-01-24 Mark Wielaard @@ -107,7 +107,7 @@ * COPYING: Fix address. Updated version from gnulib. 2012-01-23 Mark Wielaard -@@ -166,6 +168,9 @@ +@@ -188,6 +190,9 @@ 2011-10-08 Mike Frysinger @@ -117,7 +117,7 @@ * configure.ac: Fix use of AC_ARG_ENABLE to handle $enableval correctly. 2011-10-02 Ulrich Drepper -@@ -187,6 +192,10 @@ +@@ -209,6 +214,10 @@ * configure.ac (LOCALEDIR, DATADIRNAME): Removed. @@ -128,7 +128,7 @@ 2009-09-21 Ulrich Drepper * configure.ac: Update for more modern autoconf. -@@ -195,6 +204,10 @@ +@@ -217,6 +226,10 @@ * configure.ac (zip_LIBS): Check for liblzma too. @@ -139,7 +139,7 @@ 2009-04-19 Roland McGrath * configure.ac (eu_version): Round down here, not in version.h macros. -@@ -206,6 +219,8 @@ +@@ -228,6 +241,8 @@ 2009-01-23 Roland McGrath @@ -148,7 +148,7 @@ * configure.ac (zlib check): Check for gzdirect, need zlib >= 1.2.2.3. * configure.ac (__thread check): Use AC_LINK_IFELSE, in case of -@@ -286,6 +301,10 @@ +@@ -308,6 +323,10 @@ * configure.ac: Add dummy automake conditional to get dependencies for non-generic linker right. See src/Makefile.am. @@ -159,7 +159,7 @@ 2005-11-18 Roland McGrath * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New variable. -@@ -333,6 +352,17 @@ +@@ -355,6 +374,17 @@ * Makefile.am (all_SUBDIRS): Add libdwfl. * configure.ac: Write libdwfl/Makefile. @@ -179,7 +179,7 @@ * configure.ac [AH_BOTTOM] (INTDECL, _INTDECL): New macros. --- elfutils/config/ChangeLog +++ elfutils/config/ChangeLog -@@ -58,6 +58,10 @@ +@@ -62,6 +62,10 @@ * known-dwarf.awk: Use gawk. @@ -254,7 +254,7 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -@@ -99,4 +102,7 @@ +@@ -102,4 +105,7 @@ /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES @@ -298,7 +298,7 @@ --enable-tests-rpath build $ORIGIN-using rpath into tests --enable-libebl-subdir=DIR install libebl_CPU modules in $(libdir)/DIR -@@ -4674,6 +4680,130 @@ if test "x$ac_cv_c99" != xyes; then : +@@ -4728,6 +4734,130 @@ if test "x$ac_cv_c99" != xyes; then : as_fn_error $? "gcc with C99 support required" "$LINENO" 5 fi @@ -429,7 +429,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __thread support" >&5 $as_echo_n "checking for __thread support... " >&6; } if ${ac_cv_tls+:} false; then : -@@ -4710,7 +4840,13 @@ fi +@@ -4764,7 +4894,13 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 $as_echo "$ac_cv_tls" >&6; } if test "x$ac_cv_tls" != xyes; then : @@ -444,7 +444,7 @@ fi # Check whether --enable-largefile was given. -@@ -5077,6 +5213,22 @@ else +@@ -5131,6 +5267,22 @@ else fi @@ -467,7 +467,7 @@ # Check whether --enable-tests-rpath was given. if test "${enable_tests_rpath+set}" = set; then : enableval=$enable_tests_rpath; tests_use_rpath=$enableval -@@ -5800,7 +5952,7 @@ case "$eu_version" in +@@ -5854,7 +6006,7 @@ case "$eu_version" in esac # Round up to the next release API (x.y) version. @@ -476,7 +476,7 @@ ac_ext=c ac_cpp='$CPP $CPPFLAGS' -@@ -6530,6 +6682,10 @@ if test -z "${BUILD_STATIC_TRUE}" && tes +@@ -6600,6 +6752,10 @@ if test -z "${BUILD_STATIC_TRUE}" && tes as_fn_error $? "conditional \"BUILD_STATIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi @@ -807,7 +807,7 @@ $P.mnemonics) --- elfutils/libdw/ChangeLog +++ elfutils/libdw/ChangeLog -@@ -420,6 +420,10 @@ +@@ -439,6 +439,10 @@ * Makefile.am (known-dwarf.h): Run gawk on config/known-dwarf.awk. @@ -818,7 +818,7 @@ 2011-07-14 Mark Wielaard * libdw.h (dwarf_offdie): Fix documentation to mention .debug_info. -@@ -779,6 +783,10 @@ +@@ -798,6 +802,10 @@ * dwarf_hasattr_integrate.c: Integrate DW_AT_specification too. @@ -829,7 +829,7 @@ 2009-08-10 Roland McGrath * dwarf_getscopevar.c: Use dwarf_diename. -@@ -1547,6 +1555,11 @@ +@@ -1566,6 +1574,11 @@ 2005-05-31 Roland McGrath @@ -860,7 +860,7 @@ #endif --- elfutils/libdw/libdw.h +++ elfutils/libdw/libdw.h -@@ -891,7 +891,7 @@ extern Dwarf_OOM dwarf_new_oom_handler ( +@@ -915,7 +915,7 @@ extern Dwarf_OOM dwarf_new_oom_handler ( /* Inline optimizations. */ @@ -881,7 +881,7 @@ noinst_PROGRAMS = $(am__EXEEXT_1) subdir = libdw ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -295,6 +296,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -296,6 +297,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -889,7 +889,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -326,6 +328,7 @@ SHELL = @SHELL@ +@@ -327,6 +329,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -897,7 +897,7 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -387,10 +390,11 @@ top_srcdir = @top_srcdir@ +@@ -388,10 +391,11 @@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf @@ -957,7 +957,7 @@ textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi --- elfutils/libdwfl/ChangeLog +++ elfutils/libdwfl/ChangeLog -@@ -421,6 +421,21 @@ +@@ -467,6 +467,21 @@ (dwfl_module_addrsym) (i_to_symfile): New function. (dwfl_module_addrsym) (search_table): Use it. @@ -979,7 +979,7 @@ 2013-11-07 Jan Kratochvil Mark Wielaard -@@ -2186,6 +2201,11 @@ +@@ -2232,6 +2247,11 @@ 2005-07-21 Roland McGrath @@ -1027,8 +1027,8 @@ +# endif +#endif - #ifndef MIN - # define MIN(a, b) ((a) < (b) ? (a) : (b)) + #include "../libdw/memory-access.h" + --- elfutils/libdwfl/linux-pid-attach.c +++ elfutils/libdwfl/linux-pid-attach.c @@ -255,6 +255,11 @@ void @@ -1121,7 +1121,7 @@ libelf = ../libelf/libelf.so --- elfutils/libebl/ChangeLog +++ elfutils/libebl/ChangeLog -@@ -748,6 +748,11 @@ +@@ -754,6 +754,11 @@ * Makefile.am (libebl_*_so_SOURCES): Set to $(*_SRCS) so dependency tracking works right. @@ -1175,7 +1175,7 @@ textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi --- elfutils/libelf/ChangeLog +++ elfutils/libelf/ChangeLog -@@ -135,6 +135,11 @@ +@@ -139,6 +139,11 @@ * elf-knowledge.h (SECTION_STRIP_P): Remove < SHT_NUM check. @@ -1187,7 +1187,7 @@ 2011-02-26 Mark Wielaard * elf_end.c (elf_end): Call rwlock_unlock before rwlock_fini. -@@ -812,6 +817,11 @@ +@@ -816,6 +821,11 @@ * elf.h: Update from glibc. @@ -1347,7 +1347,7 @@ break; --- elfutils/src/ChangeLog +++ elfutils/src/ChangeLog -@@ -1112,8 +1112,16 @@ +@@ -1155,8 +1155,16 @@ * readelf.c (attr_callback): Use print_block only when we don't use print_ops. @@ -1364,7 +1364,7 @@ * ar.c (do_oper_extract): Use pathconf instead of statfs. 2009-08-01 Ulrich Drepper -@@ -1277,6 +1285,8 @@ +@@ -1320,6 +1328,8 @@ * readelf.c (print_debug_frame_section): Use t instead of j formats for ptrdiff_t OFFSET. @@ -1373,7 +1373,7 @@ 2009-01-21 Ulrich Drepper * elflint.c (check_program_header): Fix typo in .eh_frame_hdr section -@@ -1460,6 +1470,11 @@ +@@ -1503,6 +1513,11 @@ that matches its PT_LOAD's p_flags &~ PF_W. On sparc, PF_X really is valid in RELRO. @@ -1385,7 +1385,7 @@ 2008-02-29 Roland McGrath * readelf.c (print_attributes): Add a cast. -@@ -1711,6 +1726,8 @@ +@@ -1754,6 +1769,8 @@ * readelf.c (hex_dump): Fix rounding error in whitespace calculation. @@ -1394,7 +1394,7 @@ 2007-10-15 Roland McGrath * make-debug-archive.in: New file. -@@ -2150,6 +2167,10 @@ +@@ -2193,6 +2210,10 @@ * elflint.c (valid_e_machine): Add EM_ALPHA. Reported by Christian Aichinger . @@ -1405,7 +1405,7 @@ 2006-08-08 Ulrich Drepper * elflint.c (check_dynamic): Don't require DT_HASH for DT_SYMTAB. -@@ -2226,6 +2247,10 @@ +@@ -2269,6 +2290,10 @@ * Makefile.am: Add hacks to create dependency files for non-generic linker. @@ -1416,7 +1416,7 @@ 2006-06-12 Ulrich Drepper * ldgeneric.c (ld_generic_generate_sections): Don't create .interp -@@ -2574,6 +2599,11 @@ +@@ -2617,6 +2642,11 @@ * readelf.c (print_debug_loc_section): Fix indentation for larger address size. @@ -1571,7 +1571,7 @@ findtextrel_LDADD = $(libdw) $(libelf) --- elfutils/src/readelf.c +++ elfutils/src/readelf.c -@@ -4239,10 +4239,12 @@ listptr_base (struct listptr *p) +@@ -4253,10 +4253,12 @@ listptr_base (struct listptr *p) return base; } @@ -1586,7 +1586,7 @@ struct listptr *p1 = (void *) a; struct listptr *p2 = (void *) b; -@@ -4331,8 +4333,11 @@ static void +@@ -4345,8 +4347,11 @@ static void sort_listptr (struct listptr_table *table, const char *name) { if (table->n > 0) @@ -1600,7 +1600,7 @@ } static bool -@@ -9252,7 +9257,7 @@ dump_archive_index (Elf *elf, const char +@@ -9268,7 +9273,7 @@ dump_archive_index (Elf *elf, const char if (unlikely (elf_rand (elf, as_off) == 0) || unlikely ((subelf = elf_begin (-1, ELF_C_READ_MMAP, elf)) == NULL)) @@ -1712,7 +1712,7 @@ #ifndef __linux__ --- elfutils/tests/ChangeLog +++ elfutils/tests/ChangeLog -@@ -283,6 +283,13 @@ +@@ -304,6 +304,13 @@ 2013-12-02 Jan Kratochvil @@ -1726,7 +1726,7 @@ * Makefile.am (check_PROGRAMS): Add backtrace, backtrace-child, backtrace-data and backtrace-dwarf. (BUILT_SOURCES, clean-local, backtrace-child-biarch): New. -@@ -1147,6 +1154,8 @@ +@@ -1168,6 +1175,8 @@ 2008-01-21 Roland McGrath @@ -1735,7 +1735,7 @@ * testfile45.S.bz2: Add tests for cltq, cqto. * testfile45.expect.bz2: Adjust. -@@ -1855,6 +1864,11 @@ +@@ -1876,6 +1885,11 @@ * Makefile.am (TESTS): Add run-elflint-test.sh. (EXTRA_DIST): Add run-elflint-test.sh and testfile18.bz2. diff --git a/elfutils.spec b/elfutils.spec index 750c9dd..3f8c436 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects -Version: 0.159 -%global baserelease 10 +Version: 0.160 +%global baserelease 1 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -45,13 +45,6 @@ Group: Development/Tools Source: %{?source_url}%{name}-%{version}.tar.bz2 Patch1: %{?source_url}elfutils-portability.patch -Patch2: elfutils-aarch64-user_regs_struct.patch -Patch3: elfutils-0.159-argp-attach.patch -Patch4: elfutils-0.159-aarch64-bool-ret.patch -Patch5: elfutils-0.159-elf-h.patch -Patch6: elfutils-0.159-ppc64le-elfv2-abi.patch -Patch7: elfutils-0.159-report_r_debug.patch -Patch8: elfutils-0.159-ko_xz.patch %if !%{compat} Release: %{baserelease}%{?dist} @@ -214,14 +207,6 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %endif %endif -%patch2 -p1 -b .aa64~1 -%patch3 -p1 -b .argp-attach -%patch4 -p1 -b .aarch64-ret-bool -%patch5 -p1 -b .elf-h -%patch6 -p1 -b .ppc64le-elfv2-abi -%patch7 -p1 -b .report_r_debug -%patch8 -p1 -b .ko_xz - find . -name \*.sh ! -perm -0100 -print | xargs chmod +x %build @@ -349,6 +334,17 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Wed Aug 27 2014 Mark Wielaard - 0.160-1 +- Update to 0.160. + - Remove integrated upstream patches: + elfutils-aarch64-user_regs_struct.patch + elfutils-0.159-argp-attach.patch + elfutils-0.159-aarch64-bool-ret.patch + elfutils-0.159-elf-h.patch + elfutils-0.159-ppc64le-elfv2-abi.patch + elfutils-0.159-report_r_debug.patch + elfutils-0.159-ko_xz.patch + * Sat Aug 16 2014 Mark Wielaard - 0.159-10 - Add elfutils-0.159-ko_xz.patch diff --git a/sources b/sources index fb3c1c7..f4b45bc 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -1f45a18231c782ccd0966059e2e42ea9 elfutils-0.159.tar.bz2 +7527f22dff8b1ac8c122cfc4d3d3bb1e elfutils-0.160.tar.bz2