mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 03:07:35 +00:00
Ports/gdb: Implement wait and mourn_inferior overrides for our target
While troubleshooting why gdb wasn't working when attempting to debug serenity programs I noticed two things: - The contract of serenity's `waitpid(..)` appears to be slightly different than the generic ptrace target expects. We need to make sure we pass `WSTOPPED`, and it can return different errno values that we would want to re-try on. - The contract of serenity's `ptrace(..)` implementation appears to diverge as well, as we are expected to call `PT_ATTACH` before we call `PT_CONTINUE`, otherwise `ptrace(..)` will just error out. These two patches fix the behavior of wait and mourn_inferior so that they work as expected on serenity and allow us to attach and then wait for a process to exit while running under gdb.
This commit is contained in:
parent
f01e1d0c17
commit
e56262caed
7 changed files with 195 additions and 4 deletions
|
@ -20,3 +20,29 @@ gdb: Add build support for SerenityOS
|
|||
serenity: Fix compiler -fpermissive warnings from using latest GCC
|
||||
|
||||
|
||||
## `0005-serenity-Implement-custom-wait-override-for-the-sere.patch`
|
||||
|
||||
serenity: Implement custom wait override for the serenity_nat_target
|
||||
|
||||
While troubleshooting why gdb wasn't working when attempting to debug
|
||||
serenity programs I noticed two things:
|
||||
|
||||
- The contract of serenity's `waitpid(..)` appears to be slightly
|
||||
different than the generic ptrace target expects. We need to make
|
||||
sure we pass `WSTOPPED`, and it can return different errno values
|
||||
that we would want to re-try on.
|
||||
|
||||
- The contract of serenity's `ptrace(..)` implementation appears to
|
||||
diverge as well, as we are expected to call `PT_ATTACH` before we
|
||||
call `PT_CONTINUE`, otherwise `ptrace(..)` will just error out.
|
||||
|
||||
Allow gdb to understand these differences, I've overloaded the
|
||||
serenity_nat_target::wait(..) method and added the logic there.
|
||||
|
||||
## `0006-serenity-Implement-mourn_inferior-override-for-the-s.patch`
|
||||
|
||||
serenity: Implement mourn_inferior override for the serenity_nat_target
|
||||
|
||||
We need to pass `WNOHANG` to our `waitpid(..)` call on SerenityOS,
|
||||
otherwise we will wait forever.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue