Generating userland debugging symbols

Kostik Belousov kostikbel at gmail.com
Fri Oct 29 23:39:05 UTC 2010


On Fri, Oct 29, 2010 at 03:18:27PM -0400, Mark Johnston wrote:
> Hello all,
> 
> I've been working on some changes to the system build scripts that make
> it easier to create and install debugging symbols files for the base
> userland. What we do in the tree at my work (Sandvine) is use a script
> that invokes strip(1) and objcopy(1) to create a separate file containing
> the debugging symbols for each binary; so for example, the symbols for 
> /bin/ls get placed in another directory, e.g.
> /usr/local/lib/debug/bin/ls.symbols.
> 
> The name of the symbols file for each binary is encoded in the
> .gnu_debuglink segment; when gdb comes across it, it searches a set
> of directories for the debug symbols file and loads it if found.
> 
> It turns out to be pretty convenient - one can keep the debugging symbols
> on a separate slice or on an NFS-mounted directory if space is an issue,
> or package the debug symbols separately and keep them on an FTP server,
> ready to install if needed.
> 
> I'm not aware of any infrastructure in place that makes it easy to do
> this for the userland programs. What I'm hoping to find out is whether
> there's any interest in adding such support. I've discussed this with
> Ed Maste to some degree, but it'd be nice to get some additional feedback.
> 
> My basic idea is to add an option to /etc/src.conf that indicates that the
> build system should build all the userland programs with debugging symbols
> and later extract them. So a user would define something like
> WITH_DEBUG_SYMBOLS in src.conf, and then in bsd.own.mk, have something
> like
> 
> .if !defined(_WITHOUT_SRCCONF)
> .if defined(WITH_DEBUG_SYMBOLS)
> SYMBOLS_DIR?=/usr/local/lib/debug
> STRIP_BIN:="<program to perform the operation> ${SYMBOLS_DIR}"
> .endif
> .endif
> 
> and then in bsd.prog.mk:
> 
> .if defined(STRIP_BIN)
> .PHONY:
> 	export STRIPBIN=${STRIP_BIN}
> .endif
> 
> so that when install(1) gets run, STRIPBIN will be in the environment.
> 
> In our setup, STRIPBIN points to a script which just uses strip(1) and
> objcopy(1) to extract the debug symbols for each binary that gets
> installed. Ed suggested that I could just add an option to strip(1) to
> do all of this in one command so that we wouldn't need to add a separate
> script to the FreeBSD tree for this. It's pretty simple to do - I can
> post the patch if anyone wants to see it. This also requires a smallish
> change to install(1) which I can also post.
> 
> Any thoughts or suggestions on this approach in general? I'm still
> getting to know the FreeBSD system, so I'm open to alternatives. If
> there's agreement that this feature might be useful, I'll post my patches.
I do think that something like this would be useful. But, shouldn't
the DEBUG_FLAGS be also involved in the patch ? The goal would be
to have debug symbols for userland staff. esp. the libraries,
handled in a similar manner to kernel symbols.

But I do like the intent of keeping the symbols in the separate directory.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20101029/9609ab74/attachment.pgp


More information about the freebsd-hackers mailing list