From bc2d0b7bbc91845faa25cbfbc87a51a736244093 Mon Sep 17 00:00:00 2001 From: Ebben Aries Date: Sat, 23 Sep 2023 12:27:08 +0900 Subject: development/uftrace: Added (function graph tracer). Signed-off-by: Andrew Clemons Signed-off-by: Willy Sudiarto Raharjo --- development/uftrace/README | 13 ++++ development/uftrace/slack-desc | 19 ++++++ development/uftrace/uftrace.SlackBuild | 116 +++++++++++++++++++++++++++++++++ development/uftrace/uftrace.info | 10 +++ 4 files changed, 158 insertions(+) create mode 100644 development/uftrace/README create mode 100644 development/uftrace/slack-desc create mode 100644 development/uftrace/uftrace.SlackBuild create mode 100644 development/uftrace/uftrace.info diff --git a/development/uftrace/README b/development/uftrace/README new file mode 100644 index 000000000000..e3d851eec1f7 --- /dev/null +++ b/development/uftrace/README @@ -0,0 +1,13 @@ +uftrace is a function call graph tracer for C, C++, Rust and Python +programs. + +It hooks into the entry and exit of each function, recording timestamps +as well as the function's arguments and return values. uftrace is +capable of tracing both user and kernel functions, as well as library +functions and system events providing an integrated execution flow in a +single timeline. + +Initially, uftrace only supported function tracing with compiler +support. However, it now allows users to trace function calls without +recompilation by analyzing instructions in each function prologue and +dynamically and selectively patching those instructions. diff --git a/development/uftrace/slack-desc b/development/uftrace/slack-desc new file mode 100644 index 000000000000..9c0e3d2c8977 --- /dev/null +++ b/development/uftrace/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +uftrace: uftrace (Function call graph tracer for C, C++, Rust and Python) +uftrace: +uftrace: It hooks into the entry and exit of each function, recording +uftrace: timestamps as well as the function's arguments and return values. +uftrace: uftrace is capable of tracing both user and kernel functions, as well +uftrace: as library functions and system events providing an integrated +uftrace: execution flow in a single timeline. +uftrace: +uftrace: Homepage: https://github.com/namhyung/uftrace +uftrace: +uftrace: diff --git a/development/uftrace/uftrace.SlackBuild b/development/uftrace/uftrace.SlackBuild new file mode 100644 index 000000000000..9b7464ccedd6 --- /dev/null +++ b/development/uftrace/uftrace.SlackBuild @@ -0,0 +1,116 @@ +#!/bin/bash + +# Slackware build script for uftrace + +# Copyright 2023 Ebben Aries +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=uftrace +VERSION=${VERSION:-20230911_58e7307} +GITHASH=${GITHASH:-58e73072be45f64c0973cb1c9b9a083f7a0977b4} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$GITHASH +tar xvf $CWD/$PRGNAM-$GITHASH.tar.?z || exit 1 +cd $PRGNAM-$GITHASH || exit 1 + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# Configure, build, and install: +if [ ! -r configure ]; then + if [ -x ./autogen.sh ]; then + NOCONFIGURE=1 ./autogen.sh + else + autoreconf -vif + fi +fi + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --mandir=/usr/man \ + --build=$ARCH-slackware-linux + +make +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a INSTALL.md NEWS README.md TODO $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/development/uftrace/uftrace.info b/development/uftrace/uftrace.info new file mode 100644 index 000000000000..f162254e8d83 --- /dev/null +++ b/development/uftrace/uftrace.info @@ -0,0 +1,10 @@ +PRGNAM="uftrace" +VERSION="20230911_58e7307" +HOMEPAGE="https://github.com/namhyung/uftrace" +DOWNLOAD="https://github.com/namhyung/uftrace/archive/58e7307/uftrace-58e73072be45f64c0973cb1c9b9a083f7a0977b4.tar.gz" +MD5SUM="6db62e230cfc18af9a7996783a0e38fd" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="capstone" +MAINTAINER="Ebben Aries" +EMAIL="slackbuilds@dscp.org" -- cgit v1.2.3