]> git.pld-linux.org Git - packages/elfutils.git/commitdiff
- alignment fixes from Fedora
authorJakub Bogusz <qboosh@pld-linux.org>
Wed, 10 Sep 2008 05:12:12 +0000 (05:12 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    elfutils-fixes.patch -> 1.3

elfutils-fixes.patch [new file with mode: 0644]

diff --git a/elfutils-fixes.patch b/elfutils-fixes.patch
new file mode 100644 (file)
index 0000000..49940d7
--- /dev/null
@@ -0,0 +1,118 @@
+--- elfutils-0.137/libdwfl/ChangeLog
++++ elfutils-0.137/libdwfl/ChangeLog
+@@ -1,3 +1,12 @@
++2008-08-28  Roland McGrath  <roland@redhat.com>
++
++      * segment.c (reify_segments): Fix last change.
++
++2008-08-27  Roland McGrath  <roland@redhat.com>
++
++      * linux-proc-maps.c (read_proc_memory): Return 0 for EINVAL or EPERM
++      failure from pread64.
++
+ 2008-08-26  Roland McGrath  <roland@redhat.com>
+       * segment.c (reify_segments): Insert a trailing segment for a module
+--- elfutils-0.137/libdwfl/linux-proc-maps.c
++++ elfutils-0.137/libdwfl/linux-proc-maps.c
+@@ -267,6 +267,9 @@ read_proc_memory (void *arg, void *data,
+ {
+   const int fd = *(const int *) arg;
+   ssize_t nread = pread64 (fd, data, maxread, (off64_t) address);
++  /* Some kernels don't actually let us do this read, ignore those errors.  */
++  if (nread < 0 && (errno == EINVAL || errno == EPERM))
++    return 0;
+   if (nread > 0 && (size_t) nread < minread)
+     nread = 0;
+   return nread;
+--- elfutils-0.137/libdwfl/segment.c
++++ elfutils-0.137/libdwfl/segment.c
+@@ -175,9 +175,17 @@ reify_segments (Dwfl *dwfl)
+             return true;
+           ++idx;
+         }
++      else if (dwfl->lookup_addr[idx] < start)
++        {
++          /* The module starts past the end of this segment.
++             Add a new one.  */
++          if (unlikely (insert (dwfl, idx + 1, start, end, -1)))
++            return true;
++          ++idx;
++        }
+-      if (((size_t) idx + 1 == dwfl->lookup_elts
+-           || end < dwfl->lookup_addr[idx + 1])
++      if ((size_t) idx + 1 < dwfl->lookup_elts
++          && end < dwfl->lookup_addr[idx + 1]
+           /* The module ends in the middle of this segment.  Split it.  */
+           && unlikely (insert (dwfl, idx + 1,
+                                end, dwfl->lookup_addr[idx + 1], -1)))
+--- elfutils-0.137/libelf/ChangeLog
++++ elfutils-0.137/libelf/ChangeLog
+@@ -1,3 +1,9 @@
++2008-08-27  Roland McGrath  <roland@redhat.com>
++
++      * elf_begin.c (get_shnum): Avoid misaligned reads for matching endian.
++
++      * libelfP.h [!ALLOW_UNALIGNED] (__libelf_type_align): Fix CLASS index.
++
+ 2008-08-25  Roland McGrath  <roland@redhat.com>
+       * Makefile.am (libelf_so_LDLIBS): New variable.
+--- elfutils-0.137/libelf/elf_begin.c
++++ elfutils-0.137/libelf/elf_begin.c
+@@ -110,8 +110,14 @@ get_shnum (void *map_address, unsigned c
+   } ehdr_mem;
+   bool is32 = e_ident[EI_CLASS] == ELFCLASS32;
++  // e_shnum shoff
++
+   /* Make the ELF header available.  */
+-  if (e_ident[EI_DATA] == MY_ELFDATA)
++  if (e_ident[EI_DATA] == MY_ELFDATA
++      && (ALLOW_UNALIGNED
++        || (((size_t) e_ident
++             & ((is32 ? __alignof__ (Elf32_Ehdr) : __alignof__ (Elf64_Ehdr))
++                - 1)) == 0)))
+     ehdr.p = e_ident;
+   else
+     {
+@@ -130,8 +136,11 @@ get_shnum (void *map_address, unsigned c
+         else
+           memcpy (&ehdr_mem, e_ident, sizeof (Elf32_Ehdr));
+-        CONVERT (ehdr_mem.e32.e_shnum);
+-        CONVERT (ehdr_mem.e32.e_shoff);
++        if (e_ident[EI_DATA] != MY_ELFDATA)
++          {
++            CONVERT (ehdr_mem.e32.e_shnum);
++            CONVERT (ehdr_mem.e32.e_shoff);
++          }
+       }
+       else
+       {
+@@ -143,8 +152,11 @@ get_shnum (void *map_address, unsigned c
+         else
+           memcpy (&ehdr_mem, e_ident, sizeof (Elf64_Ehdr));
+-        CONVERT (ehdr_mem.e64.e_shnum);
+-        CONVERT (ehdr_mem.e64.e_shoff);
++        if (e_ident[EI_DATA] != MY_ELFDATA)
++          {
++            CONVERT (ehdr_mem.e64.e_shnum);
++            CONVERT (ehdr_mem.e64.e_shoff);
++          }
+       }
+     }
+--- elfutils-0.137/libelf/libelfP.h
++++ elfutils-0.137/libelf/libelfP.h
+@@ -460,7 +460,7 @@ extern const uint_fast8_t __libelf_type_
+    version, binary class, and type. */
+ extern const uint_fast8_t __libelf_type_aligns[EV_NUM - 1][ELFCLASSNUM - 1][ELF_T_NUM] attribute_hidden;
+ # define __libelf_type_align(class, type)     \
+-    (__libelf_type_aligns[LIBELF_EV_IDX][class][type] ?: 1)
++    (__libelf_type_aligns[LIBELF_EV_IDX][class - 1][type] ?: 1)
+ #else
+ # define __libelf_type_align(class, type)     1
+ #endif
This page took 0.041739 seconds and 4 git commands to generate.