2012-05-06 02:00:50

by Renato Westphal

[permalink] [raw]
Subject: Re: How can I turn off/disable -O2/-Os optimization?

2012/4/2 Zhihua Che <[email protected]>:
> 在 2012年4月2日 上午12:49,Randy Dunlap <[email protected]> 写道:
>> On 04/01/2012 09:31 AM, Zhihua Che wrote:
>>
>>> Hi, everyone
>>>
>>>     I'm debugging linux kernel using kgdb/qemu, but I find that the
>>> execution order didn't math the program order usually.  I guess it was
>>> because the compiling optimization. So I decided to remove -O options
>>> in Makefiles.
>>>     First I removed -Ox in variables HOSTCFLAGS/HOSTCXXFLAGS in
>>> <src_root_dir>/Makefile around line 248 and -Ox in variable
>>> KBUILD_CFLAGS in <src_root_dir>/arch/x86/boot/Makefile around line 55.
>>> But it didn't work, the step execution still didn't follow the program
>>> order. Then I found I missed -Ox in KBUILD_CFLAGS in
>>> <src_root_dir>/Makefile around line 562, so I removed them, but this
>>> time, the compiling failed, complaining
>>>     rcupdate.h:917:2: error: size of unnamed array is negative
>>>    And finally, after grep, I find there are a load of -O2 option are
>>> assigned in a load of Makefiles. So, How could I disable -O
>>> optimization for debugging?
>>>
>>>    Thanks for any tips
>>> --
>>
>>
>> You could try the new CONFIG_READABLE_ASM patch:
>>  http://marc.info/?l=linux-kernel&m=133296079716268&w=2
>>
>>
>> --
>> ~Randy
>
> Hi,
>    I tried your patch, and it seemed not to work:-(. It still didn't
> follow the program order


Hi Zhihua Che,

Have you found a solution for this? I'm facing the same problem with KGDB..

--
Renato Westphal


2012-05-06 13:38:17

by Hagen Paul Pfeifer

[permalink] [raw]
Subject: Re: How can I turn off/disable -O2/-Os optimization?

* Renato Westphal | 2012-05-05 23:00:48 [-0300]:

>>> You could try the new CONFIG_READABLE_ASM patch:
>>> ?http://marc.info/?l=linux-kernel&m=133296079716268&w=2

Maybe remove "-Os" on a global basis is not wanted nor required. Maybe a per
directory, per file or per function basis may superior!

make DISABLE_OPTIMIZATION=net/sched/sch_api.c

But still all core constructs defined in top level header files must be
compatible for directory/file basis to be build with no optimization at all.

One way to un-optmize fine-granular is GCC's optmize pragma [1].

Hagen

PS: such a functionality may be convenient for perf probe too! (to hook into
probepoints which are currently optimized out)


[1] http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html