Back to basics

Craig Edwards craig@haenterprises.com.au
Sat Jul 3 01:26:00 GMT 2004


I've spent the last week or so trying to create my own port of newlib and,  
despite having learnt an awful lot, I am still not sure I understand fully  
the way newlib wants to work.  I was hoping to get some basic advice to  
ensure I am heading down the right track.

When it all comes down to it, I want to produce libc.a/libm.a files that  
contain object code that I can link into a normal Windows PE-executable.   
I need these .a files to be completely standalone with no dependencies on  
any external DLL (cygwin, win32, or otherwise).  I have no preference as  
to whether my replacement newlib system calls (open, read, et al) are  
already contained within the libc.a or whether I need to link them in  
separately.

In essence, I need to create a normal PE .exe, but instead of using the  
normal libc library, I want to use newlib (and thus, use my specific  
system calls).  Does that make sense?  Any advice I can get on the best  
way to achieve this would be much appreciated.  Thanks a lot.

--
Craig Edwards

To provide some context, my approach thus far has been to create a target  
called i386-pc-xbox with the following settings:

   xbox)
   machine_dir=i386
   ;;

   i[34567]86-*-xbox)
   sys_dir=xbox
   newlib_cflags="${newlib_cflags} -D_COMPILING_NEWLIB"
   ;;

And then configuring it using:

   ../newlib-1.12.0/configure --target=i386-pc-xbox --with-newlib  
--without-headers

This makes the libc.a and libm.a, but when I try to link using:

   gcc blah.c -nostdlib -L. -lc -lnosys -lgcc

I get a bunch of errors saying it can't find ___main, __fstat64_r and  
_setmode.  If I look at the code for this, I see it is wrapped with  
__USE_INTERNAL_STAT64 and __SCLE #ifdefs (very cygwin specific), and I am  
not sure how to get handle this.  I was thinking that maybe I am better  
off subverting the i686-pc-cygwin target somehow, rather than creating my  
own target.



More information about the Newlib mailing list