Re: How can I disable compile optimization in kernel for friendly debugging, Thanks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 20 Apr 2018 23:39:10 +0800, Yubin Ruan said:
> On 2018-04-19 13:28, valdis.kletnieks@xxxxxx 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.

Attachment: pgpTefaQjjypB.pgp
Description: PGP signature

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux