diff --git a/packages/devel/elfutils/package.mk b/packages/devel/elfutils/package.mk index 57e1b45e5f..8d001368ab 100644 --- a/packages/devel/elfutils/package.mk +++ b/packages/devel/elfutils/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="elfutils" -PKG_VERSION="0.155" +PKG_VERSION="0.158" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" @@ -32,7 +32,8 @@ PKG_LONGDESC="Elfutils is a collection of utilities, including eu-ld (a linker), PKG_IS_ADDON="no" PKG_AUTORECONF="yes" -PKG_CONFIGURE_OPTS_TARGET="--disable-werror \ +PKG_CONFIGURE_OPTS_TARGET="utrace_cv_cc_biarch=false \ + --disable-werror \ --disable-progs \ --with-zlib \ --without-bzlib \ diff --git a/packages/devel/elfutils/patches/bk/elfutils-02-argp-support.patch b/packages/devel/elfutils/patches/bk/elfutils-02-argp-support.patch deleted file mode 100644 index f81ac8f9fa..0000000000 --- a/packages/devel/elfutils/patches/bk/elfutils-02-argp-support.patch +++ /dev/null @@ -1,92 +0,0 @@ -Allow the usage of an external implementation of the argp functions - -uClibc lack the argp family of functions that glibc has. Therefore, we -add a check in the configure script to see if argp_parse is available -in the C library. If not, we look if it is available in the additional -'argp' library. If so, we link against that library. If not, we error -out. - -This allows to build elfutils against uClibc with an external argp -library. - -Signed-off-by: Thomas Petazzoni - -Index: b/configure.ac -=================================================================== ---- a/configure.ac -+++ b/configure.ac -@@ -269,6 +269,13 @@ - enable_progs=yes) - AM_CONDITIONAL(ENABLE_PROGS, test "$enable_progs" = yes) - -+AC_CHECK_FUNC([argp_parse]) -+if test "$ac_cv_func_argp_parse" != yes; then -+ AC_CHECK_LIB([argp],[argp_parse],ARGP_LIBS=-largp, -+ AC_MSG_ERROR([No argp_parse function available.])) -+fi -+AC_SUBST(ARGP_LIBS) -+ - dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am - dnl conditional and config.h USE_ZLIB/USE_BZLIB #define. - save_LIBS="$LIBS" -Index: b/src/Makefile.am -=================================================================== ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -98,26 +98,29 @@ - # Buggy old compilers. - readelf_no_Werror = yes - --readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -+readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ -+ $(ARGP_LIBS) - nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ -- $(demanglelib) --size_LDADD = $(libelf) $(libeu) $(libmudflap) --strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl --ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -+ $(demanglelib) $(ARGP_LIBS) -+size_LDADD = $(libelf) $(libeu) $(libmudflap) $(ARGP_LIBS) -+strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl $(ARGP_LIBS) -+ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl $(ARGP_LIBS) - if NATIVE_LD - # -ldl is always needed for libebl. - ld_LDADD += libld_elf.a - endif - ld_LDFLAGS = -rdynamic --elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl --findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) --addr2line_LDADD = $(libdw) $(libelf) $(libmudflap) --elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) -ldl --objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl --ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) --strings_LDADD = $(libelf) $(libeu) $(libmudflap) --ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) --unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl -+elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl $(ARGP_LIBS) -+findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) $(ARGP_LIBS) -+addr2line_LDADD = $(libdw) $(libelf) $(libmudflap) $(ARGP_LIBS) -+elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) -ldl $(ARGP_LIBS) -+objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ -+ $(ARGP_LIBS) -+ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) $(ARGP_LIBS) -+strings_LDADD = $(libelf) $(libeu) $(libmudflap) $(ARGP_LIBS) -+ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) $(ARGP_LIBS) -+unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl \ -+ $(ARGP_LIBS) - - ldlex.o: ldscript.c - ldlex_no_Werror = yes -Index: b/libdw/Makefile.am -=================================================================== ---- a/libdw/Makefile.am -+++ b/libdw/Makefile.am -@@ -111,7 +111,7 @@ - -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \ - -Wl,--version-script,$<,--no-undefined \ - -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\ -- -ldl $(zip_LIBS) -+ -ldl $(zip_LIBS) $(ARGP_LIBS) - if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi - ln -fs $@ $@.$(VERSION) - diff --git a/packages/devel/elfutils/patches/bk/elfutils-03-memcpy-def.patch b/packages/devel/elfutils/patches/bk/elfutils-03-memcpy-def.patch deleted file mode 100644 index eb50cf654d..0000000000 --- a/packages/devel/elfutils/patches/bk/elfutils-03-memcpy-def.patch +++ /dev/null @@ -1,24 +0,0 @@ -Provide a compatibility alias __memcpy - -For some reason, libelf uses the internal glibc alias __memcpy, which -doesn't exist in uClibc. Add a manual alias so that the build can -proceed with uClibc. - -Signed-off-by: Thomas Petazzoni - -Index: b/libelf/libelf.h -=================================================================== ---- a/libelf/libelf.h -+++ b/libelf/libelf.h -@@ -34,6 +34,11 @@ - /* Get the ELF types. */ - #include - -+#ifndef _LIBC -+#ifndef __mempcpy -+#define __mempcpy mempcpy -+#endif -+#endif - - /* Known translation types. */ - typedef enum diff --git a/packages/devel/elfutils/patches/bk/elfutils-04-fts.patch b/packages/devel/elfutils/patches/bk/elfutils-04-fts.patch deleted file mode 100644 index 7318236d29..0000000000 --- a/packages/devel/elfutils/patches/bk/elfutils-04-fts.patch +++ /dev/null @@ -1,1307 +0,0 @@ -Add an implementation of the fts_*() functions - -The fts_*() functions are optional in uClibc, and not compiled in our -default configuration. The best option would be to migrate this -elfutils code to the nftw family of functions, but it requires quite -some work. - -So we have several options here: - - *) Enable fts_*() functions in our default uClibc configuration. Not - nice since only one package needs them (the help text of uClibc - for fts_*() functions explicitly mention that they have been added - to be able to build elfutils). - - *) Use gnulib, but it is quite heavy to setup, requires modifications - to configure.ac, and other things. - - *) Copy the fts function from uClibc into elfutils source code. This - is the solution used below. uClibc is LGPL, and elfutils is - LGPL/GPL, so there should not be any licensing issue. - -Of course, the fts_*() functions are only built if they are not -already provided by the C library. - -Signed-off-by: Thomas Petazzoni - -Index: b/configure.ac -=================================================================== ---- a/configure.ac -+++ b/configure.ac -@@ -276,6 +276,10 @@ - fi - AC_SUBST(ARGP_LIBS) - -+AC_CHECK_HEADER([fts.h], -+ AC_DEFINE([HAVE_FTS_H], [], [Define if is available in C library])) -+AM_CONDITIONAL(HAVE_FTS, test "$ac_cv_header_fts_h" = yes) -+ - dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am - dnl conditional and config.h USE_ZLIB/USE_BZLIB #define. - save_LIBS="$LIBS" -Index: b/libdwfl/Makefile.am -=================================================================== ---- a/libdwfl/Makefile.am -+++ b/libdwfl/Makefile.am -@@ -79,6 +79,9 @@ - if LZMA - libdwfl_a_SOURCES += lzma.c - endif -+if !HAVE_FTS -+libdwfl_a_SOURCES += fts.c -+endif - - if MUDFLAP - libdwfl = libdwfl.a $(libdw) $(libebl) $(libelf) $(libeu) -Index: b/libdwfl/fts.c -=================================================================== ---- /dev/null -+++ b/libdwfl/fts.c -@@ -0,0 +1,1095 @@ -+/*- -+ * Copyright (c) 1990, 1993, 1994 -+ * The Regents of the University of California. All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions and the following disclaimer. -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in the -+ * documentation and/or other materials provided with the distribution. -+ * 4. Neither the name of the University nor the names of its contributors -+ * may be used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -+ * SUCH DAMAGE. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include "fts_.h" -+#include -+#include -+#include -+ -+/* Largest alignment size needed, minus one. -+ Usually long double is the worst case. */ -+#ifndef ALIGNBYTES -+#define ALIGNBYTES (__alignof__ (long double) - 1) -+#endif -+/* Align P to that size. */ -+#ifndef ALIGN -+#define ALIGN(p) (((unsigned long int) (p) + ALIGNBYTES) & ~ALIGNBYTES) -+#endif -+ -+ -+static FTSENT *fts_alloc (FTS *, const char *, size_t); -+static FTSENT *fts_build (FTS *, int); -+static void fts_lfree (FTSENT *); -+static void fts_load (FTS *, FTSENT *); -+static size_t fts_maxarglen (char * const *); -+static void fts_padjust (FTS *, FTSENT *); -+static int fts_palloc (FTS *, size_t); -+static FTSENT *fts_sort (FTS *, FTSENT *, int); -+static u_short fts_stat (FTS *, FTSENT *, int); -+static int fts_safe_changedir (FTS *, FTSENT *, int, const char *); -+ -+#ifndef MAX -+#define MAX(a, b) ({ __typeof__ (a) _a = (a); \ -+ __typeof__ (b) _b = (b); \ -+ _a > _b ? _a : _b; }) -+#endif -+ -+#define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2]))) -+ -+#define CLR(opt) (sp->fts_options &= ~(opt)) -+#define ISSET(opt) (sp->fts_options & (opt)) -+#define SET(opt) (sp->fts_options |= (opt)) -+ -+#define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd)) -+ -+/* fts_build flags */ -+#define BCHILD 1 /* fts_children */ -+#define BNAMES 2 /* fts_children, names only */ -+#define BREAD 3 /* fts_read */ -+ -+FTS * -+fts_open( char * const *argv, register int options, -+ int (*compar) (const FTSENT **, const FTSENT **)) -+{ -+ register FTS *sp; -+ register FTSENT *p, *root; -+ register int nitems; -+ FTSENT *parent = NULL; -+ FTSENT *tmp = NULL; -+ -+ /* Options check. */ -+ if (options & ~FTS_OPTIONMASK) { -+ errno = EINVAL; -+ return (NULL); -+ } -+ -+ /* Allocate/initialize the stream */ -+ if ((sp = malloc((u_int)sizeof(FTS))) == NULL) -+ return (NULL); -+ memset(sp, 0, sizeof(FTS)); -+ sp->fts_compar = (int (*) (const void *, const void *)) compar; -+ sp->fts_options = options; -+ -+ /* Logical walks turn on NOCHDIR; symbolic links are too hard. */ -+ if (ISSET(FTS_LOGICAL)) -+ SET(FTS_NOCHDIR); -+ -+ /* -+ * Start out with 1K of path space, and enough, in any case, -+ * to hold the user's paths. -+ */ -+#ifndef MAXPATHLEN -+#define MAXPATHLEN 1024 -+#endif -+ size_t maxarglen = fts_maxarglen(argv); -+ if (fts_palloc(sp, MAX(maxarglen, MAXPATHLEN))) -+ goto mem1; -+ -+ /* Allocate/initialize root's parent. */ -+ if (*argv != NULL) { -+ if ((parent = fts_alloc(sp, "", 0)) == NULL) -+ goto mem2; -+ parent->fts_level = FTS_ROOTPARENTLEVEL; -+ } -+ -+ /* Allocate/initialize root(s). */ -+ for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) { -+ /* Don't allow zero-length paths. */ -+ size_t len = strlen(*argv); -+ if (len == 0) { -+ errno = ENOENT; -+ goto mem3; -+ } -+ -+ p = fts_alloc(sp, *argv, len); -+ p->fts_level = FTS_ROOTLEVEL; -+ p->fts_parent = parent; -+ p->fts_accpath = p->fts_name; -+ p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW)); -+ -+ /* Command-line "." and ".." are real directories. */ -+ if (p->fts_info == FTS_DOT) -+ p->fts_info = FTS_D; -+ -+ /* -+ * If comparison routine supplied, traverse in sorted -+ * order; otherwise traverse in the order specified. -+ */ -+ if (compar) { -+ p->fts_link = root; -+ root = p; -+ } else { -+ p->fts_link = NULL; -+ if (root == NULL) -+ tmp = root = p; -+ else { -+ tmp->fts_link = p; -+ tmp = p; -+ } -+ } -+ } -+ if (compar && nitems > 1) -+ root = fts_sort(sp, root, nitems); -+ -+ /* -+ * Allocate a dummy pointer and make fts_read think that we've just -+ * finished the node before the root(s); set p->fts_info to FTS_INIT -+ * so that everything about the "current" node is ignored. -+ */ -+ if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL) -+ goto mem3; -+ sp->fts_cur->fts_link = root; -+ sp->fts_cur->fts_info = FTS_INIT; -+ -+ /* -+ * If using chdir(2), grab a file descriptor pointing to dot to ensure -+ * that we can get back here; this could be avoided for some paths, -+ * but almost certainly not worth the effort. Slashes, symbolic links, -+ * and ".." are all fairly nasty problems. Note, if we can't get the -+ * descriptor we run anyway, just more slowly. -+ */ -+ if (!ISSET(FTS_NOCHDIR) -+ && (sp->fts_rfd = open(".", O_RDONLY, 0)) < 0) -+ SET(FTS_NOCHDIR); -+ -+ return (sp); -+ -+mem3: fts_lfree(root); -+ free(parent); -+mem2: free(sp->fts_path); -+mem1: free(sp); -+ return (NULL); -+} -+ -+static void -+fts_load(FTS *sp, register FTSENT *p) -+{ -+ register int len; -+ register char *cp; -+ -+ /* -+ * Load the stream structure for the next traversal. Since we don't -+ * actually enter the directory until after the preorder visit, set -+ * the fts_accpath field specially so the chdir gets done to the right -+ * place and the user can access the first node. From fts_open it's -+ * known that the path will fit. -+ */ -+ len = p->fts_pathlen = p->fts_namelen; -+ memmove(sp->fts_path, p->fts_name, len + 1); -+ if ((cp = strrchr(p->fts_name, '/')) && (cp != p->fts_name || cp[1])) { -+ len = strlen(++cp); -+ memmove(p->fts_name, cp, len + 1); -+ p->fts_namelen = len; -+ } -+ p->fts_accpath = p->fts_path = sp->fts_path; -+ sp->fts_dev = p->fts_dev; -+} -+ -+int -+fts_close(FTS *sp) -+{ -+ register FTSENT *freep, *p; -+ int saved_errno; -+ -+ /* -+ * This still works if we haven't read anything -- the dummy structure -+ * points to the root list, so we step through to the end of the root -+ * list which has a valid parent pointer. -+ */ -+ if (sp->fts_cur) { -+ for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) { -+ freep = p; -+ p = p->fts_link != NULL ? p->fts_link : p->fts_parent; -+ free(freep); -+ } -+ free(p); -+ } -+ -+ /* Free up child linked list, sort array, path buffer. */ -+ if (sp->fts_child) -+ fts_lfree(sp->fts_child); -+ free(sp->fts_array); -+ free(sp->fts_path); -+ -+ /* Return to original directory, save errno if necessary. */ -+ if (!ISSET(FTS_NOCHDIR)) { -+ saved_errno = fchdir(sp->fts_rfd) ? errno : 0; -+ (void)close(sp->fts_rfd); -+ -+ /* Set errno and return. */ -+ if (saved_errno != 0) { -+ /* Free up the stream pointer. */ -+ free(sp); -+ errno = saved_errno; -+ return (-1); -+ } -+ } -+ -+ /* Free up the stream pointer. */ -+ free(sp); -+ return (0); -+} -+ -+/* -+ * Special case of "/" at the end of the path so that slashes aren't -+ * appended which would cause paths to be written as "....//foo". -+ */ -+#define NAPPEND(p) \ -+ (p->fts_path[p->fts_pathlen - 1] == '/' \ -+ ? p->fts_pathlen - 1 : p->fts_pathlen) -+ -+FTSENT * -+fts_read(register FTS *sp) -+{ -+ register FTSENT *p, *tmp; -+ register int instr; -+ register char *t; -+ int saved_errno; -+ -+ /* If finished or unrecoverable error, return NULL. */ -+ if (sp->fts_cur == NULL || ISSET(FTS_STOP)) -+ return (NULL); -+ -+ /* Set current node pointer. */ -+ p = sp->fts_cur; -+ -+ /* Save and zero out user instructions. */ -+ instr = p->fts_instr; -+ p->fts_instr = FTS_NOINSTR; -+ -+ /* Any type of file may be re-visited; re-stat and re-turn. */ -+ if (instr == FTS_AGAIN) { -+ p->fts_info = fts_stat(sp, p, 0); -+ return (p); -+ } -+ -+ /* -+ * Following a symlink -- SLNONE test allows application to see -+ * SLNONE and recover. If indirecting through a symlink, have -+ * keep a pointer to current location. If unable to get that -+ * pointer, follow fails. -+ */ -+ if (instr == FTS_FOLLOW && -+ (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) { -+ p->fts_info = fts_stat(sp, p, 1); -+ if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { -+ if ((p->fts_symfd = open(".", O_RDONLY, 0)) < 0) { -+ p->fts_errno = errno; -+ p->fts_info = FTS_ERR; -+ } else -+ p->fts_flags |= FTS_SYMFOLLOW; -+ } -+ return (p); -+ } -+ -+ /* Directory in pre-order. */ -+ if (p->fts_info == FTS_D) { -+ /* If skipped or crossed mount point, do post-order visit. */ -+ if (instr == FTS_SKIP || -+ (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) { -+ if (p->fts_flags & FTS_SYMFOLLOW) -+ (void)close(p->fts_symfd); -+ if (sp->fts_child) { -+ fts_lfree(sp->fts_child); -+ sp->fts_child = NULL; -+ } -+ p->fts_info = FTS_DP; -+ return (p); -+ } -+ -+ /* Rebuild if only read the names and now traversing. */ -+ if (sp->fts_child != NULL && ISSET(FTS_NAMEONLY)) { -+ CLR(FTS_NAMEONLY); -+ fts_lfree(sp->fts_child); -+ sp->fts_child = NULL; -+ } -+ -+ /* -+ * Cd to the subdirectory. -+ * -+ * If have already read and now fail to chdir, whack the list -+ * to make the names come out right, and set the parent errno -+ * so the application will eventually get an error condition. -+ * Set the FTS_DONTCHDIR flag so that when we logically change -+ * directories back to the parent we don't do a chdir. -+ * -+ * If haven't read do so. If the read fails, fts_build sets -+ * FTS_STOP or the fts_info field of the node. -+ */ -+ if (sp->fts_child != NULL) { -+ if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) { -+ p->fts_errno = errno; -+ p->fts_flags |= FTS_DONTCHDIR; -+ for (p = sp->fts_child; p != NULL; -+ p = p->fts_link) -+ p->fts_accpath = -+ p->fts_parent->fts_accpath; -+ } -+ } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) { -+ if (ISSET(FTS_STOP)) -+ return (NULL); -+ return (p); -+ } -+ p = sp->fts_child; -+ sp->fts_child = NULL; -+ sp->fts_cur = p; -+ goto name; -+ } -+ -+ /* Move to the next node on this level. */ -+next: tmp = p; -+ if ((p = p->fts_link) != NULL) { -+ sp->fts_cur = p; -+ free(tmp); -+ -+ /* -+ * If reached the top, return to the original directory (or -+ * the root of the tree), and load the paths for the next root. -+ */ -+ if (p->fts_level == FTS_ROOTLEVEL) { -+ if (FCHDIR(sp, sp->fts_rfd)) { -+ SET(FTS_STOP); -+ return (NULL); -+ } -+ fts_load(sp, p); -+ return p; -+ } -+ -+ /* -+ * User may have called fts_set on the node. If skipped, -+ * ignore. If followed, get a file descriptor so we can -+ * get back if necessary. -+ */ -+ if (p->fts_instr == FTS_SKIP) -+ goto next; -+ if (p->fts_instr == FTS_FOLLOW) { -+ p->fts_info = fts_stat(sp, p, 1); -+ if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { -+ if ((p->fts_symfd = -+ open(".", O_RDONLY, 0)) < 0) { -+ p->fts_errno = errno; -+ p->fts_info = FTS_ERR; -+ } else -+ p->fts_flags |= FTS_SYMFOLLOW; -+ } -+ p->fts_instr = FTS_NOINSTR; -+ } -+ -+name: t = sp->fts_path + NAPPEND(p->fts_parent); -+ *t++ = '/'; -+ memmove(t, p->fts_name, p->fts_namelen + 1); -+ return p; -+ } -+ -+ /* Move up to the parent node. */ -+ p = tmp->fts_parent; -+ sp->fts_cur = p; -+ free(tmp); -+ -+ if (p->fts_level == FTS_ROOTPARENTLEVEL) { -+ /* -+ * Done; free everything up and set errno to 0 so the user -+ * can distinguish between error and EOF. -+ */ -+ free(p); -+ errno = 0; -+ return (sp->fts_cur = NULL); -+ } -+ -+ /* NUL terminate the pathname. */ -+ sp->fts_path[p->fts_pathlen] = '\0'; -+ -+ /* -+ * Return to the parent directory. If at a root node or came through -+ * a symlink, go back through the file descriptor. Otherwise, cd up -+ * one directory. -+ */ -+ if (p->fts_level == FTS_ROOTLEVEL) { -+ if (FCHDIR(sp, sp->fts_rfd)) { -+ SET(FTS_STOP); -+ return (NULL); -+ } -+ } else if (p->fts_flags & FTS_SYMFOLLOW) { -+ if (FCHDIR(sp, p->fts_symfd)) { -+ saved_errno = errno; -+ (void)close(p->fts_symfd); -+ errno = saved_errno; -+ SET(FTS_STOP); -+ return (NULL); -+ } -+ (void)close(p->fts_symfd); -+ } else if (!(p->fts_flags & FTS_DONTCHDIR) && -+ fts_safe_changedir(sp, p->fts_parent, -1, "..")) { -+ SET(FTS_STOP); -+ return (NULL); -+ } -+ p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP; -+ return p; -+} -+ -+/* -+ * Fts_set takes the stream as an argument although it's not used in this -+ * implementation; it would be necessary if anyone wanted to add global -+ * semantics to fts using fts_set. An error return is allowed for similar -+ * reasons. -+ */ -+/* ARGSUSED */ -+int -+fts_set(FTS *sp, FTSENT *p, int instr) -+{ -+ if (instr != 0 && instr != FTS_AGAIN && instr != FTS_FOLLOW && -+ instr != FTS_NOINSTR && instr != FTS_SKIP) { -+ errno = EINVAL; -+ return (1); -+ } -+ p->fts_instr = instr; -+ return (0); -+} -+ -+FTSENT * -+fts_children(register FTS *sp, int instr) -+{ -+ register FTSENT *p; -+ int fd; -+ -+ if (instr != 0 && instr != FTS_NAMEONLY) { -+ errno = EINVAL; -+ return (NULL); -+ } -+ -+ /* Set current node pointer. */ -+ p = sp->fts_cur; -+ -+ /* -+ * Errno set to 0 so user can distinguish empty directory from -+ * an error. -+ */ -+ errno = 0; -+ -+ /* Fatal errors stop here. */ -+ if (ISSET(FTS_STOP)) -+ return (NULL); -+ -+ /* Return logical hierarchy of user's arguments. */ -+ if (p->fts_info == FTS_INIT) -+ return (p->fts_link); -+ -+ /* -+ * If not a directory being visited in pre-order, stop here. Could -+ * allow FTS_DNR, assuming the user has fixed the problem, but the -+ * same effect is available with FTS_AGAIN. -+ */ -+ if (p->fts_info != FTS_D /* && p->fts_info != FTS_DNR */) -+ return (NULL); -+ -+ /* Free up any previous child list. */ -+ if (sp->fts_child != NULL) -+ fts_lfree(sp->fts_child); -+ -+ if (instr == FTS_NAMEONLY) { -+ SET(FTS_NAMEONLY); -+ instr = BNAMES; -+ } else -+ instr = BCHILD; -+ -+ /* -+ * If using chdir on a relative path and called BEFORE fts_read does -+ * its chdir to the root of a traversal, we can lose -- we need to -+ * chdir into the subdirectory, and we don't know where the current -+ * directory is, so we can't get back so that the upcoming chdir by -+ * fts_read will work. -+ */ -+ if (p->fts_level != FTS_ROOTLEVEL || p->fts_accpath[0] == '/' || -+ ISSET(FTS_NOCHDIR)) -+ return (sp->fts_child = fts_build(sp, instr)); -+ -+ if ((fd = open(".", O_RDONLY, 0)) < 0) -+ return (NULL); -+ sp->fts_child = fts_build(sp, instr); -+ if (fchdir(fd)) -+ return (NULL); -+ (void)close(fd); -+ return (sp->fts_child); -+} -+ -+/* -+ * This is the tricky part -- do not casually change *anything* in here. The -+ * idea is to build the linked list of entries that are used by fts_children -+ * and fts_read. There are lots of special cases. -+ * -+ * The real slowdown in walking the tree is the stat calls. If FTS_NOSTAT is -+ * set and it's a physical walk (so that symbolic links can't be directories), -+ * we can do things quickly. First, if it's a 4.4BSD file system, the type -+ * of the file is in the directory entry. Otherwise, we assume that the number -+ * of subdirectories in a node is equal to the number of links to the parent. -+ * The former skips all stat calls. The latter skips stat calls in any leaf -+ * directories and for any files after the subdirectories in the directory have -+ * been found, cutting the stat calls by about 2/3. -+ */ -+static FTSENT * -+fts_build(register FTS *sp, int type) -+{ -+ register struct dirent *dp; -+ register FTSENT *p, *head; -+ register int nitems; -+ FTSENT *cur, *tail; -+ DIR *dirp; -+ void *oldaddr; -+ int cderrno, descend, len, level, nlinks, saved_errno, -+ nostat, doadjust; -+ size_t maxlen; -+ char *cp; -+ -+ /* Set current node pointer. */ -+ cur = sp->fts_cur; -+ -+ /* -+ * Open the directory for reading. If this fails, we're done. -+ * If being called from fts_read, set the fts_info field. -+ */ -+#if defined FTS_WHITEOUT && 0 -+ if (ISSET(FTS_WHITEOUT)) -+ oflag = DTF_NODUP|DTF_REWIND; -+ else -+ oflag = DTF_HIDEW|DTF_NODUP|DTF_REWIND; -+#else -+# define opendir2(path, flag) opendir(path) -+#endif -+ if ((dirp = opendir2(cur->fts_accpath, oflag)) == NULL) { -+ if (type == BREAD) { -+ cur->fts_info = FTS_DNR; -+ cur->fts_errno = errno; -+ } -+ return (NULL); -+ } -+ -+ /* -+ * Nlinks is the number of possible entries of type directory in the -+ * directory if we're cheating on stat calls, 0 if we're not doing -+ * any stat calls at all, -1 if we're doing stats on everything. -+ */ -+ if (type == BNAMES) { -+ nlinks = 0; -+ /* Be quiet about nostat, GCC. */ -+ nostat = 0; -+ } else if (ISSET(FTS_NOSTAT) && ISSET(FTS_PHYSICAL)) { -+ nlinks = cur->fts_nlink - (ISSET(FTS_SEEDOT) ? 0 : 2); -+ nostat = 1; -+ } else { -+ nlinks = -1; -+ nostat = 0; -+ } -+ -+#ifdef notdef -+ (void)printf("nlinks == %d (cur: %d)\n", nlinks, cur->fts_nlink); -+ (void)printf("NOSTAT %d PHYSICAL %d SEEDOT %d\n", -+ ISSET(FTS_NOSTAT), ISSET(FTS_PHYSICAL), ISSET(FTS_SEEDOT)); -+#endif -+ /* -+ * If we're going to need to stat anything or we want to descend -+ * and stay in the directory, chdir. If this fails we keep going, -+ * but set a flag so we don't chdir after the post-order visit. -+ * We won't be able to stat anything, but we can still return the -+ * names themselves. Note, that since fts_read won't be able to -+ * chdir into the directory, it will have to return different path -+ * names than before, i.e. "a/b" instead of "b". Since the node -+ * has already been visited in pre-order, have to wait until the -+ * post-order visit to return the error. There is a special case -+ * here, if there was nothing to stat then it's not an error to -+ * not be able to stat. This is all fairly nasty. If a program -+ * needed sorted entries or stat information, they had better be -+ * checking FTS_NS on the returned nodes. -+ */ -+ cderrno = 0; -+ if (nlinks || type == BREAD) { -+ if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) { -+ if (nlinks && type == BREAD) -+ cur->fts_errno = errno; -+ cur->fts_flags |= FTS_DONTCHDIR; -+ descend = 0; -+ cderrno = errno; -+ (void)closedir(dirp); -+ dirp = NULL; -+ } else -+ descend = 1; -+ } else -+ descend = 0; -+ -+ /* -+ * Figure out the max file name length that can be stored in the -+ * current path -- the inner loop allocates more path as necessary. -+ * We really wouldn't have to do the maxlen calculations here, we -+ * could do them in fts_read before returning the path, but it's a -+ * lot easier here since the length is part of the dirent structure. -+ * -+ * If not changing directories set a pointer so that can just append -+ * each new name into the path. -+ */ -+ len = NAPPEND(cur); -+ if (ISSET(FTS_NOCHDIR)) { -+ cp = sp->fts_path + len; -+ *cp++ = '/'; -+ } else { -+ /* GCC, you're too verbose. */ -+ cp = NULL; -+ } -+ len++; -+ maxlen = sp->fts_pathlen - len; -+ -+ level = cur->fts_level + 1; -+ -+ /* Read the directory, attaching each entry to the `link' pointer. */ -+ doadjust = 0; -+ for (head = tail = NULL, nitems = 0; dirp && (dp = readdir(dirp));) { -+ if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) -+ continue; -+ -+ if ((p = fts_alloc(sp, dp->d_name, _D_EXACT_NAMLEN (dp))) == NULL) -+ goto mem1; -+ if (_D_EXACT_NAMLEN (dp) >= maxlen) {/* include space for NUL */ -+ oldaddr = sp->fts_path; -+ if (fts_palloc(sp, _D_EXACT_NAMLEN (dp) + len + 1)) { -+ /* -+ * No more memory for path or structures. Save -+ * errno, free up the current structure and the -+ * structures already allocated. -+ */ -+mem1: saved_errno = errno; -+ free(p); -+ fts_lfree(head); -+ (void)closedir(dirp); -+ cur->fts_info = FTS_ERR; -+ SET(FTS_STOP); -+ errno = saved_errno; -+ return (NULL); -+ } -+ /* Did realloc() change the pointer? */ -+ if (oldaddr != sp->fts_path) { -+ doadjust = 1; -+ if (ISSET(FTS_NOCHDIR)) -+ cp = sp->fts_path + len; -+ } -+ maxlen = sp->fts_pathlen - len; -+ } -+ -+ if (len + _D_EXACT_NAMLEN (dp) >= USHRT_MAX) { -+ /* -+ * In an FTSENT, fts_pathlen is a u_short so it is -+ * possible to wraparound here. If we do, free up -+ * the current structure and the structures already -+ * allocated, then error out with ENAMETOOLONG. -+ */ -+ free(p); -+ fts_lfree(head); -+ (void)closedir(dirp); -+ cur->fts_info = FTS_ERR; -+ SET(FTS_STOP); -+ errno = ENAMETOOLONG; -+ return (NULL); -+ } -+ p->fts_level = level; -+ p->fts_parent = sp->fts_cur; -+ p->fts_pathlen = len + _D_EXACT_NAMLEN (dp); -+ -+#if defined FTS_WHITEOUT && 0 -+ if (dp->d_type == DT_WHT) -+ p->fts_flags |= FTS_ISW; -+#endif -+ -+#if 0 -+ /* Unreachable code. cderrno is only ever set to a nonnull -+ value if dirp is closed at the same time. But then we -+ cannot enter this loop. */ -+ if (cderrno) { -+ if (nlinks) { -+ p->fts_info = FTS_NS; -+ p->fts_errno = cderrno; -+ } else -+ p->fts_info = FTS_NSOK; -+ p->fts_accpath = cur->fts_accpath; -+ } else -+#endif -+ if (nlinks == 0 -+#if defined DT_DIR && defined _DIRENT_HAVE_D_TYPE -+ || (nostat && -+ dp->d_type != DT_DIR && dp->d_type != DT_UNKNOWN) -+#endif -+ ) { -+ p->fts_accpath = -+ ISSET(FTS_NOCHDIR) ? p->fts_path : p->fts_name; -+ p->fts_info = FTS_NSOK; -+ } else { -+ /* Build a file name for fts_stat to stat. */ -+ if (ISSET(FTS_NOCHDIR)) { -+ p->fts_accpath = p->fts_path; -+ memmove(cp, p->fts_name, p->fts_namelen + 1); -+ } else -+ p->fts_accpath = p->fts_name; -+ /* Stat it. */ -+ p->fts_info = fts_stat(sp, p, 0); -+ -+ /* Decrement link count if applicable. */ -+ if (nlinks > 0 && (p->fts_info == FTS_D || -+ p->fts_info == FTS_DC || p->fts_info == FTS_DOT)) -+ --nlinks; -+ } -+ -+ /* We walk in directory order so "ls -f" doesn't get upset. */ -+ p->fts_link = NULL; -+ if (head == NULL) -+ head = tail = p; -+ else { -+ tail->fts_link = p; -+ tail = p; -+ } -+ ++nitems; -+ } -+ if (dirp) -+ (void)closedir(dirp); -+ -+ /* -+ * If realloc() changed the address of the path, adjust the -+ * addresses for the rest of the tree and the dir list. -+ */ -+ if (doadjust) -+ fts_padjust(sp, head); -+ -+ /* -+ * If not changing directories, reset the path back to original -+ * state. -+ */ -+ if (ISSET(FTS_NOCHDIR)) { -+ if (len == sp->fts_pathlen || nitems == 0) -+ --cp; -+ *cp = '\0'; -+ } -+ -+ /* -+ * If descended after called from fts_children or after called from -+ * fts_read and nothing found, get back. At the root level we use -+ * the saved fd; if one of fts_open()'s arguments is a relative path -+ * to an empty directory, we wind up here with no other way back. If -+ * can't get back, we're done. -+ */ -+ if (descend && (type == BCHILD || !nitems) && -+ (cur->fts_level == FTS_ROOTLEVEL ? -+ FCHDIR(sp, sp->fts_rfd) : -+ fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) { -+ cur->fts_info = FTS_ERR; -+ SET(FTS_STOP); -+ fts_lfree(head); -+ return (NULL); -+ } -+ -+ /* If didn't find anything, return NULL. */ -+ if (!nitems) { -+ if (type == BREAD) -+ cur->fts_info = FTS_DP; -+ fts_lfree(head); -+ return (NULL); -+ } -+ -+ /* Sort the entries. */ -+ if (sp->fts_compar && nitems > 1) -+ head = fts_sort(sp, head, nitems); -+ return (head); -+} -+ -+static u_short -+fts_stat(FTS *sp, register FTSENT *p, int follow) -+{ -+ register FTSENT *t; -+ register dev_t dev; -+ register ino_t ino; -+ struct stat *sbp, sb; -+ int saved_errno; -+ -+ /* If user needs stat info, stat buffer already allocated. */ -+ sbp = ISSET(FTS_NOSTAT) ? &sb : p->fts_statp; -+ -+#if defined FTS_WHITEOUT && 0 -+ /* check for whiteout */ -+ if (p->fts_flags & FTS_ISW) { -+ if (sbp != &sb) { -+ memset(sbp, '\0', sizeof (*sbp)); -+ sbp->st_mode = S_IFWHT; -+ } -+ return (FTS_W); -+ } -+#endif -+ -+ /* -+ * If doing a logical walk, or application requested FTS_FOLLOW, do -+ * a stat(2). If that fails, check for a non-existent symlink. If -+ * fail, set the errno from the stat call. -+ */ -+ if (ISSET(FTS_LOGICAL) || follow) { -+ if (stat(p->fts_accpath, sbp)) { -+ saved_errno = errno; -+ if (!lstat(p->fts_accpath, sbp)) { -+ errno = 0; -+ return (FTS_SLNONE); -+ } -+ p->fts_errno = saved_errno; -+ goto err; -+ } -+ } else if (lstat(p->fts_accpath, sbp)) { -+ p->fts_errno = errno; -+err: memset(sbp, 0, sizeof(struct stat)); -+ return (FTS_NS); -+ } -+ -+ if (S_ISDIR(sbp->st_mode)) { -+ /* -+ * Set the device/inode. Used to find cycles and check for -+ * crossing mount points. Also remember the link count, used -+ * in fts_build to limit the number of stat calls. It is -+ * understood that these fields are only referenced if fts_info -+ * is set to FTS_D. -+ */ -+ dev = p->fts_dev = sbp->st_dev; -+ ino = p->fts_ino = sbp->st_ino; -+ p->fts_nlink = sbp->st_nlink; -+ -+ if (ISDOT(p->fts_name)) -+ return (FTS_DOT); -+ -+ /* -+ * Cycle detection is done by brute force when the directory -+ * is first encountered. If the tree gets deep enough or the -+ * number of symbolic links to directories is high enough, -+ * something faster might be worthwhile. -+ */ -+ for (t = p->fts_parent; -+ t->fts_level >= FTS_ROOTLEVEL; t = t->fts_parent) -+ if (ino == t->fts_ino && dev == t->fts_dev) { -+ p->fts_cycle = t; -+ return (FTS_DC); -+ } -+ return (FTS_D); -+ } -+ if (S_ISLNK(sbp->st_mode)) -+ return (FTS_SL); -+ if (S_ISREG(sbp->st_mode)) -+ return (FTS_F); -+ return (FTS_DEFAULT); -+} -+ -+static FTSENT * -+fts_sort(FTS *sp, FTSENT *head, register int nitems) -+{ -+ register FTSENT **ap, *p; -+ -+ /* -+ * Construct an array of pointers to the structures and call qsort(3). -+ * Reassemble the array in the order returned by qsort. If unable to -+ * sort for memory reasons, return the directory entries in their -+ * current order. Allocate enough space for the current needs plus -+ * 40 so don't realloc one entry at a time. -+ */ -+ if (nitems > sp->fts_nitems) { -+ struct _ftsent **a; -+ -+ sp->fts_nitems = nitems + 40; -+ if ((a = realloc(sp->fts_array, -+ (size_t)(sp->fts_nitems * sizeof(FTSENT *)))) == NULL) { -+ free(sp->fts_array); -+ sp->fts_array = NULL; -+ sp->fts_nitems = 0; -+ return (head); -+ } -+ sp->fts_array = a; -+ } -+ for (ap = sp->fts_array, p = head; p; p = p->fts_link) -+ *ap++ = p; -+ qsort((void *)sp->fts_array, nitems, sizeof(FTSENT *), sp->fts_compar); -+ for (head = *(ap = sp->fts_array); --nitems; ++ap) -+ ap[0]->fts_link = ap[1]; -+ ap[0]->fts_link = NULL; -+ return (head); -+} -+ -+static FTSENT * -+fts_alloc(FTS *sp, const char *name, size_t namelen) -+{ -+ register FTSENT *p; -+ size_t len; -+ -+ /* -+ * The file name is a variable length array and no stat structure is -+ * necessary if the user has set the nostat bit. Allocate the FTSENT -+ * structure, the file name and the stat structure in one chunk, but -+ * be careful that the stat structure is reasonably aligned. Since the -+ * fts_name field is declared to be of size 1, the fts_name pointer is -+ * namelen + 2 before the first possible address of the stat structure. -+ */ -+ len = sizeof(FTSENT) + namelen; -+ if (!ISSET(FTS_NOSTAT)) -+ len += sizeof(struct stat) + ALIGNBYTES; -+ if ((p = malloc(len)) == NULL) -+ return (NULL); -+ -+ /* Copy the name and guarantee NUL termination. */ -+ memmove(p->fts_name, name, namelen); -+ p->fts_name[namelen] = '\0'; -+ -+ if (!ISSET(FTS_NOSTAT)) -+ p->fts_statp = (struct stat *)ALIGN(p->fts_name + namelen + 2); -+ p->fts_namelen = namelen; -+ p->fts_path = sp->fts_path; -+ p->fts_errno = 0; -+ p->fts_flags = 0; -+ p->fts_instr = FTS_NOINSTR; -+ p->fts_number = 0; -+ p->fts_pointer = NULL; -+ return (p); -+} -+ -+static void -+fts_lfree(register FTSENT *head) -+{ -+ register FTSENT *p; -+ -+ /* Free a linked list of structures. */ -+ while ((p = head)) { -+ head = head->fts_link; -+ free(p); -+ } -+} -+ -+/* -+ * Allow essentially unlimited paths; find, rm, ls should all work on any tree. -+ * Most systems will allow creation of paths much longer than MAXPATHLEN, even -+ * though the kernel won't resolve them. Add the size (not just what's needed) -+ * plus 256 bytes so don't realloc the path 2 bytes at a time. -+ */ -+static int -+fts_palloc(FTS *sp, size_t more) -+{ -+ char *p; -+ -+ sp->fts_pathlen += more + 256; -+ /* -+ * Check for possible wraparound. In an FTS, fts_pathlen is -+ * a signed int but in an FTSENT it is an unsigned short. -+ * We limit fts_pathlen to USHRT_MAX to be safe in both cases. -+ */ -+ if (sp->fts_pathlen < 0 || sp->fts_pathlen >= USHRT_MAX) { -+ free(sp->fts_path); -+ sp->fts_path = NULL; -+ errno = ENAMETOOLONG; -+ return (1); -+ } -+ p = realloc(sp->fts_path, sp->fts_pathlen); -+ if (p == NULL) { -+ free(sp->fts_path); -+ sp->fts_path = NULL; -+ return 1; -+ } -+ sp->fts_path = p; -+ return 0; -+} -+ -+/* -+ * When the path is realloc'd, have to fix all of the pointers in structures -+ * already returned. -+ */ -+static void -+fts_padjust(FTS *sp, FTSENT *head) -+{ -+ FTSENT *p; -+ char *addr = sp->fts_path; -+ -+#define ADJUST(p) do { \ -+ if ((p)->fts_accpath != (p)->fts_name) { \ -+ (p)->fts_accpath = \ -+ (char *)addr + ((p)->fts_accpath - (p)->fts_path); \ -+ } \ -+ (p)->fts_path = addr; \ -+} while (0) -+ /* Adjust the current set of children. */ -+ for (p = sp->fts_child; p; p = p->fts_link) -+ ADJUST(p); -+ -+ /* Adjust the rest of the tree, including the current level. */ -+ for (p = head; p->fts_level >= FTS_ROOTLEVEL;) { -+ ADJUST(p); -+ p = p->fts_link ? p->fts_link : p->fts_parent; -+ } -+} -+ -+static size_t -+fts_maxarglen(char * const *argv) -+{ -+ size_t len, max; -+ -+ for (max = 0; *argv; ++argv) -+ if ((len = strlen(*argv)) > max) -+ max = len; -+ return (max + 1); -+} -+ -+/* -+ * Change to dir specified by fd or p->fts_accpath without getting -+ * tricked by someone changing the world out from underneath us. -+ * Assumes p->fts_dev and p->fts_ino are filled in. -+ */ -+static int -+fts_safe_changedir(FTS *sp, FTSENT *p, int fd, const char *path) -+{ -+ int ret, oerrno, newfd; -+ struct stat64 sb; -+ -+ newfd = fd; -+ if (ISSET(FTS_NOCHDIR)) -+ return (0); -+ if (fd < 0 && (newfd = open(path, O_RDONLY, 0)) < 0) -+ return (-1); -+ if (fstat64(newfd, &sb)) { -+ ret = -1; -+ goto bail; -+ } -+ if (p->fts_dev != sb.st_dev || p->fts_ino != sb.st_ino) { -+ errno = ENOENT; /* disinformation */ -+ ret = -1; -+ goto bail; -+ } -+ ret = fchdir(newfd); -+bail: -+ oerrno = errno; -+ if (fd < 0) -+ (void)close(newfd); -+ errno = oerrno; -+ return (ret); -+} -Index: b/libdwfl/fts_.h -=================================================================== ---- /dev/null -+++ b/libdwfl/fts_.h -@@ -0,0 +1,131 @@ -+/* -+ * Copyright (c) 1989, 1993 -+ * The Regents of the University of California. All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions and the following disclaimer. -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in the -+ * documentation and/or other materials provided with the distribution. -+ * 4. Neither the name of the University nor the names of its contributors -+ * may be used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -+ * SUCH DAMAGE. -+ * -+ * @(#)fts.h 8.3 (Berkeley) 8/14/94 -+ */ -+ -+#ifndef _FTS_H -+#define _FTS_H 1 -+ -+#include -+#include -+ -+/* The fts interface is incompatible with the LFS interface which -+ transparently uses the 64-bit file access functions. */ -+#ifdef __USE_FILE_OFFSET64 -+# error " cannot be used with -D_FILE_OFFSET_BITS==64" -+#endif -+ -+ -+typedef struct { -+ struct _ftsent *fts_cur; /* current node */ -+ struct _ftsent *fts_child; /* linked list of children */ -+ struct _ftsent **fts_array; /* sort array */ -+ dev_t fts_dev; /* starting device # */ -+ char *fts_path; /* path for this descent */ -+ int fts_rfd; /* fd for root */ -+ int fts_pathlen; /* sizeof(path) */ -+ int fts_nitems; /* elements in the sort array */ -+ int (*fts_compar) (const void *, const void *); /* compare fn */ -+ -+#define FTS_COMFOLLOW 0x0001 /* follow command line symlinks */ -+#define FTS_LOGICAL 0x0002 /* logical walk */ -+#define FTS_NOCHDIR 0x0004 /* don't change directories */ -+#define FTS_NOSTAT 0x0008 /* don't get stat info */ -+#define FTS_PHYSICAL 0x0010 /* physical walk */ -+#define FTS_SEEDOT 0x0020 /* return dot and dot-dot */ -+#define FTS_XDEV 0x0040 /* don't cross devices */ -+#define FTS_WHITEOUT 0x0080 /* return whiteout information */ -+#define FTS_OPTIONMASK 0x00ff /* valid user option mask */ -+ -+#define FTS_NAMEONLY 0x0100 /* (private) child names only */ -+#define FTS_STOP 0x0200 /* (private) unrecoverable error */ -+ int fts_options; /* fts_open options, global flags */ -+} FTS; -+ -+typedef struct _ftsent { -+ struct _ftsent *fts_cycle; /* cycle node */ -+ struct _ftsent *fts_parent; /* parent directory */ -+ struct _ftsent *fts_link; /* next file in directory */ -+ long fts_number; /* local numeric value */ -+ void *fts_pointer; /* local address value */ -+ char *fts_accpath; /* access path */ -+ char *fts_path; /* root path */ -+ int fts_errno; /* errno for this node */ -+ int fts_symfd; /* fd for symlink */ -+ u_short fts_pathlen; /* strlen(fts_path) */ -+ u_short fts_namelen; /* strlen(fts_name) */ -+ -+ ino_t fts_ino; /* inode */ -+ dev_t fts_dev; /* device */ -+ nlink_t fts_nlink; /* link count */ -+ -+#define FTS_ROOTPARENTLEVEL -1 -+#define FTS_ROOTLEVEL 0 -+ short fts_level; /* depth (-1 to N) */ -+ -+#define FTS_D 1 /* preorder directory */ -+#define FTS_DC 2 /* directory that causes cycles */ -+#define FTS_DEFAULT 3 /* none of the above */ -+#define FTS_DNR 4 /* unreadable directory */ -+#define FTS_DOT 5 /* dot or dot-dot */ -+#define FTS_DP 6 /* postorder directory */ -+#define FTS_ERR 7 /* error; errno is set */ -+#define FTS_F 8 /* regular file */ -+#define FTS_INIT 9 /* initialized only */ -+#define FTS_NS 10 /* stat(2) failed */ -+#define FTS_NSOK 11 /* no stat(2) requested */ -+#define FTS_SL 12 /* symbolic link */ -+#define FTS_SLNONE 13 /* symbolic link without target */ -+#define FTS_W 14 /* whiteout object */ -+ u_short fts_info; /* user flags for FTSENT structure */ -+ -+#define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */ -+#define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */ -+ u_short fts_flags; /* private flags for FTSENT structure */ -+ -+#define FTS_AGAIN 1 /* read node again */ -+#define FTS_FOLLOW 2 /* follow symbolic link */ -+#define FTS_NOINSTR 3 /* no instructions */ -+#define FTS_SKIP 4 /* discard node */ -+ u_short fts_instr; /* fts_set() instructions */ -+ -+ struct stat *fts_statp; /* stat(2) information */ -+ char fts_name[1]; /* file name */ -+} FTSENT; -+ -+__BEGIN_DECLS -+FTSENT *fts_children (FTS *, int); -+int fts_close (FTS *); -+FTS *fts_open (char * const *, int, -+ int (*)(const FTSENT **, const FTSENT **)); -+FTSENT *fts_read (FTS *); -+int fts_set (FTS *, FTSENT *, int) __THROW; -+__END_DECLS -+ -+#endif /* fts.h */ -Index: b/libdwfl/linux-kernel-modules.c -=================================================================== ---- a/libdwfl/linux-kernel-modules.c -+++ b/libdwfl/linux-kernel-modules.c -@@ -29,7 +29,11 @@ - /* We include this before config.h because it can't handle _FILE_OFFSET_BITS. - Everything we need here is fine if its declarations just come first. */ - -+#ifdef HAVE_FTS_H - #include -+#else -+#include "fts_.h" -+#endif - - #include - diff --git a/packages/devel/elfutils/patches/elfutils-0.158-CVE-2014-0172.patch b/packages/devel/elfutils/patches/elfutils-0.158-CVE-2014-0172.patch new file mode 100644 index 0000000000..3b76360b86 --- /dev/null +++ b/packages/devel/elfutils/patches/elfutils-0.158-CVE-2014-0172.patch @@ -0,0 +1,28 @@ +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/packages/devel/elfutils/patches/elfutils-0.158-mod-e_type.patch b/packages/devel/elfutils/patches/elfutils-0.158-mod-e_type.patch new file mode 100644 index 0000000000..5e2918fc7e --- /dev/null +++ b/packages/devel/elfutils/patches/elfutils-0.158-mod-e_type.patch @@ -0,0 +1,62 @@ +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/packages/devel/elfutils/patches/elfutils-no_textrel_check.patch b/packages/devel/elfutils/patches/elfutils-no_textrel_check.patch deleted file mode 100644 index d2d0c9d6ad..0000000000 --- a/packages/devel/elfutils/patches/elfutils-no_textrel_check.patch +++ /dev/null @@ -1,77 +0,0 @@ -diff -Naur elfutils-0.155/libasm/Makefile.am elfutils-0.155.patch/libasm/Makefile.am ---- elfutils-0.155/libasm/Makefile.am 2012-08-27 20:27:31.000000000 +0200 -+++ elfutils-0.155.patch/libasm/Makefile.am 2013-03-05 18:11:43.841545009 +0100 -@@ -69,7 +69,6 @@ - -Wl,--version-script,$(srcdir)/libasm.map,--no-undefined \ - -Wl,--soname,$@.$(VERSION) \ - ../libebl/libebl.a ../libelf/libelf.so $(libasm_so_LDLIBS) -- if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi - ln -fs $@ $@.$(VERSION) - - install: install-am libasm.so -diff -Naur elfutils-0.155/libasm/Makefile.in elfutils-0.155.patch/libasm/Makefile.in ---- elfutils-0.155/libasm/Makefile.in 2012-08-27 20:29:45.000000000 +0200 -+++ elfutils-0.155.patch/libasm/Makefile.in 2013-03-05 18:12:05.604432305 +0100 -@@ -654,7 +654,6 @@ - @MUDFLAP_FALSE@ -Wl,--version-script,$(srcdir)/libasm.map,--no-undefined \ - @MUDFLAP_FALSE@ -Wl,--soname,$@.$(VERSION) \ - @MUDFLAP_FALSE@ ../libebl/libebl.a ../libelf/libelf.so $(libasm_so_LDLIBS) --@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi - @MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION) - - @MUDFLAP_FALSE@install: install-am libasm.so -diff -Naur elfutils-0.155/libdw/Makefile.am elfutils-0.155.patch/libdw/Makefile.am ---- elfutils-0.155/libdw/Makefile.am 2012-08-27 20:27:31.000000000 +0200 -+++ elfutils-0.155.patch/libdw/Makefile.am 2013-03-05 18:12:26.753322780 +0100 -@@ -112,7 +112,6 @@ - -Wl,--version-script,$<,--no-undefined \ - -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\ - -ldl $(zip_LIBS) -- if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi - ln -fs $@ $@.$(VERSION) - - install: install-am libdw.so -diff -Naur elfutils-0.155/libdw/Makefile.in elfutils-0.155.patch/libdw/Makefile.in ---- elfutils-0.155/libdw/Makefile.in 2012-08-27 20:29:45.000000000 +0200 -+++ elfutils-0.155.patch/libdw/Makefile.in 2013-03-05 18:12:41.272246520 +0100 -@@ -844,7 +844,6 @@ - @MUDFLAP_FALSE@ -Wl,--version-script,$<,--no-undefined \ - @MUDFLAP_FALSE@ -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\ - @MUDFLAP_FALSE@ -ldl $(zip_LIBS) --@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi - @MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION) - - @MUDFLAP_FALSE@install: install-am libdw.so -diff -Naur elfutils-0.155/libelf/Makefile.am elfutils-0.155.patch/libelf/Makefile.am ---- elfutils-0.155/libelf/Makefile.am 2012-08-27 20:27:31.000000000 +0200 -+++ elfutils-0.155.patch/libelf/Makefile.am 2013-03-05 18:13:23.328024851 +0100 -@@ -106,7 +106,6 @@ - $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ - -Wl,--version-script,$(srcdir)/libelf.map,--no-undefined \ - -Wl,--soname,$@.$(VERSION),-z,defs,-z,relro $(libelf_so_LDLIBS) -- if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi - ln -fs $@ $@.$(VERSION) - - install: install-am libelf.so -diff -Naur elfutils-0.155/libelf/Makefile.in elfutils-0.155.patch/libelf/Makefile.in ---- elfutils-0.155/libelf/Makefile.in 2012-08-27 20:29:45.000000000 +0200 -+++ elfutils-0.155.patch/libelf/Makefile.in 2013-03-05 18:13:37.270951393 +0100 -@@ -830,7 +830,6 @@ - @MUDFLAP_FALSE@ $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ - @MUDFLAP_FALSE@ -Wl,--version-script,$(srcdir)/libelf.map,--no-undefined \ - @MUDFLAP_FALSE@ -Wl,--soname,$@.$(VERSION),-z,defs,-z,relro $(libelf_so_LDLIBS) --@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi - @MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION) - - @MUDFLAP_FALSE@install: install-am libelf.so -diff -Naur elfutils-0.155/src/Makefile.in elfutils-0.155.patch/src/Makefile.in ---- elfutils-0.155/src/Makefile.in 2012-08-27 20:29:46.000000000 +0200 -+++ elfutils-0.155.patch/src/Makefile.in 2013-03-05 18:14:22.361713943 +0100 -@@ -867,7 +867,6 @@ - @NATIVE_LD_FALSE@ $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ - @NATIVE_LD_FALSE@ $(libelf) $(libeu) \ - @NATIVE_LD_FALSE@ -Wl,--version-script,$(srcdir)/libld_elf_i386.map --@NATIVE_LD_FALSE@ $(textrel_check) - - # Special rule to make it possible to define libld_elf_a_SOURCES as we do. - # Otherwise make would complain. diff --git a/packages/devel/elfutils/patches/elfutils-only_libdw_libelf.patch b/packages/devel/elfutils/patches/elfutils-only_libdw_libelf.patch deleted file mode 100644 index bd9a771a03..0000000000 --- a/packages/devel/elfutils/patches/elfutils-only_libdw_libelf.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff -Naur elfutils-0.155/Makefile.am elfutils-0.155.patch/Makefile.am ---- elfutils-0.155/Makefile.am 2012-08-27 20:27:31.000000000 +0200 -+++ elfutils-0.155.patch/Makefile.am 2013-03-05 18:38:47.565095550 +0100 -@@ -23,8 +23,7 @@ - pkginclude_HEADERS = version.h - - # Add doc back when we have some real content. --SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends \ -- src po tests -+SUBDIRS = config m4 lib libelf libebl libdwfl libdw - - EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ - COPYING COPYING-GPLV2 COPYING-LGPLV3 -diff -Naur elfutils-0.155/Makefile.in elfutils-0.155.patch/Makefile.in ---- elfutils-0.155/Makefile.in 2012-08-27 20:29:45.000000000 +0200 -+++ elfutils-0.155.patch/Makefile.in 2013-03-05 18:39:11.176974119 +0100 -@@ -256,8 +256,7 @@ - pkginclude_HEADERS = version.h - - # Add doc back when we have some real content. --SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends \ -- src po tests -+SUBDIRS = config m4 lib libelf libebl libdwfl libdw - - EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ - COPYING COPYING-GPLV2 COPYING-LGPLV3 diff --git a/packages/devel/elfutils/patches/elfutils-00-portability.patch b/packages/devel/elfutils/patches/elfutils-portability.patch similarity index 79% rename from packages/devel/elfutils/patches/elfutils-00-portability.patch rename to packages/devel/elfutils/patches/elfutils-portability.patch index dd9eeb2238..a34ba29eac 100644 --- a/packages/devel/elfutils/patches/elfutils-00-portability.patch +++ b/packages/devel/elfutils/patches/elfutils-portability.patch @@ -1,6 +1,6 @@ --- elfutils/backends/ChangeLog +++ elfutils/backends/ChangeLog -@@ -135,6 +135,10 @@ +@@ -292,6 +292,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 -@@ -462,6 +466,11 @@ +@@ -619,6 +623,11 @@ * sparc_init.c: Likewise. * x86_64_init.c: Likewise. @@ -23,7 +23,7 @@ 2005-11-19 Roland McGrath * ppc64_reloc.def: REL30 -> ADDR30. -@@ -484,6 +493,9 @@ +@@ -641,6 +650,9 @@ * Makefile.am (uninstall): Don't try to remove $(pkgincludedir). (CLEANFILES): Add libebl_$(m).so. @@ -35,7 +35,7 @@ --- elfutils/backends/Makefile.am +++ elfutils/backends/Makefile.am -@@ -111,7 +111,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a +@@ -124,7 +124,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) \ @@ -46,17 +46,17 @@ libebl_i386.so: $(cpu_i386) --- elfutils/backends/Makefile.in +++ elfutils/backends/Makefile.in -@@ -38,7 +38,8 @@ build_triplet = @build@ - host_triplet = @host@ - DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog +@@ -83,7 +83,8 @@ 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/nls.m4 $(top_srcdir)/m4/po.m4 \ -@@ -172,6 +173,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -284,6 +285,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -64,7 +64,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -201,6 +203,7 @@ SHELL = @SHELL@ +@@ -315,6 +317,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -72,7 +72,7 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -263,10 +266,9 @@ INCLUDES = -I. -I$(srcdir) -I$(top_srcdi +@@ -378,10 +381,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ @@ -85,7 +85,7 @@ @MUDFLAP_FALSE@libmudflap = @MUDFLAP_TRUE@libmudflap = -lmudflap COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -719,7 +721,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a +@@ -888,7 +890,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) \ @@ -96,7 +96,7 @@ libebl_i386.so: $(cpu_i386) --- elfutils/ChangeLog +++ elfutils/ChangeLog -@@ -16,6 +16,8 @@ +@@ -118,6 +118,8 @@ 2012-01-24 Mark Wielaard @@ -105,7 +105,7 @@ * COPYING: Fix address. Updated version from gnulib. 2012-01-23 Mark Wielaard -@@ -34,6 +36,9 @@ +@@ -136,6 +138,9 @@ 2011-10-08 Mike Frysinger @@ -115,7 +115,7 @@ * configure.ac: Fix use of AC_ARG_ENABLE to handle $enableval correctly. 2011-10-02 Ulrich Drepper -@@ -55,6 +60,10 @@ +@@ -157,6 +162,10 @@ * configure.ac (LOCALEDIR, DATADIRNAME): Removed. @@ -126,7 +126,7 @@ 2009-09-21 Ulrich Drepper * configure.ac: Update for more modern autoconf. -@@ -63,6 +72,10 @@ +@@ -165,6 +174,10 @@ * configure.ac (zip_LIBS): Check for liblzma too. @@ -137,7 +137,7 @@ 2009-04-19 Roland McGrath * configure.ac (eu_version): Round down here, not in version.h macros. -@@ -74,6 +87,8 @@ +@@ -176,6 +189,8 @@ 2009-01-23 Roland McGrath @@ -146,7 +146,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 -@@ -154,6 +169,10 @@ +@@ -256,6 +271,10 @@ * configure.ac: Add dummy automake conditional to get dependencies for non-generic linker right. See src/Makefile.am. @@ -157,7 +157,7 @@ 2005-11-18 Roland McGrath * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New variable. -@@ -201,6 +220,17 @@ +@@ -303,6 +322,17 @@ * Makefile.am (all_SUBDIRS): Add libdwfl. * configure.ac: Write libdwfl/Makefile. @@ -177,7 +177,7 @@ * configure.ac [AH_BOTTOM] (INTDECL, _INTDECL): New macros. --- elfutils/config/ChangeLog +++ elfutils/config/ChangeLog -@@ -19,6 +19,10 @@ +@@ -44,6 +44,10 @@ * known-dwarf.awk: Use gawk. @@ -206,7 +206,7 @@ +LD_AS_NEEDED = @LD_AS_NEEDED@ + DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' - INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. + AM_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) \ @@ -223,7 +223,7 @@ libmudflap = -lmudflap --- elfutils/config/Makefile.in +++ elfutils/config/Makefile.in -@@ -76,6 +76,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -146,6 +146,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -231,7 +231,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -105,6 +106,7 @@ SHELL = @SHELL@ +@@ -177,6 +178,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -248,10 +248,10 @@ +/* Have __builtin_popcount. */ +#undef HAVE_BUILTIN_POPCOUNT + - /* $libdir subdirectory containing libebl modules. */ - #undef LIBEBL_SUBDIR + /* Define to 1 if you have the header file. */ + #undef HAVE_INTTYPES_H -@@ -64,4 +67,7 @@ +@@ -102,4 +105,7 @@ /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES @@ -261,7 +261,7 @@ #include --- elfutils/configure +++ elfutils/configure -@@ -598,6 +598,8 @@ ZLIB_TRUE +@@ -661,6 +661,8 @@ ZLIB_TRUE LIBEBL_SUBDIR TESTS_RPATH_FALSE TESTS_RPATH_TRUE @@ -269,33 +269,33 @@ +BUILD_WERROR_TRUE BUILD_STATIC_FALSE BUILD_STATIC_TRUE - GCOV_FALSE -@@ -612,6 +614,8 @@ NEVER_TRUE + USE_VALGRIND_FALSE +@@ -678,6 +680,8 @@ NEVER_TRUE base_cpu NATIVE_LD_FALSE NATIVE_LD_TRUE +LD_AS_NEEDED +WEXTRA - LEXLIB - LEX_OUTPUT_ROOT - LEX -@@ -725,6 +729,7 @@ enable_mudflap - enable_debugpred + NM + READELF + ac_ct_AR +@@ -802,6 +806,7 @@ enable_debugpred enable_gprof enable_gcov + enable_valgrind +enable_werror enable_tests_rpath enable_libebl_subdir with_zlib -@@ -1378,6 +1383,7 @@ Optional Features: - prediction +@@ -1461,6 +1466,7 @@ Optional Features: --enable-gprof build binaries with gprof support --enable-gcov build binaries with gcov support + --enable-valgrind run all tests under valgrind + --disable-werror do not build with -Werror --enable-tests-rpath build $ORIGIN-using rpath into tests --enable-libebl-subdir=DIR install libebl_CPU modules in $(libdir)/DIR -@@ -3917,6 +3923,130 @@ if test "x$ac_cv_c99" != xyes; then : +@@ -4709,6 +4715,130 @@ if test "x$ac_cv_c99" != xyes; then : as_fn_error $? "gcc with C99 support required" "$LINENO" 5 fi @@ -426,7 +426,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 : -@@ -3953,7 +4083,13 @@ fi +@@ -4745,7 +4875,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 +441,7 @@ fi # Check whether --enable-largefile was given. -@@ -4302,6 +4438,22 @@ else +@@ -5155,6 +5291,22 @@ else fi @@ -464,16 +464,16 @@ # Check whether --enable-tests-rpath was given. if test "${enable_tests_rpath+set}" = set; then : enableval=$enable_tests_rpath; tests_use_rpath=$enableval -@@ -5022,7 +5174,7 @@ case "$eu_version" in +@@ -5875,7 +6027,7 @@ case "$eu_version" in esac # Round up to the next release API (x.y) version. -eu_version=$(( (eu_version + 999) / 1000 )) +eu_version=`expr \( $eu_version + 999 \) / 1000` - cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure -@@ -5185,6 +5337,10 @@ if test -z "${BUILD_STATIC_TRUE}" && tes + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' +@@ -6613,6 +6765,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 +486,7 @@ Usually this means the macro was only invoked conditionally." "$LINENO" 5 --- elfutils/configure.ac +++ elfutils/configure.ac -@@ -90,6 +90,54 @@ CFLAGS="$old_CFLAGS"]) +@@ -99,6 +99,54 @@ CFLAGS="$old_CFLAGS"]) AS_IF([test "x$ac_cv_c99" != xyes], AC_MSG_ERROR([gcc with C99 support required])) @@ -541,7 +541,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. -@@ -105,7 +153,10 @@ static __thread int a; int foo (int b) { +@@ -114,7 +162,10 @@ static __thread int a; int foo (int b) { CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS"]) AS_IF([test "x$ac_cv_tls" != xyes], @@ -553,7 +553,7 @@ 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 -@@ -193,6 +244,11 @@ AM_CONDITIONAL(GCOV, test "$use_gcov" = +@@ -213,6 +264,11 @@ AM_CONDITIONAL(USE_VALGRIND, test "$use_ AM_CONDITIONAL(BUILD_STATIC, [dnl test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes]) @@ -565,17 +565,18 @@ 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]) -@@ -304,6 +360,6 @@ case "$eu_version" in +@@ -324,7 +380,7 @@ case "$eu_version" in esac # Round up to the next release API (x.y) version. -eu_version=$(( (eu_version + 999) / 1000 )) +eu_version=`expr \( $eu_version + 999 \) / 1000` - AC_OUTPUT + AC_CHECK_SIZEOF(long) + --- elfutils/lib/ChangeLog +++ elfutils/lib/ChangeLog -@@ -35,6 +35,9 @@ +@@ -61,6 +61,9 @@ 2009-01-23 Roland McGrath @@ -585,7 +586,7 @@ * eu-config.h: Add multiple inclusion protection. 2009-01-17 Ulrich Drepper -@@ -91,6 +94,11 @@ +@@ -117,6 +120,11 @@ * Makefile.am (libeu_a_SOURCES): Add it. * system.h: Declare crc32_file. @@ -619,17 +620,17 @@ # define OLD_VERSION(name, version) \ --- elfutils/lib/Makefile.in +++ elfutils/lib/Makefile.in -@@ -37,7 +37,8 @@ build_triplet = @build@ - host_triplet = @host@ - DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog +@@ -82,7 +82,8 @@ 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/nls.m4 $(top_srcdir)/m4/po.m4 \ -@@ -100,6 +101,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -198,6 +199,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -637,7 +638,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -129,6 +131,7 @@ SHELL = @SHELL@ +@@ -229,6 +231,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -645,8 +646,8 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -190,10 +193,9 @@ zip_LIBS = @zip_LIBS@ - INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +@@ -291,10 +294,9 @@ 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 \ @@ -660,7 +661,7 @@ COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ --- elfutils/libasm/ChangeLog +++ elfutils/libasm/ChangeLog -@@ -71,6 +71,11 @@ +@@ -75,6 +75,11 @@ * asm_error.c: Add new error ASM_E_IOERROR. * libasmP.h: Add ASM_E_IOERROR definition. @@ -674,10 +675,10 @@ * Makefile.am (AM_CFLAGS): Add -Wunused -Wextra -Wformat=2. --- elfutils/libasm/Makefile.in +++ elfutils/libasm/Makefile.in -@@ -39,10 +39,11 @@ host_triplet = @host@ - DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog +@@ -83,10 +83,11 @@ 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 @@ -687,8 +688,8 @@ +@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_3 = -lpthread subdir = libasm ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 - am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ -@@ -147,6 +148,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -250,6 +251,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -696,7 +697,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -176,6 +178,7 @@ SHELL = @SHELL@ +@@ -281,6 +283,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -704,7 +705,7 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -238,10 +241,9 @@ INCLUDES = -I. -I$(srcdir) -I$(top_srcdi +@@ -344,10 +347,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl \ -I$(top_srcdir)/libdw AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ @@ -717,7 +718,7 @@ @MUDFLAP_FALSE@libmudflap = @MUDFLAP_TRUE@libmudflap = -lmudflap COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -270,7 +272,7 @@ libasm_a_SOURCES = asm_begin.c asm_abort +@@ -376,7 +378,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) @@ -728,7 +729,7 @@ EXTRA_DIST = libasm.map --- elfutils/libcpu/ChangeLog +++ elfutils/libcpu/ChangeLog -@@ -38,6 +38,9 @@ +@@ -47,6 +47,9 @@ 2009-01-23 Roland McGrath @@ -738,7 +739,7 @@ * Makefile.am (i386_parse_CFLAGS): Use quotes around command substitution that can produce leading whitespace. -@@ -367,6 +370,11 @@ +@@ -376,6 +379,11 @@ * defs/i386.doc: New file. * defs/x86_64: New file. @@ -762,17 +763,17 @@ else --- elfutils/libcpu/Makefile.in +++ elfutils/libcpu/Makefile.in -@@ -39,7 +39,8 @@ host_triplet = @host@ - DIST_COMMON = $(am__noinst_HEADERS_DIST) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog \ - i386_lex.c i386_parse.c +@@ -84,7 +84,8 @@ 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 -@@ -117,6 +118,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -225,6 +226,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -780,7 +781,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = lex.$( * libdw.h (dwarf_offdie): Fix documentation to mention .debug_info. -@@ -441,6 +445,10 @@ +@@ -705,6 +709,10 @@ * dwarf_hasattr_integrate.c: Integrate DW_AT_specification too. @@ -825,7 +826,7 @@ 2009-08-10 Roland McGrath * dwarf_getscopevar.c: Use dwarf_diename. -@@ -1209,6 +1217,11 @@ +@@ -1473,6 +1481,11 @@ 2005-05-31 Roland McGrath @@ -856,7 +857,7 @@ #endif --- elfutils/libdw/libdw.h +++ elfutils/libdw/libdw.h -@@ -831,7 +831,7 @@ extern Dwarf_OOM dwarf_new_oom_handler ( +@@ -879,7 +879,7 @@ extern Dwarf_OOM dwarf_new_oom_handler ( /* Inline optimizations. */ @@ -867,10 +868,10 @@ dwarf_whatattr (Dwarf_Attribute *attr) --- elfutils/libdw/Makefile.in +++ elfutils/libdw/Makefile.in -@@ -39,8 +39,9 @@ host_triplet = @host@ - DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ - $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog +@@ -84,8 +84,9 @@ 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_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) @@ -879,7 +880,7 @@ @MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) @MUDFLAP_TRUE@am_libdw_pic_a_OBJECTS = subdir = libdw -@@ -192,6 +193,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -295,6 +296,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -887,7 +888,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -221,6 +223,7 @@ SHELL = @SHELL@ +@@ -326,6 +328,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -895,8 +896,8 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -282,10 +285,9 @@ zip_LIBS = @zip_LIBS@ - INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +@@ -388,10 +391,9 @@ 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 \ @@ -910,7 +911,29 @@ COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ --- elfutils/libdwfl/ChangeLog +++ elfutils/libdwfl/ChangeLog -@@ -1420,6 +1420,11 @@ +@@ -283,6 +283,21 @@ + (dwfl_module_addrsym) (i_to_symfile): New function. + (dwfl_module_addrsym) (search_table): Use it. + ++2013-11-09 Jan Kratochvil ++ ++ Older OS compatibility bits. ++ * linux-core-attach.c (be64toh, le64toh, be32toh, le32toh): Provide ++ fallbacks if not defined by system. ++ ++2013-11-09 Jan Kratochvil ++ ++ Handle T-stopped detach for old kernels. ++ * linux-pid-attach.c (struct pid_arg): New field stopped. ++ (ptrace_attach): New parameter stoppedp. Set it appropriately. ++ (pid_set_initial_registers): Pass the new field. ++ (pid_thread_detach): Handle the case of STOPPED for old kernels. ++ (__libdwfl_attach_state_for_pid): Initialize STOPPED. ++ + 2013-11-07 Jan Kratochvil + Mark Wielaard + +@@ -2048,6 +2063,11 @@ 2005-07-21 Roland McGrath @@ -922,12 +945,81 @@ * Makefile.am (noinst_HEADERS): Add loc2c.c. * test2.c (main): Check sscanf result to quiet warning. +--- elfutils/libdwfl/linux-core-attach.c ++++ elfutils/libdwfl/linux-core-attach.c +@@ -29,6 +29,35 @@ + #include "libdwflP.h" + #include + #include "system.h" ++#include ++#include ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++# ifndef be64toh ++# define be64toh(x) bswap_64 (x) ++# endif ++# ifndef le64toh ++# define le64toh(x) (x) ++# endif ++# ifndef be32toh ++# define be32toh(x) bswap_32 (x) ++# endif ++# ifndef le32toh ++# define le32toh(x) (x) ++# endif ++#else ++# ifndef be64toh ++# define be64toh(x) (x) ++# endif ++# ifndef le64toh ++# define le64toh(x) bswap_64 (x) ++# endif ++# ifndef be32toh ++# define be32toh(x) (x) ++# endif ++# ifndef le32toh ++# define le32toh(x) bswap_32 (x) ++# endif ++#endif + + #ifndef MIN + # 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; ++ } + } + } + --- elfutils/libdwfl/Makefile.in +++ elfutils/libdwfl/Makefile.in -@@ -38,11 +38,12 @@ host_triplet = @host@ - DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog +@@ -82,11 +82,12 @@ 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 @@ -942,7 +1034,7 @@ @MUDFLAP_TRUE@am_libdwfl_pic_a_OBJECTS = subdir = libdwfl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -182,6 +183,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -289,6 +290,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -950,7 +1042,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -211,6 +213,7 @@ SHELL = @SHELL@ +@@ -320,6 +322,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -958,7 +1050,7 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -273,10 +276,9 @@ INCLUDES = -I. -I$(srcdir) -I$(top_srcdi +@@ -383,10 +386,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ -I$(srcdir)/../libdw AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ @@ -971,29 +1063,29 @@ @MUDFLAP_FALSE@libmudflap = @MUDFLAP_TRUE@libmudflap = -lmudflap COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -284,7 +286,7 @@ COMPILE.os = $(filter-out -fprofile-arcs +@@ -394,7 +396,7 @@ COMPILE.os = $(filter-out -fprofile-arcs CLEANFILES = *.gcno *.gcda $(am_libdwfl_pic_a_OBJECTS) - textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi + 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 \ -@@ -305,8 +307,8 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_en - dwfl_module_getsym.c dwfl_module_addrname.c \ - dwfl_module_addrsym.c dwfl_module_return_value_location.c \ +@@ -417,8 +419,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 $(am__append_3) \ + 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) -+ link_map.c core-file.c open.c image-header.c $(am__append_4) \ ++ 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 --- elfutils/libebl/ChangeLog +++ elfutils/libebl/ChangeLog -@@ -658,6 +658,11 @@ +@@ -738,6 +738,11 @@ * Makefile.am (libebl_*_so_SOURCES): Set to $(*_SRCS) so dependency tracking works right. @@ -1007,17 +1099,17 @@ * libebl_x86_64.map: Add x86_64_core_note. --- elfutils/libebl/Makefile.in +++ elfutils/libebl/Makefile.in -@@ -38,7 +38,8 @@ host_triplet = @host@ - DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog +@@ -82,7 +82,8 @@ 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/nls.m4 $(top_srcdir)/m4/po.m4 \ -@@ -144,6 +145,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -249,6 +250,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1025,7 +1117,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -173,6 +175,7 @@ SHELL = @SHELL@ +@@ -280,6 +282,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -1033,7 +1125,7 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -235,10 +238,9 @@ INCLUDES = -I. -I$(srcdir) -I$(top_srcdi +@@ -343,10 +346,9 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_sr -I$(srcdir)/../libelf -I$(srcdir)/../libdw \ -I$(srcdir)/../libasm AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ @@ -1048,7 +1140,7 @@ COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ --- elfutils/libelf/ChangeLog +++ elfutils/libelf/ChangeLog -@@ -34,6 +34,11 @@ +@@ -85,6 +85,11 @@ * elf-knowledge.h (SECTION_STRIP_P): Remove < SHT_NUM check. @@ -1060,7 +1152,7 @@ 2011-02-26 Mark Wielaard * elf_end.c (elf_end): Call rwlock_unlock before rwlock_fini. -@@ -711,6 +716,11 @@ +@@ -762,6 +767,11 @@ * elf.h: Update from glibc. @@ -1114,10 +1206,10 @@ } --- elfutils/libelf/Makefile.in +++ elfutils/libelf/Makefile.in -@@ -39,11 +39,12 @@ host_triplet = @host@ - DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ - $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog +@@ -84,11 +84,12 @@ 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_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) @@ -1129,8 +1221,8 @@ +@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_4 = -lpthread subdir = libelf ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 - am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ -@@ -189,6 +190,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -293,6 +294,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1138,7 +1230,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -218,6 +220,7 @@ SHELL = @SHELL@ +@@ -324,6 +326,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = 1 @@ -1146,9 +1238,9 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -278,10 +281,9 @@ top_srcdir = @top_srcdir@ +@@ -385,10 +388,9 @@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ - INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. + 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 \ @@ -1159,7 +1251,7 @@ @MUDFLAP_FALSE@libmudflap = @MUDFLAP_TRUE@libmudflap = -lmudflap COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -346,7 +348,7 @@ libelf_a_SOURCES = elf_version.c elf_has +@@ -453,7 +455,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) @@ -1170,7 +1262,7 @@ version_xlate.h gnuhash_xlate.h note_xlate.h dl-hash.h --- elfutils/m4/Makefile.in +++ elfutils/m4/Makefile.in -@@ -75,6 +75,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -145,6 +145,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1178,7 +1270,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -104,6 +105,7 @@ SHELL = @SHELL@ +@@ -176,6 +177,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -1188,7 +1280,7 @@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ --- elfutils/Makefile.in +++ elfutils/Makefile.in -@@ -155,6 +155,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -263,6 +263,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1196,7 +1288,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -184,6 +185,7 @@ SHELL = @SHELL@ +@@ -294,6 +295,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -1206,7 +1298,7 @@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ --- elfutils/src/addr2line.c +++ elfutils/src/addr2line.c -@@ -447,10 +447,10 @@ handle_address (const char *string, Dwfl +@@ -540,10 +540,10 @@ handle_address (const char *string, Dwfl bool parsed = false; int i, j; char *name = NULL; @@ -1221,7 +1313,7 @@ break; --- elfutils/src/ChangeLog +++ elfutils/src/ChangeLog -@@ -606,8 +606,16 @@ +@@ -964,8 +964,16 @@ * readelf.c (attr_callback): Use print_block only when we don't use print_ops. @@ -1238,7 +1330,7 @@ * ar.c (do_oper_extract): Use pathconf instead of statfs. 2009-08-01 Ulrich Drepper -@@ -771,6 +779,8 @@ +@@ -1129,6 +1137,8 @@ * readelf.c (print_debug_frame_section): Use t instead of j formats for ptrdiff_t OFFSET. @@ -1247,7 +1339,7 @@ 2009-01-21 Ulrich Drepper * elflint.c (check_program_header): Fix typo in .eh_frame_hdr section -@@ -954,6 +964,11 @@ +@@ -1312,6 +1322,11 @@ that matches its PT_LOAD's p_flags &~ PF_W. On sparc, PF_X really is valid in RELRO. @@ -1259,7 +1351,7 @@ 2008-02-29 Roland McGrath * readelf.c (print_attributes): Add a cast. -@@ -1205,6 +1220,8 @@ +@@ -1563,6 +1578,8 @@ * readelf.c (hex_dump): Fix rounding error in whitespace calculation. @@ -1268,7 +1360,7 @@ 2007-10-15 Roland McGrath * make-debug-archive.in: New file. -@@ -1644,6 +1661,10 @@ +@@ -2002,6 +2019,10 @@ * elflint.c (valid_e_machine): Add EM_ALPHA. Reported by Christian Aichinger . @@ -1279,7 +1371,7 @@ 2006-08-08 Ulrich Drepper * elflint.c (check_dynamic): Don't require DT_HASH for DT_SYMTAB. -@@ -1720,6 +1741,10 @@ +@@ -2078,6 +2099,10 @@ * Makefile.am: Add hacks to create dependency files for non-generic linker. @@ -1290,7 +1382,7 @@ 2006-06-12 Ulrich Drepper * ldgeneric.c (ld_generic_generate_sections): Don't create .interp -@@ -2068,6 +2093,11 @@ +@@ -2426,6 +2451,11 @@ * readelf.c (print_debug_loc_section): Fix indentation for larger address size. @@ -1348,17 +1440,17 @@ $(demanglelib) --- elfutils/src/Makefile.in +++ elfutils/src/Makefile.in -@@ -40,7 +40,8 @@ host_triplet = @host@ - DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog \ - ldlex.c ldscript.c +@@ -85,7 +85,8 @@ 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) \ -@@ -49,9 +50,9 @@ bin_PROGRAMS = readelf$(EXEEXT) nm$(EXEE +@@ -94,9 +95,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. @@ -1370,7 +1462,7 @@ @NATIVE_LD_TRUE@am_libld_elf_i386_pic_a_OBJECTS = subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -115,7 +116,7 @@ am_ld_OBJECTS = ld.$(OBJEXT) ldgeneric.$ +@@ -164,7 +165,7 @@ am_ld_OBJECTS = ld.$(OBJEXT) ldgeneric.$ versionhash.$(OBJEXT) ld_OBJECTS = $(am_ld_OBJECTS) ld_DEPENDENCIES = $(libebl) $(libelf) $(libeu) $(am__DEPENDENCIES_1) \ @@ -1379,7 +1471,7 @@ ld_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(ld_LDFLAGS) $(LDFLAGS) -o \ $@ am_libld_elf_i386_so_OBJECTS = -@@ -229,6 +230,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -347,6 +348,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1387,7 +1479,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -258,6 +260,7 @@ SHELL = @SHELL@ +@@ -378,6 +380,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -1395,7 +1487,7 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -321,10 +324,9 @@ INCLUDES = -I. -I$(srcdir) -I$(top_srcdi +@@ -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 \ @@ -1408,7 +1500,7 @@ @MUDFLAP_FALSE@libmudflap = @MUDFLAP_TRUE@libmudflap = -lmudflap COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -340,8 +342,8 @@ AM_LFLAGS = -Pld -olex.yy.c +@@ -461,8 +463,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) \ @@ -1419,7 +1511,7 @@ @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 \ -@@ -370,6 +372,9 @@ strings_no_Wformat = yes +@@ -491,6 +493,9 @@ strings_no_Wformat = yes addr2line_no_Wformat = yes # XXX While the file is not finished, don't warn about this ldgeneric_no_Wunused = yes @@ -1429,7 +1521,7 @@ readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ $(demanglelib) -@@ -377,7 +382,7 @@ nm_LDADD = $(libdw) $(libebl) $(libelf) +@@ -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 \ @@ -1440,11 +1532,12 @@ findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) --- elfutils/src/readelf.c +++ elfutils/src/readelf.c -@@ -3949,10 +3949,11 @@ struct listptr - #define listptr_offset_size(p) ((p)->dwarf64 ? 8 : 4) - #define listptr_address_size(p) ((p)->addr64 ? 8 : 4) +@@ -4171,10 +4171,12 @@ listptr_base (struct listptr *p) + return base; + } +static const char *listptr_name; ++ static int -compare_listptr (const void *a, const void *b, void *arg) +compare_listptr (const void *a, const void *b) @@ -1454,7 +1547,7 @@ struct listptr *p1 = (void *) a; struct listptr *p2 = (void *) b; -@@ -4033,8 +4034,11 @@ static void +@@ -4263,8 +4265,11 @@ static void sort_listptr (struct listptr_table *table, const char *name) { if (table->n > 0) @@ -1468,7 +1561,7 @@ } static bool -@@ -8442,7 +8446,7 @@ dump_archive_index (Elf *elf, const char +@@ -9151,7 +9156,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)) @@ -1550,7 +1643,7 @@ } /* Open the file. */ -@@ -2055,7 +2071,7 @@ while computing checksum for debug infor +@@ -2060,7 +2076,7 @@ while computing checksum for debug infor /* If requested, preserve the timestamp. */ if (tvp != NULL) { @@ -1559,7 +1652,7 @@ { error (0, errno, gettext ("\ cannot set access and modification date of '%s'"), -@@ -2112,7 +2128,7 @@ handle_ar (int fd, Elf *elf, const char +@@ -2117,7 +2133,7 @@ handle_ar (int fd, Elf *elf, const char if (tvp != NULL) { @@ -1568,9 +1661,33 @@ { error (0, errno, gettext ("\ cannot set access and modification date of '%s'"), fname); +--- elfutils/tests/backtrace.c ++++ elfutils/tests/backtrace.c +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + #include ELFUTILS_HEADER(dwfl) + + static int --- elfutils/tests/ChangeLog +++ elfutils/tests/ChangeLog -@@ -439,6 +439,8 @@ +@@ -123,6 +123,13 @@ + + 2013-12-02 Jan Kratochvil + ++ Handle T-stopped detach for old kernels. ++ * backtrace.c: Include sys/syscall.h. ++ (linux_proc_pid_is_stopped): New function. ++ (ptrace_detach_stopped): Handle old kernels. ++ ++2013-12-02 Jan Kratochvil ++ + * 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 @@ 2008-01-21 Roland McGrath @@ -1579,7 +1696,7 @@ * testfile45.S.bz2: Add tests for cltq, cqto. * testfile45.expect.bz2: Adjust. -@@ -1147,6 +1149,11 @@ +@@ -1695,6 +1704,11 @@ * Makefile.am (TESTS): Add run-elflint-test.sh. (EXTRA_DIST): Add run-elflint-test.sh and testfile18.bz2. @@ -1604,10 +1721,10 @@ case 0: --- elfutils/tests/Makefile.in +++ elfutils/tests/Makefile.in -@@ -35,14 +35,15 @@ build_triplet = @build@ - host_triplet = @host@ - DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog +@@ -80,14 +80,15 @@ 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 \ +@BUILD_WERROR_TRUE@am__append_1 = $(if $($(*F)_no_Werror),,-Werror) @@ -1624,24 +1741,37 @@ check_PROGRAMS = arextract$(EXEEXT) arsymtest$(EXEEXT) \ newfile$(EXEEXT) saridx$(EXEEXT) scnnames$(EXEEXT) \ sectiondump$(EXEEXT) showptable$(EXEEXT) update1$(EXEEXT) \ -@@ -92,12 +93,12 @@ TESTS = run-arextract.sh run-arsymtest.s - run-readelf-gdb_index.sh run-unstrip-n.sh run-low_high_pc.sh \ - run-macro-test.sh run-elf_cntl_gelf_getshdr.sh \ - run-test-archive64.sh $(am__EXEEXT_1) $(am__EXEEXT_3) \ -- $(am__append_9) --@STANDALONE_FALSE@am__append_5 = msg_tst md5-sha1-test -+ $(am__append_10) - @STANDALONE_FALSE@am__append_6 = msg_tst md5-sha1-test --@HAVE_LIBASM_TRUE@am__append_7 = $(asm_TESTS) -+@STANDALONE_FALSE@am__append_7 = msg_tst md5-sha1-test - @HAVE_LIBASM_TRUE@am__append_8 = $(asm_TESTS) --@ENABLE_DWZ_TRUE@am__append_9 = run-readelf-dwz-multi.sh -+@HAVE_LIBASM_TRUE@am__append_9 = $(asm_TESTS) -+@ENABLE_DWZ_TRUE@am__append_10 = run-readelf-dwz-multi.sh +@@ -111,7 +112,7 @@ check_PROGRAMS = arextract$(EXEEXT) arsy + varlocs$(EXEEXT) backtrace$(EXEEXT) backtrace-child$(EXEEXT) \ + backtrace-data$(EXEEXT) backtrace-dwarf$(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 + 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 +-@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 + @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/nls.m4 $(top_srcdir)/m4/po.m4 \ -@@ -412,6 +413,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ +@@ -780,6 +781,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ @@ -1649,7 +1779,7 @@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -@@ -441,6 +443,7 @@ SHELL = @SHELL@ +@@ -811,6 +813,7 @@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ @@ -1657,12 +1787,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -@@ -499,12 +502,11 @@ top_build_prefix = @top_build_prefix@ +@@ -870,12 +873,11 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ --INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_2) -+INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_3) +-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 \ @@ -1673,8 +1803,8 @@ @MUDFLAP_FALSE@libmudflap = @MUDFLAP_TRUE@libmudflap = -lmudflap COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ -@@ -514,7 +516,7 @@ CLEANFILES = *.gcno *.gcda - textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +@@ -885,7 +887,7 @@ 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) diff --git a/packages/devel/elfutils/patches/elfutils-00-robustify.patch b/packages/devel/elfutils/patches/elfutils-robustify.patch similarity index 94% rename from packages/devel/elfutils/patches/elfutils-00-robustify.patch rename to packages/devel/elfutils/patches/elfutils-robustify.patch index 9eee98412d..f358a85466 100644 --- a/packages/devel/elfutils/patches/elfutils-00-robustify.patch +++ b/packages/devel/elfutils/patches/elfutils-robustify.patch @@ -1,6 +1,6 @@ --- elfutils/libdwfl/ChangeLog +++ elfutils/libdwfl/ChangeLog -@@ -52,6 +52,11 @@ +@@ -680,6 +680,11 @@ * dwfl_module_getdwarf.c (open_elf): Clear errno before CBFAIL. Reported by Kurt Roeckx . @@ -21,7 +21,7 @@ This file is part of elfutils. This file is free software; you can redistribute it and/or modify -@@ -457,7 +457,10 @@ relocate_section (Dwfl_Module *mod, Elf +@@ -456,7 +456,10 @@ relocate_section (Dwfl_Module *mod, Elf } } @@ -33,7 +33,7 @@ size_t complete = 0; if (shdr->sh_type == SHT_REL) for (size_t relidx = 0; !result && relidx < nrels; ++relidx) -@@ -559,7 +562,7 @@ relocate_section (Dwfl_Module *mod, Elf +@@ -558,7 +561,7 @@ relocate_section (Dwfl_Module *mod, Elf nrels = next; } @@ -44,7 +44,7 @@ --- elfutils/libelf/ChangeLog +++ elfutils/libelf/ChangeLog -@@ -703,10 +703,53 @@ +@@ -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. @@ -253,7 +253,7 @@ --- elfutils/libelf/elf_getarsym.c +++ elfutils/libelf/elf_getarsym.c -@@ -181,6 +181,9 @@ elf_getarsym (elf, ptr) +@@ -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 @@ -902,7 +902,7 @@ #endif /* libelfP.h */ --- elfutils/src/ChangeLog +++ elfutils/src/ChangeLog -@@ -344,6 +344,12 @@ +@@ -702,6 +702,12 @@ * readelf.c (dwarf_attr_string): Grok DW_AT_GNU_odr_signature. @@ -915,7 +915,7 @@ 2011-02-11 Roland McGrath * elfcmp.c (verbose): New variable. -@@ -2056,6 +2062,16 @@ +@@ -2414,6 +2420,16 @@ object symbols or symbols with unknown type. (check_rel): Likewise. @@ -932,7 +932,7 @@ 2005-06-08 Roland McGrath * readelf.c (print_ops): Add consts. -@@ -2101,6 +2117,19 @@ +@@ -2459,6 +2475,19 @@ * readelf.c (dwarf_tag_string): Add new tags. @@ -1027,7 +1027,7 @@ } if (sym->st_shndx == SHN_XINDEX) -@@ -1032,9 +1042,11 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e +@@ -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); @@ -1041,7 +1041,7 @@ { /* Found the dynamic section. Look through it. */ Elf_Data *d = elf_getdata (scn, NULL); -@@ -1044,7 +1056,9 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e +@@ -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); @@ -1052,7 +1052,7 @@ if (dyn->d_tag == DT_RELCOUNT) { -@@ -1058,7 +1072,9 @@ section [%2d] '%s': DT_RELCOUNT used for +@@ -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? */ @@ -1063,7 +1063,7 @@ ERROR (gettext ("\ section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"), idx, section_name (ebl, idx), -@@ -1218,7 +1234,8 @@ section [%2d] '%s': no relocations for m +@@ -1226,7 +1242,8 @@ section [%2d] '%s': no relocations for m } } @@ -1073,7 +1073,7 @@ 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"), -@@ -1441,7 +1458,8 @@ check_rela (Ebl *ebl, GElf_Ehdr *ehdr, G +@@ -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; @@ -1083,7 +1083,7 @@ { GElf_Rela rela_mem; GElf_Rela *rela = gelf_getrela (data, cnt, &rela_mem); -@@ -1491,7 +1509,8 @@ check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GE +@@ -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; @@ -1093,7 +1093,7 @@ { GElf_Rel rel_mem; GElf_Rel *rel = gelf_getrel (data, cnt, &rel_mem); -@@ -1590,7 +1609,8 @@ section [%2d] '%s': referenced as string +@@ -1598,7 +1617,8 @@ section [%2d] '%s': referenced as string shdr->sh_link, section_name (ebl, shdr->sh_link), idx, section_name (ebl, idx)); @@ -1103,7 +1103,7 @@ ERROR (gettext ("\ section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"), idx, section_name (ebl, idx)); -@@ -1600,7 +1620,7 @@ section [%2d] '%s': section entry size d +@@ -1608,7 +1628,7 @@ section [%2d] '%s': section entry size d idx, section_name (ebl, idx)); bool non_null_warned = false; @@ -1112,7 +1112,7 @@ { GElf_Dyn dyn_mem; GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem); -@@ -1872,6 +1892,8 @@ section [%2d] '%s': entry size does not +@@ -1880,6 +1900,8 @@ section [%2d] '%s': entry size does not idx, section_name (ebl, idx)); if (symshdr != NULL @@ -1121,7 +1121,7 @@ && (shdr->sh_size / shdr->sh_entsize < symshdr->sh_size / symshdr->sh_entsize)) ERROR (gettext ("\ -@@ -1898,6 +1920,12 @@ section [%2d] '%s': extended section ind +@@ -1906,6 +1928,12 @@ section [%2d] '%s': extended section ind } Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL); @@ -1134,7 +1134,7 @@ if (*((Elf32_Word *) data->d_buf) != 0) ERROR (gettext ("symbol 0 should have zero extended section index\n")); -@@ -1940,7 +1968,7 @@ section [%2d] '%s': hash table section i +@@ -1948,7 +1976,7 @@ section [%2d] '%s': hash table section i size_t maxidx = nchain; @@ -1143,7 +1143,7 @@ { size_t symsize = symshdr->sh_size / symshdr->sh_entsize; -@@ -1951,18 +1979,28 @@ section [%2d] '%s': hash table section i +@@ -1959,18 +1987,28 @@ section [%2d] '%s': hash table section i maxidx = symsize; } @@ -1174,7 +1174,7 @@ } -@@ -1992,18 +2030,28 @@ section [%2d] '%s': hash table section i +@@ -2000,18 +2038,28 @@ section [%2d] '%s': hash table section i maxidx = symsize; } @@ -1206,7 +1206,7 @@ } -@@ -2028,7 +2076,7 @@ section [%2d] '%s': bitmask size not pow +@@ -2036,7 +2084,7 @@ section [%2d] '%s': bitmask size not pow if (shdr->sh_size < (4 + bitmask_words + nbuckets) * sizeof (Elf32_Word)) { ERROR (gettext ("\ @@ -1215,7 +1215,7 @@ idx, section_name (ebl, idx), (long int) shdr->sh_size, (long int) ((4 + bitmask_words + nbuckets) * sizeof (Elf32_Word))); return; -@@ -2700,8 +2748,9 @@ section [%2d] '%s' refers in sh_link to +@@ -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. */ @@ -1229,7 +1229,7 @@ idx, section_name (ebl, idx), --- elfutils/src/readelf.c +++ elfutils/src/readelf.c -@@ -1189,6 +1189,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G +@@ -1364,6 +1364,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G Elf32_Word *grpref = (Elf32_Word *) data->d_buf; GElf_Sym sym_mem; @@ -1238,7 +1238,7 @@ printf ((grpref[0] & GRP_COMDAT) ? ngettext ("\ \nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n", -@@ -1201,8 +1203,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G +@@ -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), @@ -1249,7 +1249,7 @@ ?: gettext (""), data->d_size / sizeof (Elf32_Word) - 1); -@@ -1353,10 +1355,12 @@ static void +@@ -1528,10 +1530,12 @@ static void handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) { int class = gelf_getclass (ebl->elf); @@ -1263,7 +1263,7 @@ /* Get the data of the section. */ data = elf_getdata (scn, NULL); -@@ -1368,21 +1372,26 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, +@@ -1543,21 +1547,26 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); @@ -1296,7 +1296,7 @@ { GElf_Dyn dynmem; GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); -@@ -1531,7 +1540,8 @@ static void +@@ -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); @@ -1306,7 +1306,7 @@ /* Get the data of the section. */ Elf_Data *data = elf_getdata (scn, NULL); -@@ -1717,7 +1727,8 @@ static void +@@ -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); @@ -1316,7 +1316,7 @@ /* Get the data of the section. */ Elf_Data *data = elf_getdata (scn, NULL); -@@ -1964,6 +1975,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G +@@ -2139,6 +2150,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); @@ -1330,7 +1330,7 @@ /* Now we can compute the number of entries in the section. */ unsigned int nsyms = data->d_size / (class == ELFCLASS32 ? sizeof (Elf32_Sym) -@@ -1974,15 +1992,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G +@@ -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); @@ -1347,7 +1347,7 @@ fputs_unlocked (class == ELFCLASS32 ? gettext ("\ -@@ -2218,7 +2233,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, +@@ -2393,7 +2408,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); @@ -1362,7 +1362,7 @@ printf (ngettext ("\ \nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ -@@ -2229,9 +2250,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, +@@ -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, @@ -1373,7 +1373,7 @@ unsigned int offset = 0; for (int cnt = shdr->sh_info; --cnt >= 0; ) -@@ -2284,8 +2303,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G +@@ -2459,8 +2478,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); @@ -1389,7 +1389,7 @@ printf (ngettext ("\ \nVersion definition section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ -@@ -2297,9 +2322,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G +@@ -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, @@ -1400,7 +1400,7 @@ unsigned int offset = 0; for (int cnt = shdr->sh_info; --cnt >= 0; ) -@@ -2561,25 +2584,30 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G +@@ -2736,25 +2759,30 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G filename = NULL; } @@ -1438,7 +1438,7 @@ { if (cnt % 2 == 0) printf ("\n %4d:", cnt); -@@ -2628,7 +2656,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, +@@ -2803,7 +2831,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt) ++counts[lengths[cnt]]; @@ -1457,7 +1457,7 @@ 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", "\ -@@ -2641,9 +2679,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, +@@ -2816,9 +2854,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, shdr->sh_addr, shdr->sh_offset, (unsigned int) shdr->sh_link, @@ -1468,7 +1468,7 @@ if (extrastr != NULL) fputs (extrastr, stdout); -@@ -2903,7 +2939,8 @@ print_liblist (Ebl *ebl) +@@ -3078,7 +3114,8 @@ print_liblist (Ebl *ebl) if (shdr != NULL && shdr->sh_type == SHT_GNU_LIBLIST) { @@ -1478,7 +1478,7 @@ printf (ngettext ("\ \nLibrary list section [%2zu] '%s' at offset %#0" PRIx64 " contains %d entry:\n", "\ -@@ -4164,6 +4201,16 @@ print_debug_aranges_section (Dwfl_Module +@@ -4398,6 +4435,16 @@ print_decoded_aranges_section (Ebl *ebl, return; } @@ -1497,7 +1497,7 @@ "\ --- elfutils/src/strip.c +++ elfutils/src/strip.c -@@ -564,6 +564,11 @@ handle_elf (int fd, Elf *elf, const char +@@ -565,6 +565,11 @@ handle_elf (int fd, Elf *elf, const char goto fail_close; } @@ -1509,7 +1509,7 @@ /* 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. -@@ -585,7 +590,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -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). */ @@ -1518,7 +1518,7 @@ shdr_info[cnt].scn = scn; -@@ -598,6 +603,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -599,6 +604,7 @@ handle_elf (int fd, Elf *elf, const char shdr_info[cnt].shdr.sh_name); if (shdr_info[cnt].name == NULL) { @@ -1526,7 +1526,7 @@ error (0, 0, gettext ("illformed file '%s'"), fname); goto fail_close; } -@@ -607,6 +613,8 @@ handle_elf (int fd, Elf *elf, const char +@@ -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; @@ -1535,7 +1535,7 @@ /* Sections in files other than relocatable object files which are not loaded can be freely moved by us. In relocatable -@@ -619,7 +627,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -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)) { @@ -1544,7 +1544,7 @@ shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx = cnt; } else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GROUP)) -@@ -636,7 +644,12 @@ handle_elf (int fd, Elf *elf, const char +@@ -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) @@ -1557,7 +1557,7 @@ if (inner == 1 || (inner == 2 && (grpref[0] & GRP_COMDAT) == 0)) /* If the section group contains only one element and this -@@ -647,7 +660,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -648,7 +661,7 @@ handle_elf (int fd, Elf *elf, const char } else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym)) { @@ -1566,7 +1566,7 @@ shdr_info[shdr_info[cnt].shdr.sh_link].version_idx = cnt; } -@@ -655,7 +668,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -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) { @@ -1575,7 +1575,7 @@ if (shdr_info[shdr_info[cnt].group_idx].idx == 0) { -@@ -731,10 +744,14 @@ handle_elf (int fd, Elf *elf, const char +@@ -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. */ @@ -1593,7 +1593,7 @@ /* If a group section is marked as being removed make sure all the sections it contains are being removed, too. */ -@@ -778,7 +795,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -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) { @@ -1602,7 +1602,7 @@ shdr_info[shdr_info[cnt].symtab_idx].data = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn, -@@ -818,6 +835,9 @@ handle_elf (int fd, Elf *elf, const char +@@ -819,6 +836,9 @@ handle_elf (int fd, Elf *elf, const char else if (scnidx == SHN_XINDEX) scnidx = xndx; @@ -1612,7 +1612,7 @@ if (shdr_info[scnidx].idx == 0) /* This symbol table has a real symbol in a discarded section. So preserve the -@@ -848,12 +868,16 @@ handle_elf (int fd, Elf *elf, const char +@@ -849,12 +869,16 @@ handle_elf (int fd, Elf *elf, const char } /* Handle references through sh_info. */ @@ -1631,7 +1631,7 @@ /* Mark the section as investigated. */ shdr_info[cnt].idx = 2; -@@ -994,7 +1018,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -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)); @@ -1640,7 +1640,7 @@ /* Add this name to the section header string table. */ shdr_info[cnt].se = ebl_strtabadd (shst, shdr_info[cnt].name, 0); -@@ -1031,7 +1055,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -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)); @@ -1649,7 +1649,7 @@ shdr_info[cnt].data = elf_newdata (shdr_info[cnt].newscn); if (shdr_info[cnt].data == NULL) -@@ -1087,7 +1111,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -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)); @@ -1658,7 +1658,7 @@ /* Finalize the string table and fill in the correct indices in the section headers. */ -@@ -1177,20 +1201,20 @@ handle_elf (int fd, Elf *elf, const char +@@ -1179,20 +1203,20 @@ handle_elf (int fd, Elf *elf, const char shndxdata = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn, NULL); @@ -1682,7 +1682,7 @@ >= shdr_info[cnt].data->d_size / elsize); } -@@ -1245,7 +1269,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -1247,7 +1271,7 @@ handle_elf (int fd, Elf *elf, const char sec = shdr_info[sym->st_shndx].idx; else { @@ -1691,7 +1691,7 @@ sec = shdr_info[xshndx].idx; } -@@ -1266,7 +1290,7 @@ handle_elf (int fd, Elf *elf, const char +@@ -1268,7 +1292,7 @@ handle_elf (int fd, Elf *elf, const char nxshndx = sec; } @@ -1700,7 +1700,7 @@ if ((inner != destidx || nshndx != sym->st_shndx || (shndxdata != NULL && nxshndx != xshndx)) -@@ -1293,9 +1317,11 @@ handle_elf (int fd, Elf *elf, const char +@@ -1295,9 +1319,11 @@ handle_elf (int fd, Elf *elf, const char { size_t sidx = (sym->st_shndx != SHN_XINDEX ? sym->st_shndx : xshndx); @@ -1715,7 +1715,7 @@ } } -@@ -1483,11 +1509,11 @@ handle_elf (int fd, Elf *elf, const char +@@ -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); @@ -1729,7 +1729,7 @@ size_t hidx = elf_hash (name) % nbucket; if (bucket[hidx] == 0) -@@ -1506,8 +1532,8 @@ handle_elf (int fd, Elf *elf, const char +@@ -1508,8 +1534,8 @@ handle_elf (int fd, Elf *elf, const char else { /* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */ @@ -1740,7 +1740,7 @@ Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; -@@ -1537,11 +1563,11 @@ handle_elf (int fd, Elf *elf, const char +@@ -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);