[dpdk-dev] [PATCH] mk: add support for gdb debug info generation

Marc Sune marc.sune at bisdn.de
Tue Mar 3 13:19:27 CET 2015


On 03/03/15 10:33, Bruce Richardson wrote:
> On Mon, Mar 02, 2015 at 06:32:13PM +0100, Marc Sune wrote:
>> On 22/02/15 12:51, Marc Sune wrote:
>>> I don't like the proposed patch, but I am recovering this old thread
>>> because I agree on the problem statement.
>>>
>>> On 04/04/14 11:57, Ananyev, Konstantin wrote:
>>>> Hi Cyril,
>>>> We already do have 'EXTRA_CFLAGS' and 'EXTRA_LDFLAGS' that you can use
>>>> to enable debug, or any other compiler/linker options you need.
>>>> Wonder, why that is not enough?
>>> EXTRA_FLAGS var affects all the DPDK libraries. I was wondering why
>>> setting individually:
>>>
>>> diff --git a/config/common_linuxapp b/config/common_linuxapp
>>> index 2f9643b..04adc0d 100644
>>> --- a/config/common_linuxapp
>>> +++ b/config/common_linuxapp
>>> @@ -127,7 +127,7 @@ CONFIG_RTE_LIBRTE_KVARGS=y
>>> # Compile generic ethernet library
>>> #
>>> CONFIG_RTE_LIBRTE_ETHER=y
>>> -CONFIG_RTE_LIBRTE_ETHDEV_DEBUG=n
>>> +CONFIG_RTE_LIBRTE_ETHDEV_DEBUG=y
>>>
>>>
>>> to put an example, does not set -g and -O0 in that particular module only.
>>> No one would ever use something compiled in DEBUG in production anyway.
>>>
>>> I always end up modifying manually Makefiles in the lib library that I am
>>> interested in having insides, overriding CFLAGS=-O3, which is not that
>>> nice.
>> I would like some feedback on this idea. If the community sees benefit, I
>> will work on a patch for this.
>>
>> Marc
>>
> So, your proposal is to patch things so that any time one sets DEBUG=y in the
> build-time config for a library, we change the '-O3' to '-O0' and set -g also.
> Correct?

I am not sure what you mean by 'patch things'. I would simply enable the 
build system to override the default compilation flags (now DPDK-wide, 
or specifically librte_ wide) when _DEBUG=y for a library, changing 
compilation flags from -O3 to -O0 -g and possibly also -fno-inline. I 
have to check if -O0 already implicitly means -fno-inline (even for 
__attribute__((always_inline)) ).

I did a quick test. I chose KNI because it didn't have a DEBUG flag for 
the user-space library. For other libraries, the existing _DEBUG setting 
would be enough:

marc at dpdk:~/dpdk$ git diff HEAD
diff --git a/config/common_linuxapp b/config/common_linuxapp
index 97f1c9e..8a3cef8 100644
--- a/config/common_linuxapp
+++ b/config/common_linuxapp
@@ -405,6 +405,7 @@ CONFIG_RTE_LIBRTE_PIPELINE=y
  #
  CONFIG_RTE_LIBRTE_KNI=y
  CONFIG_RTE_KNI_PREEMPT_DEFAULT=y
+CONFIG_RTE_LIBRTE_KNI_DEBUG=y
  CONFIG_RTE_KNI_KO_DEBUG=n
  CONFIG_RTE_KNI_VHOST=n
  CONFIG_RTE_KNI_VHOST_MAX_CACHE_SIZE=1024
diff --git a/lib/librte_kni/Makefile b/lib/librte_kni/Makefile
index 7107832..895f64e 100644
--- a/lib/librte_kni/Makefile
+++ b/lib/librte_kni/Makefile
@@ -34,7 +34,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
  # library name
  LIB = librte_kni.a

-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
+CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) $(CONFIG_RTE_LIBRTE_KNI_CFLAGS)

  EXPORT_MAP := rte_kni_version.map

diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 63a41e2..eee477d 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -78,6 +78,13 @@ endif
  ifeq ($(CONFIG_RTE_LIBRTE_KNI),y)
  ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP),y)
  LDLIBS += -lrte_kni
