From 68cb6d5f3a2cf6ef7012e1944c3851aaa31f735a Mon Sep 17 00:00:00 2001 From: Jason White Date: Mon, 5 Dec 2022 10:20:52 -0800 Subject: [PATCH] Remove unused pedigree example Summary: Removing this to remove another dependency on `reverie-util`, so we can eventually get rid of it. Reviewed By: rrnewton Differential Revision: D41629842 fbshipit-source-id: bf6d518db6e5ff9f4149936a7dabc0e912133886 --- reverie-examples/Cargo.toml | 5 -- reverie-examples/README.md | 11 ---- reverie-examples/pedigree.rs | 104 ----------------------------------- 3 files changed, 120 deletions(-) delete mode 100644 reverie-examples/pedigree.rs diff --git a/reverie-examples/Cargo.toml b/reverie-examples/Cargo.toml index 12ce2ee..71dd85b 100644 --- a/reverie-examples/Cargo.toml +++ b/reverie-examples/Cargo.toml @@ -36,10 +36,6 @@ path = "debug.rs" name = "noop" path = "noop.rs" -[[bin]] -name = "pedigree" -path = "pedigree.rs" - [[bin]] name = "strace" path = "strace/main.rs" @@ -51,7 +47,6 @@ path = "strace_minimal.rs" [dependencies] anyhow = "1.0.65" clap = { version = "3.2.17", features = ["derive", "env", "regex", "unicode", "wrap_help"] } -nix = "0.25" reverie = { version = "0.1.0", path = "../reverie" } reverie-ptrace = { version = "0.1.0", path = "../reverie-ptrace" } reverie-util = { version = "0.1.0", path = "../reverie-util" } diff --git a/reverie-examples/README.md b/reverie-examples/README.md index a2b418e..8b1c060 100644 --- a/reverie-examples/README.md +++ b/reverie-examples/README.md @@ -37,17 +37,6 @@ This example tool intercepts write events on stdout and stderr and manipulates either when those outputs are released, or the scheduling order that determines the order of printed output. -# pedigree: Deterministic virtual process IDs - -This tool monitors the spawning of new processes and maps each new PID to a -deterministic virtual PID. The new virtual PID is reported after each -process-spawning syscall. - -This tool is a work-in-progress and is not yet functioning. - -`pedigree.rs` is an implementation of pedigree / virtual PID generation using local state. -`virtual_process_tree.rs` is an implementation which uses global state. - # strace: Reverie Echo Tool This instrumentation tool simply echos intercepted events, like strace. diff --git a/reverie-examples/pedigree.rs b/reverie-examples/pedigree.rs deleted file mode 100644 index 7397770..0000000 --- a/reverie-examples/pedigree.rs +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -//! An example that tracks thread pedigree using local state -use clap::Parser; -use reverie::syscalls::Syscall; -use reverie::Error; -use reverie::Guest; -use reverie::Pid; -use reverie::Tool; -use reverie_util::pedigree::Pedigree; -use reverie_util::CommonToolArguments; -use serde::Deserialize; -use serde::Serialize; -use tracing::debug; -use tracing::trace; - -// TODO: Add handle pedigree forking, initialization, etc. to tool. -// This tool is NOT FUNCTIONAL in its current state. - -#[derive(Debug, Serialize, Deserialize, Default, Clone)] -struct PedigreeLocal(Pedigree); - -#[reverie::tool] -impl Tool for PedigreeLocal { - type GlobalState = (); - type ThreadState = PedigreeLocal; - - fn new(pid: Pid, _cfg: &()) -> Self { - debug!("[pedigree] initialize pedigree for pid {}", pid); - PedigreeLocal(Pedigree::new()) - } - - fn init_thread_state( - &self, - _tid: Pid, - parent: Option<(Pid, &Self::ThreadState)>, - ) -> Self::ThreadState { - if let Some((_, state)) = parent { - let mut parent = state.clone(); - let child = parent.0.fork_mut(); - trace!("child pedigree: {:?}", child); - PedigreeLocal(child) - } else { - PedigreeLocal(Pedigree::new()) - } - } - - async fn handle_syscall_event>( - &self, - guest: &mut T, - syscall: Syscall, - ) -> Result { - match syscall { - #[cfg(target_arch = "x86_64")] - Syscall::Fork(_) | Syscall::Vfork(_) => self.handle_fork(syscall, guest).await, - Syscall::Clone(_) => self.handle_fork(syscall, guest).await, - Syscall::Getpid(_) | Syscall::Getppid(_) | Syscall::Gettid(_) | Syscall::Getpgid(_) => { - let pid = guest.inject(syscall).await?; - let vpid = nix::unistd::Pid::try_from(&self.0).unwrap(); - trace!("getpid returned {:?} vpid: {:?}", pid, vpid); - Ok(pid) - } - Syscall::Setpgid(_) => { - panic!("[pedigree] setpgid is not allowed."); - } - _ => guest.tail_inject(syscall).await, - } - } -} - -impl PedigreeLocal { - async fn handle_fork( - &self, - syscall: Syscall, - guest: &mut impl Guest, - ) -> Result { - let retval = guest.inject(syscall).await?; - let pedigree = guest.thread_state_mut().0.fork_mut(); - trace!( - "got new pedigree: {:?} => {:x?}", - pedigree, - nix::unistd::Pid::try_from(&pedigree) - ); - Ok(retval) - } -} - -#[tokio::main] -async fn main() -> Result<(), Error> { - let args = CommonToolArguments::from_args(); - let log_guard = args.init_tracing(); - let tracer = reverie_ptrace::TracerBuilder::::new(args.into()) - .spawn() - .await?; - let (status, _global_state) = tracer.wait().await?; - drop(log_guard); // Flush logs before exiting. - status.raise_or_exit() -}