Compare commits

...

9 Commits
rawhide ... f10

Author SHA1 Message Date
Fedora Release Engineering 809fcb2328 dist-git conversion 2010-07-28 13:41:08 +00:00
Bill Nottingham 4b07502b02 Fix typo that causes a failure to update the common directory. (releng
#2781)
2009-11-26 01:22:56 +00:00
roland 7acebd9c83 Update to 0.143 2009-09-21 17:51:37 +00:00
roland 8930d54d2b Update to 0.142 2009-07-29 02:22:55 +00:00
roland 4d938c0995 Update to 0.141 2009-04-24 20:52:23 +00:00
roland ebe62435db Update to 0.140 2009-02-16 22:00:39 +00:00
roland c25726be17 Update to 0.139 2009-01-24 01:22:09 +00:00
roland 38a5956511 Update to 0.138 2008-12-31 22:12:42 +00:00
Jesse Keating 0c3d6d2a48 Initialize branch F-10 for elfutils 2008-11-07 04:23:43 +00:00
12 changed files with 1141 additions and 864 deletions

View File

@ -1 +0,0 @@
elfutils-0.137.tar.gz

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
elfutils-0.143.tar.bz2

100
Makefile
View File

@ -1,100 +0,0 @@
# Makefile for source rpm: elfutils
# $Id$
NAME := elfutils
SPECFILE = elfutils.spec
UPSTREAM_CHECKS := sig
UPSTREAM_FILES = $(NAME)-$(VERSION).tar.gz
upstream:;
define find-makefile-common
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
endef
MAKEFILE_COMMON := $(shell $(find-makefile-common))
ifeq ($(MAKEFILE_COMMON),)
# attept a checkout
define checkout-makefile-common
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
endef
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
endif
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 $(elfutils-base) elfutils-master
$(MONOTONE) checkout \
-b com.redhat.elfutils.$(firstword $(branch-$*) $*) \
elfutils-$*
cd elfutils-master; autoreconf -i; rm -rf autom4te.cache _MTN
cd elfutils-$*; autoreconf -i; rm -rf autom4te.cache _MTN
diff -Nrpu elfutils-master elfutils-$* | \
filterdiff --remove-timestamps --strip=1 --addprefix=elfutils/ > $@.new
mv $@.new $@
elfutils-portable.spec: elfutils.spec
(echo '%define _with_compat 1'; sed 's/ check$$/& || :/' $<) > $@.new
mv -f $@.new $@
portable-r = 0.$(subst $(DIST),,$(RELEASE))
portable-vr = $(VERSION)-$(portable-r)
portable.srpm = elfutils-$(portable-vr).src.rpm
$(portable.srpm): elfutils-portable.spec elfutils-portability.patch \
elfutils-$(VERSION).tar.gz
$(RPM_WITH_DIRS) --nodeps -bs $<
portable-srpm: $(portable.srpm)
portable-dist = 3.0E-scratch
portable-build = \
$(redhat)/brewroot/packages/elfutils/$(VERSION)/$(portable-r)
ifeq (,$(wildcard /mnt/redhat/brewroot/packages/elfutils))
redhat = datadump.devel.redhat.com::redhat
rsync-to = devserv.devel.redhat.com:dist/elfutils/devel/systemtap-dist/
build-dep = $(portable.srpm)
else
redhat = /mnt/redhat
$(portable-build): $(portable.srpm)
brew build $(BUILD_FLAGS) dist-$(portable-dist) $<
rsync-to = $(public)
build-dep = $(portable-build)/src/$(portable.srpm)
portable-build: $(portable-build)
$(build-dep): $(portable-build)
endif
dist-files = README.elfutils systemtap-elfutils.repo
rsync-files = --exclude=tests --exclude=data $(portable-build)/
public = sources.redhat.com:/sourceware/ftp/anonftp/pub/systemtap/elfutils/
RSYNC = RSYNC_RSH=ssh rsync
systemtap-dist: $(build-dep) $(dist-files)
@mkdir -p $@
$(RSYNC) -a --delete --progress -v $(rsync-files) systemtap-dist/
ln $(dist-files) systemtap-dist/
ln -v `rpm -qlp $<` systemtap-dist/
systemtap-dist-createrepo: systemtap-dist
ifneq ($(wildcard /usr/bin/createrepo),)
createrepo -q `cd $<; /bin/pwd`
endif
systemtap-sync: systemtap-dist-createrepo
$(RSYNC) -az --delete --progress -v systemtap-dist/ $(rsync-to)

Binary file not shown.

View File

@ -1,174 +0,0 @@
--- elfutils-0.137/libdwfl/ChangeLog
+++ elfutils-0.137/libdwfl/ChangeLog
@@ -1,3 +1,17 @@
+2008-09-29 Roland McGrath <roland@redhat.com>
+
+ * segment.c (insert): Must realloc DWFL->lookup_module here too.
+ (dwfl_report_segment): Clear DWFL->lookup_module before insert calls.
+
+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
@@ -83,12 +83,26 @@ insert (Dwfl *dwfl, size_t i, GElf_Addr
int *nsegndx = realloc (dwfl->lookup_segndx, sizeof nsegndx[0] * n);
if (unlikely (nsegndx == NULL))
{
- free (naddr);
+ if (naddr != dwfl->lookup_addr)
+ free (naddr);
return true;
}
dwfl->lookup_alloc = n;
dwfl->lookup_addr = naddr;
dwfl->lookup_segndx = nsegndx;
+
+ if (dwfl->lookup_module != NULL)
+ {
+ /* Make sure this array is big enough too. */
+ Dwfl_Module **old = dwfl->lookup_module;
+ dwfl->lookup_module = realloc (dwfl->lookup_module,
+ sizeof dwfl->lookup_module[0] * n);
+ if (unlikely (dwfl->lookup_module == NULL))
+ {
+ free (old);
+ return true;
+ }
+ }
}
if (unlikely (i < dwfl->lookup_elts))
@@ -175,9 +189,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)))
@@ -261,6 +283,12 @@ dwfl_report_segment (Dwfl *dwfl, int ndx
phdr->p_align < dwfl->segment_align))
dwfl->segment_align = phdr->p_align;
+ if (unlikely (dwfl->lookup_module != NULL))
+ {
+ free (dwfl->lookup_module);
+ dwfl->lookup_module = NULL;
+ }
+
GElf_Addr start = segment_start (dwfl, bias + phdr->p_vaddr);
GElf_Addr end = segment_end (dwfl, bias + phdr->p_vaddr + phdr->p_memsz);
@@ -289,12 +317,6 @@ dwfl_report_segment (Dwfl *dwfl, int ndx
dwfl->lookup_tail_offset = end - bias - phdr->p_vaddr + phdr->p_offset;
dwfl->lookup_tail_ndx = ndx + 1;
- if (unlikely (dwfl->lookup_module != NULL))
- {
- free (dwfl->lookup_module);
- dwfl->lookup_module = NULL;
- }
-
return ndx;
}
INTDEF (dwfl_report_segment)
--- 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
@@ -111,7 +111,11 @@ get_shnum (void *map_address, unsigned c
bool is32 = e_ident[EI_CLASS] == ELFCLASS32;
/* 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 +134,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 +150,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

Binary file not shown.

BIN
elfutils-0.143.tar.bz2.sig Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
%define eu_version 0.137
%define eu_release 3
%define eu_version 0.143
%define eu_release 1
%if %{?_with_compat:1}%{!?_with_compat:0}
%define compat 1
@ -32,10 +32,9 @@ Release: 0.%{eu_release}
License: GPLv2 with exceptions
Group: Development/Tools
URL: https://fedorahosted.org/elfutils/
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
Source: http://fedorahosted.org/releases/e/l/elfutils/%{name}-%{version}.tar.bz2
Patch1: elfutils-robustify.patch
Patch2: elfutils-portability.patch
Requires: elfutils-libelf-%{_arch} = %{version}-%{release}
Requires: elfutils-libs-%{_arch} = %{version}-%{release}
@ -51,6 +50,31 @@ BuildRequires: glibc-headers >= 2.3.4-11
BuildRequires: gcc >= 3.2
%endif
%define use_zlib 0
%if 0%{?fedora} >= 5
%define use_zlib 1
%endif
%if 0%{?rhel} >= 5
%define use_zlib 1
%endif
%define use_xz 0
%if 0%{?fedora} >= 10
%define use_xz 1
%endif
%if 0%{?rhel} >= 6
%define use_xz 1
%endif
%if %{use_zlib}
BuildRequires: zlib-devel >= 1.2.2.3
BuildRequires: bzip2-devel
%endif
%if %{use_xz}
BuildRequires: xz-devel
%endif
%define _gnu %{nil}
%define _program_prefix eu-
@ -143,21 +167,19 @@ for libelf.
%prep
%setup -q
%if !0%{?scanf_has_m}
sed -i.scanf-m -e 's/%m/%a/' tests/line2addr.c
%endif
%patch1 -p1 -b .robustify
%if %{compat}
%patch1 -p1 -b .portability
%patch2 -p1 -b .portability
sleep 1
find . \( -name Makefile.in -o -name aclocal.m4 \) -print | xargs touch
sleep 1
find . \( -name configure -o -name config.h.in \) -print | xargs touch
%else
%if !0%{?scanf_has_m}
sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c
%endif
%endif
%patch2 -p1 -b .robustify
%patch3 -p1 -b .fixes
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
@ -184,9 +206,9 @@ chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so*
chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/elfutils/lib*.so*
# XXX Nuke unpackaged files
{ cd ${RPM_BUILD_ROOT}
rm -f .%{_bindir}/eu-ld
}
(cd ${RPM_BUILD_ROOT}
rm -f .%{_bindir}/eu-ld
)
%check
make -s check
@ -239,6 +261,7 @@ rm -rf ${RPM_BUILD_ROOT}
%{_includedir}/elfutils/libebl.h
%{_includedir}/elfutils/libdw.h
%{_includedir}/elfutils/libdwfl.h
%{_includedir}/elfutils/version.h
%{_libdir}/libebl.a
%{_libdir}/libasm.so
%{_libdir}/libdw.so
@ -265,6 +288,67 @@ rm -rf ${RPM_BUILD_ROOT}
%{_libdir}/libelf.a
%changelog
* Mon Sep 21 2009 Roland McGrath <roland@redhat.com> - 0.143-1
- Update to 0.143
- libdw: Various convenience functions for individual attributes now use
dwarf_attr_integrate to look up indirect inherited attributes.
Location expression handling now supports DW_OP_implicit_value.
- libdwfl: Support automatic decompression of files in XZ format,
and of Linux kernel images made with bzip2 or LZMA
(as well as gzip).
* Tue Jul 28 2009 Roland McGrath <roland@redhat.com> - 0.142-1
- Update to 0.142
- libelf: Bug fix in filling gaps between sections. (#512840)
- libelf: Add elf_getshdrnum alias for elf_getshnum and elf_getshdrstrndx
alias for elf_getshstrndx and deprecate original names.
- libebl, elflint: Add support for STB_GNU_UNIQUE. (#511436)
- readelf: Add -N option, speeds up DWARF printing
without address->name lookups. (#505347)
- libdw: Add support for decoding DWARF CFI into location description form.
Handle some new DWARF 3 expression operations previously omitted.
Basic handling of some new encodings slated for DWARF 4.
* Thu Apr 23 2009 Roland McGrath <roland@redhat.com> - 0.141-1
- Update to 0.141
- libebl: sparc backend fixes (#490585)
some more arm backend support
- libdwfl: fix dwfl_module_build_id for prelinked DSO case (#489439)
fixes in core file support (#494858)
dwfl_module_getsym interface improved for non-address symbols
- eu-strip: fix infinite loop on strange inputs with -f
- eu-addr2line: take -j/--section=NAME option for binutils compatibility
(same effect as '(NAME)0x123' syntax already supported)
- Resolves: RHBZ #495213, RHBZ #465872, RHBZ #470055, RHBZ #484623
* Tue Feb 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.140-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Sun Feb 15 2009 Roland McGrath <roland@redhat.com> - 0.140-1
- Update to 0.140
- libelf: Fix regression in creation of section header. (#484946)
* Fri Jan 23 2009 Roland McGrath <roland@redhat.com> - 0.139-1
- Update to 0.139
- libcpu: Add Intel SSE4 disassembler support
- readelf: Implement call frame information and exception handling dumping.
Add -e option. Enable it implicitly for -a.
- elflint: Check PT_GNU_EH_FRAME program header entry.
- libdwfl: Support automatic gzip/bzip2 decompression of ELF files. (#472136)
* Thu Jan 1 2009 Roland McGrath <roland@redhat.com> - 0.138-2
- Fix libelf regression.
* Wed Dec 31 2008 Roland McGrath <roland@redhat.com> - 0.138-1
- Update to 0.138
- Install <elfutils/version.h> header file for applications to use in
source version compatibility checks.
- libebl: backend fixes for i386 TLS relocs; backend support for NT_386_IOPERM
- libcpu: disassembler fixes (#469739)
- libdwfl: bug fixes (#465878)
- libelf: bug fixes
- eu-nm: bug fixes for handling corrupt input files (#476136)
* Wed Oct 1 2008 Roland McGrath <roland@redhat.com> - 0.137-3
- fix libdwfl regression (#462689)

View File

@ -1 +1 @@
a24690a64268516bd413c4c3fe6c6dd4 elfutils-0.137.tar.gz
06e35c348e78dec58f6aeb51bd397760 elfutils-0.143.tar.bz2

View File

@ -1,123 +1,109 @@
pub 1024D/7EBBD625 2003-01-10
uid Roland McGrath <roland@frob.com>
uid Roland McGrath <frob@debian.org>
uid Roland McGrath <roland@gnu.org>
uid Roland McGrath <roland@redhat.com>
sub 2048g/17998A93 2003-01-10
pub 1024D/79FF4474 2001-08-24
uid Ulrich Drepper <drepper@akkadia.org>
uid Ulrich Drepper <drepper@redhat.com>
uid [jpeg image of size 2203]
sub 2048g/07FA6550 2001-08-24
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)
Version: GnuPG v1.4.5 (GNU/Linux)
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
gTKAnym+PwCfbnwIeEZfbBWgonv4/I3aNNm3FdQ=
=rhf6
=2IML
-----END PGP PUBLIC KEY BLOCK-----