commit:     68931941b28cdeebc2e0b6e9624584652b69ba92
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 17 21:43:20 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Oct 17 21:43:38 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=68931941

dev-util/rr: fix build with linux-headers-6.0

Revbump given the nature of rr & possible runtime breakage.

Closes: https://bugs.gentoo.org/877157
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-util/rr/files/rr-5.6.0-linux-headers-6.0.patch | 62 +++++++++++++++++
 dev-util/rr/rr-5.6.0-r1.ebuild                     | 80 ++++++++++++++++++++++
 2 files changed, 142 insertions(+)

diff --git a/dev-util/rr/files/rr-5.6.0-linux-headers-6.0.patch 
b/dev-util/rr/files/rr-5.6.0-linux-headers-6.0.patch
new file mode 100644
index 000000000000..36a911bcbece
--- /dev/null
+++ b/dev-util/rr/files/rr-5.6.0-linux-headers-6.0.patch
@@ -0,0 +1,62 @@
+https://github.com/rr-debugger/rr/commit/2979c60ef8bbf7c940afd90172ddc5d8863f766e
+https://github.com/rr-debugger/rr/issues/3369
+https://bugs.gentoo.org/877157
+
+From 2979c60ef8bbf7c940afd90172ddc5d8863f766e Mon Sep 17 00:00:00 2001
+From: Robert O'Callahan <rob...@ocallahan.org>
+Date: Thu, 25 Aug 2022 20:40:59 +1200
+Subject: [PATCH] Avoid creating a struct with elements after
+ ethtool_sset_info's variable-length-array.
+
+Resolves #3369
+--- a/src/record_syscall.cc
++++ b/src/record_syscall.cc
+@@ -1450,17 +1450,17 @@ template <typename Arch> void 
get_ethtool_gstrings_arch(RecordTask* t) {
+   AutoRemoteSyscalls remote(t);
+ 
+   // Do a ETHTOOL_GSSET_INFO to get the number of strings
+-  struct SingleStringSet {
+-    ethtool_sset_info et;
+-    uint32_t data;
+-  };
+-  SingleStringSet sss;
+-  sss.et.cmd = ETHTOOL_GSSET_INFO;
+-  sss.et.reserved = 0;
+-  sss.et.sset_mask = 1 << et_gstrings.string_set;
+-  AutoRestoreMem sss_mem(remote, &sss, sizeof(sss));
+-
+-  ifreq.ifr_ifru.ifru_data = sss_mem.get();
++  ethtool_sset_info et;
++  et.cmd = ETHTOOL_GSSET_INFO;
++  et.reserved = 0;
++  et.sset_mask = 1 << et_gstrings.string_set;
++  std::vector<uint8_t> buffer;
++  buffer.resize(sizeof(et) + sizeof(uint32_t));
++  memcpy(buffer.data(), &et, sizeof(et));
++  memset(buffer.data() + sizeof(et), 0, sizeof(uint32_t));
++  AutoRestoreMem et_mem(remote, buffer.data(), buffer.size());
++
++  ifreq.ifr_ifru.ifru_data = et_mem.get();
+   AutoRestoreMem ifr_mem(remote, &ifreq, sizeof(ifreq));
+ 
+   long ret = remote.syscall(regs.original_syscallno(), regs.arg1(),
+@@ -1470,8 +1470,7 @@ template <typename Arch> void 
get_ethtool_gstrings_arch(RecordTask* t) {
+     return;
+   }
+ 
+-  sss = t->read_mem(sss_mem.get().cast<SingleStringSet>());
+-
++  uint32_t data = t->read_mem((et_mem.get() + sizeof(et)).cast<uint32_t>());
+   // Now do the ETHTOOL_GSTRINGS call
+   ret = remote.syscall(regs.original_syscallno(), regs.arg1(), SIOCETHTOOL,
+       regs.arg3());
+@@ -1479,7 +1478,7 @@ template <typename Arch> void 
get_ethtool_gstrings_arch(RecordTask* t) {
+   if (ret < 0) {
+     return;
+   }
+-  t->record_remote(orig_gstrings, sizeof(ethtool_gstrings) + 
ETH_GSTRING_LEN*sss.data);
++  t->record_remote(orig_gstrings, sizeof(ethtool_gstrings) + 
ETH_GSTRING_LEN*data);
+ }
+ 
+ static void get_ethtool_gstrings(RecordTask* t) {
+

diff --git a/dev-util/rr/rr-5.6.0-r1.ebuild b/dev-util/rr/rr-5.6.0-r1.ebuild
new file mode 100644
index 000000000000..096ff7b1f8c8
--- /dev/null
+++ b/dev-util/rr/rr-5.6.0-r1.ebuild
@@ -0,0 +1,80 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{8,9,10} )
+CMAKE_BUILD_TYPE=Release
+
+inherit cmake linux-info python-single-r1
+
+DESCRIPTION="Record and Replay Framework"
+HOMEPAGE="https://rr-project.org/";
+SRC_URI="https://github.com/rr-debugger/${PN}/archive/${PV}.tar.gz -> 
mozilla-${P}.tar.gz"
+
+LICENSE="MIT BSD-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="multilib test"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+DEPEND="
+       ${PYTHON_DEPS}
+       dev-libs/capnproto:=
+       sys-libs/zlib:=
+"
+RDEPEND="
+       ${DEPEND}
+       sys-devel/gdb[xml]
+"
+# Add all the deps needed only at build/test time.
+DEPEND+="
+       test? (
+               $(python_gen_cond_dep '
+                       dev-python/pexpect[${PYTHON_USEDEP}]
+               ')
+               sys-devel/gdb[xml]
+       )"
+
+QA_FLAGS_IGNORED="
+       usr/lib.*/rr/librrpage.so
+       usr/lib.*/rr/librrpage_32.so
+"
+
+RESTRICT="test" # toolchain and kernel version dependent
+
+PATCHES=(
+       "${FILESDIR}"/${P}-linux-headers-6.0.patch
+)
+
+pkg_setup() {
+       if use kernel_linux; then
+               CONFIG_CHECK="SECCOMP"
+               linux-info_pkg_setup
+       fi
+       python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       cmake_src_prepare
+
+       sed -i 's:-Werror::' CMakeLists.txt || die #609192
+}
+
+src_test() {
+       if has usersandbox ${FEATURES} ; then
+               ewarn "Test suite fails under FEATURES=usersandbox (bug 
#632394). Skipping."
+               return 0
+       fi
+
+       cmake_src_test
+}
+
+src_configure() {
+       local mycmakeargs=(
+               -DBUILD_TESTS=$(usex test)
+               -Ddisable32bit=$(usex !multilib) #636786
+       )
+
+       cmake_src_configure
+}

Reply via email to