summaryrefslogtreecommitdiffstats
path: root/misplays.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2024-05-08Only update ncurses display on activity or keypressHEADmasterMalfurious1-8/+21
Previously, the test UI logic would constantly regenerate and print the screen's contents every iteration of the main processing loop to naively ensure that changes to the underlying system were reflected immediately. Sometimes, this would result in a screen flicker due to the rapid clearing and printing. This makes the UI a bit smarter about when refreshes occur, by monitoring activity results from the debugger and console modules in addition to user input. This should improve the screen flicker performance. This also addresses an issue selecting text on the screen, which was previously not possible due to the rapid refreshing as well. Signed-off-by: Malfurious <m@lfurio.us>
2024-05-08Add 64-bit ARM architecture constantsMalfurious1-0/+12
Signed-off-by: Malfurious <m@lfurio.us>
2024-05-08Parameterize architecture-specific detailsMalfurious1-20/+53
Abstract architecture details into architecture.h and add x86 constants. This is slightly complicated by the fact that 64-bit hosts can run 32-bit code, so we do still need to resolve some values dynamically. The architecture_info() function is intented to address this, and performs parameter lookups based on the current state of the guest process. Resolving values on a per-process-state basis is important due to the process model under Linux. If we fork to debug a 32-bit program, the forked process will be native 64-bit until the execve system call. And of course, the process is then free to exec anything it likes later on as well. Signed-off-by: Malfurious <m@lfurio.us>
2024-05-08Remove call to close_range() during process forkMalfurious1-1/+1
I don't think this is strictly necessary, just seemed like a good idea. However, this function doesn't seem to be available on my test ARM system, so it is removed for compatibility. Signed-off-by: Malfurious <m@lfurio.us>
2024-05-08Show each active breakpoint one per lineMalfurious1-2/+1
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-27Show breakpoint limiters in the test UIMalfurious1-2/+3
Display the value of active breakpoint threads, target stack frames, and enable status. Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Implement support for PTRACE_EVENT_FORK and uiMalfurious1-56/+59
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Enable user creation of thread-specific breakpointsMalfurious1-0/+5
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Add orig_rax to register displayMalfurious1-0/+1
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Tweak SCHEDULER_DELAY for use with installing breakpointsMalfurious1-1/+1
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Independent thread control refactorMalfurious1-4/+1
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Multithread version 3Malfurious1-13/+14
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Workaround SIGSTOP on child process startupMalfurious1-1/+6
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 purposesMalfurious1-0/+3
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-24Multithread version 2Malfurious1-204/+168
Signed-off-by: Malfurious <m@lfurio.us>
2024-04-24Multithread version 1Malfurious1-90/+171
Signed-off-by: Malfurious <m@lfurio.us>
2023-07-08Initial debugger core and test UIMalfurious1-47/+273
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-06Rename curshelpers unit to 'helpers'Malfurious1-1/+1
Signed-off-by: Malfurious <m@lfurio.us>
2023-07-02Add main source fileMalfurious1-0/+105
Signed-off-by: Malfurious <m@lfurio.us>