Sender: rich AT phekda DOT freeserve DOT co DOT uk Message-ID: <3C013F37.F451C083@phekda.freeserve.co.uk> Date: Sun, 25 Nov 2001 18:57:59 +0000 From: Richard Dawe X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.2.19 i586) X-Accept-Language: de,fr MIME-Version: 1.0 To: djgpp-workers AT delorie DOT com Subject: Re: Building a profiled version of libc References: <3BF97E29 DOT 39FC7C7E AT phekda DOT freeserve DOT co DOT uk> <3405-Tue20Nov2001082315+0200-eliz AT is DOT elta DOT co DOT il> <3C00F797 DOT 88E8AA45 AT phekda DOT freeserve DOT co DOT uk> <7263-Sun25Nov2001182924+0200-eliz AT is DOT elta DOT co DOT il> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: djgpp-workers AT delorie DOT com Hello. Eli Zaretskii wrote: > Yes, probably. Could you also modify the makefile's so that emu387 > is built without -pg? I've modified the makefile to build the sources without any profiling options. This wasn't actually the cause of the failure I mentioned. This is in the link stage: bash-2.04$ pwd c:/develop/djgpp.rw/src/libemu bash-2.04$ make ../makemake.exe makemake: scanning libemu for makefiles c:/djgpp/bin/make.exe -f makefile.sub c:/djgpp/bin/make.exe -C src ../makemake.exe -2 makemake: scanning libemu for object files c:/djgpp/bin/make.exe ./../../lib/libemu.a make.exe[1]: `../../lib/libemu.a' is up to date. ./../../hostbin/dxegen.exe ./../../bin/emu387.dxe __emu_entry src/emu387.o id_em u.o src/emudummy.o -L../../lib c:/djgpp/lib/gcc-lib/djgpp/3.02/libgcc.a -lc c:/d jgpp/lib/gcc-lib/djgpp/3.02/libgcc.a ld -X -S -r -o dxe__tmp.o -L./../../lib src/emu387.o id_emu.o src/emudummy.o -L. ./../lib c:/djgpp/lib/gcc-lib/djgpp/3.02/libgcc.a -lc c:/djgpp/lib/gcc-lib/djgpp /3.02/libgcc.a -T dxe.ld ./../../lib/libc.a(_write.o)(.text+0x0):_write.c: multiple definition of `_write ' src/emudummy.o(.text+0x10):emudummy.c: first defined here make.exe: *** [../../bin/emu387.dxe] Error 1 I thought it might be a function definition mistmatch that was causing this error, so I made the changes shown in the diff at the end of the mail. This didn't fix it. I thought linking took the first object file resolving for a variable/function name and did not care about subsequent objects containing it. Do you have any suggestions on how to fix this? Are there any options I can pass to ld from dxegen that would help? I had a look through the ld options in info, but nothing stood out. The proper solution, I guess, is to build two versions of libc - one with and one without profiling - and to link against the non-profiling version when building DXEs. > > OK to commit? > > Fine with me, but please add a note about this in wc204.txi. Will do. I also checked in a fix for a mismatch between the real prototype of _write() in io.h and the one documented in _write.txh. Thanks, bye, Rich =] -- Richard Dawe http://www.phekda.freeserve.co.uk/richdawe/ RCS file: /cvs/djgpp/djgpp/src/libemu/src/emudummy.c,v retrieving revision 1.1 diff -p -c -3 -r1.1 emudummy.c *** src/libemu/src/emudummy.c 1997/11/02 19:54:30 1.1 --- src/libemu/src/emudummy.c 2001/11/25 18:47:29 *************** *** 1,14 **** /* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ /* Dummy routines to enable building of emu387.dxe from libemu.a - since we can't do I/O, dummy the I/O routines out. */ ! void vsprintf(void); ! void _write(void); ! void vsprintf(void) {} ! void _write(void) {} int __djgpp_exception_state_ptr; --- 1,27 ---- + /* Copyright (C) 2001 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ /* Dummy routines to enable building of emu387.dxe from libemu.a - since we can't do I/O, dummy the I/O routines out. */ + + #include + #include + #include + #include ! int ! vsprintf (char *buf, const char *fmt, va_list args) ! { ! return 0; ! } ! ssize_t ! _write (int fd, const void *buf, size_t nbyte) ! { ! errno = EACCES; ! return -1; ! } int __djgpp_exception_state_ptr;