summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2024-04-24Tweak SCHEDULER_DELAY for use with installing breakpointsMalfurious2-2/+7
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Ignore breakpoints during singlestepMalfurious1-20/+13
Due to new independent thread control, it is now possible and likely that breakpoints will be installed before singlesteps are waited upon to be completed. also clean detect_breakpoint with get_breakpoint. Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Fix bug with cleaning temporary breakpointsMalfurious1-9/+10
dont remove them before initial use Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Independent thread control refactorMalfurious3-220/+203
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Multithread version 3Malfurious3-319/+330
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Add strict_strtoulMalfurious2-0/+7
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Prevent lingering traps after detachMalfurious1-0/+3
There can sometimes be a pending SIGTRAP when we resume a thread. This is usually due to interrupting a hung single-step. If this trap is hit after the debugger leaves, the original process will crash. This is a quick workaround to attempt to consume such traps ourselves before detaching. Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Handle PTRACE_EVENT_EXECMalfurious1-0/+29
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Workaround SIGSTOP on child process startupMalfurious2-2/+8
The debugger design prefers to use PTRACE_SEIZE instead of PTRACE_ATTACH, due to the simpler thread control semantics that are available. However, to utilize the same featureset for forked processes, we can no longer use PTRACE_TRACEME to guarantee that the child becomes a tracee before it execs into the target program. Manually raising SIGSTOP to act as a synchronization point is problematic for a couple reasons: - We need to detect whether the special SIGSTOP was or was not yet encountered by the time our debugger module attaches and interrupts the thread. This complicates the dance of input controls to ensure we are at the exec (and nowhere else) when the real user takes over the controls. - The injection of an extra signal circumvents the benefits we hope to leverage by using the PTRACE_SEIZE semantics. We can no longer assume that all incoming signals are genuine. For the time being, sleep in the newly forked child for the scheduler delay period. This is not bullet-proof, but tends to allow the debugger module enough time to actually seize the thread before anything interesting happens. At this point a single dbg_cont() will cause the child to arrive and stop at the user's exec. Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24setpgid is redundant with setsid and causes an errorMalfurious1-1/+0
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Display name of pending signalMalfurious1-1/+2
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24dbg_realcont for testing purposesMalfurious3-0/+23
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Display installed status of breakpointsMalfurious1-1/+1
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24(Un)install breakpoints via specific threadMalfurious1-15/+15
We need to perform these changes with a thread ID that is known to be in ptrace stop. This is a requirement of the API even though the memory change is seen by all threads of the guest process. Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Don't drop temporary breakpoints when execution is to be restartedMalfurious1-9/+16
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Fix capture_state edge casesMalfurious1-5/+21
Use `th->state == NULL` as an indicator that each thread's state is capturable, discard use of the `all` parameter. Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Multithread version 2Malfurious4-538/+379
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Multithread version 1Malfurious5-283/+825
Signed-off-by: Malfurious <m@lfurio.us>
2023-07-08Initial debugger core and test UIMalfurious4-47/+612
This is vaguely competent at tracing single-threaded programs. Vi-like keybinds defined in misplays.c. Signed-off-by: Malfurious <m@lfurio.us>
2023-07-08Implement trivial linked listMalfurious3-0/+43
* Bring-your-own-node (generic / zero allocations) * Doubly-linked and circular, forward and backward traversable * Random insert/removal in constant time * All operations are no-fail * [Some type safety concessions though] Signed-off-by: Malfurious <m@lfurio.us>
2023-07-07Add panel clear helperMalfurious2-0/+5
Signed-off-by: Malfurious <m@lfurio.us>
2023-07-07Add malloc wrapperMalfurious2-0/+11
Abort on allocation failure. This is mostly done as a formality, as Linux tends to over-commit memory anyway. In the event of most failures, we won't have a reasonable recovery either. Signed-off-by: Malfurious <m@lfurio.us>
2023-07-06Rename curshelpers unit to 'helpers'Malfurious5-5/+4
Signed-off-by: Malfurious <m@lfurio.us>
2023-07-05Add CMake build systemMalfurious2-0/+39
Signed-off-by: Malfurious <m@lfurio.us>
2023-07-02Add main source fileMalfurious1-0/+105
Signed-off-by: Malfurious <m@lfurio.us>
2023-07-02Add basic pty consoleMalfurious2-0/+117
This is good enough for early testing of the debugger functionality, but should be improved in the future. Signed-off-by: Malfurious <m@lfurio.us>
2023-07-02Add convenience ncurses functionsMalfurious2-0/+59
Signed-off-by: Malfurious <m@lfurio.us>
2023-06-30UNLICENSEMalfurious1-0/+24
Signed-off-by: Malfurious <m@lfurio.us>