For a release like the Linaro binary release, having the debugging info 
included is correct.  For your use you can strip out the debugging info before 
releasing it to your customers.  For shared libraries you can strip out the 
debug info to a separate file and release that separately.  This is what 
YOCTO/OpenEmbedded does when it makes packages of the Linaro release.

Thanks,
Andrew

-----Original Message-----
From: linaro-toolchain [mailto:linaro-toolchain-boun...@lists.linaro.org] On 
Behalf Of Fred Peterson
Sent: Tuesday, January 5, 2016 3:37 PM
To: linaro-toolchain@lists.linaro.org
Subject: debug information in libc.a

Linaro TCWG,

In newer toolchains that are built with ABE, libc.a contains a lot of debugging 
information, including the paths to the source files on the build machine.  I 
think that's because ABE builds the libraries with -g and never strips out the 
debug information.  I verified this with both the 4.9-2015.05 and 5.2-2015.11 
binary releases with the command:

arm-linux-gnueabih-objdump -g libc.a | grep '\.c'

In older toolchains that were built with crosstool-ng, libc.a did not contain 
the paths to the source files.  I guess crosstool-ng either didn't build the 
libraries with -g, or it stripped out the debug information later.  I verified 
this with the 4.9-2014.09 binary release.

I'm not sure whether this change was intentional, or just an oversight during 
the switchover to ABE.  Regardless, it makes the libraries a lot bigger, and it 
potentially affects the end user during debugging.

The source files of libc, etc. are not typically included with the binary 
releases.  So, when a user of an ABE-built binary release chooses to step into 
an extern function of libc, gdb will search for the source file.  It likely 
won't be able to access the source file along the same path that worked for the 
build machine, so it will search its list of source directories.  Ultimately, 
unless the user has downloaded the source files, gdb will likely display a 
message like "printf.c: No such file or directory".

In contrast, when a user of a crosstool-ng-built toolchain tries to step into 
an extern function of libc, gdb will be unaware of the name of the source file. 
 As a result, the user will not get a message about a missing file.

So, should the toolchains' libraries really contain debug information?  I think 
it could be useful for a theoretical multilib folder that covers a -g option.  
On the other hand, for the usual release builds, isn't the debug information a 
waste of space and a source of confusion?

Thanks,

Fred Peterson
Engineer - Developer Tools
NXP Semiconductors

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to