From 2dac6038190fe3146d0f923e2789db31e0ee4ea8549f3f4d7992008d6bac6fe2 Mon Sep 17 00:00:00 2001 From: Martin Pluskal Date: Wed, 8 Apr 2020 13:23:00 +0000 Subject: [PATCH] Accepting request 792452 from home:cgiboudeaux:branches:devel:tools - Add upstream patch: * oprofile-handle-binutils-2_34.patch - Spec cleanup OBS-URL: https://build.opensuse.org/request/show/792452 OBS-URL: https://build.opensuse.org/package/show/devel:tools/oprofile?expand=0&rev=58 --- oprofile-handle-binutils-2_34.patch | 166 ++++++++++++++++++++++++++++ oprofile.changes | 7 ++ oprofile.spec | 22 ++-- 3 files changed, 182 insertions(+), 13 deletions(-) create mode 100644 oprofile-handle-binutils-2_34.patch diff --git a/oprofile-handle-binutils-2_34.patch b/oprofile-handle-binutils-2_34.patch new file mode 100644 index 0000000..275a83e --- /dev/null +++ b/oprofile-handle-binutils-2_34.patch @@ -0,0 +1,166 @@ +From 377610414fb6cd7ac30e4485d9d6482fcf29aca6 Mon Sep 17 00:00:00 2001 +From: William Cohen +Date: Wed, 18 Mar 2020 21:19:16 -0400 +Subject: [PATCH] Macro wrappers to handle the binutils 2.34 api changes + +Changes in binutils 2.34 API prevented oprofile from compiling with +it. This patch tests for the changes in the binutils API during +configuration and selects the appropiate wrappers to allow oprofile to +compile. This allows oprofile to compile with both older and newer +versions of binutils. +--- + configure.ac | 20 ++++++++++++++++++++ + libutil++/bfd_support.cpp | 11 ++++++----- + libutil/op_bfd_wrappers.h | 28 ++++++++++++++++++++++++++++ + opjitconv/create_bfd.c | 7 ++++--- + 4 files changed, 58 insertions(+), 8 deletions(-) + create mode 100644 libutil/op_bfd_wrappers.h + +diff --git a/configure.ac b/configure.ac +index ac2fd35e..df032a78 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -224,6 +224,26 @@ if test "$host_cpu" = "powerpc64le" -o "$host_cpu" = "powerpc64"; then + fi + AC_SUBST(PFM_LIB) + ++HAVE_BINUTILS_234='1' ++AC_MSG_CHECKING([whether binutils 2.34 is being used]) ++rm -f test-for-BINUTILS ++AC_LANG_CONFTEST( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[asection * sect; ++ bfd_size_type buildid_sect_size = bfd_section_size(sect); ++ return 0;]]) ++ ]) ++$CC conftest.$ac_ext $CFLAGS $LDFLAGS $LIBS $PERF_EVENT_FLAGS -o test-for-BINUTILS > /dev/null 2>&1 ++if test -f test-for-BINUTILS; then ++ echo "yes" ++ HAVE_BINUTILS_234='1' ++else ++ echo "no" ++ HAVE_BINUTILS_234='0' ++fi ++AC_DEFINE_UNQUOTED(HAVE_BINUTILS_234, $HAVE_BINUTILS_234, [Using binutils 2.34]) ++rm -f test-for-BINUTILS* ++ + AC_ARG_WITH(java, + [ --with-java=java-home Path to Java home directory (default is "no"; "yes" will use /usr as Java home)], + JAVA_HOMEDIR=$with_java, [with_java=no]) +diff --git a/libutil++/bfd_support.cpp b/libutil++/bfd_support.cpp +index fa904839..cd0f4f71 100644 +--- a/libutil++/bfd_support.cpp ++++ b/libutil++/bfd_support.cpp +@@ -19,6 +19,7 @@ + #include "locate_images.h" + #include "op_libiberty.h" + #include "op_exception.h" ++#include "op_bfd_wrappers.h" + + #include + #include +@@ -137,7 +138,7 @@ static bool get_build_id(bfd * ibfd, unsigned char * build_id) + } + } + +- bfd_size_type buildid_sect_size = bfd_section_size(ibfd, sect); ++ bfd_size_type buildid_sect_size = op_bfd_section_size(ibfd, sect); + char * contents = (char *) xmalloc(buildid_sect_size); + errno = 0; + if (!bfd_get_section_contents(ibfd, sect, +@@ -188,7 +189,7 @@ bool get_debug_link_info(bfd * ibfd, string & filename, unsigned long & crc32) + if (sect == NULL) + return false; + +- bfd_size_type debuglink_size = bfd_section_size(ibfd, sect); ++ bfd_size_type debuglink_size = op_bfd_section_size(ibfd, sect); + char * contents = (char *) xmalloc(debuglink_size); + cverb << vbfd + << ".gnu_debuglink section has size " << debuglink_size << endl; +@@ -346,7 +347,7 @@ void fixup_linenr(bfd * abfd, asection * section, asymbol ** syms, + // first restrict the search on a sensible range of vma, 16 is + // an intuitive value based on epilog code look + size_t max_search = 16; +- size_t section_size = bfd_section_size(abfd, section); ++ size_t section_size = op_bfd_section_size(abfd, section); + if (pc + max_search > section_size) + max_search = section_size - pc; + +@@ -819,10 +820,10 @@ find_nearest_line(bfd_info const & b, op_bfd_symbol const & sym, + else + pc = (sym.value() + offset) - sym.filepos(); + +- if ((bfd_get_section_flags(abfd, section) & SEC_ALLOC) == 0) ++ if ((op_bfd_get_section_flags(abfd, section) & SEC_ALLOC) == 0) + goto fail; + +- if (pc >= bfd_section_size(abfd, section)) ++ if (pc >= op_bfd_section_size(abfd, section)) + goto fail; + + ret = bfd_find_nearest_line(abfd, section, syms, pc, &cfilename, +diff --git a/libutil/op_bfd_wrappers.h b/libutil/op_bfd_wrappers.h +new file mode 100644 +index 00000000..b229cc12 +--- /dev/null ++++ b/libutil/op_bfd_wrappers.h +@@ -0,0 +1,28 @@ ++/** ++ * @file op_bfd_wrappers.h ++ * Wrappers to hide API changes in binutils 2.34 ++ * ++ * @remark Copyright 2020 OProfile authors ++ * @remark Read the file COPYING ++ * ++ * @author William Cohen ++ */ ++ ++#ifndef OP_BFD_WRAPPERS_H ++#define OP_BFD_WRAPPERS_H ++ ++#if HAVE_BINUTILS_234 ++#define op_bfd_section_size(ibfd, sec) bfd_section_size(sec) ++#define op_bfd_get_section_flags(abfd, sec) bfd_section_flags(sec) ++#define op_bfd_set_section_flags(abfd, sec, flags) bfd_set_section_flags(sec, flags) ++#define op_bfd_set_section_vma(abfd, sec, vma) bfd_set_section_vma(sec, vma) ++#define op_bfd_set_section_size(abfd, sec, size) bfd_set_section_size(sec, size) ++#else ++#define op_bfd_section_size(ibfd, sec) bfd_section_size(ibfd, sec) ++#define op_bfd_get_section_flags(abfd, sec) bfd_get_section_flags(abfd, sec) ++#define op_bfd_set_section_flags(abfd, sec, flags) bfd_set_section_flags(abfd, sec, flags) ++#define op_bfd_set_section_vma(abfd, sec, vma) bfd_set_section_vma(abfd, sec, vma) ++#define op_bfd_set_section_size(abfd, sec, size) bfd_set_section_size(abfd, sec, size) ++#endif ++ ++#endif /* !OP_BFD_WRAPPERS_H */ +diff --git a/opjitconv/create_bfd.c b/opjitconv/create_bfd.c +index 48db143b..da1e6d29 100644 +--- a/opjitconv/create_bfd.c ++++ b/opjitconv/create_bfd.c +@@ -16,6 +16,7 @@ + + #include "opjitconv.h" + #include "op_libiberty.h" ++#include "op_bfd_wrappers.h" + + #include + #include +@@ -86,12 +87,12 @@ asection * create_section(bfd * abfd, char const * section_name, + bfd_perror("bfd_make_section"); + goto error; + } +- bfd_set_section_vma(abfd, section, vma); +- if (bfd_set_section_size(abfd, section, size) == FALSE) { ++ op_bfd_set_section_vma(abfd, section, vma); ++ if (op_bfd_set_section_size(abfd, section, size) == FALSE) { + bfd_perror("bfd_set_section_size"); + goto error; + } +- if (bfd_set_section_flags(abfd, section, flags) == FALSE) { ++ if (op_bfd_set_section_flags(abfd, section, flags) == FALSE) { + bfd_perror("bfd_set_section_flags"); + goto error; + } +-- +2.26.0 + diff --git a/oprofile.changes b/oprofile.changes index 0148fcb..814b9ed 100644 --- a/oprofile.changes +++ b/oprofile.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Apr 8 12:11:10 UTC 2020 - Christophe Giboudeaux + +- Add upstream patch: + * oprofile-handle-binutils-2_34.patch +- Spec cleanup + ------------------------------------------------------------------- Thu Jan 23 22:12:54 UTC 2020 - Stefan BrĂ¼ns diff --git a/oprofile.spec b/oprofile.spec index a9d122d..fecdb44 100644 --- a/oprofile.spec +++ b/oprofile.spec @@ -1,7 +1,7 @@ # # spec file for package oprofile # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -22,7 +22,7 @@ Release: 0 Summary: System-Wide Profiler for Linux Systems License: GPL-2.0-or-later AND LGPL-2.1-or-later Group: Development/Tools/Other -Url: http://oprofile.sourceforge.net/ +URL: http://oprofile.sourceforge.net/ Source0: http://prdownloads.sourceforge.net/oprofile/oprofile-%{version}.tar.gz Source2: %{name}.rpmlintrc Source3: baselibs.conf @@ -31,6 +31,8 @@ Source5: README-BEFORE-ADDING-PATCHES Patch1: %{name}-no-libjvm-version.patch Patch2: %{name}-pfm-ppc.patch Patch3: %{name}-handle-empty-event-name-spec-gracefully-for-ppc.patch +# PATCH-FIX-UPSTREAM +Patch4: %{name}-handle-binutils-2_34.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: binutils-devel @@ -42,11 +44,11 @@ BuildRequires: java-devel BuildRequires: libICE-devel BuildRequires: libtool BuildRequires: libxslt -BuildRequires: pkg-config +BuildRequires: pkgconfig BuildRequires: popt-devel BuildRequires: zlib-devel -Requires(pre): %{_sbindir}/groupadd %{_sbindir}/useradd -BuildRoot: %{_tmppath}/%{name}-%{version}-build +Requires(pre): %{_sbindir}/groupadd +Requires(pre): %{_sbindir}/useradd %ifarch ppc ppc64 ppc64le BuildRequires: libpfm-devel >= 4.3.0 %endif @@ -99,10 +101,7 @@ This package contains the library needed at runtime when profiling JITed code from supported virtual machines. %prep -%setup -q -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 +%autosetup -p1 mkdir -p java/include # copy files necessary to build Java agent libraries @@ -122,7 +121,7 @@ DATE="\"$(date -d "${modified}" "+%%b %%e %%Y")\"" TIME="\"$(date -d "${modified}" "+%%R")\"" find . -type f -regex ".*\.c\|.*\.cpp\|.*\.h" -exec grep -E -e __DATE__ -e __TIME__ {} + find . -type f -regex ".*\.c\|.*\.cpp\|.*\.h" -exec sed -i "s/__DATE__/${DATE}/g;s/__TIME__/${TIME}/g" {} + -make %{?_smp_mflags} +%make_build %install make DESTDIR=%{buildroot} htmldir=%{_docdir}/oprofile install @@ -143,7 +142,6 @@ getent passwd oprofile >/dev/null || \ %postun -n libopagent1 -p /sbin/ldconfig %files -%defattr(-,root,root) %{_bindir}/ocount %{_bindir}/ophelp %{_bindir}/opimport @@ -164,14 +162,12 @@ getent passwd oprofile >/dev/null || \ %license COPYING %files devel -%defattr(-,root,root) %{_includedir}/* %{_docdir}/%{name}/op-jit-devel.html %dir %{_libdir}/oprofile %{_libdir}/oprofile/libopagent.so %files -n libopagent1 -%defattr(-,root,root) %dir %{_libdir}/oprofile %{_libdir}/oprofile/libopagent.so.1*