
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.
69 lines
1.9 KiB
Diff
69 lines
1.9 KiB
Diff
From e87fd74df2c7fcb4b146eb09b5b710a45003999a Mon Sep 17 00:00:00 2001
|
|
From: Brian Gianforcaro <b.gianfo@gmail.com>
|
|
Date: Sat, 19 Feb 2022 19:47:42 -0800
|
|
Subject: [PATCH 3/6] gdb: Add build support for SerenityOS
|
|
|
|
---
|
|
bfd/config.bfd | 9 +++++++++
|
|
gdbsupport/configure | 2 +-
|
|
libiberty/configure | 4 +++-
|
|
3 files changed, 13 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/bfd/config.bfd b/bfd/config.bfd
|
|
index 30087e3..11dc114 100644
|
|
--- a/bfd/config.bfd
|
|
+++ b/bfd/config.bfd
|
|
@@ -634,6 +634,11 @@ case "${targ}" in
|
|
targ_selvecs=
|
|
targ64_selvecs=x86_64_elf64_vec
|
|
;;
|
|
+ i[3-7]86-*-serenity*)
|
|
+ targ_defvec=i386_elf32_vec
|
|
+ targ_selvecs=
|
|
+ targ64_selvecs=x86_64_elf64_vec
|
|
+ ;;
|
|
#ifdef BFD64
|
|
x86_64-*-cloudabi*)
|
|
targ_defvec=x86_64_elf64_cloudabi_vec
|
|
@@ -694,6 +699,10 @@ case "${targ}" in
|
|
targ_selvecs=i386_elf32_vec
|
|
want64=true
|
|
;;
|
|
+ x86_64-*-serenity*)
|
|
+ targ_defvec=x86_64_elf64_vec
|
|
+ want64=true
|
|
+ ;;
|
|
#endif
|
|
i[3-7]86-*-lynxos*)
|
|
targ_defvec=i386_elf32_vec
|
|
diff --git a/gdbsupport/configure b/gdbsupport/configure
|
|
index a9dd02c..3c5bcf5 100755
|
|
--- a/gdbsupport/configure
|
|
+++ b/gdbsupport/configure
|
|
@@ -8934,7 +8934,7 @@ $as_echo "$gdb_cv_cxx_std_thread" >&6; }
|
|
|
|
# This check must be here, while LIBS includes any necessary
|
|
# threading library.
|
|
- for ac_func in pthread_sigmask pthread_setname_np
|
|
+ for ac_func in pthread_setname_np
|
|
do :
|
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
|
ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
|
diff --git a/libiberty/configure b/libiberty/configure
|
|
index fffb91d..defc239 100755
|
|
--- a/libiberty/configure
|
|
+++ b/libiberty/configure
|
|
@@ -6478,7 +6478,9 @@ case "${host}" in
|
|
$as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
|
|
|
|
$as_echo "#define HAVE_SYS_NERR 1" >>confdefs.h
|
|
-
|
|
+ ;;
|
|
+ *-*-serenity*)
|
|
+ $as_echo "#define HAVE_PSIGNAL 1" >>confdefs.h
|
|
;;
|
|
esac
|
|
|
|
--
|
|
2.32.0
|
|
|