commit:     3d393cf5a411642ee03c8c1c20dce2dae8855f2e
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Oct 28 07:34:46 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Oct 28 07:45:24 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3d393cf5

dev-debug/dtrace: add 2.0.4

Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-debug/dtrace/Manifest            |   1 +
 dev-debug/dtrace/dtrace-2.0.4.ebuild | 233 +++++++++++++++++++++++++++++++++++
 2 files changed, 234 insertions(+)

diff --git a/dev-debug/dtrace/Manifest b/dev-debug/dtrace/Manifest
index c12780aec257..f16f7a767c32 100644
--- a/dev-debug/dtrace/Manifest
+++ b/dev-debug/dtrace/Manifest
@@ -1 +1,2 @@
 DIST dtrace-2.0.3.tar.gz 1482755 BLAKE2B 
8cbf4e0f3c500ae6b022692b3c2ba4a4eacca3feeab88e0712435863a4148217efb6d513a551510bf9e29ba9f8e543fccf5b246ed68c3a04d47259fc5a94f3f9
 SHA512 
74fe7cd73346a3b1a134128e1f612693739ffa1460fb0d9534cf1d31d70379a717a94ff11d23e1c4be55f3c23b95cc4f940b66a01abf7ac08ca2963049a66210
+DIST dtrace-2.0.4.tar.gz 1699279 BLAKE2B 
3fb610e2c233accbe36c372ab8e4f5012cdd314750dd64f7d411955038cdafeaeda038e63a06f6995f8cb89fd2df482f34fd5583f130f21f2b7a03747e33c778
 SHA512 
63623ce70d21dadf9e1de5d85e6d0a1a3043c0bd5f2255d32793209c1774e9be774699fdd70218a840f7060a1027388bf20d1d6c5e06b9e5671113c133ce390f

