From: Petr Tesarik <ptesarik@suse.cz>
To: Ingo Molnar <mingo@elte.hu>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>,
"H. Peter Anvin" <hpa@zytor.com>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: Definition of BUG on x86
Date: Thu, 19 Feb 2009 17:55:15 +0100 [thread overview]
Message-ID: <1235062515.15053.94.camel@nathan.suse.cz> (raw)
In-Reply-To: <20090219161649.GC9556@elte.hu>
Ingo Molnar píše v Čt 19. 02. 2009 v 17:16 +0100:
> * Petr Tesarik <ptesarik@suse.cz> wrote:
>
> > Ingo Molnar píše v Čt 19. 02. 2009 v 16:35 +0100:
> > >[...]
> > > * Jeremy Fitzhardinge <jeremy@goop.org> wrote:
> > >
> > > > Ingo Molnar wrote:
> > > >> * Petr Tesarik <ptesarik@suse.cz> wrote:
> > > >>
> > > >>
> > > >>> Ingo Molnar píše v Čt 19. 02. 2009 v 13:47 +0100:
> > > >>>
> > > >>>> so GCC should be fixed and improved here, on several levels.
> > > >>>>
> > > >>> Agree.
> > > >>>
> > > >>> But it takes some time, even if we start pushing right now. What's
> > > >>> your suggestion for the meantime? Keep the dummy jmp? And in case
> > > >>> anybody is concerned about saving every byte in the text section,
> > > >>> they can apply my dirty patch?
> > > >>>
> > > >>> Actually, this doesn't sound too bad.
> > > >>>
> > > >>
> > > >> yeah. Please forward the problem to the appropriate GCC list in any
> > > >> case.
> > > >>
> > > >>
> > > >
> > > > I think the official answer for this case is to use __builtin_trap. But:
> > > >
> > > > -- Built-in Function: void __builtin_trap (void)
> > > > This function causes the program to exit abnormally. GCC
> > > > implements this function by using a target-dependent mechanism
> > > > (such as intentionally executing an illegal instruction) or by
> > > > calling `abort'. ***The mechanism used may vary from release to
> > > > release so you should not rely on any particular implementation.***
> > > >
> > > > which in principle is hard for us to make use of. In practice I think
> > > > it has always been ud2a on x86.
> > >
> > > could we just do:
> > >
> > > __builtin_trap();
> > > for (;;);
> >
> > I'm afraid that's not the point of the exercise. I'm trying to
> > trim BUG() to two bytes, while still making sure that the
> > Illegal Opcode exception is generated at the exact code point,
> > so we can track it down using the info in __bug_table. If
> > __builtin_trap() ever translates to anything else than ud2a in
> > the above code snippet, there will be no BUG reported.
> > Instead, the CPU that encountered the BUG() will burn CPU
> > cycles forever without any apparent reason.
>
> Well, the important question is thatGCC will optimize out
> whatever comes after the __builtin_trap(), right? To guarantee
> an assert we can do something like:
>
> __builtin_trap();
> panic("should never get here");
Yes, perfect, then I vote for this:
__builtin_trap();
printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__);
panic("BUG!");
(copied from include/asm-generic/bug.h)
Then the worst thing GCC folks might invent would be using the ud2b
opcode instead of ud2a, but I think the bug table is searched for every
die() invocation nowadays, so it doesn't depend on seeing the
0f 0b sequence at the point of the failure, does it?
And even if GCC decides to insert one or more _valid_ instructions
before the invalid one, we'll start getting reports with
"[verbose debug info unavailable]". If, instead, they start calling
abort(), we'll get build errors.
Last thing -- what about Intel cc?
Petr Tesarik
next prev parent reply other threads:[~2009-02-19 16:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1234975856.15053.16.camel@nathan.suse.cz>
[not found] ` <499C4786.5010504@goop.org>
2009-02-19 11:40 ` Petr Tesarik
2009-02-19 12:10 ` Ingo Molnar
2009-02-19 12:19 ` Petr Tesarik
2009-02-19 12:22 ` Ingo Molnar
2009-02-19 12:38 ` Petr Tesarik
2009-02-19 12:47 ` Ingo Molnar
2009-02-19 13:02 ` Petr Tesarik
2009-02-19 14:49 ` Ingo Molnar
2009-02-19 15:32 ` Jeremy Fitzhardinge
2009-02-19 15:35 ` Ingo Molnar
2009-02-19 16:11 ` Petr Tesarik
2009-02-19 16:16 ` Ingo Molnar
2009-02-19 16:34 ` Jeremy Fitzhardinge
2009-02-19 16:41 ` Ingo Molnar
2009-02-19 20:07 ` H. Peter Anvin
2009-02-19 20:26 ` Ingo Molnar
2009-02-19 16:55 ` Petr Tesarik [this message]
2009-02-19 16:32 ` Jeremy Fitzhardinge
2009-02-19 18:38 ` H. Peter Anvin
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=1235062515.15053.94.camel@nathan.suse.cz \
--to=ptesarik@suse.cz \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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
all inboxes | Powered by JetHome®