alignment fixes, segment table botch fix
This commit is contained in:
parent
d3f439115a
commit
b6004ce711
118
elfutils-0.137-fixes.patch
Normal file
118
elfutils-0.137-fixes.patch
Normal file
@ -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
|
@ -1,5 +1,5 @@
|
|||||||
%define eu_version 0.137
|
%define eu_version 0.137
|
||||||
%define eu_release 1
|
%define eu_release 2
|
||||||
|
|
||||||
%if %{?_with_compat:1}%{!?_with_compat:0}
|
%if %{?_with_compat:1}%{!?_with_compat:0}
|
||||||
%define compat 1
|
%define compat 1
|
||||||
@ -35,6 +35,7 @@ URL: https://fedorahosted.org/elfutils/
|
|||||||
Source: http://fedorahosted.org/releases/e/l/elfutils/%{name}-%{version}.tar.gz
|
Source: http://fedorahosted.org/releases/e/l/elfutils/%{name}-%{version}.tar.gz
|
||||||
Patch1: elfutils-portability.patch
|
Patch1: elfutils-portability.patch
|
||||||
Patch2: elfutils-robustify.patch
|
Patch2: elfutils-robustify.patch
|
||||||
|
Patch3: elfutils-0.137-fixes.patch
|
||||||
Requires: elfutils-libelf-%{_arch} = %{version}-%{release}
|
Requires: elfutils-libelf-%{_arch} = %{version}-%{release}
|
||||||
Requires: elfutils-libs-%{_arch} = %{version}-%{release}
|
Requires: elfutils-libs-%{_arch} = %{version}-%{release}
|
||||||
|
|
||||||
@ -156,6 +157,8 @@ find . \( -name configure -o -name config.h.in \) -print | xargs touch
|
|||||||
|
|
||||||
%patch2 -p1 -b .robustify
|
%patch2 -p1 -b .robustify
|
||||||
|
|
||||||
|
%patch3 -p1 -b .fixes
|
||||||
|
|
||||||
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -262,10 +265,11 @@ rm -rf ${RPM_BUILD_ROOT}
|
|||||||
%{_libdir}/libelf.a
|
%{_libdir}/libelf.a
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Aug 27 2008 Roland McGrath <roland@redhat.com> - 0.137-1
|
* Thu Aug 28 2008 Roland McGrath <roland@redhat.com> - 0.137-2
|
||||||
- Update to 0.137
|
- Update to 0.137
|
||||||
- libdwfl: bug fixes; new segment interfaces;
|
- libdwfl: bug fixes; new segment interfaces;
|
||||||
all the libdwfl-based tools now support --core=COREFILE option
|
all the libdwfl-based tools now support --core=COREFILE option
|
||||||
|
- Resolves: RHBZ #325021, RHBZ #447416
|
||||||
|
|
||||||
* Mon Jul 7 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.135-2
|
* Mon Jul 7 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.135-2
|
||||||
- fix conditional comparison
|
- fix conditional comparison
|
||||||
@ -354,7 +358,6 @@ rm -rf ${RPM_BUILD_ROOT}
|
|||||||
- New program eu-ar.
|
- New program eu-ar.
|
||||||
- libdw: fix missing dwarf_getelf (#227206)
|
- libdw: fix missing dwarf_getelf (#227206)
|
||||||
- libdwfl: dwfl_module_addrname for st_size=0 symbols (#227167, #227231)
|
- 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@redhat.com> - 0.125-3
|
* Wed Jan 10 2007 Roland McGrath <roland@redhat.com> - 0.125-3
|
||||||
- Fix overeager warn_unused_result build failures.
|
- Fix overeager warn_unused_result build failures.
|
||||||
|
Loading…
Reference in New Issue
Block a user