commit:     c852a7c84f28fe745437bcddc4d88b9dc44c85f5
Author:     Andrew Savchenko <bircoph <AT> gentoo <DOT> org>
AuthorDate: Sat Jun 27 18:19:05 2020 +0000
Commit:     Andrew Savchenko <bircoph <AT> gentoo <DOT> org>
CommitDate: Sat Jun 27 18:22:49 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c852a7c8

dev-util/oprofile: fix build with binutils-2.34

Use upstream patch 377610414fb6cd7ac30e4485d9d6482fcf29aca6 to fix
build with new binutils api (2.34) while keeping compatibility
support with older versions.

Closes: https://bugs.gentoo.org/707850
Closes: https://github.com/gentoo/gentoo/pull/15469
Package-Manager: Portage-2.3.82, Repoman-2.3.20
Signed-off-by: Andrew Savchenko <bircoph <AT> gentoo.org>

 dev-util/oprofile/files/binutils-2.34.patch | 157 ++++++++++++++++++++++++++++
 dev-util/oprofile/oprofile-1.3.0.ebuild     |   8 +-
 2 files changed, 164 insertions(+), 1 deletion(-)

diff --git a/dev-util/oprofile/files/binutils-2.34.patch 
b/dev-util/oprofile/files/binutils-2.34.patch
new file mode 100644
index 00000000000..6337191a21d
--- /dev/null
+++ b/dev-util/oprofile/files/binutils-2.34.patch
@@ -0,0 +1,157 @@
+commit 377610414fb6cd7ac30e4485d9d6482fcf29aca6
+Author: William Cohen <[email protected]>
+Date:   Wed Mar 18 21:19:16 2020 -0400
+
+    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.
+
+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 <bfd.h>]],
++              [[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 <unistd.h>
+ #include <errno.h>
+@@ -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 <bfd.h>
+ #include <assert.h>
+@@ -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;
+       }

diff --git a/dev-util/oprofile/oprofile-1.3.0.ebuild 
b/dev-util/oprofile/oprofile-1.3.0.ebuild
index 826af1f43b9..da8d69f7b57 100644
--- a/dev-util/oprofile/oprofile-1.3.0.ebuild
+++ b/dev-util/oprofile/oprofile-1.3.0.ebuild
@@ -2,7 +2,7 @@
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=6
-inherit java-pkg-opt-2 linux-info user
+inherit autotools java-pkg-opt-2 linux-info user
 
 DESCRIPTION="A transparent low-overhead system-wide profiler"
 HOMEPAGE="http://oprofile.sourceforge.net";
@@ -39,6 +39,12 @@ pkg_setup() {
        use java && java-pkg_init
 }
 
+src_prepare() {
+       eapply "${FILESDIR}/binutils-2.34.patch"
+       java-pkg-opt-2_src_prepare
+       eautoreconf
+}
+
 src_configure() {
        econf \
                --disable-werror \

Reply via email to