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 +}