From: Gary Benson <gbenson@redhat.com>
To: Andrew Burgess <aburgess@broadcom.com>
Cc: gdb-patches@sourceware.org, Doug Evans <xdje42@gmail.com>,
Eli Zaretskii <eliz@gnu.org>,
Florian Weimer <fw@deneb.enyo.de>,
Mark Kettenis <mark.kettenis@xs4all.nl>,
Pedro Alves <palves@redhat.com>,
Tom Tromey <tromey@redhat.com>
Subject: Re: [PATCH 3/3 v4] Demangler crash handler
Date: Mon, 09 Jun 2014 11:48:00 -0000 [thread overview]
Message-ID: <20140609114843.GA32608@blade.nx> (raw)
In-Reply-To: <53958BC9.9060107@broadcom.com>
Andrew Burgess wrote:
> On 09/06/2014 10:01 AM, Gary Benson wrote:
> > Andrew Burgess wrote:
> > > On 05/06/2014 2:03 PM, Gary Benson wrote:
> > > > diff --git a/gdb/cp-support.c b/gdb/cp-support.c
> > > > index 91533e8..f4dde70 100644
> > > > --- a/gdb/cp-support.c
> > > > +++ b/gdb/cp-support.c
> > >
> > > > +
> > > > +/* Signal handler for gdb_demangle. */
> > > > +
> > > > +static void
> > > > +gdb_demangle_signal_handler (int signo)
> > > > +{
> > > > + if (gdb_demangle_attempt_core_dump)
> > > > + {
> > > > + if (fork () == 0)
> > > > + dump_core ();
> > >
> > > This worries me a little, when a problem case occurs gdb will
> > > dump core regardless of the users ulimit setting, without first
> > > asking the user, and doesn't tell the user that a core file was
> > > created.
> > >
> > > This feels quite unexpected behaviour to me, especially the bit
> > > about disregarding the ulimit setting without first asking for
> > > permission.
> > >
> > > Catching the crash feels like a good idea, but I'd prefer that
> > > gdb ask before circumventing the ulimit and dumping core.
> >
> > This part of the same patch:
> >
> > + if (core_dump_allowed == -1)
> > + {
> > + core_dump_allowed = can_dump_core ();
> > +
> > + if (!core_dump_allowed)
> > + gdb_demangle_attempt_core_dump = 0;
> > + }
> >
> > calls this:
> >
> > int
> > can_dump_core (void)
> > {
> > #ifdef HAVE_GETRLIMIT
> > struct rlimit rlim;
> >
> > /* Be quiet and assume we can dump if an error is returned. */
> > if (getrlimit (RLIMIT_CORE, &rlim) != 0)
> > return 1;
> >
> > if (rlim.rlim_max == 0)
> > return 0;
> > #endif /* HAVE_GETRLIMIT */
> >
> > return 1;
> > }
> >
> > which inhibits the core dump if the user's ulimit is 0.
>
> Ahh, yes I see.
>
> So the problem here is this function is geared towards the /old/ use
> of the function where we are about to ask the user if we should dump
> core. For that, this function was correct, we check the hard limit
> of the resource. If the hard limit is high then we ask the user,
> and dump core.
>
> However, in doing so we circumvent the soft limit rlim.rlim_cur. So
> I think my point still stands. The user has said "no core files
> please", and we create one without asking. If we must go down this
> road then I think we need two functions to check the two different
> limits.
Ah, I didn't realize the code in dump_core was to override the user's
soft limit. I will update the patch.
> > > Alternatively we could just not dump core from gdb, report the
> > > bad symbol and let the user file a bug. With the demangler
> > > being so deterministic it should be possible to reproduce, if
> > > not, then we just ask the user to turn off the crash catch,
> > > adjust their ulimit (like we would with any other gdb SEGV
> > > crash), and rerun the test.
> >
> > That was and is my preferred solution, but Mark Kettenis indicated
> > that he would not accept the patch unless a meaningful core file
> > was created.
>
> I don't understand that position, but I'd hope he'd agree that we
> should respect the user ulimit over creating a core file...
Yes, this seems reasonable.
> > > If we really want to create the core file by default, but aren't
> > > going to ask, then I'd propose we honour the ulimit setting, and
> > > make sure that the user is told that a core file was just written.
> >
> > The problem with asking is that you'd have to ask within the signal
> > handler, and no code that prints to the screen is safe to call from
> > within a signal handler.
>
> Indeed. I did wonder about some horrible synchronisation scheme
> where the "master" gdb process queries the user then signals the
> fork()ed child to indicate if it should dump core or not .... but
> it felt like huge overkill.
Yeah, I thought down this road too :)
> > Even indicating that a core file was written is probably
> > impossible: you just have to abort and hope for the best.
> > The nearest I could do is set a flag in the signal handler
> > and have the code it returns to print "Attempting to dump
> > core" or some such thing.
>
> I think an "attempting ..." style message would be enough, the
> gdb_demangle_attempt_core_dump flag could be used to indicate
> if we've tried to dump core or not.
I will add this to the updated patch.
Thanks,
Gary
--
http://gbenson.net/
next prev parent reply other threads:[~2014-06-09 11:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-05 13:01 [PATCH 0/3 " Gary Benson
2014-06-05 13:02 ` [PATCH 1/3 v4] Add new internal problem for demangler warnings Gary Benson
2014-06-05 13:03 ` [PATCH 2/3 v4] Refactor and expose core-dumping functionality Gary Benson
2014-06-05 16:28 ` Doug Evans
2014-06-06 9:09 ` Gary Benson
2014-06-05 13:04 ` [PATCH 3/3 v4] Demangler crash handler Gary Benson
2014-06-06 18:16 ` Florian Weimer
2014-06-06 19:27 ` Gary Benson
2014-06-06 19:42 ` Florian Weimer
2014-06-06 21:12 ` Andrew Burgess
2014-06-09 9:01 ` Gary Benson
2014-06-09 10:26 ` Andrew Burgess
2014-06-09 11:48 ` Gary Benson [this message]
2014-06-05 16:19 ` [PATCH 0/3 " Doug Evans
2014-06-06 9:19 ` Gary Benson
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=20140609114843.GA32608@blade.nx \
--to=gbenson@redhat.com \
--cc=aburgess@broadcom.com \
--cc=eliz@gnu.org \
--cc=fw@deneb.enyo.de \
--cc=gdb-patches@sourceware.org \
--cc=mark.kettenis@xs4all.nl \
--cc=palves@redhat.com \
--cc=tromey@redhat.com \
--cc=xdje42@gmail.com \
/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