The Pedigree Project 0.1
trace-state.h
1/* Copyright (c) 2026, Pedigree Developers. */
2#ifndef PEDIGREE_POSIX_TRACE_STATE_H
3#define PEDIGREE_POSIX_TRACE_STATE_H
4#include "pedigree/kernel/process/SignalEvent.h"
5#include "pedigree/kernel/processor/UserReturnFrame.h"
6#include "pedigree/kernel/utilities/Pointers.h"
7
8#include "trace-task-token.h"
9
10class Thread;
11class Process;
12namespace PosixWait {
13struct Report;
14}
16 uint64_t words[16]{};
17};
18static_assert(sizeof(TraceSignalInfo) == 128, "Linux siginfo size");
19class EXPORTED_PUBLIC PosixTraceRelation {
20 public:
21 enum class StopKind { Signal, Group, Exec };
22 struct Resume {
23 Resume() = default;
24 Resume(int value, bool detach, bool end) : signal(value), detached(detach), terminal(end) {}
25 int signal = 0;
26 bool detached = false;
27 bool terminal = false;
28 int32_t pid = 0;
29 uint32_t uid = 0;
31 };
32 PosixTraceRelation(const TraceTaskRef& tracer, const TraceTaskRef& tracee);
34 bool valid() const;
35 bool activate();
36 void taskClosed(const TraceTaskRef& task);
37 const TraceTaskRef& tracer() const {
38 return m_Tracer;
39 }
40 const TraceTaskRef& tracee() const {
41 return m_Tracee;
42 }
43 TraceStatus snapshotRegisters(Amd64UserRegisters&) const;
44 TraceStatus snapshotSignalInfo(TraceSignalInfo&) const;
45 TraceStatus resume(int signal, bool detach);
46 bool stopped() const;
47 bool selectStop(bool stopped, bool continued, bool consume, PosixWait::Report&);
48 Resume stop(Thread&, UserReturnFrame&, StopKind, int signal, const TraceSignalInfo&,
49 size_t continuationEpoch = 0, bool ownsReservation = false);
50 void continued(Process&);
51 void imageCommitted();
52 bool takeExecTrap();
53
54 private:
56 PosixTraceRelation& operator=(const PosixTraceRelation&) = delete;
57 void unlink();
58 class State;
59 const TraceTaskRef m_Tracer, m_Tracee;
61};
63EXPORTED_PUBLIC TraceStatus posix_trace_traceme();
64EXPORTED_PUBLIC TraceStatus posix_trace_lookup(int32_t tid, TraceRelationRef& empty);
65TraceStatus posix_trace_prepare_resume(const TraceTaskRef&, int signal, bool inheritReservation,
66 int32_t pid, uint32_t uid, UniquePointer<SignalEvent>&);
67#endif
Definition Group.h:32