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

Re: [Xen-devel] [PATCH v2] tools/Rules.mk: Don't optimize debug builds; add macro debugging information



On 01/13/2015 06:11 PM, Ian Campbell wrote:
> On Tue, 2015-01-13 at 13:52 +0800, Wen Congyang wrote:
>> On 12/01/2014 10:21 PM, Euan Harris wrote:
>>> Tools debug builds are built with optimization level -O1, inherited from
>>> the CFLAGS definition in StdGNU.mk.   Optimizations confuse the debugger,
>>> and the comment justifying -O1 in StdGNU.mk should not apply for a
>>> userspace library.   Disable optimization by appending -O0 to CFLAGS,
>>> which overrides the -O1 flag specified earlier.
>>>
>>> Also specify -g3, to add macro debugging information which allows
>>> gdb to expand macro invocations.   This is useful as libxl uses many
>>> non-trivial macros.
>>>
>>> Signed-off-by: Euan Harris <euan.harris@xxxxxxxxxx>
>>>
>>> Changes since v1:
>>>   * moved flag override to tools/Rules.mk so it affects all tools
>>> ---
>>>  tools/Rules.mk |    5 +++++
>>>  1 files changed, 5 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/tools/Rules.mk b/tools/Rules.mk
>>> index 87a56dc..7ef1ce5 100644
>>> --- a/tools/Rules.mk
>>> +++ b/tools/Rules.mk
>>> @@ -54,6 +54,11 @@ CFLAGS_libxenvchan = -I$(XEN_LIBVCHAN)
>>>  LDLIBS_libxenvchan = $(SHLIB_libxenctrl) $(SHLIB_libxenstore) 
>>> -L$(XEN_LIBVCHAN) -lxenvchan
>>>  SHLIB_libxenvchan  = -Wl,-rpath-link=$(XEN_LIBVCHAN)
>>>  
>>> +ifeq ($(debug),y)
>>> +# Disable optimizations and debugging information for macros
>>> +CFLAGS += -O0 -g3
>>> +endif
>>> +
>>>  LIBXL_BLKTAP ?= $(CONFIG_BLKTAP2)
>>>  
>>>  ifeq ($(LIBXL_BLKTAP),y)
>>>
>>
>> This patch causes a building error:
>> gcc -fno-strict-aliasing -O2 -g -pipe -Wall -Werror=format-security 
>> -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong 
>> --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic 
>> -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall 
>> -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions 
>> -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches 
>> -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -O1 -fno-omit-frame-pointer 
>> -m64 -g -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes 
>> -Wdeclaration-after-statement -Wno-unused-but-set-variable 
>> -Wno-unused-local-typedefs -O0 -g3 -D__XEN_TOOLS__ -MMD -MF .install.d 
>> -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -fno-optimize-sibling-calls -fPIC 
>> -I../../tools/include -I../../tools/libxc/include -Ixen/lowlevel/xc 
>> -I/usr/include/python2.7 -c xen/lowlevel/xc/xc.c -o 
>> build/temp.linux-x86_64-2.7/xen/lowlevel/xc/xc.o -fno-strict-aliasing -Werror
>> In file included from /usr/include/limits.h:25:0,
>>                  from 
>> /usr/lib/gcc/x86_64-redhat-linux/4.9.2/include/limits.h:168,
>>                  from 
>> /usr/lib/gcc/x86_64-redhat-linux/4.9.2/include/syslimits.h:7,
>>                  from 
>> /usr/lib/gcc/x86_64-redhat-linux/4.9.2/include/limits.h:34,
>>                  from /usr/include/python2.7/Python.h:19,
>>                  from xen/lowlevel/xc/xc.c:7:
>> /usr/include/features.h:328:4: error: #warning _FORTIFY_SOURCE requires 
>> compiling with optimization (-O) [-Werror=cpp]
> 
> Where is _FORTIFY_SOURCE coming from? I don't see it in our tree
> anywhere except stubdom/Makefile which is disabling it and the build
> worked for me. Perhaps it is coming from your build environment
> somewhere? How are you configuring and building Xen?

_FORTIFY_SOURCE is just for python, and it comes from 
/usr/lib64/python2.7/config/Makefile:

# Compiler options
OPT=            -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security 
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong 
--param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic 
-D_GNU_SOURCE -fPIC -fwrapv
BASECFLAGS=      -fno-strict-aliasing
CFLAGS=         $(BASECFLAGS) -O2 -g -pipe -Wall -Werror=format-security 
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong 
--param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic 
-D_GNU_SOURCE -fPIC -fwrapv  $(OPT) $(EXTRA_CFLAGS)


> 
> Maybe what we want to do is only disable optimisations if debug=y AND
> -D_FORTIFY_SOURCE is not set? Might involve some autoconf checks to
> determine the fortification level in the user provided CFLAGS, which
> might be a bit faffsome.
> 
> Ian.
> 
>>  #  warning _FORTIFY_SOURCE requires compiling with optimization (-O)
>>     ^
>> cc1: all warnings being treated as errors
>> error: command 'gcc' failed with exit status 1
>>
>> The following patch can fix this problem:
>>
>> From d16961971e14f6e50f9a9905449929d5a7c60860 Mon Sep 17 00:00:00 2001
>> From: Wen Congyang <wency@xxxxxxxxxxxxxx>
>> Date: Tue, 13 Jan 2015 12:05:30 +0800
>> Subject: [PATCH] Fix a building error
>>
>> Commit 1166ecf7 disables optimization. But _FORTIFY_SOURCE
>> requires compiling with optimization (-O). Disable _FORTIFY_SOURCE
>> by appending -Wp,-U_FORTIFY_SOURCE to CFLAGS.
>>
>> Signed-off-by: Wen Congyang <wency@xxxxxxxxxxxxxx>
>> ---
>>  tools/Rules.mk | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/tools/Rules.mk b/tools/Rules.mk
>> index 962a743..8ad1b05 100644
>> --- a/tools/Rules.mk
>> +++ b/tools/Rules.mk
>> @@ -56,7 +56,7 @@ SHLIB_libxenvchan  = -Wl,-rpath-link=$(XEN_LIBVCHAN)
>>  
>>  ifeq ($(debug),y)
>>  # Disable optimizations and enable debugging information for macros
>> -CFLAGS += -O0 -g3
>> +CFLAGS += -O0 -g3 -Wp,-U_FORTIFY_SOURCE
>>  endif
>>  
>>  LIBXL_BLKTAP ?= $(CONFIG_BLKTAP2)
> 
> 
> .
> 


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.