This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fixes for i686-pc-linux-newlib


Paolo,

A number of issues with this patch. First of all, I usually build x86-linux apps with -nostdlib and manually specify newlib's crt0.o. This basic test fails with the patch below because _init and _fini aren't defined in newlib (we don't supply crt[1/n/o] .o files at present). Hacking past that initial problem, I ran into a problem building a hello world program with -fprofile-arcs and -ftest-coverage. These options drag in libgcov.a which was built with glibc headers and it expects some magic symbols that aren't in newlib (e.g. stderr, __errno_location, and __fxstat). I hacked past the link problem by adding newlib symbols and linking in /usr/lib/crti.o but I eventually ended up with a SIGSEGV.

Could you elaborate on how you built your application to get profile data output? Can you verify that you actually have a newlib application as opposed to one that is using glibc?

-- Jeff J.

Paolo Bonzini wrote:
The first hunk is a work around for the (in)famous INSTALL = ../ bug. We can just pass down INSTALL as we detect it correctly in the toplevel configure and in newlib's configure.

The second hunk is needed to invoke initialization and finalization functions. I tested it by running a program compiled with gcc and with profiling enabled. It creates the .gcda file correctly.

Can you apply them? I have no copyright on file, but these are small enough to not require it.

2005-06-03 Paolo Bonzini <bonzini@gnu.org>

* Makefile.am (AM_MAKEFLAGS): Pass down INSTALL.
* libc/sys/linux/machine/i386/crt0.c (_start): Invoke _init and _fini.


Paolo


------------------------------------------------------------------------


Index: Makefile.am
===================================================================
RCS file: /cvs/src/src/newlib/Makefile.am,v
retrieving revision 1.35
diff -u -p -r1.35 Makefile.am
--- Makefile.am 8 Sep 2005 22:45:49 -0000 1.35
+++ Makefile.am 3 Jan 2006 19:01:02 -0000
@@ -50,6 +50,7 @@ AM_MAKEFLAGS = \
"LD=$(LD)" \
"LIBCFLAGS=$(LIBCFLAGS)" \
"NM=$(NM)" \
+ "INSTALL=$(INSTALL)" \
"PICFLAG=$(PICFLAG)" \
"RANLIB=$(RANLIB)" \
"DESTDIR=$(DESTDIR)"
Index: libc/sys/linux/machine/i386/crt0.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/sys/linux/machine/i386/crt0.c,v
retrieving revision 1.5
diff -u -p -r1.5 crt0.c
--- libc/sys/linux/machine/i386/crt0.c 10 Sep 2002 00:46:45 -0000 1.5
+++ libc/sys/linux/machine/i386/crt0.c 3 Jan 2006 19:01:04 -0000
@@ -16,6 +16,9 @@ extern char **environ;
extern int main(int argc,char **argv,char **envp);
+extern void _init (void);
+extern void _fini (void);
+
extern char _end;
extern char __bss_start;
@@ -41,5 +44,8 @@ void _start(int args)
* by this time by Linux. */
tzset(); /* initialize timezone info */
+
+ atexit (_fini);
+ _init ();
exit(main(argc,argv,environ));
}



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]