Browse Source
[dynarmic] allow better dtrace diagnostics for code - do not clobber %rbp and save frame pointer (#2653)
[dynarmic] allow better dtrace diagnostics for code - do not clobber %rbp and save frame pointer (#2653)
Saving the %rbp pointer allows us to backref previous stackframes easily Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2653 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>pull/3174/head
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
7 changed files with 55 additions and 92 deletions
-
2.gitignore
-
27src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp
-
28src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp
-
6src/dynarmic/src/dynarmic/backend/x64/abi.cpp
-
2src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp
-
23src/dynarmic/tests/print_info.cpp
-
59tools/dtrace-tool.sh
@ -1,59 +0,0 @@ |
|||
#!/usr/local/bin/bash -ex |
|||
|
|||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project |
|||
# SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
# Basic script to run dtrace sampling over the program (requires Flamegraph) |
|||
# Usage is either running as: ./dtrace-tool.sh pid (then input the pid of the process) |
|||
# Or just run directly with: ./dtrace-tool.sh <command> |
|||
|
|||
FLAMEGRAPH_DIR=".." |
|||
fail() { |
|||
printf '%s\n' "$1" >&2 |
|||
exit "${2-1}" |
|||
} |
|||
|
|||
[ -f $FLAMEGRAPH_DIR/FlameGraph/stackcollapse.pl ] || fail 'Where is flamegraph?' |
|||
#[ which dtrace ] || fail 'Needs DTrace installed' |
|||
|
|||
read -r "Sampling Hz [800]: " TRACE_CFG_HZ |
|||
if [ -z "${TRACE_CFG_HZ}" ]; then |
|||
TRACE_CFG_HZ=800 |
|||
fi |
|||
|
|||
read -r "Sampling time [5] sec: " TRACE_CFG_TIME |
|||
if [ -z "${TRACE_CFG_TIME}" ]; then |
|||
TRACE_CFG_TIME=5 |
|||
fi |
|||
|
|||
TRACE_FILE=dtrace-out.user_stacks |
|||
TRACE_FOLD=dtrace-out.fold |
|||
TRACE_SVG=dtrace-out.svg |
|||
ps |
|||
|
|||
if [ "$1" = 'pid' ]; then |
|||
read -r "PID: " TRACE_CFG_PID |
|||
sudo echo 'Sudo!' |
|||
else |
|||
if [ -f "$1" ] && [ "$1" ]; then |
|||
fail 'Usage: ./tools/dtrace-profile.sh <path to program>' |
|||
fi |
|||
|
|||
printf "Executing: " |
|||
echo "$@" |
|||
sudo echo 'Sudo!' |
|||
"$@" & |
|||
TRACE_CFG_PID=$! |
|||
fi |
|||
|
|||
TRACE_PROBE="profile-${TRACE_CFG_HZ} /pid == ${TRACE_CFG_PID} && arg1/ { @[ustack()] = count(); } tick-${TRACE_CFG_TIME}s { exit(0); }" |
|||
|
|||
rm -- $TRACE_SVG || echo 'Skip' |
|||
|
|||
sudo dtrace -x ustackframes=100 -Z -n "$TRACE_PROBE" -o $TRACE_FILE 2>/dev/null || exit |
|||
|
|||
perl $FLAMEGRAPH_DIR/FlameGraph/stackcollapse.pl $TRACE_FILE > $TRACE_FOLD || exit |
|||
perl $FLAMEGRAPH_DIR/FlameGraph/flamegraph.pl $TRACE_FOLD > $TRACE_SVG || exit |
|||
|
|||
sudo chmod 0666 $TRACE_FILE |
|||
rm -- $TRACE_FILE $TRACE_FOLD |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue