Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Feb 2011 09:04:28 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Dimitry Andric <dim@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r218984 - head/lib/librt
Message-ID:  <20110224084812.F1571@besplex.bde.org>
In-Reply-To: <201102232117.p1NLHcuE011679@svn.freebsd.org>
References:  <201102232117.p1NLHcuE011679@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 23 Feb 2011, Dimitry Andric wrote:

> Log:
>  Fix the 32-bit build stage on amd64 when WITH_CTF is enabled.  It seems
>  ctfconvert will corrupt object files that are compiled with -g, if it is
>  not run with -g itself.
>
>  To fix it, remove -g from CFLAGS in lib/librt/Makefile.  If you need to
>  compile this library with debug info, use DEBUG_FLAGS=-g instead, which
>  will work correctly, even when using WITH_CTF.

Hard-coded -g is a style bug, but I wonder if this works even with -g in
DEBUG_FLAGS.

This may be related to the bug that -g is broken if the compilation is
via an intermediate asm file:

 	"cc -g -o foo foo.c"  != "cc -g -S foo.c; cc -g -o foo foo.s"

The former works, but the latter gives:

% Script started on Wed Feb 23 21:47:19 2011
% 
% pts/0:bde@ref9-i386:~/r> gdb foo
% GNU gdb 6.1.1 [FreeBSD]
% Copyright 2004 Free Software Foundation, Inc.
% GDB is free software, covered by the GNU General Public License, and you are
% welcome to change it and/or distribute copies of it under certain conditions.
% Type "show copying" to see the conditions.
% There is absolutely no warranty for GDB.  Type "show warranty" for details.
% This GDB was configured as "i386-marcel-freebsd"...Dwarf Error: Could not find abbrev number 47 [in module /dumpster/home/bde/r/foo]
% 
% (gdb) q
% pts/0:bde@ref9-i386:~/r> exit
% 
% Script done on Wed Feb 23 21:47:24 2011

gdb also cannot find `main'.  But if everything is compiled without -g,
gdb can find `main'.

Similarly with multiple files, some compiled via asm and some via
(implicit) .o's.

I haven't found an incantantion that works.  The asm file contains lots
of debugging info, but the info is apparently incomplete or invalid.
The object file produced from the asm file differs from the one produced
directly from the C file.

Perhaps you already fixed this by importing newer binutils.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110224084812.F1571>