From owner-freebsd-amd64@FreeBSD.ORG Tue May 18 00:29:18 2004 Return-Path: Delivered-To: freebsd-amd64@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5F39516A4CE for ; Tue, 18 May 2004 00:29:18 -0700 (PDT) Received: from smtp01.syd.iprimus.net.au (smtp01.syd.iprimus.net.au [210.50.30.52]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8054B43D5F for ; Tue, 18 May 2004 00:28:58 -0700 (PDT) (envelope-from tim@robbins.dropbear.id.au) Received: from robbins.dropbear.id.au (210.50.200.186) by smtp01.syd.iprimus.net.au (7.0.024) id 409956B4003E6909; Tue, 18 May 2004 17:28:56 +1000 Received: by robbins.dropbear.id.au (Postfix, from userid 1000) id B05F441E5; Tue, 18 May 2004 17:04:30 +1000 (EST) Date: Tue, 18 May 2004 17:04:30 +1000 From: Tim Robbins To: Till Plewe Message-ID: <20040518070430.GA68449@cat.robbins.dropbear.id.au> References: <20040518050421.GA75633%till@score.is.tsukuba.ac.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040518050421.GA75633%till@score.is.tsukuba.ac.jp> User-Agent: Mutt/1.4.1i cc: freebsd-amd64@freebsd.org Subject: Re: profiling on amd64 X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 May 2004 07:29:18 -0000 On Tue, May 18, 2004 at 02:04:21PM +0900, Till Plewe wrote: > > The program "int main(){return 0;}" fails to compile if I use the > option "-pg". The error message I get starts with: > > # gcc -pg -o test test.c > /var/tmp//ccTPXtQI.o: In function `main': > /var/tmp//ccTPXtQI.o(.text+0x5): undefined reference to `mcount' > /usr/lib/libc_p.a(gmon.po): In function `monstartup': > gmon.po(.text+0xa): undefined reference to `mcount > ... This is a bug in the FreeBSD/x86-64 GCC configuration. It should be calling ``.mcount'' instead of ``mcount'' (note the full-stop at the start of the name.) After applying this patch, rebuilding gcc, and rebuilding the profiled C library, gcc -pg does not cause linker errors: ==== //depot/user/tjr/freebsd-tjr/src/contrib/gcc/config/i386/freebsd64.h#5 - /home/tim/p4/src/contrib/gcc/config/i386/freebsd64.h ==== @@ -25,6 +25,9 @@ #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (FreeBSD/x86-64 ELF)"); +#undef MCOUNT_NAME +#define MCOUNT_NAME ".mcount" + #undef FBSD_TARGET_CPU_CPP_BUILTINS #define FBSD_TARGET_CPU_CPP_BUILTINS() \ do \ However, programs compiled with -pg will crash almost immediately. I don't understand why this happens well enough to venture an explanation, but I think both GCC and FreeBSD/amd64's header are at fault here. Tim