diff --git a/dev-debug/dtrace/dtrace-2.0.4.ebuild 
b/dev-debug/dtrace/dtrace-2.0.4.ebuild
new file mode 100644
index 000000000000..45c9bc9361c5
--- /dev/null
+++ b/dev-debug/dtrace/dtrace-2.0.4.ebuild
@@ -0,0 +1,233 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo flag-o-matic linux-info multilib systemd toolchain-funcs udev
+
+DESCRIPTION="Dynamic BPF-based system-wide tracing tool"
+HOMEPAGE="https://github.com/oracle/dtrace-utils 
https://wiki.gentoo.org/wiki/DTrace";
+
+if [[ ${PV} == 9999 ]]; then
+       EGIT_BRANCH="devel"
+       EGIT_REPO_URI="https://github.com/oracle/dtrace-utils";
+       inherit git-r3
+else
+       
SRC_URI="https://github.com/oracle/dtrace-utils/archive/refs/tags/${PV}.tar.gz 
-> ${P}.tar.gz"
+       S="${WORKDIR}"/dtrace-utils-${PV}
+
+       KEYWORDS="-* ~amd64 ~arm64"
+fi
+
+LICENSE="UPL-1.0"
+SLOT="0"
+IUSE="test-install valgrind"
+
+# TODO: can we make the wireshark dep conditional?
+DEPEND="
+       dev-libs/elfutils
+       dev-libs/libbpf
+       dev-libs/libpfm:=
+       net-analyzer/wireshark[dumpcap]
+       net-libs/libpcap
+       >=sys-fs/fuse-3.2.0:3=
+       >=sys-libs/binutils-libs-2.42:=
+       sys-libs/zlib
+"
+RDEPEND="
+       ${DEPEND}
+       !dev-debug/systemtap[dtrace-symlink(+)]
+       net-analyzer/wireshark
+       test-install? (
+               app-alternatives/bc
+               app-editors/vim-core
+               dev-build/make
+               dev-lang/perl
+               dev-util/perf
+               net-fs/nfs-utils
+               sys-apps/coreutils
+               sys-fs/xfsprogs
+               sys-process/time
+               virtual/jdk
+       )
+"
+BDEPEND="
+       dev-build/make
+       sys-apps/gawk
+       sys-devel/bison
+       >=sys-devel/bpf-toolchain-14.1.0
+       sys-devel/flex
+"
+DEPEND+=" valgrind? ( dev-debug/valgrind )"
+
+QA_PRESTRIPPED="
+       usr/.*/dtrace/testsuite/test/triggers/.*
+"
+QA_FLAGS_IGNORED="
+       usr/.*/dtrace/testsuite/test/triggers/.*
+"
+
+# TODO: report upstream (bug #938221) although it seems like it's
+# not relevant given it's a BPF object.
+QA_EXECSTACK="
+       usr/*/dtrace/bpf_dlib.*
+"
+
+pkg_pretend() {
+       # TODO: optional kernel patches
+
+       # Basics for debugging information, BPF
+       local CONFIG_CHECK="~BPF ~DEBUG_INFO_BTF ~KALLSYMS_ALL"
+
+       CONFIG_CHECK+=" ~CUSE"
+
+       # Tracing
+       CONFIG_CHECK+=" ~TRACING"
+       CONFIG_CHECK+=" ~UPROBES ~UPROBE_EVENTS"
+       CONFIG_CHECK+=" ~FTRACE ~FTRACE_SYSCALLS ~DYNAMIC_FTRACE 
~FUNCTION_TRACER"
+       CONFIG_CHECK+=" ~FPROBE"
+       CONFIG_CHECK+=" ~BPF_KPROBE_OVERRIDE ~FUNCTION_ERROR_INJECTION"
+       # DTrace can fallback to kprobes for fbt but people often want them off
+       # for security and newer kernels work fine with BPF for that, so
+       # let's omit it. kprobes are slower and scale poorly.
+
+       # https://gcc.gnu.org/PR84052
+       CONFIG_CHECK+=" !GCC_PLUGIN_RANDSTRUCT"
+
+       if use test-install ; then
+               # See test/modules
+               CONFIG_CHECK+=" ~EXT4_FS ~ISO9660_FS ~NFS_FS ~RDS ~TUN"
+       fi
+
+       check_extra_config
+}
+
+pkg_setup() {
+       eval unset ${!LC_*} LANG
+}
+
+src_configure() {
+       if tc-is-cross-compiler; then
+               die "DTrace does not yet support cross-compilation."
+       fi
+
+       tc-export CC
+
+       # lld does this by default, so fix that, although lld fails anyway...
+       # 'LIBDTRACE_1.0' to symbol 'dtrace_provider_modules' failed: symbol 
not defined
+       append-ldflags $(test-flags-CCLD -Wl,--undefined-version)
+       # mold and lld can't cope with some relocation types used, e.g.
+       #  'test-triggers--usdt-tst-forker-prov.o:(.SUNW_dof): unknown 
relocation: R_X86_64_GLOB_DAT'
+       tc-ld-force-bfd
+
+       # -fno-semantic-interposition seems to lead to a broken dtrace
+       # that can't actually obtain results from probes, even trivial examples
+       # just hang.
+       filter-flags -fno-semantic-interposition
+       # While it builds as of 2025-06-08, it's broken at runtime
+       # in the same way as -fno-semantic-interposition (hangs, no probes 
fire).
+       filter-lto
+
+       local confargs=(
+               # TODO: Maybe we should set the UNPRIV_UID to something? -3 is 
a bit... kludgy
+               --prefix="${EPREFIX}"/usr
+               --mandir="${EPREFIX}"/usr/share/man
+               --docdir="${EPREFIX}"/usr/share/doc/${PF}
+               --with-systemd
+               HAVE_LIBCTF=yes
+               HAVE_BPFV3=yes
+               HAVE_VALGRIND=$(usex valgrind)
+       )
+
+       edo ./configure "${confargs[@]}"
+}
+
+src_compile() {
+       local myemakeargs=(
+               verbose=1
+               $(usev !test-install TRIGGERS='')
+       )
+
+       if use amd64 ; then
+               ! has_multilib_profile && myemakeargs+=( NATIVE_BITNESS_ONLY=1 )
+       fi
+
+       # -j1: https://github.com/oracle/dtrace-utils/issues/82
+       emake -j1 "${myemakeargs[@]}"
+}
+
+src_test() {
+       # Needs root and is also very time-consuming
+       :;
+}
+
+src_install() {
+       emake DESTDIR="${D}" -j1 install $(usev test-install install-test)
+
+       # We want to strip neither the BPF libraries nor libdtrace.so itself
+       # as probes attach to some symbols that would get removed otherwise.
+       dostrip -x "/usr/$(get_libdir)"
+
+       # It's a binary (TODO: move it?)
+       docompress -x /usr/share/doc/${PF}/showUSDT
+
+       newinitd "${FILESDIR}"/dtprobed.init dtprobed
+}
+
+pkg_postinst() {
+       # We need a udev reload to pick up the CUSE device node rules.
+       udev_reload
+
+       if [[ -n ${REPLACING_VERSIONS} ]]; then
+               # TODO: Make this more intelligent wrt comparison
+               # One option for this is to detect when it's needed (DOF stash 
layout changes)
+               # and then e.g. sleep and restart for the user.
+               if systemd_is_booted ; then
+                       einfo "Restart the DTrace 'dtprobed' service after 
upgrades once all dtraces are stopped with:"
+                       einfo " systemctl try-restart dtprobed"
+               else
+                       einfo "Restart the DTrace 'dtprobed' service after 
upgrades once all dtraces are stopped with:"
+                       einfo " /etc/init.d/dtprobed restart"
+               fi
+       else
+               einfo "See https://wiki.gentoo.org/wiki/DTrace for getting 
started."
+
+               # We can't do magic for people with ROOT=.
+               if [[ -n ${ROOT} ]] ; then
+                       einfo "Enable and start the DTrace 'dtprobed' service 
for systemd with:"
+                       einfo " systemctl enable --now dtprobed"
+                       einfo
+                       einfo "Enable and start the DTrace 'dtprobed' service 
for OpenRC with:"
+                       einfo " rc-update add dtprobed"
+                       einfo " /etc/init.d/dtprobed start"
+                       return
+               fi
+
+               # For first installs, we enable the service and start it.
+               #
+               # This is unusual, but the behaviour without dtprobed running
+               # is untested/unsupported. It's not a network service, it
+               # has no configuration, reads a single device node, and
+               # does all parsing within a seccomp jail. It also leads
+               # to hard-to-diagnose issues because USDT probes won't
+               # be registered and an application might have already
+               # started up which needs to be traced.
+               if systemd_is_booted ; then
+                       ebegin "Enabling & starting DTrace 'dtprobed' service"
+                       systemctl enable --now dtprobed
+                       eend $?
+               else
+                       ebegin "Enabling DTrace 'dtprobed' service"
+                       rc-update add dtprobed
+                       eend $?
+
+                       ebegin "Starting DTrace 'dtprobed' service"
+                       rc-service dtprobed start
+                       eend $?
+               fi
+       fi
+}
+
+pkg_postrm() {
+       udev_reload
+}

Reply via email to