1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-25 18:35:09 +00:00
serenity/Ports/gdb/patches/0004-serenity-Fix-compiler-fpermissive-warnings-from-usin.patch
Brian Gianforcaro e56262caed 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.
2022-02-20 11:49:41 +01:00

53 lines
1.8 KiB
Diff

From 7a5e11d2e9cbe98af96faa4835592686bf261a23 Mon Sep 17 00:00:00 2001
From: Brian Gianforcaro <b.gianfo@gmail.com>
Date: Tue, 28 Dec 2021 04:39:25 -0800
Subject: [PATCH 4/6] serenity: Fix compiler -fpermissive warnings from using
latest GCC
---
gdb/inf-ptrace.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index afa38de..247000a 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -288,7 +288,7 @@ inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
where it was. If GDB wanted it to start some other way, we have
already written a new program counter value to the child. */
errno = 0;
- gdb_ptrace (request, ptid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal));
+ gdb_ptrace (request, ptid, (PTRACE_TYPE_ARG3)1, (void*)gdb_signal_to_host (signal));
if (errno != 0)
perror_with_name (("ptrace"));
}
@@ -312,6 +312,9 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
{
pid = waitpid (ptid.pid (), &status, 0);
save_errno = errno;
+ fprintf_unfiltered (gdb_stderr,
+ _("waitpid(..): %s.\n"),
+ safe_strerror (save_errno));
}
while (pid == -1 && errno == EINTR);
@@ -388,14 +391,14 @@ inf_ptrace_peek_poke (ptid_t ptid, gdb_byte *readbuf,
memcpy (buf.byte + skip, writebuf + n, chunk);
errno = 0;
gdb_ptrace (PT_WRITE_D, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
- buf.word);
+ (void*)buf.word);
if (errno != 0)
{
/* Using the appropriate one (I or D) is necessary for
Gould NP1, at least. */
errno = 0;
gdb_ptrace (PT_WRITE_I, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
- buf.word);
+ (void*)buf.word);
if (errno != 0)
break;
}
--
2.32.0