+
+ifeq ($(CONFIG_RTE_LIBRTE_KNI_DEBUG),y)
+CONFIG_RTE_LIBRTE_KNI_CFLAGS = -O0 -g -fno-strict-aliasing -fno-inline
+else
+CONFIG_RTE_LIBRTE_KNI_CFLAGS = -O3 -fno-strict-aliasing
+endif
+
  endif
  endif


Thoughts?

>
> If that's the case, I see no harm in doing such a thing. I wonder how useful
> the '-g' option would be, just limited to a single library, though. One would
> suspect that it may be better applied globally, so that one can see the state
> of the application as it makes the call into the library.

It is IMHO. I am usually doing it this way, specially for ethdev 
initialization and the specific pmd (we probably need more fine grained 
return codes there). If you enable the debug for that library, you 
generally want to check the code and the state there, and you can access 
the input parameters of the function and the state of that library 
itself, which is generally enough, I think.

Special cases are inline functions used by other libraries / user 
application, which are compiled either with the global DPDK flags (-O3) 
or by the user's application flags.

Perhaps it also makes sense, in addition, to have a global "DEBUG" knob, 
which would enable to compile the entire DPDK library code with -O0 -g 
and possibly also with -fno-inline. This would also help debugging the 
inline functions.

Marc

>
> /Bruce
>
>>> Marc
>>>
>>>> Thanks
>>>> Konstantin
>>>>
>>>> -----Original Message-----
>>>> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Cyril Chemparathy
>>>> Sent: Thursday, April 03, 2014 6:31 PM
>>>> To: dev at dpdk.org
>>>> Subject: [dpdk-dev] [PATCH] mk: add support for gdb debug info
>>>> generation
>>>>
>>>> It is often useful to build with debug enabled, we add a config
>>>> (CONFIG_RTE_TOOLCHAIN_DEBUG) to do so.
>>>>
>>>> Note: This patch does not include corresponding changes for ICC.  The
>>>> author pleads abject ignorance in this regard, and welcomes
>>>> recommendations. :-)
>>>>
>>>> Signed-off-by: Cyril Chemparathy <cchemparathy at tilera.com>
>>>> ---
>>>>   config/defconfig_x86_64-default-linuxapp-gcc | 1 +
>>>>   mk/toolchain/gcc/rte.vars.mk                 | 5 +++++
>>>>   2 files changed, 6 insertions(+)
>>>>
>>>> diff --git a/config/defconfig_x86_64-default-linuxapp-gcc
>>>> b/config/defconfig_x86_64-default-linuxapp-gcc
>>>> index f11ffbf..3b36efd 100644
>>>> --- a/config/defconfig_x86_64-default-linuxapp-gcc
>>>> +++ b/config/defconfig_x86_64-default-linuxapp-gcc
>>>> @@ -67,6 +67,7 @@ CONFIG_RTE_ARCH_X86_64=y  # CONFIG_RTE_TOOLCHAIN="gcc"
>>>>   CONFIG_RTE_TOOLCHAIN_GCC=y
>>>> +CONFIG_RTE_TOOLCHAIN_DEBUG=n
>>>>     #
>>>>   # Use intrinsics or assembly code for key routines diff --git
>>>> a/mk/toolchain/gcc/rte.vars.mk b/mk/toolchain/gcc/rte.vars.mk index
>>>> 0edb93f..81ed3fa 100644
>>>> --- a/mk/toolchain/gcc/rte.vars.mk
>>>> +++ b/mk/toolchain/gcc/rte.vars.mk
>>>> @@ -68,6 +68,11 @@ ifeq (,$(findstring -O0,$(EXTRA_CFLAGS))) endif
>>>> endif
>>>>   +ifeq ($(CONFIG_RTE_TOOLCHAIN_DEBUG),y)
>>>> +TOOLCHAIN_CFLAGS += -g -ggdb
>>>> +TOOLCHAIN_LDFLAGS += -g -ggdb
>>>> +endif
>>>> +
>>>>   WERROR_FLAGS := -W -Wall -Werror -Wstrict-prototypes
>>>> -Wmissing-prototypes  WERROR_FLAGS += -Wmissing-declarations
>>>> -Wold-style-definition -Wpointer-arith  WERROR_FLAGS += -Wcast-align
>>>> -Wnested-externs -Wcast-qual
>>>> -- 
>>>> 1.8.3.1
>>>>



More information about the dev mailing list