Date: Fri, 29 Oct 2010 15:18:27 -0400 From: Mark Johnston <markjdb@gmail.com> To: freebsd-hackers@freebsd.org Subject: Generating userland debugging symbols Message-ID: <20101029191827.GC1443@mark-laptop-bsd.mark-home>
next in thread | raw e-mail | index | archive | help
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. Thanks, -Mark
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101029191827.GC1443>