From: valdis.kletnieks@vt.edu (valdis.kletnieks at vt.edu)
To: kernelnewbies@lists.kernelnewbies.org
Subject: How can I disable compile optimization in kernel for friendly debugging, Thanks
Date: Fri, 20 Apr 2018 16:08:31 -0400 [thread overview]
Message-ID: <222359.1524254911@turing-police.cc.vt.edu> (raw)
In-Reply-To: <20180420153909.r3cjaytzmxnttswz@HP>
On Fri, 20 Apr 2018 23:39:10 +0800, Yubin Ruan said:
> On 2018-04-19 13:28, valdis.kletnieks at vt.edu wrote:
> > On Thu, 19 Apr 2018 16:58:40 +0800, sizel said:
> > > How can I disable compile optimization in kernel for friendly debugging, Thanks
> >
> > First off, there are parts of the kernel that *WILL* explode if you try to build
> > with -O0 - in particular, any code that expects static inlines to be treated as
> > part of the unit they are inlined into for the purposes of __builtin_return_address()
> > and similar.
>
> Can you elaborate more on that?
grep for __builtin_return_address. Look where it's used. What does it return
if it's inlined? What does it return if it's called as not inlined?
For a simple example, consider this code from lib/smp_processor_id.c: in
function check_preemption_disabled():
printk(KERN_ERR "BUG: using %s%s() in preemptible [%08x] code: %s/%d\n",
what1, what2, preempt_count() - 1, current->comm, current->pid);
printk("caller is %pS\n", __builtin_return_address(0));
dump_stack();
If __builtin_return_address is not inlined, that call points at the printk()
call. If it *is* inlined, it points at the return point in the function that
called check_preemption_disabled().
There's a whole bunch of much more subtle inlining bugs.
> Second, modern gdb is perfectly able to deal with -O2 optimization,
> especially if you build with -g. (In the kernel build, CONFIG_DEBUG_INFO=y
> will do the right thing for this). >
> I don't think so. According to my experience, GDB is not good enough to deal
> with -O2 optimization.
Give an actual example. In particular, an example where '-O2 -g' doesn't work.
That's important - if a variable has been lifted out of a loop, or even
optimized out of existence, gdb needs the debug info from -g to figure out
what's going on. In fact, -g is so important for gdb use that even -O0 without
-g often gives gdb indigestion.
> Maybe my gdb is not modern enough? I am using gdb7.11 (Ubuntu 7.11.1-0ubuntu1~16.5)
That's over 2 years old.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 486 bytes
Desc: not available
URL: <http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20180420/a0d7b318/attachment.sig>
next prev parent reply other threads:[~2018-04-20 20:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-19 8:58 How can I disable compile optimization in kernel for friendly debugging, Thanks sizel
2018-04-19 17:28 ` valdis.kletnieks at vt.edu
2018-04-20 15:39 ` Yubin Ruan
2018-04-20 15:44 ` Greg KH
2018-04-20 16:30 ` Yubin Ruan
2018-04-20 20:08 ` valdis.kletnieks at vt.edu [this message]
2018-04-21 13:15 ` Yubin Ruan
2018-04-21 20:06 ` valdis.kletnieks at vt.edu
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=222359.1524254911@turing-police.cc.vt.edu \
--to=valdis.kletnieks@vt.edu \
--cc=kernelnewbies@lists.kernelnewbies.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;
as well as URLs for NNTP newsgroup(s).