diff --git a/elfutils-0.156-et_dyn-kernels.patch b/elfutils-0.156-et_dyn-kernels.patch new file mode 100644 index 0000000..8638df4 --- /dev/null +++ b/elfutils-0.156-et_dyn-kernels.patch @@ -0,0 +1,47 @@ +commit 16fa414aff02365534b7bbeab281c731b9c4497d +Author: Mark Wielaard +Date: Thu Aug 22 13:45:16 2013 +0200 + + libdwfl/linux-kernel-modules.c (report_kernel): Pass add_p_vaddr as true. + + On some architectures (e.g. x86_64) the vmlinux is ET_EXEC, while on + others (e.g. ppc64) it is ET_DYN. In both cases the phdr p_vaddr will + be non-zero. We want the image to be placed as if it was ET_DYN, so + pass true for add_p_vaddr which will do the right thing (in combination + with a zero base) in either case. + + Signed-off-by: Mark Wielaard + +diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog +index 88bdfc6..90ba686 100644 +--- a/libdwfl/ChangeLog ++++ b/libdwfl/ChangeLog +@@ -1,3 +1,8 @@ ++2013-08-25 Mark Wielaard ++ ++ * linux-kernel-modules.c (report_kernel): Pass add_p_vaddr as true ++ to dwfl_report_elf. ++ + 2013-07-25 Jan Kratochvil + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check for +diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c +index dec1a59..fe01028 100644 +--- a/libdwfl/linux-kernel-modules.c ++++ b/libdwfl/linux-kernel-modules.c +@@ -216,8 +216,14 @@ report_kernel (Dwfl *dwfl, const char **release, + + if (report) + { ++ /* Note that on some architectures (e.g. x86_64) the vmlinux ++ is ET_EXEC, while on others (e.g. ppc64) it is ET_DYN. ++ In both cases the phdr p_vaddr load address will be non-zero. ++ We want the image to be placed as if it was ET_DYN, so ++ pass true for add_p_vaddr which will do the right thing ++ (in combination with a zero base) in either case. */ + Dwfl_Module *mod = INTUSE(dwfl_report_elf) (dwfl, KERNEL_MODNAME, +- fname, fd, 0, false); ++ fname, fd, 0, true); + if (mod == NULL) + result = -1; + else diff --git a/elfutils.spec b/elfutils.spec index decabfc..76b810d 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle compiled objects Version: 0.156 -%global baserelease 3 +%global baserelease 4 URL: https://fedorahosted.org/elfutils/ %global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -46,6 +46,8 @@ Source: %{?source_url}%{name}-%{version}.tar.bz2 Patch1: %{?source_url}elfutils-robustify.patch Patch2: %{?source_url}elfutils-portability.patch +Patch3: elfutils-0.156-et_dyn-kernels.patch + %if !%{compat} Release: %{baserelease}%{?dist} %else @@ -209,6 +211,8 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c %endif %endif +%patch3 -p1 -b .et_dyn-kernel + find . -name \*.sh ! -perm -0100 -print | xargs chmod +x %build @@ -323,6 +327,10 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Mon Aug 26 2013 Mark Wielaard 0.156-4 +- Add elfutils-0.156-et_dyn-kernels.patch. + Fixes an issue on ppc64 with systemtap kernel address placement. + * Thu Aug 8 2013 Mark Wielaard 0.156-3 - Make check can now also be ran in parallel.