rpms/elfutils/F-9 elfutils-0.137-fixes.patch, NONE, 1.1 Makefile, 1.25, 1.26 elfutils.spec, 1.107, 1.108

Roland McGrath roland at fedoraproject.org
Thu Aug 28 07:45:02 UTC 2008


Author: roland

Update of /cvs/pkgs/rpms/elfutils/F-9
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv18578/F-9

Modified Files:
	Makefile elfutils.spec 
Added Files:
	elfutils-0.137-fixes.patch 
Log Message:
alignment fixes, segment table botch fix

elfutils-0.137-fixes.patch:

--- NEW FILE elfutils-0.137-fixes.patch ---
--- elfutils-0.137/libdwfl/ChangeLog
+++ elfutils-0.137/libdwfl/ChangeLog
@@ -1,3 +1,12 @@
+2008-08-28  Roland McGrath  <roland at redhat.com>
+
+	* segment.c (reify_segments): Fix last change.
+
+2008-08-27  Roland McGrath  <roland at redhat.com>
+
+	* linux-proc-maps.c (read_proc_memory): Return 0 for EINVAL or EPERM
+	failure from pread64.
+
 2008-08-26  Roland McGrath  <roland at 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 at 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 at 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


Index: Makefile
===================================================================
RCS file: /cvs/pkgs/rpms/elfutils/F-9/Makefile,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- Makefile	9 Apr 2008 21:51:31 -0000	1.25
+++ Makefile	28 Aug 2008 07:44:31 -0000	1.26
@@ -24,17 +24,21 @@
 
 include $(MAKEFILE_COMMON)
 
+ifneq (,$(CURL))
 CURL += -k
+endif
 
 MONOTONE = mtn
 
 branch-portability = portable
 
+elfutils-base = t:elfutils-$(VERSION)
+
 elfutils-%.patch: elfutils-$(VERSION).tar.gz Makefile
 	@rm -rf elfutils-master elfutils-$*
 #	$(MONOTONE) checkout -b com.redhat.elfutils elfutils-master
 	$(MONOTONE) checkout -b com.redhat.elfutils \
-		    	     -r t:elfutils-$(VERSION) elfutils-master
+		    	     -r $(elfutils-base) elfutils-master
 	$(MONOTONE) checkout \
 		    -b com.redhat.elfutils.$(firstword $(branch-$*) $*) \
 		    elfutils-$*


Index: elfutils.spec
===================================================================
RCS file: /cvs/pkgs/rpms/elfutils/F-9/elfutils.spec,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -r1.107 -r1.108
--- elfutils.spec	27 Aug 2008 08:26:20 -0000	1.107
+++ elfutils.spec	28 Aug 2008 07:44:31 -0000	1.108
@@ -1,5 +1,5 @@
 %define eu_version 0.137
-%define eu_release 1
+%define eu_release 2
 
 %if %{?_with_compat:1}%{!?_with_compat:0}
 %define compat 1
@@ -35,6 +35,7 @@
 Source: http://fedorahosted.org/releases/e/l/elfutils/%{name}-%{version}.tar.gz
 Patch1: elfutils-portability.patch
 Patch2: elfutils-robustify.patch
+Patch3: elfutils-0.137-fixes.patch
 Requires: elfutils-libelf-%{_arch} = %{version}-%{release}
 Requires: elfutils-libs-%{_arch} = %{version}-%{release}
 
@@ -156,6 +157,8 @@
 
 %patch2 -p1 -b .robustify
 
+%patch3 -p1 -b .fixes
+
 find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
 
 %build
@@ -262,10 +265,11 @@
 %{_libdir}/libelf.a
 
 %changelog
-* Wed Aug 27 2008 Roland McGrath <roland at redhat.com> - 0.137-1
+* Thu Aug 28 2008 Roland McGrath <roland at redhat.com> - 0.137-2
 - Update to 0.137
   - libdwfl: bug fixes; new segment interfaces;
              all the libdwfl-based tools now support --core=COREFILE option
+- Resolves: RHBZ #325021, RHBZ #447416
 
 * Mon Jul  7 2008 Tom "spot" Callaway <tcallawa at redhat.com> - 0.135-2
 - fix conditional comparison
@@ -354,7 +358,6 @@
   - New program eu-ar.
   - libdw: fix missing dwarf_getelf (#227206)
   - libdwfl: dwfl_module_addrname for st_size=0 symbols (#227167, #227231)
-- Resolves: RHBZ #227206, RHBZ #227167, RHBZ #227231
 
 * Wed Jan 10 2007 Roland McGrath <roland at redhat.com> - 0.125-3
 - Fix overeager warn_unused_result build failures.




More information about the scm-commits mailing list