Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Mark Kettenis <mark.kettenis@xs4all.nl>
To: drow@false.org
Cc: gdb-patches@sourceware.org
Subject: Re: [commit] Follow forks on HP-UX 10.20
Date: Tue, 26 Jul 2005 21:02:00 -0000	[thread overview]
Message-ID: <200507262102.j6QL240v002680@elgar.sibelius.xs4all.nl> (raw)
In-Reply-To: <20050725221944.GA19564@nevyn.them.org> (message from Daniel Jacobowitz on Mon, 25 Jul 2005 18:19:44 -0400)

   Date: Mon, 25 Jul 2005 18:19:44 -0400
   From: Daniel Jacobowitz <drow@false.org>

   On Tue, Jul 26, 2005 at 12:12:28AM +0200, Mark Kettenis wrote:
   > Finally, the goal of this excercise.  The code is also going to be
   > used on OpenBSD when I get the necessary kernel stuff committed.  It
   > doesn't do follow-vfork yet.  HP-UX 10.20 doesn't really allow you to
   > do anything with a vforked child until it execs.  So follow-vfork
   > isn't useful until follow-exec is properly implemented.
   > 
   > Committed,

   I'm not really sure this is in the right place.  Good, you're going to
   implement the HP/UX ptrace interface on OpenBSD also.  But even then
   it'll be HP/UX and OpenBSD specific.  Why can't they inherit from
   inf-ptrace.c instead of adding ifdefs to this file?  Isn't that the
   point of target inheritance - to avoid having code in the "base
   classes" which is only useful on a few targets?

I considered doing this, but I didn't see a way to do this properly
without violating two other "design principles":

1. The #ifdef PT_GET_PROCESS_STATE is essentially interleaved with the
   rest of the code.  This is especially true for the fork following
   code that I didn't commit (yet).  Seperating things would almost
   certainly lead to code duplication.

2. Creating a HP-UX and OpenBSD specific target vector would make
   autocomatic detection of the availibility of the necessary
   interfaces complicated.  This is especially important for OpenBSD,
   where older versions don't have the necessary interfaces, and where
   we have an instantiation for the target vector for every supported
   hardware platform.  So this:

   > @@ -471,6 +588,9 @@ inf_ptrace_target (void)
   >    t->to_files_info = inf_ptrace_files_info;
   >    t->to_kill = inf_ptrace_kill;
   >    t->to_create_inferior = inf_ptrace_create_inferior;
   > +#ifdef PT_GET_PROCESS_STATE
   > +  t->to_follow_fork = inf_ptrace_follow_fork;
   > +#endif
   >    t->to_mourn_inferior = inf_ptrace_mourn_inferior;
   >    t->to_thread_alive = inf_ptrace_thread_alive;
   >    t->to_pid_to_str = normal_pid_to_str;

   This in particular makes me think it's in the wrong place.

seems to be the right idiom from an autoconf standpoint.

So instead of trying to go for OO purity, I took a more pragmatic
approach.

If you really think the interleaved #ifdefs are obfuscating the code,
I think I can rework things a bit and create something a bit closer to
seperate target vectors.  But in order to avoid the problems in 1. and
2. I'd keep the stuff in inf-ptrace.c.

Mark


      reply	other threads:[~2005-07-26 21:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-25 22:12 Mark Kettenis
2005-07-25 22:19 ` Daniel Jacobowitz
2005-07-26 21:02   ` Mark Kettenis [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200507262102.j6QL240v002680@elgar.sibelius.xs4all.nl \
    --to=mark.kettenis@xs4all.nl \
    --cc=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox