diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5b27f70..20d51b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,7 +43,7 @@ jobs: - name: Replay run: uftrace replay --data=tracedir --output-fields=tid | tee ci.snap - name: Compare to snapshot - run: diff ci.snap out.snap + run: diff -u out.snap ci.snap rust: name: Rust @@ -70,4 +70,4 @@ jobs: - name: Replay run: uftrace replay --data=tracedir --output-fields=tid | tee ci.snap - name: Compare to snapshot - run: diff ci.snap out.snap + run: diff -u out.snap ci.snap diff --git a/examples/rust/out.snap b/examples/rust/out.snap index eccf366..2b26afc 100644 --- a/examples/rust/out.snap +++ b/examples/rust/out.snap @@ -9,3 +9,13 @@ [ 1] | } /* rftrace_rs_test::test3 */ [ 1] | } /* rftrace_rs_test::test2 */ [ 1] | } /* rftrace_rs_test::test1 */ + [ 1] | rftrace_frontend::frontend::dump_full_uftrace() { + [ 1] | rftrace_frontend::frontend::dump_traces() { + [ 1] | rftrace_frontend::frontend::disable(); + +uftrace stopped tracing with remaining functions +================================================ +task: 1 +[1] rftrace_frontend::frontend::dump_traces +[0] rftrace_frontend::frontend::dump_full_uftrace + diff --git a/rftrace/src/backend.rs b/rftrace/src/backend.rs index bb77366..2b61aab 100644 --- a/rftrace/src/backend.rs +++ b/rftrace/src/backend.rs @@ -1,4 +1,4 @@ -use core::arch::asm; +use core::arch::naked_asm; use core::arch::x86_64::_rdtsc; use core::slice; use core::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering}; @@ -87,7 +87,7 @@ pub unsafe extern "C" fn mcount() { // mcounts ret addr is directly at rsp // based on https://github.com/namhyung/uftrace/blob/master/arch/x86_64/mcount.S - asm!( + naked_asm!( // if ENABLED.load(Ordering::Relaxed) { // return; // } @@ -132,7 +132,6 @@ pub unsafe extern "C" fn mcount() { "pop rax", "ret", // TODO: ENABLED = sym ENABLED, - options(noreturn), ); } @@ -395,7 +394,7 @@ pub unsafe extern "C" fn mcount_return_trampoline() { RSP +0 rax */ - asm!( + naked_asm!( prologue!(), // always backup return registers "mov [rsp + 8], rdx", @@ -416,7 +415,6 @@ pub unsafe extern "C" fn mcount_return_trampoline() { restore_sse2!(), epilogue!(), "ret", - options(noreturn), ); }