Beginnings of getting user apps to compile against newlib
authorKevin Klues <klueska@cs.berkeley.edu>
Fri, 22 May 2009 22:09:57 +0000 (15:09 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Tue, 26 May 2009 03:37:33 +0000 (20:37 -0700)
I've compiled newlib outside of this source tree with the -nostdinc option for linking so that none
of the libraries from my local machine got bundled with it as it was compiled.  It is installed in
the newlib directory along with some files for providing the necessary libc wrappers for our
platform.  The bodies of the functions found in libc_wrappers.c should be filled in to define how
these functions interact with ROS.  Right now, noe of them do the right thing :)  We will fill them
in as we go along...

128 files changed:
GNUmakefile
inc/trap.h
kern/Makefrag
kern/init.c
lib/Makefrag
lib/libmain.c
newlib/Makefrag [new file with mode: 0644]
newlib/include/_ansi.h [new file with mode: 0644]
newlib/include/_syslist.h [new file with mode: 0644]
newlib/include/alloca.h [new file with mode: 0644]
newlib/include/ar.h [new file with mode: 0644]
newlib/include/argz.h [new file with mode: 0644]
newlib/include/assert.h [new file with mode: 0644]
newlib/include/ctype.h [new file with mode: 0644]
newlib/include/dirent.h [new file with mode: 0644]
newlib/include/envlock.h [new file with mode: 0644]
newlib/include/envz.h [new file with mode: 0644]
newlib/include/errno.h [new file with mode: 0644]
newlib/include/fastmath.h [new file with mode: 0644]
newlib/include/fcntl.h [new file with mode: 0644]
newlib/include/fnmatch.h [new file with mode: 0644]
newlib/include/getopt.h [new file with mode: 0644]
newlib/include/glob.h [new file with mode: 0644]
newlib/include/grp.h [new file with mode: 0644]
newlib/include/iconv.h [new file with mode: 0644]
newlib/include/ieeefp.h [new file with mode: 0644]
newlib/include/inttypes.h [new file with mode: 0644]
newlib/include/langinfo.h [new file with mode: 0644]
newlib/include/libgen.h [new file with mode: 0644]
newlib/include/limits.h [new file with mode: 0644]
newlib/include/locale.h [new file with mode: 0644]
newlib/include/machine/_default_types.h [new file with mode: 0644]
newlib/include/machine/_types.h [new file with mode: 0644]
newlib/include/machine/ansi.h [new file with mode: 0644]
newlib/include/machine/endian.h [new file with mode: 0644]
newlib/include/machine/fastmath.h [new file with mode: 0644]
newlib/include/machine/ieeefp.h [new file with mode: 0644]
newlib/include/machine/malloc.h [new file with mode: 0644]
newlib/include/machine/param.h [new file with mode: 0644]
newlib/include/machine/setjmp-dj.h [new file with mode: 0644]
newlib/include/machine/setjmp.h [new file with mode: 0644]
newlib/include/machine/stdlib.h [new file with mode: 0644]
newlib/include/machine/termios.h [new file with mode: 0644]
newlib/include/machine/time.h [new file with mode: 0644]
newlib/include/machine/types.h [new file with mode: 0644]
newlib/include/malloc.h [new file with mode: 0644]
newlib/include/math.h [new file with mode: 0644]
newlib/include/newlib.h [new file with mode: 0644]
newlib/include/paths.h [new file with mode: 0644]
newlib/include/process.h [new file with mode: 0644]
newlib/include/pthread.h [new file with mode: 0644]
newlib/include/pwd.h [new file with mode: 0644]
newlib/include/reent.h [new file with mode: 0644]
newlib/include/regdef.h [new file with mode: 0644]
newlib/include/regex.h [new file with mode: 0644]
newlib/include/sched.h [new file with mode: 0644]
newlib/include/search.h [new file with mode: 0644]
newlib/include/setjmp.h [new file with mode: 0644]
newlib/include/signal.h [new file with mode: 0644]
newlib/include/stdint.h [new file with mode: 0644]
newlib/include/stdio.h [new file with mode: 0644]
newlib/include/stdlib.h [new file with mode: 0644]
newlib/include/string.h [new file with mode: 0644]
newlib/include/sys/_default_fcntl.h [new file with mode: 0644]
newlib/include/sys/_types.h [new file with mode: 0644]
newlib/include/sys/cdefs.h [new file with mode: 0644]
newlib/include/sys/config.h [new file with mode: 0644]
newlib/include/sys/custom_file.h [new file with mode: 0644]
newlib/include/sys/dirent.h [new file with mode: 0644]
newlib/include/sys/errno.h [new file with mode: 0644]
newlib/include/sys/fcntl.h [new file with mode: 0644]
newlib/include/sys/features.h [new file with mode: 0644]
newlib/include/sys/file.h [new file with mode: 0644]
newlib/include/sys/iconvnls.h [new file with mode: 0644]
newlib/include/sys/lock.h [new file with mode: 0644]
newlib/include/sys/param.h [new file with mode: 0644]
newlib/include/sys/queue.h [new file with mode: 0644]
newlib/include/sys/reent.h [new file with mode: 0644]
newlib/include/sys/resource.h [new file with mode: 0644]
newlib/include/sys/sched.h [new file with mode: 0644]
newlib/include/sys/signal.h [new file with mode: 0644]
newlib/include/sys/stat.h [new file with mode: 0644]
newlib/include/sys/stdio.h [new file with mode: 0644]
newlib/include/sys/string.h [new file with mode: 0644]
newlib/include/sys/syslimits.h [new file with mode: 0644]
newlib/include/sys/time.h [new file with mode: 0644]
newlib/include/sys/timeb.h [new file with mode: 0644]
newlib/include/sys/times.h [new file with mode: 0644]
newlib/include/sys/types.h [new file with mode: 0644]
newlib/include/sys/unistd.h [new file with mode: 0644]
newlib/include/sys/utime.h [new file with mode: 0644]
newlib/include/sys/wait.h [new file with mode: 0644]
newlib/include/tar.h [new file with mode: 0644]
newlib/include/termios.h [new file with mode: 0644]
newlib/include/time.h [new file with mode: 0644]
newlib/include/unctrl.h [new file with mode: 0644]
newlib/include/unistd.h [new file with mode: 0644]
newlib/include/utime.h [new file with mode: 0644]
newlib/include/utmp.h [new file with mode: 0644]
newlib/include/wchar.h [new file with mode: 0644]
newlib/include/wctype.h [new file with mode: 0644]
newlib/include/wordexp.h [new file with mode: 0644]
newlib/lib/libc.a [new file with mode: 0644]
newlib/lib/libg.a [new file with mode: 0644]
newlib/lib/libm.a [new file with mode: 0644]
newlib/libc_wrappers.c [new file with mode: 0644]
newlib/libc_wrappers.h [new file with mode: 0644]
user/Makefrag
user/badsegment.c
user/breakpoint.c
user/buggyhello.c
user/divzero.c
user/evilhello.c
user/faultread.c
user/faultreadkernel.c
user/faultwrite.c
user/faultwritekernel.c
user/hello.c
user/measurements.c [new file with mode: 0644]
user/null.c
user/print_tests.c [new file with mode: 0644]
user/softint.c
user/testbss.c
user/testpmap.c
user_newlib/Makefrag [new file with mode: 0644]
user_newlib/hello.c [new file with mode: 0644]
user_newlib/null.c [new file with mode: 0644]
user_newlib/user_newlib.ld [new file with mode: 0644]

index ecb7492..ad88d09 100644 (file)
@@ -82,7 +82,8 @@ ifeq ($(UNAME),x86_64)
 endif
 
 # Linker flags for ROS user programs
-ULDFLAGS := -T user/user.ld
+ULDFLAGS := -T user/user.ld -nostdlib
+ULDFLAGS := -T user_newlib/user_newlib.ld -nostdlib
 
 # Lists that the */Makefrag makefile fragments will add to
 OBJDIRS :=
@@ -98,23 +99,22 @@ all:
 
 # make it so that no intermediate .o files are ever deleted
 .PRECIOUS: %.o $(OBJDIR)/boot/%.o $(OBJDIR)/kern/%.o \
-       $(OBJDIR)/lib/%.o $(OBJDIR)/fs/%.o $(OBJDIR)/user/%.o
+       $(OBJDIR)/lib/%.o $(OBJDIR)/fs/%.o $(OBJDIR)/user/%.o \
+       $(OBJDIR)/newlib/%.o $(OBJDIR)/user_newlib/%.o
 
-KERN_CFLAGS := $(CFLAGS) -DROS_KERNEL -gstabs
+KERN_CFLAGS := $(CFLAGS) -DROS_KERNEL -gstabs -nostdinc
 USER_CFLAGS := $(CFLAGS) -DROS_USER -gstabs
 
-
-
-
 # Include Makefrags for subdirectories
 include boot/Makefrag
 include lib/Makefrag
+include newlib/Makefrag
 include ivylib/Makefrag
 include kern/Makefrag
 include user/Makefrag
+include user_newlib/Makefrag
 -include Makelocal
 
-
 IMAGES = $(OBJDIR)/kern/bochs.img
 
 # For deleting the build
@@ -127,27 +127,10 @@ realclean: clean
 distclean: realclean
        rm -rf conf/gcc.mk
 
-grade: $(LABSETUP)grade.sh
-       $(V)$(MAKE) clean >/dev/null 2>/dev/null
-       $(MAKE) all
-       sh $(LABSETUP)grade.sh
-
-handin: tarball
-       turnin --submit porterde cs372h-lab$(LAB) lab$(LAB)-handin.tar.gz
-
-tarball: realclean
-       tar cf - `find . -type f | grep -v '^\.*$$' | grep -v '/CVS/' | grep -v '/\.svn/' | grep -v 'lab[0-9].*\.tar\.gz'` | gzip > lab$(LAB)-handin.tar.gz
-
-# For test runs
-run-%:
-       $(V)rm -f $(OBJDIR)/kern/init.o $(IMAGES)
-       $(V)$(MAKE) "DEFS=-DTEST=_binary_obj_user_$*_start -DTESTSIZE=_binary_obj_user_$*_size" $(IMAGES)
-       bochs -q 'display_library: nogui'
-
-xrun-%:
-       $(V)rm -f $(OBJDIR)/kern/init.o $(IMAGES)
-       $(V)$(MAKE) "DEFS=-DTEST=_binary_obj_user_$*_start -DTESTSIZE=_binary_obj_user_$*_size" $(IMAGES)
-       bochs -q
+usb: $(IMAGES)
+       sudo mount /dev/sde4 /media/usb
+       sudo cp obj/kern/kernel /media/usb/
+       sudo umount /media/usb
 
 # This magic automatically generates makefile dependencies
 # for header files included from C source files we compile,
index f7ecf7b..b2d35d7 100644 (file)
@@ -26,7 +26,7 @@
 
 // These are arbitrarily chosen, but with care not to overlap
 // processor defined exceptions or interrupt vectors.
-#define T_SYSCALL   48                         // system call
+#define T_SYSCALL   0x80                       // system call
 #define T_DEFAULT   0xdeadbeef         // catchall
 
 #ifndef __ASSEMBLER__
index fb81423..12d9c15 100644 (file)
@@ -8,7 +8,7 @@
 OBJDIRS += kern
 CC=ivycc --deputy
 
-KERN_LDFLAGS := $(LDFLAGS) -Lobj/ivylib -T kern/kernel.ld -nostdlib
+KERN_LDFLAGS := $(LDFLAGS) -Lobj/ivylib -T kern/kernel.ld
 
 # entry.S must be first, so that it's the first code in the text segment!!!
 #
@@ -41,19 +41,23 @@ KERN_SRCFILES :=    kern/entry.S \
 # Only build files if they exist.
 KERN_SRCFILES := $(wildcard $(KERN_SRCFILES))
 
-KERN_BINFILES :=       user/null \
+KERN_BINFILES :=       user/null \
                                        user/hello \
-                                       user/buggyhello \
-                                       user/evilhello \
-                                       user/testbss \
-                                       user/divzero \
-                                       user/breakpoint \
-                                       user/softint \
-                                       user/badsegment \
-                                       user/faultread \
-                                       user/faultreadkernel \
-                                       user/faultwrite \
-                                       user/faultwritekernel
+                                       user_newlib/hello \
+                                       user_newlib/null \
+#                              user/hello \
+#                              user/buggyhello \
+#                              user/evilhello \
+#                              user/testbss \
+#                              user/divzero \
+#                              user/breakpoint \
+#                              user/softint \
+#                              user/badsegment \
+#                              user/faultread \
+#                              user/faultreadkernel \
+#                              user/faultwrite \
+#                              user/faultwritekernel \
+#                              user_newlib/null \
 
 KERN_OBJFILES := $(patsubst %.c, $(OBJDIR)/%.o, $(KERN_SRCFILES))
 KERN_OBJFILES := $(patsubst %.S, $(OBJDIR)/%.o, $(KERN_OBJFILES))
@@ -65,17 +69,17 @@ KERN_BINFILES := $(patsubst %, $(OBJDIR)/%, $(KERN_BINFILES))
 $(OBJDIR)/kern/%.o: kern/%.c
        @echo + cc $<
        @mkdir -p $(@D)
-       $(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
+       $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
 
 $(OBJDIR)/kern/%.o: kern/%.S
        @echo + as $<
        @mkdir -p $(@D)
-       $(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
+       $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
 
 $(OBJDIR)/kern/%.o: lib/%.c
        @echo + cc $<
        @mkdir -p $(@D)
-       $(V)$(CC) -nostdinc $(KERN_CFLAGS) -c -o $@ $<
+       $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
 
 # How to build the kernel itself
 $(OBJDIR)/kern/kernel: $(KERN_OBJFILES) $(KERN_BINFILES) kern/kernel.ld $(OBJDIR)/ivylib/libivykern.a
index c7e8a60..9b88df5 100644 (file)
@@ -88,7 +88,7 @@ void kernel_init(multiboot_info_t *mboot_info)
        ENV_CREATE(user_null);
        ENV_CREATE(user_null);
        env_run(&envs[0]);
-       env_run(&envs[1]);
+       //env_run(&envs[1]);
        panic("Don't Panic");
        // ENV_CREATE(user_null);
        /*ENV_CREATE(user_null);
index 1be2b36..0a12523 100644 (file)
@@ -13,10 +13,7 @@ LIB_SRCFILES :=              lib/console.c \
                        lib/string.c \
                        lib/syscall.c \
                        lib/asynccall.c \
-                       lib/timer.c
-
-
-
+                       lib/timer.c 
 
 LIB_OBJFILES := $(patsubst lib/%.c, $(OBJDIR)/lib/%.o, $(LIB_SRCFILES))
 LIB_OBJFILES := $(patsubst lib/%.S, $(OBJDIR)/lib/%.o, $(LIB_OBJFILES))
@@ -24,12 +21,12 @@ LIB_OBJFILES := $(patsubst lib/%.S, $(OBJDIR)/lib/%.o, $(LIB_OBJFILES))
 $(OBJDIR)/lib/%.o: lib/%.c
        @echo + cc[USER] $<
        @mkdir -p $(@D)
-       $(V)$(NATIVECC) -nostdinc $(USER_CFLAGS) -c -o $@ $<
+       $(V)$(NATIVECC) $(USER_CFLAGS) -c -o $@ $<
 
 $(OBJDIR)/lib/%.o: lib/%.S
        @echo + as[USER] $<
        @mkdir -p $(@D)
-       $(V)$(NATIVECC) -nostdinc $(USER_CFLAGS) -c -o $@ $<
+       $(V)$(NATIVECC) $(USER_CFLAGS) -c -o $@ $<
 
 $(OBJDIR)/lib/libros.a: $(LIB_OBJFILES)
        @echo + ar $@
index 0eb448d..6d32c19 100644 (file)
@@ -4,7 +4,7 @@
 #include <inc/lib.h>
 #include <inc/syscall.h>
 
-extern void umain(int argc, char **argv);
+extern int main(int argc, char **argv);
 
 volatile env_t *env;
 char *binaryname = "(PROGRAM NAME UNKNOWN)";
@@ -40,7 +40,7 @@ libmain(int argc, char **argv)
                binaryname = argv[0];
 
        // call user main routine
-       umain(argc, argv);
+       main(argc, argv);
 
        // exit gracefully
        exit();
diff --git a/newlib/Makefrag b/newlib/Makefrag
new file mode 100644 (file)
index 0000000..24c1b95
--- /dev/null
@@ -0,0 +1,23 @@
+NATIVECC := ivycc
+
+OBJDIRS += newlib
+
+NEWLIB_SRCFILES =              newlib/libc_wrappers.c 
+
+NEWLIB_HEADERS = -Inewlib/include
+NEWLIB_OBJFILES = $(patsubst newlib/%.c, $(OBJDIR)/newlib/%.o, $(NEWLIB_SRCFILES))
+
+$(OBJDIR)/newlib/%.o: newlib/%.c
+       @echo + cc[USER] $<
+       @mkdir -p $(@D)
+       $(V)$(NATIVECC) $(NEWLIB_HEADERS) $(USER_CFLAGS) -c -o $@ $<
+
+$(OBJDIR)/newlib/%.o: newlib/%.S
+       @echo + as[USER] $<
+       @mkdir -p $(@D)
+       $(V)$(NATIVECC) $(NEWLIB_HEADERS) $(USER_CFLAGS) -c -o $@ $<
+
+$(OBJDIR)/newlib/libc_wrappers.a: $(NEWLIB_OBJFILES)
+       @echo + ar $@
+       @mkdir -p $(@D)
+       $(V)$(AR) r $@ $(NEWLIB_OBJFILES)
diff --git a/newlib/include/_ansi.h b/newlib/include/_ansi.h
new file mode 100644 (file)
index 0000000..a3f0334
--- /dev/null
@@ -0,0 +1,99 @@
+/* Provide support for both ANSI and non-ANSI environments.  */
+
+/* Some ANSI environments are "broken" in the sense that __STDC__ cannot be
+   relied upon to have it's intended meaning.  Therefore we must use our own
+   concoction: _HAVE_STDC.  Always use _HAVE_STDC instead of __STDC__ in newlib
+   sources!
+
+   To get a strict ANSI C environment, define macro __STRICT_ANSI__.  This will
+   "comment out" the non-ANSI parts of the ANSI header files (non-ANSI header
+   files aren't affected).  */
+
+#ifndef        _ANSIDECL_H_
+#define        _ANSIDECL_H_
+
+#include <newlib.h>
+#include <sys/config.h>
+
+/* First try to figure out whether we really are in an ANSI C environment.  */
+/* FIXME: This probably needs some work.  Perhaps sys/config.h can be
+   prevailed upon to give us a clue.  */
+
+#ifdef __STDC__
+#define _HAVE_STDC
+#endif
+
+#ifdef _HAVE_STDC
+#define        _PTR            void *
+#define        _AND            ,
+#define        _NOARGS         void
+#define        _CONST          const
+#define        _VOLATILE       volatile
+#define        _SIGNED         signed
+#define        _DOTS           , ...
+#define _VOID void
+#ifdef __CYGWIN__
+#define        _EXFUN(name, proto)             __cdecl name proto
+#define        _EXPARM(name, proto)            (* __cdecl name) proto
+#else
+#define        _EXFUN(name, proto)             name proto
+#define _EXPARM(name, proto)           (* name) proto
+#endif
+#define        _DEFUN(name, arglist, args)     name(args)
+#define        _DEFUN_VOID(name)               name(_NOARGS)
+#define _CAST_VOID (void)
+#ifndef _LONG_DOUBLE
+#define _LONG_DOUBLE long double
+#endif
+#ifndef _LONG_LONG_TYPE
+#define _LONG_LONG_TYPE long long
+#endif
+#ifndef _PARAMS
+#define _PARAMS(paramlist)             paramlist
+#endif
+#else  
+#define        _PTR            char *
+#define        _AND            ;
+#define        _NOARGS
+#define        _CONST
+#define        _VOLATILE
+#define        _SIGNED
+#define        _DOTS
+#define _VOID void
+#define        _EXFUN(name, proto)             name()
+#define        _DEFUN(name, arglist, args)     name arglist args;
+#define        _DEFUN_VOID(name)               name()
+#define _CAST_VOID
+#define _LONG_DOUBLE double
+#define _LONG_LONG_TYPE long
+#ifndef _PARAMS
+#define _PARAMS(paramlist)             ()
+#endif
+#endif
+
+/* Support gcc's __attribute__ facility.  */
+
+#ifdef __GNUC__
+#define _ATTRIBUTE(attrs) __attribute__ (attrs)
+#else
+#define _ATTRIBUTE(attrs)
+#endif
+
+/*  ISO C++.  */
+
+#ifdef __cplusplus
+#if !(defined(_BEGIN_STD_C) && defined(_END_STD_C))
+#ifdef _HAVE_STD_CXX
+#define _BEGIN_STD_C namespace std { extern "C" {
+#define _END_STD_C  } }
+#else
+#define _BEGIN_STD_C extern "C" {
+#define _END_STD_C  }
+#endif
+#endif
+#else
+#define _BEGIN_STD_C
+#define _END_STD_C
+#endif
+
+#endif /* _ANSIDECL_H_ */
diff --git a/newlib/include/_syslist.h b/newlib/include/_syslist.h
new file mode 100644 (file)
index 0000000..09da793
--- /dev/null
@@ -0,0 +1,39 @@
+/* internal use only -- mapping of "system calls" for libraries that lose
+   and only provide C names, so that we end up in violation of ANSI */
+#ifndef __SYSLIST_H
+#define __SYSLIST_H
+
+#ifdef MISSING_SYSCALL_NAMES
+#define _close close
+#define _execve execve
+#define _fcntl fcntl
+#define _fork fork
+#define _fstat fstat
+#define _getpid getpid
+#define _gettimeofday gettimeofday
+#define _isatty isatty
+#define _kill kill
+#define _link link
+#define _lseek lseek
+#define _open open
+#define _read read
+#define _sbrk sbrk
+#define _stat stat
+#define _times times
+#define _unlink unlink
+#define _wait wait
+#define _write write
+#endif /* MISSING_SYSCALL_NAMES */
+
+#if defined MISSING_SYSCALL_NAMES || !defined HAVE_OPENDIR
+/* If the system call interface is missing opendir, readdir, and
+   closedir, there is an implementation of these functions in
+   libc/posix that is implemented using open, getdents, and close. 
+   Note, these functions are currently not in the libc/syscalls
+   directory.  */
+#define _opendir opendir
+#define _readdir readdir
+#define _closedir closedir
+#endif /* MISSING_SYSCALL_NAMES || !HAVE_OPENDIR */
+
+#endif /* !__SYSLIST_H_ */
diff --git a/newlib/include/alloca.h b/newlib/include/alloca.h
new file mode 100644 (file)
index 0000000..2ea0fd9
--- /dev/null
@@ -0,0 +1,21 @@
+/* libc/include/alloca.h - Allocate memory on stack */
+
+/* Written 2000 by Werner Almesberger */
+/* Rearranged for general inclusion by stdlib.h.
+   2001, Corinna Vinschen <vinschen@redhat.com> */
+
+#ifndef _NEWLIB_ALLOCA_H
+#define _NEWLIB_ALLOCA_H
+
+#include "_ansi.h"
+#include <sys/reent.h>
+
+#undef alloca
+
+#ifdef __GNUC__
+#define alloca(size) __builtin_alloca(size)
+#else
+void * _EXFUN(alloca,(size_t));
+#endif
+
+#endif
diff --git a/newlib/include/ar.h b/newlib/include/ar.h
new file mode 100644 (file)
index 0000000..ac2e4ca
--- /dev/null
@@ -0,0 +1,69 @@
+/*     $NetBSD: ar.h,v 1.4 1994/10/26 00:55:43 cgd Exp $       */
+
+/*-
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Hugh Smith at The University of Guelph.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ar.h        8.2 (Berkeley) 1/21/94
+ */
+
+#ifndef _AR_H_
+#define        _AR_H_
+
+/* Pre-4BSD archives had these magic numbers in them. */
+#define        OARMAG1 0177555
+#define        OARMAG2 0177545
+
+#define        ARMAG           "!<arch>\n"     /* ar "magic number" */
+#define        SARMAG          8               /* strlen(ARMAG); */
+
+#define        AR_EFMT1        "#1/"           /* extended format #1 */
+
+struct ar_hdr {
+       char ar_name[16];               /* name */
+       char ar_date[12];               /* modification time */
+       char ar_uid[6];                 /* user id */
+       char ar_gid[6];                 /* group id */
+       char ar_mode[8];                /* octal file permissions */
+       char ar_size[10];               /* size in bytes */
+#define        ARFMAG  "`\n"
+       char ar_fmag[2];                /* consistency check */
+};
+
+#endif /* !_AR_H_ */
diff --git a/newlib/include/argz.h b/newlib/include/argz.h
new file mode 100644 (file)
index 0000000..02c9adb
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 2002 by  Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#ifndef _ARGZ_H_
+#define _ARGZ_H_
+
+#include <errno.h>
+#include <sys/types.h>
+
+#include "_ansi.h"
+
+_BEGIN_STD_C
+
+/* The newlib implementation of these functions assumes that sizeof(char) == 1. */
+error_t argz_create (char *const argv[], char **argz, size_t *argz_len);
+error_t argz_create_sep (const char *string, int sep, char **argz, size_t *argz_len);
+size_t argz_count (const char *argz, size_t argz_len);
+void argz_extract (char *argz, size_t argz_len, char **argv);
+void argz_stringify (char *argz, size_t argz_len, int sep);
+error_t argz_add (char **argz, size_t *argz_len, const char *str);
+error_t argz_add_sep (char **argz, size_t *argz_len, const char *str, int sep);
+error_t argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len);
+error_t argz_delete (char **argz, size_t *argz_len, char *entry);
+error_t argz_insert (char **argz, size_t *argz_len, char *before, const char *entry);
+char * argz_next (char *argz, size_t argz_len, const char *entry);
+error_t argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, unsigned *replace_count);
+
+_END_STD_C
+
+#endif /* _ARGZ_H_ */
diff --git a/newlib/include/assert.h b/newlib/include/assert.h
new file mode 100644 (file)
index 0000000..e542b21
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+       assert.h
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "_ansi.h"
+
+#undef assert
+
+#ifdef NDEBUG           /* required by ANSI standard */
+# define assert(__e) ((void)0)
+#else
+# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \
+                                                      __ASSERT_FUNC, #__e))
+
+# ifndef __ASSERT_FUNC
+  /* Use g++'s demangled names in C++.  */
+#  if defined __cplusplus && defined __GNUC__
+#   define __ASSERT_FUNC __PRETTY_FUNCTION__
+
+  /* C99 requires the use of __func__.  */
+#  elif __STDC_VERSION__ >= 199901L
+#   define __ASSERT_FUNC __func__
+
+  /* Older versions of gcc don't have __func__ but can use __FUNCTION__.  */
+#  elif __GNUC__ >= 2
+#   define __ASSERT_FUNC __FUNCTION__
+
+  /* failed to detect __func__ support.  */
+#  else
+#   define __ASSERT_FUNC ((char *) 0)
+#  endif
+# endif /* !__ASSERT_FUNC */
+#endif /* !NDEBUG */
+
+void _EXFUN(__assert, (const char *, int, const char *)
+           _ATTRIBUTE ((__noreturn__)));
+void _EXFUN(__assert_func, (const char *, int, const char *, const char *)
+           _ATTRIBUTE ((__noreturn__)));
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/newlib/include/ctype.h b/newlib/include/ctype.h
new file mode 100644 (file)
index 0000000..a7c7ca2
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef _CTYPE_H_
+#define _CTYPE_H_
+
+#include "_ansi.h"
+
+_BEGIN_STD_C
+
+int _EXFUN(isalnum, (int __c));
+int _EXFUN(isalpha, (int __c));
+int _EXFUN(iscntrl, (int __c));
+int _EXFUN(isdigit, (int __c));
+int _EXFUN(isgraph, (int __c));
+int _EXFUN(islower, (int __c));
+int _EXFUN(isprint, (int __c));
+int _EXFUN(ispunct, (int __c));
+int _EXFUN(isspace, (int __c));
+int _EXFUN(isupper, (int __c));
+int _EXFUN(isxdigit,(int __c));
+int _EXFUN(tolower, (int __c));
+int _EXFUN(toupper, (int __c));
+
+#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L
+int _EXFUN(isblank, (int __c));
+#endif
+
+#ifndef __STRICT_ANSI__
+int _EXFUN(isascii, (int __c));
+int _EXFUN(toascii, (int __c));
+int _EXFUN(_tolower, (int __c));
+int _EXFUN(_toupper, (int __c));
+#endif
+
+#define        _U      01
+#define        _L      02
+#define        _N      04
+#define        _S      010
+#define _P     020
+#define _C     040
+#define _X     0100
+#define        _B      0200
+
+extern __IMPORT _CONST char    *__ctype_ptr__;
+
+#ifndef __cplusplus
+#define        isalpha(c)      ((__ctype_ptr__)[(unsigned)((c)+1)]&(_U|_L))
+#define        isupper(c)      ((__ctype_ptr__)[(unsigned)((c)+1)]&_U)
+#define        islower(c)      ((__ctype_ptr__)[(unsigned)((c)+1)]&_L)
+#define        isdigit(c)      ((__ctype_ptr__)[(unsigned)((c)+1)]&_N)
+#define        isxdigit(c)     ((__ctype_ptr__)[(unsigned)((c)+1)]&(_X|_N))
+#define        isspace(c)      ((__ctype_ptr__)[(unsigned)((c)+1)]&_S)
+#define ispunct(c)     ((__ctype_ptr__)[(unsigned)((c)+1)]&_P)
+#define isalnum(c)     ((__ctype_ptr__)[(unsigned)((c)+1)]&(_U|_L|_N))
+#define isprint(c)     ((__ctype_ptr__)[(unsigned)((c)+1)]&(_P|_U|_L|_N|_B))
+#define        isgraph(c)      ((__ctype_ptr__)[(unsigned)((c)+1)]&(_P|_U|_L|_N))
+#define iscntrl(c)     ((__ctype_ptr__)[(unsigned)((c)+1)]&_C)
+
+
+/* Non-gcc versions will get the library versions, and will be
+   slightly slower */
+#ifdef __GNUC__
+# define toupper(c) \
+       __extension__ ({ int __x = (c); islower(__x) ? (__x - 'a' + 'A') : __x;})
+# define tolower(c) \
+       __extension__ ({ int __x = (c); isupper(__x) ? (__x - 'A' + 'a') : __x;})
+#endif
+#endif /* !__cplusplus */
+
+#ifndef __STRICT_ANSI__
+#define isascii(c)     ((unsigned)(c)<=0177)
+#define toascii(c)     ((c)&0177)
+#endif
+
+/* For C++ backward-compatibility only.  */
+extern __IMPORT _CONST char    _ctype_[];
+
+_END_STD_C
+
+#endif /* _CTYPE_H_ */
diff --git a/newlib/include/dirent.h b/newlib/include/dirent.h
new file mode 100644 (file)
index 0000000..6fefc03
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _DIRENT_H_
+#define _DIRENT_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <sys/dirent.h>
+
+#if !defined(MAXNAMLEN) && !defined(_POSIX_SOURCE)
+#define MAXNAMLEN 1024
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*_DIRENT_H_*/
diff --git a/newlib/include/envlock.h b/newlib/include/envlock.h
new file mode 100644 (file)
index 0000000..9bb6a81
--- /dev/null
@@ -0,0 +1,15 @@
+/* envlock.h -- header file for env routines.  */
+
+#ifndef _INCLUDE_ENVLOCK_H_
+#define _INCLUDE_ENVLOCK_H_
+
+#include <_ansi.h>
+#include <sys/reent.h>
+
+#define ENV_LOCK __env_lock(reent_ptr)
+#define ENV_UNLOCK __env_unlock(reent_ptr)
+
+void _EXFUN(__env_lock,(struct _reent *reent));
+void _EXFUN(__env_unlock,(struct _reent *reent));
+
+#endif /* _INCLUDE_ENVLOCK_H_ */
diff --git a/newlib/include/envz.h b/newlib/include/envz.h
new file mode 100644 (file)
index 0000000..e6a31c3
--- /dev/null
@@ -0,0 +1,16 @@
+/* Copyright (C) 2002 by  Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+
+/* The newlib implementation of these functions assumes that sizeof(char) == 1. */
+char * envz_entry (const char *envz, size_t envz_len, const char *name);
+char * envz_get (const char *envz, size_t envz_len, const char *name);
+error_t envz_add (char **envz, size_t *envz_len, const char *name, const char *value);
+error_t envz_merge (char **envz, size_t *envz_len, const char *envz2, size_t envz2_len, int override);
+void envz_remove(char **envz, size_t *envz_len, const char *name);
+void envz_strip (char **envz, size_t *envz_len);
diff --git a/newlib/include/errno.h b/newlib/include/errno.h
new file mode 100644 (file)
index 0000000..7cc2ca8
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef __ERRNO_H__
+#define __ERRNO_H__
+
+#ifndef __error_t_defined
+typedef int error_t;
+#define __error_t_defined 1
+#endif
+
+#include <sys/errno.h>
+
+#endif /* !__ERRNO_H__ */
diff --git a/newlib/include/fastmath.h b/newlib/include/fastmath.h
new file mode 100644 (file)
index 0000000..95eea5f
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _FASTMATH_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define _FASTMATH_H_
+
+#include <math.h>
+#include <machine/fastmath.h>
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FASTMATH_H_ */
diff --git a/newlib/include/fcntl.h b/newlib/include/fcntl.h
new file mode 100644 (file)
index 0000000..86a9167
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/fcntl.h>
diff --git a/newlib/include/fnmatch.h b/newlib/include/fnmatch.h
new file mode 100644 (file)
index 0000000..06311fc
--- /dev/null
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/include/fnmatch.h,v 1.10 2002/03/23 17:24:53 imp Exp $
+ *     @(#)fnmatch.h   8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _FNMATCH_H_
+#define        _FNMATCH_H_
+
+#define        FNM_NOMATCH     1       /* Match failed. */
+
+#define        FNM_NOESCAPE    0x01    /* Disable backslash escaping. */
+#define        FNM_PATHNAME    0x02    /* Slash must be matched by slash. */
+#define        FNM_PERIOD      0x04    /* Period must be matched by period. */
+
+#if defined(_GNU_SOURCE) || !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
+#define        FNM_LEADING_DIR 0x08    /* Ignore /<tail> after Imatch. */
+#define        FNM_CASEFOLD    0x10    /* Case insensitive search. */
+#define        FNM_IGNORECASE  FNM_CASEFOLD
+#define        FNM_FILE_NAME   FNM_PATHNAME
+#endif
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int     fnmatch(const char *, const char *, int);
+__END_DECLS
+
+#endif /* !_FNMATCH_H_ */
diff --git a/newlib/include/getopt.h b/newlib/include/getopt.h
new file mode 100644 (file)
index 0000000..13cf99c
--- /dev/null
@@ -0,0 +1,188 @@
+/****************************************************************************
+
+getopt.h - Read command line options
+
+AUTHOR: Gregory Pietsch
+CREATED Thu Jan 09 22:37:00 1997
+
+DESCRIPTION:
+
+The getopt() function parses the command line arguments.  Its arguments argc
+and argv are the argument count and array as passed to the main() function
+on program invocation.  The argument optstring is a list of available option
+characters.  If such a character is followed by a colon (`:'), the option
+takes an argument, which is placed in optarg.  If such a character is
+followed by two colons, the option takes an optional argument, which is
+placed in optarg.  If the option does not take an argument, optarg is NULL.
+
+The external variable optind is the index of the next array element of argv
+to be processed; it communicates from one call to the next which element to
+process.
+
+The getopt_long() function works like getopt() except that it also accepts
+long options started by two dashes `--'.  If these take values, it is either
+in the form
+
+--arg=value
+
+ or
+
+--arg value
+
+It takes the additional arguments longopts which is a pointer to the first
+element of an array of type GETOPT_LONG_OPTION_T, defined below.  The last
+element of the array has to be filled with NULL for the name field.
+
+The longind pointer points to the index of the current long option relative
+to longopts if it is non-NULL.
+
+The getopt() function returns the option character if the option was found
+successfully, `:' if there was a missing parameter for one of the options,
+`?' for an unknown option character, and EOF for the end of the option list.
+
+The getopt_long() function's return value is described below.
+
+The function getopt_long_only() is identical to getopt_long(), except that a
+plus sign `+' can introduce long options as well as `--'.
+
+Describe how to deal with options that follow non-option ARGV-elements.
+
+If the caller did not specify anything, the default is REQUIRE_ORDER if the
+environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+REQUIRE_ORDER means don't recognize them as options; stop option processing
+when the first non-option is seen.  This is what Unix does.  This mode of
+operation is selected by either setting the environment variable
+POSIXLY_CORRECT, or using `+' as the first character of the optstring
+parameter.
+
+PERMUTE is the default.  We permute the contents of ARGV as we scan, so that
+eventually all the non-options are at the end.  This allows options to be
+given in any order, even with programs that were not written to expect this.
+
+RETURN_IN_ORDER is an option available to programs that were written to
+expect options and other ARGV-elements in any order and that care about the
+ordering of the two.  We describe each non-option ARGV-element as if it were
+the argument of an option with character code 1.  Using `-' as the first
+character of the optstring parameter selects this mode of operation.
+
+The special argument `--' forces an end of option-scanning regardless of the
+value of `ordering'.  In the case of RETURN_IN_ORDER, only `--' can cause
+getopt() and friends to return EOF with optind != argc.
+
+COPYRIGHT NOTICE AND DISCLAIMER:
+
+Copyright (C) 1997 Gregory Pietsch
+
+This file and the accompanying getopt.c implementation file are hereby 
+placed in the public domain without restrictions.  Just give the author 
+credit, don't claim you wrote it or prevent anyone else from using it.
+
+Gregory Pietsch's current e-mail address:
+gpietsch@comcast.net
+****************************************************************************/
+
+/* This is a glibc-extension header file. */
+
+#ifndef GETOPT_H
+#define GETOPT_H
+
+#include <_ansi.h>
+
+/* include files needed by this include file */
+
+#define no_argument            0
+#define required_argument      1
+#define optional_argument      2
+
+#ifdef __cplusplus
+extern "C"
+{
+
+#endif                         /* __cplusplus */
+
+/* types defined by this include file */
+  struct option
+  {
+    char *name;                        /* the name of the long option */
+    int has_arg;               /* one of the above macros */
+    int *flag;                 /* determines if getopt_long() returns a
+                                * value for a long option; if it is
+                                * non-NULL, 0 is returned as a function
+                                * value and the value of val is stored in
+                                * the area pointed to by flag.  Otherwise,
+                                * val is returned. */
+    int val;                   /* determines the value to return if flag is
+                                * NULL. */
+
+  };
+
+/* While getopt.h is a glibc extension, the following are newlib extensions.
+ * They are optionally included via the __need_getopt_newlib flag.  */
+
+#ifdef __need_getopt_newlib
+
+  /* macros defined by this include file */
+  #define NO_ARG               no_argument
+  #define REQUIRED_ARG         required_argument
+  #define OPTIONAL_ARG         optional_argument
+
+  /* The GETOPT_DATA_INITIALIZER macro is used to initialize a statically-
+     allocated variable of type struct getopt_data.  */
+  #define GETOPT_DATA_INITIALIZER      {0,0,0,0,0}
+
+  /* These #defines are to make accessing the reentrant functions easier.  */
+  #define getopt_r             __getopt_r
+  #define getopt_long_r                __getopt_long_r
+  #define getopt_long_only_r   __getopt_long_only_r
+
+  /* The getopt_data structure is for reentrancy. Its members are similar to
+     the externally-defined variables.  */
+  typedef struct getopt_data
+  {
+    char *optarg;
+    int optind, opterr, optopt, optwhere;
+  } getopt_data;
+
+#endif /* __need_getopt_newlib */
+
+  /* externally-defined variables */
+  extern char *optarg;
+  extern int optind;
+  extern int opterr;
+  extern int optopt;
+
+  /* function prototypes */
+  int _EXFUN (getopt,
+             (int __argc, char *const __argv[], const char *__optstring));
+
+  int _EXFUN (getopt_long,
+             (int __argc, char *const __argv[], const char *__shortopts,
+              const struct option * __longopts, int *__longind));
+
+  int _EXFUN (getopt_long_only,
+             (int __argc, char *const __argv[], const char *__shortopts,
+              const struct option * __longopts, int *__longind));
+
+  int _EXFUN (__getopt_r,
+             (int __argc, char *const __argv[], const char *__optstring,
+              struct getopt_data * __data));
+
+  int _EXFUN (__getopt_long_r,
+             (int __argc, char *const __argv[], const char *__shortopts,
+              const struct option * __longopts, int *__longind,
+              struct getopt_data * __data));
+
+  int _EXFUN (__getopt_long_only_r,
+             (int __argc, char *const __argv[], const char *__shortopts,
+              const struct option * __longopts, int *__longind,
+              struct getopt_data * __data));
+
+#ifdef __cplusplus
+};
+
+#endif /* __cplusplus  */
+
+#endif /* GETOPT_H */
+
+/* END OF FILE getopt.h */
diff --git a/newlib/include/glob.h b/newlib/include/glob.h
new file mode 100644 (file)
index 0000000..a735135
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Guido van Rossum.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)glob.h      8.1 (Berkeley) 6/2/93
+ * $FreeBSD: src/include/glob.h,v 1.6 2002/03/23 17:24:53 imp Exp $
+ */
+
+#ifndef _GLOB_H_
+#define        _GLOB_H_
+
+#include <sys/cdefs.h>
+
+struct stat;
+typedef struct {
+       int gl_pathc;           /* Count of total paths so far. */
+       int gl_matchc;          /* Count of paths matching pattern. */
+       int gl_offs;            /* Reserved at beginning of gl_pathv. */
+       int gl_flags;           /* Copy of flags parameter to glob. */
+       char **gl_pathv;        /* List of paths matching pattern. */
+                               /* Copy of errfunc parameter to glob. */
+       int (*gl_errfunc)(const char *, int);
+
+       /*
+        * Alternate filesystem access methods for glob; replacement
+        * versions of closedir(3), readdir(3), opendir(3), stat(2)
+        * and lstat(2).
+        */
+       void (*gl_closedir)(void *);
+       struct dirent *(*gl_readdir)(void *);
+       void *(*gl_opendir)(const char *);
+       int (*gl_lstat)(const char *, struct stat *);
+       int (*gl_stat)(const char *, struct stat *);
+} glob_t;
+
+#define        GLOB_APPEND     0x0001  /* Append to output from previous call. */
+#define        GLOB_DOOFFS     0x0002  /* Use gl_offs. */
+#define        GLOB_ERR        0x0004  /* Return on error. */
+#define        GLOB_MARK       0x0008  /* Append / to matching directories. */
+#define        GLOB_NOCHECK    0x0010  /* Return pattern itself if nothing matches. */
+#define        GLOB_NOSORT     0x0020  /* Don't sort. */
+
+#define        GLOB_ALTDIRFUNC 0x0040  /* Use alternately specified directory funcs. */
+#define        GLOB_BRACE      0x0080  /* Expand braces ala csh. */
+#define        GLOB_MAGCHAR    0x0100  /* Pattern had globbing characters. */
+#define        GLOB_NOMAGIC    0x0200  /* GLOB_NOCHECK without magic chars (csh). */
+#define        GLOB_QUOTE      0x0400  /* Quote special chars with \. */
+#define        GLOB_TILDE      0x0800  /* Expand tilde names from the passwd file. */
+#define        GLOB_LIMIT      0x1000  /* limit number of returned paths */
+
+/* backwards compatibility, this is the old name for this option */
+#define GLOB_MAXPATH   GLOB_LIMIT
+
+#define        GLOB_NOSPACE    (-1)    /* Malloc call failed. */
+#define        GLOB_ABEND      (-2)    /* Unignored error. */
+
+__BEGIN_DECLS
+int    glob(const char *, int, int (*)(const char *, int), glob_t *);
+void   globfree(glob_t *);
+__END_DECLS
+
+#endif /* !_GLOB_H_ */
diff --git a/newlib/include/grp.h b/newlib/include/grp.h
new file mode 100644 (file)
index 0000000..1273e39
--- /dev/null
@@ -0,0 +1,94 @@
+/*     $NetBSD: grp.h,v 1.7 1995/04/29 05:30:40 cgd Exp $      */
+
+/*-
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)grp.h       8.2 (Berkeley) 1/21/94
+ */
+
+#ifndef _GRP_H_
+#define        _GRP_H_
+
+#include <sys/types.h>
+#ifdef __CYGWIN__
+#include <cygwin/grp.h>
+#endif
+
+#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
+#define        _PATH_GROUP             "/etc/group"
+#endif
+
+struct group {
+       char    *gr_name;               /* group name */
+       char    *gr_passwd;             /* group password */
+       gid_t   gr_gid;                 /* group id */
+       char    **gr_mem;               /* group members */
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __INSIDE_CYGWIN__
+struct group   *getgrgid (gid_t);
+struct group   *getgrnam (const char *);
+int             getgrnam_r (const char *, struct group *,
+                       char *, size_t, struct group **);
+int             getgrgid_r (gid_t, struct group *,
+                       char *, size_t, struct group **);
+#ifndef _POSIX_SOURCE
+struct group   *getgrent (void);
+void            setgrent (void);
+void            endgrent (void);
+#ifndef __CYGWIN__
+void            setgrfile (const char *);
+#endif /* !__CYGWIN__ */
+#ifndef _XOPEN_SOURCE
+#ifndef __CYGWIN__
+char           *group_from_gid (gid_t, int);
+int             setgroupent (int);
+#endif /* !__CYGWIN__ */
+int             initgroups (const char *, gid_t);
+#endif /* !_XOPEN_SOURCE */
+#endif /* !_POSIX_SOURCE */
+#endif /* !__INSIDE_CYGWIN__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_GRP_H_ */
diff --git a/newlib/include/iconv.h b/newlib/include/iconv.h
new file mode 100644 (file)
index 0000000..5b8fcec
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2003-2004, Artem B. Bityuckiy, SoftMine Corporation.
+ * Rights transferred to Franklin Electronic Publishers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _ICONV_H_
+#define _ICONV_H_
+
+#include <_ansi.h>
+#include <reent.h>
+#include <sys/types.h>
+#include <sys/_types.h>
+
+/* iconv_t: charset conversion descriptor type */
+typedef _iconv_t iconv_t;
+
+_BEGIN_STD_C
+
+#ifndef _REENT_ONLY
+iconv_t 
+_EXFUN(iconv_open, (_CONST char *, _CONST char *));
+
+size_t
+_EXFUN(iconv, (iconv_t, _CONST char **, size_t *, char **, size_t *));
+
+int
+_EXFUN(iconv_close, (iconv_t));
+#endif
+
+iconv_t
+_EXFUN(_iconv_open_r, (struct _reent *, _CONST char *, _CONST char *));
+
+size_t
+_EXFUN(_iconv_r, (struct _reent *, iconv_t, _CONST char **, 
+                  size_t *, char **, size_t *));
+
+int
+_EXFUN(_iconv_close_r, (struct _reent *, iconv_t));
+
+_END_STD_C
+
+#endif /* #ifndef _ICONV_H_ */
diff --git a/newlib/include/ieeefp.h b/newlib/include/ieeefp.h
new file mode 100644 (file)
index 0000000..0b06fb7
--- /dev/null
@@ -0,0 +1,256 @@
+#ifndef _IEEE_FP_H_
+#define _IEEE_FP_H_
+
+#include "_ansi.h"
+
+#include <machine/ieeefp.h>
+
+_BEGIN_STD_C
+
+/* FIXME FIXME FIXME:
+   Neither of __ieee_{float,double}_shape_tape seem to be used anywhere
+   except in libm/test.  If that is the case, please delete these from here.
+   If that is not the case, please insert documentation here describing why
+   they're needed.  */
+
+#ifdef __IEEE_BIG_ENDIAN
+
+typedef union 
+{
+  double value;
+  struct 
+  {
+    unsigned int sign : 1;
+    unsigned int exponent: 11;
+    unsigned int fraction0:4;
+    unsigned int fraction1:16;
+    unsigned int fraction2:16;
+    unsigned int fraction3:16;
+    
+  } number;
+  struct 
+  {
+    unsigned int sign : 1;
+    unsigned int exponent: 11;
+    unsigned int quiet:1;
+    unsigned int function0:3;
+    unsigned int function1:16;
+    unsigned int function2:16;
+    unsigned int function3:16;
+  } nan;
+  struct 
+  {
+    unsigned long msw;
+    unsigned long lsw;
+  } parts;
+    long aslong[2];
+} __ieee_double_shape_type;
+
+#endif
+
+#ifdef __IEEE_LITTLE_ENDIAN
+
+typedef union 
+{
+  double value;
+  struct 
+  {
+#ifdef __SMALL_BITFIELDS
+    unsigned int fraction3:16;
+    unsigned int fraction2:16;
+    unsigned int fraction1:16;
+    unsigned int fraction0: 4;
+#else
+    unsigned int fraction1:32;
+    unsigned int fraction0:20;
+#endif
+    unsigned int exponent :11;
+    unsigned int sign     : 1;
+  } number;
+  struct 
+  {
+#ifdef __SMALL_BITFIELDS
+    unsigned int function3:16;
+    unsigned int function2:16;
+    unsigned int function1:16;
+    unsigned int function0:3;
+#else
+    unsigned int function1:32;
+    unsigned int function0:19;
+#endif
+    unsigned int quiet:1;
+    unsigned int exponent: 11;
+    unsigned int sign : 1;
+  } nan;
+  struct 
+  {
+    unsigned long lsw;
+    unsigned long msw;
+  } parts;
+
+  long aslong[2];
+
+} __ieee_double_shape_type;
+
+#endif
+
+#ifdef __IEEE_BIG_ENDIAN
+
+typedef union
+{
+  float value;
+  struct 
+  {
+    unsigned int sign : 1;
+    unsigned int exponent: 8;
+    unsigned int fraction0: 7;
+    unsigned int fraction1: 16;
+  } number;
+  struct 
+  {
+    unsigned int sign:1;
+    unsigned int exponent:8;
+    unsigned int quiet:1;
+    unsigned int function0:6;
+    unsigned int function1:16;
+  } nan;
+  long p1;
+  
+} __ieee_float_shape_type;
+
+#endif
+
+#ifdef __IEEE_LITTLE_ENDIAN
+
+typedef union
+{
+  float value;
+  struct 
+  {
+    unsigned int fraction0: 7;
+    unsigned int fraction1: 16;
+    unsigned int exponent: 8;
+    unsigned int sign : 1;
+  } number;
+  struct 
+  {
+    unsigned int function1:16;
+    unsigned int function0:6;
+    unsigned int quiet:1;
+    unsigned int exponent:8;
+    unsigned int sign:1;
+  } nan;
+  long p1;
+  
+} __ieee_float_shape_type;
+
+#endif
+
+
+
+
+
+/* FLOATING ROUNDING */
+
+typedef int fp_rnd;
+#define FP_RN 0        /* Round to nearest             */
+#define FP_RM 1                /* Round down                   */
+#define FP_RP 2                /* Round up                     */
+#define FP_RZ 3                /* Round to zero (trunate)      */
+
+fp_rnd _EXFUN(fpgetround,(void));
+fp_rnd _EXFUN(fpsetround, (fp_rnd));
+
+/* EXCEPTIONS */
+
+typedef int fp_except;
+#define FP_X_INV 0x10  /* Invalid operation            */
+#define FP_X_DX  0x80  /* Divide by zero               */
+#define FP_X_OFL 0x04  /* Overflow exception           */
+#define FP_X_UFL 0x02  /* Underflow exception          */
+#define FP_X_IMP 0x01  /* imprecise exception          */
+
+fp_except _EXFUN(fpgetmask,(void));
+fp_except _EXFUN(fpsetmask,(fp_except));
+fp_except _EXFUN(fpgetsticky,(void));
+fp_except _EXFUN(fpsetsticky, (fp_except));
+
+/* INTEGER ROUNDING */
+
+typedef int fp_rdi;
+#define FP_RDI_TOZ 0   /* Round to Zero                */
+#define FP_RDI_RD  1   /* Follow float mode            */
+
+fp_rdi _EXFUN(fpgetroundtoi,(void));
+fp_rdi _EXFUN(fpsetroundtoi,(fp_rdi));
+
+#undef isnan
+#undef isinf
+
+int _EXFUN(isnan, (double));
+int _EXFUN(isinf, (double));
+int _EXFUN(finite, (double));
+
+
+
+int _EXFUN(isnanf, (float));
+int _EXFUN(isinff, (float));
+int _EXFUN(finitef, (float));
+
+#define __IEEE_DBL_EXPBIAS 1023
+#define __IEEE_FLT_EXPBIAS 127
+
+#define __IEEE_DBL_EXPLEN 11
+#define __IEEE_FLT_EXPLEN 8
+
+
+#define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1))
+#define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1))
+
+#define __IEEE_DBL_MAXPOWTWO   ((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1))
+#define __IEEE_FLT_MAXPOWTWO   ((float)(1L << (32-8) - 1))
+
+#define __IEEE_DBL_NAN_EXP 0x7ff
+#define __IEEE_FLT_NAN_EXP 0xff
+
+#ifndef __ieeefp_isnanf
+#define __ieeefp_isnanf(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \
+                           ((*(long *)&(x) & 0x007fffffL)!=0000000000L))
+#endif
+#define isnanf(x)      __ieeefp_isnanf(x)
+
+#ifndef __ieeefp_isinff
+#define __ieeefp_isinff(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \
+                           ((*(long *)&(x) & 0x007fffffL)==0000000000L))
+#endif
+#define isinff(x)      __ieeefp_isinff(x)
+
+#ifndef __ieeefp_finitef
+#define __ieeefp_finitef(x) (((*(long *)&(x) & 0x7f800000L)!=0x7f800000L))
+#endif
+#define finitef(x)     __ieeefp_finitef(x)
+
+#ifdef _DOUBLE_IS_32BITS
+#undef __IEEE_DBL_EXPBIAS
+#define __IEEE_DBL_EXPBIAS __IEEE_FLT_EXPBIAS
+
+#undef __IEEE_DBL_EXPLEN
+#define __IEEE_DBL_EXPLEN __IEEE_FLT_EXPLEN
+
+#undef __IEEE_DBL_FRACLEN
+#define __IEEE_DBL_FRACLEN __IEEE_FLT_FRACLEN
+
+#undef __IEEE_DBL_MAXPOWTWO
+#define __IEEE_DBL_MAXPOWTWO __IEEE_FLT_MAXPOWTWO
+
+#undef __IEEE_DBL_NAN_EXP
+#define __IEEE_DBL_NAN_EXP __IEEE_FLT_NAN_EXP
+
+#undef __ieee_double_shape_type
+#define __ieee_double_shape_type __ieee_float_shape_type
+
+#endif /* _DOUBLE_IS_32BITS */
+
+_END_STD_C
+
+#endif /* _IEEE_FP_H_ */
diff --git a/newlib/include/inttypes.h b/newlib/include/inttypes.h
new file mode 100644 (file)
index 0000000..0bcbd31
--- /dev/null
@@ -0,0 +1,290 @@
+/*
+ * Copyright (c) 2004, 2005 by
+ * Ralf Corsepius, Ulm/Germany. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+/**
+ *  @file  inttypes.h
+ */
+
+#ifndef _INTTYPES_H
+#define _INTTYPES_H
+
+#include <stdint.h>
+#define __need_wchar_t
+#include <stddef.h>
+
+#define __STRINGIFY(a) #a
+
+/* 8-bit types */
+#define __PRI8(x) __STRINGIFY(x)
+#define __SCN8(x) __STRINGIFY(hh##x)
+
+
+#define PRId8          __PRI8(d)
+#define PRIi8          __PRI8(i)
+#define PRIo8          __PRI8(o)
+#define PRIu8          __PRI8(u)
+#define PRIx8          __PRI8(x)
+#define PRIX8          __PRI8(X)
+
+#define SCNd8          __SCN8(d)
+#define SCNi8          __SCN8(i)
+#define SCNo8          __SCN8(o)
+#define SCNu8          __SCN8(u)
+#define SCNx8          __SCN8(x)
+
+
+#define PRIdLEAST8     __PRI8(d)
+#define PRIiLEAST8     __PRI8(i)
+#define PRIoLEAST8     __PRI8(o)
+#define PRIuLEAST8     __PRI8(u)
+#define PRIxLEAST8     __PRI8(x)
+#define PRIXLEAST8     __PRI8(X)
+
+#define SCNdLEAST8     __SCN8(d)
+#define SCNiLEAST8     __SCN8(i)
+#define SCNoLEAST8     __SCN8(o)
+#define SCNuLEAST8     __SCN8(u)
+#define SCNxLEAST8     __SCN8(x)
+
+
+#define PRIdFAST8      __PRI8(d)
+#define PRIiFAST8      __PRI8(i)
+#define PRIoFAST8      __PRI8(o)
+#define PRIuFAST8      __PRI8(u)
+#define PRIxFAST8      __PRI8(x)
+#define PRIXFAST8      __PRI8(X)
+
+#define SCNdFAST8      __SCN8(d)
+#define SCNiFAST8      __SCN8(i)
+#define SCNoFAST8      __SCN8(o)
+#define SCNuFAST8      __SCN8(u)
+#define SCNxFAST8      __SCN8(x)
+
+/* 16-bit types */
+#define __PRI16(x) __STRINGIFY(x)
+#define __SCN16(x) __STRINGIFY(h##x)
+
+
+#define PRId16         __PRI16(d)
+#define PRIi16         __PRI16(i)
+#define PRIo16         __PRI16(o)
+#define PRIu16         __PRI16(u)
+#define PRIx16         __PRI16(x)
+#define PRIX16         __PRI16(X)
+
+#define SCNd16         __SCN16(d)
+#define SCNi16         __SCN16(i)
+#define SCNo16         __SCN16(o)
+#define SCNu16         __SCN16(u)
+#define SCNx16         __SCN16(x)
+
+
+#define PRIdLEAST16    __PRI16(d)
+#define PRIiLEAST16    __PRI16(i)
+#define PRIoLEAST16    __PRI16(o)
+#define PRIuLEAST16    __PRI16(u)
+#define PRIxLEAST16    __PRI16(x)
+#define PRIXLEAST16    __PRI16(X)
+
+#define SCNdLEAST16    __SCN16(d)
+#define SCNiLEAST16    __SCN16(i)
+#define SCNoLEAST16    __SCN16(o)
+#define SCNuLEAST16    __SCN16(u)
+#define SCNxLEAST16    __SCN16(x)
+
+
+#define PRIdFAST16     __PRI16(d)
+#define PRIiFAST16     __PRI16(i)
+#define PRIoFAST16     __PRI16(o)
+#define PRIuFAST16     __PRI16(u)
+#define PRIxFAST16     __PRI16(x)
+#define PRIXFAST16     __PRI16(X)
+
+#define SCNdFAST16     __SCN16(d)
+#define SCNiFAST16     __SCN16(i)
+#define SCNoFAST16     __SCN16(o)
+#define SCNuFAST16     __SCN16(u)
+#define SCNxFAST16     __SCN16(x)
+
+/* 32-bit types */
+#if __have_long32
+#define __PRI32(x) __STRINGIFY(l##x)
+#define __SCN32(x) __STRINGIFY(l##x)
+#else
+#define __PRI32(x) __STRINGIFY(x)
+#define __SCN32(x) __STRINGIFY(x)
+#endif
+
+#define PRId32         __PRI32(d)
+#define PRIi32         __PRI32(i)
+#define PRIo32         __PRI32(o)
+#define PRIu32         __PRI32(u)
+#define PRIx32         __PRI32(x)
+#define PRIX32         __PRI32(X)
+
+#define SCNd32         __SCN32(d)
+#define SCNi32         __SCN32(i)
+#define SCNo32         __SCN32(o)
+#define SCNu32         __SCN32(u)
+#define SCNx32         __SCN32(x)
+
+
+#define PRIdLEAST32    __PRI32(d)
+#define PRIiLEAST32    __PRI32(i)
+#define PRIoLEAST32    __PRI32(o)
+#define PRIuLEAST32    __PRI32(u)
+#define PRIxLEAST32    __PRI32(x)
+#define PRIXLEAST32    __PRI32(X)
+
+#define SCNdLEAST32    __SCN32(d)
+#define SCNiLEAST32    __SCN32(i)
+#define SCNoLEAST32    __SCN32(o)
+#define SCNuLEAST32    __SCN32(u)
+#define SCNxLEAST32    __SCN32(x)
+
+
+#define PRIdFAST32     __PRI32(d)
+#define PRIiFAST32     __PRI32(i)
+#define PRIoFAST32     __PRI32(o)
+#define PRIuFAST32     __PRI32(u)
+#define PRIxFAST32     __PRI32(x)
+#define PRIXFAST32     __PRI32(X)
+
+#define SCNdFAST32     __SCN32(d)
+#define SCNiFAST32     __SCN32(i)
+#define SCNoFAST32     __SCN32(o)
+#define SCNuFAST32     __SCN32(u)
+#define SCNxFAST32     __SCN32(x)
+
+
+/* 64-bit types */
+#if __have_longlong64
+#define __PRI64(x) __STRINGIFY(ll##x)
+#define __SCN64(x) __STRINGIFY(ll##x)
+#elif __have_long64
+#define __PRI64(x) __STRINGIFY(l##x)
+#define __SCN64(x) __STRINGIFY(l##x)
+#else
+#define __PRI64(x) __STRINGIFY(x)
+#define __SCN64(x) __STRINGIFY(x)
+#endif
+
+#define PRId64         __PRI64(d)
+#define PRIi64         __PRI64(i)
+#define PRIo64         __PRI64(o)
+#define PRIu64         __PRI64(u)
+#define PRIx64         __PRI64(x)
+#define PRIX64         __PRI64(X)
+
+#define SCNd64         __SCN64(d)
+#define SCNi64         __SCN64(i)
+#define SCNo64         __SCN64(o)
+#define SCNu64         __SCN64(u)
+#define SCNx64         __SCN64(x)
+
+#if __int64_t_defined
+#define PRIdLEAST64    __PRI64(d)
+#define PRIiLEAST64    __PRI64(i)
+#define PRIoLEAST64    __PRI64(o)
+#define PRIuLEAST64    __PRI64(u)
+#define PRIxLEAST64    __PRI64(x)
+#define PRIXLEAST64    __PRI64(X)
+
+#define SCNdLEAST64    __SCN64(d)
+#define SCNiLEAST64    __SCN64(i)
+#define SCNoLEAST64    __SCN64(o)
+#define SCNuLEAST64    __SCN64(u)
+#define SCNxLEAST64    __SCN64(x)
+
+
+#define PRIdFAST64     __PRI64(d)
+#define PRIiFAST64     __PRI64(i)
+#define PRIoFAST64     __PRI64(o)
+#define PRIuFAST64     __PRI64(u)
+#define PRIxFAST64     __PRI64(x)
+#define PRIXFAST64     __PRI64(X)
+
+#define SCNdFAST64     __SCN64(d)
+#define SCNiFAST64     __SCN64(i)
+#define SCNoFAST64     __SCN64(o)
+#define SCNuFAST64     __SCN64(u)
+#define SCNxFAST64     __SCN64(x)
+#endif
+
+/* max-bit types */
+#if __have_longlong64
+#define __PRIMAX(x) __STRINGIFY(ll##x)
+#define __SCNMAX(x) __STRINGIFY(ll##x)
+#elif __have_long64
+#define __PRIMAX(x) __STRINGIFY(l##x)
+#define __SCNMAX(x) __STRINGIFY(l##x)
+#else
+#define __PRIMAX(x) __STRINGIFY(x)
+#define __SCNMAX(x) __STRINGIFY(x)
+#endif
+
+#define PRIdMAX                __PRIMAX(d)
+#define PRIiMAX                __PRIMAX(i)
+#define PRIoMAX                __PRIMAX(o)
+#define PRIuMAX                __PRIMAX(u)
+#define PRIxMAX                __PRIMAX(x)
+#define PRIXMAX                __PRIMAX(X)
+
+#define SCNdMAX                __SCNMAX(d)
+#define SCNiMAX                __SCNMAX(i)
+#define SCNoMAX                __SCNMAX(o)
+#define SCNuMAX                __SCNMAX(u)
+#define SCNxMAX                __SCNMAX(x)
+
+/* ptr types */
+#if __have_longlong64
+#define __PRIPTR(x) __STRINGIFY(ll##x)
+#define __SCNPTR(x) __STRINGIFY(ll##x)
+#elif __have_long64
+#define __PRIPTR(x) __STRINGIFY(l##x)
+#define __SCNPTR(x) __STRINGIFY(l##x)
+#else
+#define __PRIPTR(x) __STRINGIFY(x)
+#define __SCNPTR(x) __STRINGIFY(x)
+#endif
+
+#define PRIdPTR                __PRIPTR(d)
+#define PRIiPTR                __PRIPTR(i)
+#define PRIoPTR                __PRIPTR(o)
+#define PRIuPTR                __PRIPTR(u)
+#define PRIxPTR                __PRIPTR(x)
+#define PRIXPTR                __PRIPTR(X)
+
+#define SCNdPTR                __SCNPTR(d)
+#define SCNiPTR                __SCNPTR(i)
+#define SCNoPTR                __SCNPTR(o)
+#define SCNuPTR                __SCNPTR(u)
+#define SCNxPTR                __SCNPTR(x)
+
+
+typedef struct {
+  intmax_t     quot;
+  intmax_t     rem;
+} imaxdiv_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern intmax_t  imaxabs(intmax_t j);
+extern imaxdiv_t imaxdiv(intmax_t numer, intmax_t denomer);
+extern intmax_t  strtoimax(const char *__restrict, char **__restrict, int);
+extern uintmax_t strtoumax(const char *__restrict, char **__restrict, int);
+extern intmax_t  wcstoimax(const wchar_t *__restrict, wchar_t **__restrict, int);
+extern uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/include/langinfo.h b/newlib/include/langinfo.h
new file mode 100644 (file)
index 0000000..33ae8d0
--- /dev/null
@@ -0,0 +1,140 @@
+/*-
+ * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/include/langinfo.h,v 1.5 2002/03/23 17:24:53 imp Exp $
+ */
+
+#ifndef _LANGINFO_H_
+#define        _LANGINFO_H_
+
+#include <sys/cdefs.h>
+
+typedef int nl_item;
+
+/* Extract the category and item index from a constructed `nl_item' value.  */
+#define _NL_ITEM_CATEGORY(item)                ((int) (item) >> 16)
+#define _NL_ITEM_INDEX(item)           ((int) (item) & 0xffff)
+
+#define        CODESET         0       /* codeset name */
+#define        D_T_FMT         1       /* string for formatting date and time */
+#define        D_FMT           2       /* date format string */
+#define        T_FMT           3       /* time format string */
+#define        T_FMT_AMPM      4       /* a.m. or p.m. time formatting string */
+#define        AM_STR          5       /* Ante Meridian affix */
+#define        PM_STR          6       /* Post Meridian affix */
+
+/* week day names */
+#define        DAY_1           7
+#define        DAY_2           8
+#define        DAY_3           9
+#define        DAY_4           10
+#define        DAY_5           11
+#define        DAY_6           12
+#define        DAY_7           13
+
+/* abbreviated week day names */
+#define        ABDAY_1         14
+#define        ABDAY_2         15
+#define        ABDAY_3         16
+#define        ABDAY_4         17
+#define        ABDAY_5         18
+#define        ABDAY_6         19
+#define        ABDAY_7         20
+
+/* month names */
+#define        MON_1           21
+#define        MON_2           22
+#define        MON_3           23
+#define        MON_4           24
+#define        MON_5           25
+#define        MON_6           26
+#define        MON_7           27
+#define        MON_8           28
+#define        MON_9           29
+#define        MON_10          30
+#define        MON_11          31
+#define        MON_12          32
+
+/* abbreviated month names */
+#define        ABMON_1         33
+#define        ABMON_2         34
+#define        ABMON_3         35
+#define        ABMON_4         36
+#define        ABMON_5         37
+#define        ABMON_6         38
+#define        ABMON_7         39
+#define        ABMON_8         40
+#define        ABMON_9         41
+#define        ABMON_10        42
+#define        ABMON_11        43
+#define        ABMON_12        44
+
+#define        ERA             45      /* era description segments */
+#define        ERA_D_FMT       46      /* era date format string */
+#define        ERA_D_T_FMT     47      /* era date and time format string */
+#define        ERA_T_FMT       48      /* era time format string */
+#define        ALT_DIGITS      49      /* alternative symbols for digits */
+
+#define        RADIXCHAR       50      /* radix char */
+#define        THOUSEP         51      /* separator for thousands */
+
+#define        YESEXPR         52      /* affirmative response expression */
+#define        NOEXPR          53      /* negative response expression */
+#define        YESSTR          54      /* affirmative response for yes/no queries */
+#define        NOSTR           55      /* negative response for yes/no queries */
+
+#define        CRNCYSTR        56      /* currency symbol */
+
+#define        D_MD_ORDER      57      /* month/day order (local extension) */
+
+#define _NL_CTYPE_TRANSLIT_TAB_SIZE 58
+#define _NL_CTYPE_TRANSLIT_FROM_IDX 59
+#define _NL_CTYPE_TRANSLIT_FROM_TBL 60
+#define _NL_CTYPE_TRANSLIT_TO_IDX 61
+#define _NL_CTYPE_TRANSLIT_TO_TBL 62
+#define _NL_CTYPE_TRANSLIT_DEFAULT_MISSING_LEN 63
+#define _NL_CTYPE_TRANSLIT_DEFAULT_MISSING 64
+#define _NL_CTYPE_TRANSLIT_IGNORE_LEN 65
+#define _NL_CTYPE_TRANSLIT_IGNORE 66
+#define _NL_CTYPE_EXTRA_MAP_1 70
+#define _NL_CTYPE_EXTRA_MAP_2 71
+#define _NL_CTYPE_EXTRA_MAP_3 72
+#define _NL_CTYPE_EXTRA_MAP_4 73
+#define _NL_CTYPE_EXTRA_MAP_5 74
+#define _NL_CTYPE_EXTRA_MAP_6 75
+#define _NL_CTYPE_EXTRA_MAP_7 76
+#define _NL_CTYPE_EXTRA_MAP_8 77
+#define _NL_CTYPE_EXTRA_MAP_9 78
+#define _NL_CTYPE_EXTRA_MAP_10 79
+#define _NL_CTYPE_EXTRA_MAP_11 80
+#define _NL_CTYPE_EXTRA_MAP_12 81
+#define _NL_CTYPE_EXTRA_MAP_13 82
+#define _NL_CTYPE_EXTRA_MAP_14 83
+
+__BEGIN_DECLS
+char   *nl_langinfo(nl_item);
+__END_DECLS
+
+#endif /* !_LANGINFO_H_ */
diff --git a/newlib/include/libgen.h b/newlib/include/libgen.h
new file mode 100644 (file)
index 0000000..abfab0e
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * libgen.h - defined by XPG4
+ */
+
+#ifndef _LIBGEN_H_
+#define _LIBGEN_H_
+
+#include "_ansi.h"
+#include <sys/reent.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char      *_EXFUN(basename,     (char *));
+char      *_EXFUN(dirname,     (char *));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBGEN_H_ */
+
diff --git a/newlib/include/limits.h b/newlib/include/limits.h
new file mode 100644 (file)
index 0000000..19868a6
--- /dev/null
@@ -0,0 +1,146 @@
+#ifndef _LIBC_LIMITS_H_
+# define _LIBC_LIMITS_H_       1
+
+#include <newlib.h>
+
+# ifdef _MB_LEN_MAX
+#  define MB_LEN_MAX   _MB_LEN_MAX
+# else
+#  define MB_LEN_MAX    1
+# endif
+
+/* Maximum number of positional arguments, if _WANT_IO_POS_ARGS.  */
+# ifndef NL_ARGMAX
+#  define NL_ARGMAX 32
+# endif
+
+/* if do not have #include_next support, then we
+   have to define the limits here. */
+# if !defined __GNUC__ || __GNUC__ < 2
+
+#  ifndef _LIMITS_H
+#   define _LIMITS_H   1
+
+#   include <sys/config.h>
+
+/* Number of bits in a `char'.  */
+#   undef CHAR_BIT
+#   define CHAR_BIT 8
+
+/* Minimum and maximum values a `signed char' can hold.  */
+#   undef SCHAR_MIN
+#   define SCHAR_MIN (-128)
+#   undef SCHAR_MAX
+#   define SCHAR_MAX 127
+
+/* Maximum value an `unsigned char' can hold.  (Minimum is 0).  */
+#   undef UCHAR_MAX
+#   define UCHAR_MAX 255
+
+/* Minimum and maximum values a `char' can hold.  */
+#   ifdef __CHAR_UNSIGNED__
+#    undef CHAR_MIN
+#    define CHAR_MIN 0
+#    undef CHAR_MAX
+#    define CHAR_MAX 255
+#   else
+#    undef CHAR_MIN
+#    define CHAR_MIN (-128)
+#    undef CHAR_MAX
+#    define CHAR_MAX 127
+#   endif
+
+/* Minimum and maximum values a `signed short int' can hold.  */
+#   undef SHRT_MIN
+/* For the sake of 16 bit hosts, we may not use -32768 */
+#   define SHRT_MIN (-32767-1)
+#   undef SHRT_MAX
+#   define SHRT_MAX 32767
+
+/* Maximum value an `unsigned short int' can hold.  (Minimum is 0).  */
+#   undef USHRT_MAX
+#   define USHRT_MAX 65535
+
+/* Minimum and maximum values a `signed int' can hold.  */
+#   ifndef __INT_MAX__
+#    define __INT_MAX__ 2147483647
+#   endif
+#   undef INT_MIN
+#   define INT_MIN (-INT_MAX-1)
+#   undef INT_MAX
+#   define INT_MAX __INT_MAX__
+
+/* Maximum value an `unsigned int' can hold.  (Minimum is 0).  */
+#   undef UINT_MAX
+#   define UINT_MAX (INT_MAX * 2U + 1)
+
+/* Minimum and maximum values a `signed long int' can hold.
+   (Same as `int').  */
+#   ifndef __LONG_MAX__
+#    if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) || defined (__sparcv9)
+#     define __LONG_MAX__ 9223372036854775807L
+#    else
+#     define __LONG_MAX__ 2147483647L
+#    endif /* __alpha__ || sparc64 */
+#   endif
+#   undef LONG_MIN
+#   define LONG_MIN (-LONG_MAX-1)
+#   undef LONG_MAX
+#   define LONG_MAX __LONG_MAX__
+
+/* Maximum value an `unsigned long int' can hold.  (Minimum is 0).  */
+#   undef ULONG_MAX
+#   define ULONG_MAX (LONG_MAX * 2UL + 1)
+
+#   ifndef __LONG_LONG_MAX__
+#    define __LONG_LONG_MAX__ 9223372036854775807LL
+#   endif
+
+#   if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/* Minimum and maximum values a `signed long long int' can hold.  */
+#    undef LLONG_MIN
+#    define LLONG_MIN (-LLONG_MAX-1)
+#    undef LLONG_MAX
+#    define LLONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+#    undef ULLONG_MAX
+#    define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
+#   endif
+
+#  if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
+/* Minimum and maximum values a `signed long long int' can hold.  */
+#    undef LONG_LONG_MIN
+#    define LONG_LONG_MIN (-LONG_LONG_MAX-1)
+#    undef LONG_LONG_MAX
+#    define LONG_LONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+#    undef ULONG_LONG_MAX
+#    define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
+#   endif
+
+#  endif /* _LIMITS_H  */
+# endif         /* GCC 2.  */
+
+#endif  /* !_LIBC_LIMITS_H_ */
+
+#if defined __GNUC__ && !defined _GCC_LIMITS_H_
+/* `_GCC_LIMITS_H_' is what GCC's file defines.  */
+# include_next <limits.h>
+#endif /* __GNUC__ && !_GCC_LIMITS_H_ */
+
+#ifndef _POSIX2_RE_DUP_MAX
+/* The maximum number of repeated occurrences of a regular expression
+ *    permitted when using the interval notation `\{M,N\}'.  */
+#define _POSIX2_RE_DUP_MAX              255
+#endif /* _POSIX2_RE_DUP_MAX  */
+
+#ifndef ARG_MAX
+#define ARG_MAX                4096
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX       4096
+#endif
+
diff --git a/newlib/include/locale.h b/newlib/include/locale.h
new file mode 100644 (file)
index 0000000..ebe1422
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+       locale.h
+       Values appropriate for the formatting of monetary and other
+       numberic quantities.
+*/
+
+#ifndef _LOCALE_H_
+#define _LOCALE_H_
+
+#include "_ansi.h"
+
+#ifndef NULL
+#define NULL    0
+#endif
+
+#define LC_ALL     0
+#define LC_COLLATE  1
+#define LC_CTYPE    2
+#define LC_MONETARY 3
+#define LC_NUMERIC  4
+#define LC_TIME     5
+#define LC_MESSAGES 6
+
+_BEGIN_STD_C
+
+struct lconv
+{
+  char *decimal_point;
+  char *thousands_sep;
+  char *grouping;
+  char *int_curr_symbol;
+  char *currency_symbol;
+  char *mon_decimal_point;
+  char *mon_thousands_sep;
+  char *mon_grouping;
+  char *positive_sign;
+  char *negative_sign;
+  char int_frac_digits;
+  char frac_digits;
+  char p_cs_precedes;
+  char p_sep_by_space;
+  char n_cs_precedes;
+  char n_sep_by_space;
+  char p_sign_posn;
+  char n_sign_posn;
+};
+
+#ifndef _REENT_ONLY
+char *_EXFUN(setlocale,(int category, const char *locale));
+struct lconv *_EXFUN(localeconv,(void));
+#endif
+
+struct _reent;
+char *_EXFUN(_setlocale_r,(struct _reent *, int category, const char *locale));
+struct lconv *_EXFUN(_localeconv_r,(struct _reent *));
+
+_END_STD_C
+
+#endif /* _LOCALE_H_ */
diff --git a/newlib/include/machine/_default_types.h b/newlib/include/machine/_default_types.h
new file mode 100644 (file)
index 0000000..9a5fc8d
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ *  $Id: _default_types.h,v 1.2 2008/06/11 22:14:54 jjohnstn Exp $
+ */
+
+#ifndef _MACHINE__DEFAULT_TYPES_H
+#define _MACHINE__DEFAULT_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Guess on types by examining *_MIN / *_MAX defines.
+ */
+#if defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ >= 3 ) \
+  && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2 ))
+/* GCC >= 3.3.0 has __<val>__ implicitly defined. */
+#define __EXP(x) __##x##__
+#else
+/* Fall back to POSIX versions from <limits.h> */
+#define __EXP(x) x
+#include <limits.h>
+#endif
+
+#if __EXP(SCHAR_MAX) == 0x7f
+typedef signed char __int8_t ;
+typedef unsigned char __uint8_t ;
+#define ___int8_t_defined 1
+#endif
+
+#if __EXP(INT_MAX) == 0x7fff
+typedef signed int __int16_t;
+typedef unsigned int __uint16_t;
+#define ___int16_t_defined 1
+#elif __EXP(SHRT_MAX) == 0x7fff
+typedef signed short __int16_t;
+typedef unsigned short __uint16_t;
+#define ___int16_t_defined 1
+#elif __EXP(SCHAR_MAX) == 0x7fff
+typedef signed char __int16_t;
+typedef unsigned char __uint16_t;
+#define ___int16_t_defined 1
+#endif
+
+#if ___int16_t_defined
+typedef __int16_t __int_least16_t;
+typedef __uint16_t __uint_least16_t;
+#define ___int_least16_t_defined 1
+
+#if !___int8_t_defined
+typedef __int16_t __int_least8_t;
+typedef __uint16_t __uint_least8_t;
+#define ___int_least8_t_defined 1
+#endif
+#endif
+
+#if __EXP(INT_MAX) == 0x7fffffffL
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+#define ___int32_t_defined 1
+#elif __EXP(LONG_MAX) == 0x7fffffffL
+typedef signed long __int32_t;
+typedef unsigned long __uint32_t;
+#define ___int32_t_defined 1
+#elif __EXP(SHRT_MAX) == 0x7fffffffL
+typedef signed short __int32_t;
+typedef unsigned short __uint32_t;
+#define ___int32_t_defined 1
+#elif __EXP(SCHAR_MAX) == 0x7fffffffL
+typedef signed char __int32_t;
+typedef unsigned char __uint32_t;
+#define ___int32_t_defined 1
+#endif
+
+#if ___int32_t_defined
+typedef __int32_t __int_least32_t;
+typedef __uint32_t __uint_least32_t;
+#define ___int_least32_t_defined 1
+
+#if !___int8_t_defined
+typedef __int32_t __int_least8_t;
+typedef __uint32_t __uint_least8_t;
+#define ___int_least8_t_defined 1
+#endif
+#if !___int16_t_defined
+typedef __int32_t __int_least16_t;
+typedef __uint32_t __uint_least16_t;
+#define ___int_least16_t_defined 1
+#endif
+#endif
+
+#if __EXP(LONG_MAX) > 0x7fffffff
+typedef signed long __int64_t;
+typedef unsigned long __uint64_t;
+#define ___int64_t_defined 1
+
+/* GCC has __LONG_LONG_MAX__ */
+#elif  defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff)
+typedef signed long long __int64_t;
+typedef unsigned long long __uint64_t;
+#define ___int64_t_defined 1
+
+/* POSIX mandates LLONG_MAX in <limits.h> */
+#elif  defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
+typedef signed long long __int64_t;
+typedef unsigned long long __uint64_t;
+#define ___int64_t_defined 1
+
+#elif  __EXP(INT_MAX) > 0x7fffffff
+typedef signed int __int64_t;
+typedef unsigned int __uint64_t;
+#define ___int64_t_defined 1
+#endif
+
+#undef __EXP
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MACHINE__DEFAULT_TYPES_H */
diff --git a/newlib/include/machine/_types.h b/newlib/include/machine/_types.h
new file mode 100644 (file)
index 0000000..18f96d5
--- /dev/null
@@ -0,0 +1,8 @@
+/*
+ *  $Id: _types.h,v 1.3 2007/09/07 21:16:25 jjohnstn Exp $
+ */
+
+#ifndef _MACHINE__TYPES_H
+#define _MACHINE__TYPES_H
+#include <machine/_default_types.h>
+#endif
diff --git a/newlib/include/machine/ansi.h b/newlib/include/machine/ansi.h
new file mode 100644 (file)
index 0000000..737b6d0
--- /dev/null
@@ -0,0 +1 @@
+/* dummy header file to support BSD compiler */
diff --git a/newlib/include/machine/endian.h b/newlib/include/machine/endian.h
new file mode 100644 (file)
index 0000000..c1e8599
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef __MACHINE_ENDIAN_H__
+
+#include <sys/config.h>
+
+#ifndef BIG_ENDIAN
+#define BIG_ENDIAN 4321
+#endif
+#ifndef LITTLE_ENDIAN
+#define LITTLE_ENDIAN 1234
+#endif
+
+#ifndef BYTE_ORDER
+#ifdef __IEEE_LITTLE_ENDIAN
+#define BYTE_ORDER LITTLE_ENDIAN
+#else
+#define BYTE_ORDER BIG_ENDIAN
+#endif
+#endif
+
+#endif /* __MACHINE_ENDIAN_H__ */
diff --git a/newlib/include/machine/fastmath.h b/newlib/include/machine/fastmath.h
new file mode 100644 (file)
index 0000000..accfa87
--- /dev/null
@@ -0,0 +1,122 @@
+#ifndef _MACHFASTMATH_H
+#define _MACHFASTMATH_H
+
+#if defined(__GNUC__) && __STDC__ - 0 > 0
+
+#define __str1__(__x) #__x
+#define __str2__(__x) __str1__(__x)
+#define __U_L_PREFIX__ __str2__(__USER_LABEL_PREFIX__)
+
+__extension__ double atan2(double, double)
+  __asm__(__U_L_PREFIX__ "_f_atan2");
+__extension__ double exp(double)
+  __asm__(__U_L_PREFIX__ "_f_exp");
+__extension__ double frexp(double, int*)
+  __asm__(__U_L_PREFIX__ "_f_frexp");
+__extension__ double ldexp(double, int)
+  __asm__(__U_L_PREFIX__ "_f_ldexp");
+__extension__ double log(double)
+  __asm__(__U_L_PREFIX__ "_f_log");
+__extension__ double log10(double)
+  __asm__(__U_L_PREFIX__ "_f_log10");
+__extension__ double pow(double, double)
+  __asm__(__U_L_PREFIX__ "_f_pow");
+__extension__ double tan(double)
+  __asm__(__U_L_PREFIX__ "_f_tan");
+
+#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L
+
+
+__extension__ float atan2f(float, float)
+  __asm__(__U_L_PREFIX__ "_f_atan2f");
+__extension__ float expf(float)
+  __asm__(__U_L_PREFIX__ "_f_expf");
+__extension__ float frexpf(float, int*)
+  __asm__(__U_L_PREFIX__ "_f_frexpf");
+__extension__ float ldexpf(float, int)
+  __asm__(__U_L_PREFIX__ "_f_ldexpf");
+__extension__ long long llrint(double)
+  __asm__(__U_L_PREFIX__ "_f_llrint");
+__extension__ long long llrintf(float)
+  __asm__(__U_L_PREFIX__ "_f_llrintf");
+__extension__ long long llrintl(long double)
+  __asm__(__U_L_PREFIX__ "_f_llrintl");
+__extension__ float logf(float)
+  __asm__(__U_L_PREFIX__ "_f_logf");
+__extension__ float log10f(float)
+  __asm__(__U_L_PREFIX__ "_f_log10f");
+__extension__ long lrint(double)
+  __asm__(__U_L_PREFIX__ "_f_lrint");
+__extension__ long lrintf(float)
+  __asm__(__U_L_PREFIX__ "_f_lrintf");
+__extension__ long lrintl(long double)
+  __asm__(__U_L_PREFIX__ "_f_lrintl");
+__extension__ float powf(float, float)
+  __asm__(__U_L_PREFIX__ "_f_powf");
+__extension__ double rint(double)
+  __asm__(__U_L_PREFIX__ "_f_rint");
+__extension__ float rintf(float)
+  __asm__(__U_L_PREFIX__ "_f_rintf");
+__extension__ long double rintl(long double)
+  __asm__(__U_L_PREFIX__ "_f_rintl");
+__extension__ float tanf(float)
+  __asm__(__U_L_PREFIX__ "_f_tanf");
+#endif
+
+#else
+
+double EXFUN(_f_atan2,(double, double));
+double EXFUN(_f_exp,(double));
+double EXFUN(_f_frexp,(double, int*));
+double EXFUN(_f_ldexp,(double, int));
+double EXFUN(_f_log,(double));
+double EXFUN(_f_log10,(double));
+double EXFUN(_f_pow,(double, double));
+
+#define atan2(__y,__x) _f_atan2((__y),(__x))
+#define exp(__x)       _f_exp(__x)
+#define frexp(__x,__p) _f_frexp((__x),(__p))
+#define ldexp(__x,__e) _f_ldexp((__x),(__e))
+#define log(__x)       _f_log(__x)
+#define log10(__x)     _f_log10(__x)
+#define pow(__x,__y)   _f_pow((__x),(__y))
+
+#ifndef __STRICT_ANSI__
+
+float EXFUN(_f_atan2f,(float, float));
+float EXFUN(_f_expf,(float));
+float EXFUN(_f_frexpf,(float, int*));
+float EXFUN(_f_ldexpf,(float, int));
+long long EXFUN(_f_llrint,(double));
+long long EXFUN(_f_llrintf,(float));
+long long EXFUN(_f_llrintl,(long double));
+float EXFUN(_f_logf,(float));
+float EXFUN(_f_log10f,(float));
+long EXFUN(_f_lrint,(double));
+long EXFUN(_f_lrintf,(float));
+long EXFUN(_f_lrintl,(long double));
+float EXFUN(_f_powf,(float, float));
+float EXFUN(_f_rint,(double));
+double EXFUN(_f_rintf,(float));
+long double EXFUN(_f_rintl,(long double));
+
+#define atan2f(__y,__x)        _f_atan2f((__y),(__x))
+#define expf(__x)      _f_expf(__x)
+#define frexpf(__x,__p)        _f_frexpf((__x),(__p))
+#define ldexpf(__x,__e)        _f_ldexpf((__x),(__e))
+#define llrint(__x)    _f_llrint((__x))
+#define llrintf(__x)   _f_llrintf((__x))
+#define llrintl(__x)   _f_llrintl((__x))
+#define logf(__x)      _f_logf(__x)
+#define log10f(__x)    _f_log10f(__x)
+#define lrint(__x)     _f_lrint((__x))
+#define lrintf(__x)    _f_lrintf((__x))
+#define lrintl(__x)    _f_lrintl((__x))
+#define powf(__x,y)    _f_powf((__x),(__y))
+#define rint(__x)      _f_rint((__x))
+#define rintf(__x)     _f_rintf((__x))
+#define rintl(__x)     _f_rintl((__x))
+#endif
+
+#endif /* GCC */
+#endif /* _MACHFASTMATH_H */
diff --git a/newlib/include/machine/ieeefp.h b/newlib/include/machine/ieeefp.h
new file mode 100644 (file)
index 0000000..b3c7937
--- /dev/null
@@ -0,0 +1,333 @@
+#ifndef __IEEE_BIG_ENDIAN
+#ifndef __IEEE_LITTLE_ENDIAN
+
+/* This file can define macros to choose variations of the IEEE float
+   format:
+
+   _FLT_LARGEST_EXPONENT_IS_NORMAL
+
+       Defined if the float format uses the largest exponent for finite
+       numbers rather than NaN and infinity representations.  Such a
+       format cannot represent NaNs or infinities at all, but it's FLT_MAX
+       is twice the IEEE value.
+
+   _FLT_NO_DENORMALS
+
+       Defined if the float format does not support IEEE denormals.  Every
+       float with a zero exponent is taken to be a zero representation.
+   ??? At the moment, there are no equivalent macros above for doubles and
+   the macros are not fully supported by --enable-newlib-hw-fp.
+
+   __IEEE_BIG_ENDIAN
+
+        Defined if the float format is big endian.  This is mutually exclusive
+        with __IEEE_LITTLE_ENDIAN.
+
+   __IEEE_LITTLE_ENDIAN
+        Defined if the float format is little endian.  This is mutually exclusive
+        with __IEEE_BIG_ENDIAN.
+
+   Note that one of __IEEE_BIG_ENDIAN or __IEEE_LITTLE_ENDIAN must be specified for a
+   platform or error will occur.
+
+   __IEEE_BYTES_LITTLE_ENDIAN
+
+        This flag is used in conjunction with __IEEE_BIG_ENDIAN to describe a situation 
+       whereby multiple words of an IEEE floating point are in big endian order, but the
+       words themselves are little endian with respect to the bytes.
+
+   _DOUBLE_IS_32BITS 
+
+        This is used on platforms that support double by using the 32-bit IEEE
+        float type.
+
+   _FLOAT_ARG
+
+        This represents what type a float arg is passed as.  It is used when the type is
+        not promoted to double.
+       
+*/
+
+#if (defined(__arm__) || defined(__thumb__)) && !defined(__MAVERICK__)
+/* ARM traditionally used big-endian words; and within those words the
+   byte ordering was big or little endian depending upon the target.
+   Modern floating-point formats are naturally ordered; in this case
+   __VFP_FP__ will be defined, even if soft-float.  */
+#ifdef __VFP_FP__
+# ifdef __ARMEL__
+#  define __IEEE_LITTLE_ENDIAN
+# else
+#  define __IEEE_BIG_ENDIAN
+# endif
+#else
+# define __IEEE_BIG_ENDIAN
+# ifdef __ARMEL__
+#  define __IEEE_BYTES_LITTLE_ENDIAN
+# endif
+#endif
+#endif
+
+#ifdef __hppa__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __SPU__
+#define __IEEE_BIG_ENDIAN
+
+#define isfinite(y) \
+          (__extension__ ({__typeof__(y) __y = (y); \
+                           (sizeof (__y) == sizeof (float))  ? (1) : \
+                           fpclassify(__y) != FP_INFINITE && fpclassify(__y) != FP_NAN;}))
+#define isinf(x) \
+          (__extension__ ({__typeof__(x) __x = (x); \
+                           (sizeof (__x) == sizeof (float))  ? (0) : __isinfd(__x);}))
+#define isnan(x) \
+          (__extension__ ({__typeof__(x) __x = (x); \
+                           (sizeof (__x) == sizeof (float))  ? (0) : __isnand(__x);}))
+
+/*
+ * Macros for use in ieeefp.h. We can't just define the real ones here
+ * (like those above) as we have name space issues when this is *not*
+ * included via generic the ieeefp.h.
+ */
+#define __ieeefp_isnanf(x)     0
+#define __ieeefp_isinff(x)     0
+#define __ieeefp_finitef(x)    1
+#endif
+
+#ifdef __sparc__
+#ifdef __LITTLE_ENDIAN_DATA__
+#define __IEEE_LITTLE_ENDIAN
+#else
+#define __IEEE_BIG_ENDIAN
+#endif
+#endif
+
+#if defined(__m68k__) || defined(__mc68000__)
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
+#define __IEEE_BIG_ENDIAN
+#ifdef __HAVE_SHORT_DOUBLE__
+# define _DOUBLE_IS_32BITS
+#endif
+#endif
+
+#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__) || defined (__H8300SX__)
+#define __IEEE_BIG_ENDIAN
+#define _FLOAT_ARG float
+#define _DOUBLE_IS_32BITS
+#endif
+
+#ifdef __sh__
+#ifdef __LITTLE_ENDIAN__
+#define __IEEE_LITTLE_ENDIAN
+#else
+#define __IEEE_BIG_ENDIAN
+#endif
+#if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A_SINGLE_ONLY__)
+#define _DOUBLE_IS_32BITS
+#endif
+#endif
+
+#ifdef _AM29K
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef _WIN32
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __i386__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __i960__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __lm32__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __M32R__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#if defined(_C4x) || defined(_C3x)
+#define __IEEE_BIG_ENDIAN
+#define _DOUBLE_IS_32BITS
+#endif
+
+#ifdef __TIC80__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __MIPSEL__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+#ifdef __MIPSEB__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __MMIX__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __D30V__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+/* necv70 was __IEEE_LITTLE_ENDIAN. */
+
+#ifdef __W65__
+#define __IEEE_LITTLE_ENDIAN
+#define _DOUBLE_IS_32BITS
+#endif
+
+#if defined(__Z8001__) || defined(__Z8002__)
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __m88k__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __mn10300__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __mn10200__
+#define __IEEE_LITTLE_ENDIAN
+#define _DOUBLE_IS_32BITS
+#endif
+
+#ifdef __v800
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __v850
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __D10V__
+#define __IEEE_BIG_ENDIAN
+#if __DOUBLE__ == 32
+#define _DOUBLE_IS_32BITS
+#endif
+#endif
+
+#ifdef __PPC__
+#if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
+#define __IEEE_BIG_ENDIAN
+#else
+#if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
+#define __IEEE_LITTLE_ENDIAN
+#endif
+#endif
+#endif
+
+#ifdef __xstormy16__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __arc__
+#ifdef __big_endian__
+#define __IEEE_BIG_ENDIAN
+#else
+#define __IEEE_LITTLE_ENDIAN
+#endif
+#endif
+
+#ifdef __CRX__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __fr30__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __mcore__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __mt__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __frv__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __ia64__
+#ifdef __BIG_ENDIAN__
+#define __IEEE_BIG_ENDIAN
+#else
+#define __IEEE_LITTLE_ENDIAN
+#endif
+#endif
+
+#ifdef __AVR__
+#define __IEEE_LITTLE_ENDIAN
+#define _DOUBLE_IS_32BITS
+#endif
+
+#if defined(__or32__) || defined(__or1k__) || defined(__or16__)
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __IP2K__
+#define __IEEE_BIG_ENDIAN
+#define __SMALL_BITFIELDS
+#define _DOUBLE_IS_32BITS
+#endif
+
+#ifdef __iq2000__
+#define __IEEE_BIG_ENDIAN
+#endif
+
+#ifdef __MAVERICK__
+#ifdef __ARMEL__
+#  define __IEEE_LITTLE_ENDIAN
+#else  /* must be __ARMEB__ */
+#  define __IEEE_BIG_ENDIAN
+#endif /* __ARMEL__ */
+#endif /* __MAVERICK__ */
+
+#ifdef __m32c__
+#define __IEEE_LITTLE_ENDIAN
+#define __SMALL_BITFIELDS
+#endif
+
+#ifdef __CRIS__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __BFIN__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __x86_64__
+#define __IEEE_LITTLE_ENDIAN
+#endif
+
+#ifdef __mep__
+#ifdef __LITTLE_ENDIAN__
+#define __IEEE_LITTLE_ENDIAN
+#else
+#define __IEEE_BIG_ENDIAN
+#endif
+#endif
+
+#ifndef __IEEE_BIG_ENDIAN
+#ifndef __IEEE_LITTLE_ENDIAN
+#error Endianess not declared!!
+#endif /* not __IEEE_LITTLE_ENDIAN */
+#endif /* not __IEEE_BIG_ENDIAN */
+
+#endif /* not __IEEE_LITTLE_ENDIAN */
+#endif /* not __IEEE_BIG_ENDIAN */
+
diff --git a/newlib/include/machine/malloc.h b/newlib/include/machine/malloc.h
new file mode 100644 (file)
index 0000000..fdada9e
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef        _MACHMALLOC_H_
+#define        _MACHMALLOC_H_
+
+/* place holder so platforms may add malloc.h extensions */
+
+#endif /* _MACHMALLOC_H_ */
+
+
diff --git a/newlib/include/machine/param.h b/newlib/include/machine/param.h
new file mode 100644 (file)
index 0000000..bdf8bf7
--- /dev/null
@@ -0,0 +1 @@
+/* Place holder for machine-specific param.h.  */
diff --git a/newlib/include/machine/setjmp-dj.h b/newlib/include/machine/setjmp-dj.h
new file mode 100644 (file)
index 0000000..9eb6bcf
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 1991 DJ Delorie
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms is permitted
+ * provided that the above copyright notice and following paragraph are
+ * duplicated in all such forms.
+ *
+ * This file is distributed WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* Modified to use SETJMP_DJ_H rather than SETJMP_H to avoid
+   conflicting with setjmp.h.  Ian Taylor, Cygnus support, April,
+   1993.  */
+
+#ifndef _SETJMP_DJ_H_
+#define _SETJMP_DJ_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+  unsigned long eax;
+  unsigned long ebx;
+  unsigned long ecx;
+  unsigned long edx;
+  unsigned long esi;
+  unsigned long edi;
+  unsigned long ebp;
+  unsigned long esp;
+  unsigned long eip;
+} jmp_buf[1];
+
+extern int setjmp(jmp_buf);
+extern void longjmp(jmp_buf, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/include/machine/setjmp.h b/newlib/include/machine/setjmp.h
new file mode 100644 (file)
index 0000000..0350535
--- /dev/null
@@ -0,0 +1,328 @@
+
+_BEGIN_STD_C
+
+#if defined(__arm__) || defined(__thumb__)
+/*
+ * All callee preserved registers:
+ * v1 - v7, fp, ip, sp, lr, f4, f5, f6, f7
+ */
+#define _JBLEN 23
+#endif
+
+#if defined(__AVR__)
+#define _JBLEN 24
+#endif
+
+#ifdef __sparc__
+/*
+ * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
+ * All else recovered by under/over(flow) handling.
+ */
+#define        _JBLEN  13
+#endif
+
+#ifdef __BFIN__
+#define _JBLEN  40
+#endif
+
+/* necv70 was 9 as well. */
+
+#ifdef __mc68000__
+/*
+ * onsstack,sigmask,sp,pc,psl,d2-d7,a2-a6,
+ * fp2-fp7     for 68881.
+ * All else recovered by under/over(flow) handling.
+ */
+#define        _JBLEN  34
+#endif
+
+#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
+/*
+ * D, X, Y are not saved.
+ * Only take into account the pseudo soft registers (max 32).
+ */
+#define _JBLEN  32
+#endif
+
+#if defined(__Z8001__) || defined(__Z8002__)
+/* 16 regs + pc */
+#define _JBLEN 20
+#endif
+
+#ifdef _AM29K
+/*
+ * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
+ * All else recovered by under/over(flow) handling.
+ */
+#define        _JBLEN  9
+#endif
+
+#if defined(__CYGWIN__) && !defined (_JBLEN)
+#define _JBLEN (13 * 4)
+#elif defined (__i386__)
+#if defined(__unix__) || defined(__rtems__)
+# define _JBLEN        9
+#else
+#include "setjmp-dj.h"
+#endif
+#endif
+
+#ifdef __x86_64__
+#define _JBTYPE long long
+#define _JBLEN  8
+#endif
+
+#ifdef __i960__
+#define _JBLEN 35
+#endif
+
+#ifdef __M32R__
+/* Only 8 words are currently needed.  10 gives us some slop if we need
+   to expand.  */
+#define _JBLEN 10
+#endif
+
+#ifdef __mips__
+#ifdef __mips64
+#define _JBTYPE long long
+#endif
+#ifdef __mips_soft_float
+#define _JBLEN 11
+#else
+#define _JBLEN 23
+#endif
+#endif
+
+#ifdef __m88000__
+#define _JBLEN 21
+#endif
+
+#ifdef __H8300__
+#define _JBLEN 5
+#define _JBTYPE int
+#endif
+
+#ifdef __H8300H__
+/* same as H8/300 but registers are twice as big */
+#define _JBLEN 5
+#define _JBTYPE long
+#endif
+
+#if defined (__H8300S__) || defined (__H8300SX__)
+/* same as H8/300 but registers are twice as big */
+#define _JBLEN 5
+#define _JBTYPE long
+#endif
+
+#ifdef __H8500__
+#define _JBLEN 4
+#endif
+
+#ifdef  __sh__
+#if __SH5__
+#define _JBLEN 50
+#define _JBTYPE long long
+#else
+#define _JBLEN 20
+#endif /* __SH5__ */
+#endif
+
+#ifdef  __v800
+#define _JBLEN 28
+#endif
+
+#ifdef __PPC__
+#ifdef __ALTIVEC__
+#define _JBLEN 64
+#else
+#define _JBLEN 32
+#endif
+#define _JBTYPE double
+#endif
+
+#ifdef __hppa__
+/* %r30, %r2-%r18, %r27, pad, %fr12-%fr15.
+   Note space exists for the FP registers, but they are not
+   saved.  */
+#define _JBLEN 28
+#endif
+
+#if defined(__mn10300__) || defined(__mn10200__)
+#ifdef __AM33_2__
+#define _JBLEN 26
+#else
+/* A guess */
+#define _JBLEN 10
+#endif
+#endif
+
+#ifdef __v850
+/* I think our setjmp is saving 15 regs at the moment.  Gives us one word
+   slop if we need to expand.  */
+#define _JBLEN 16
+#endif
+
+#if defined(_C4x)
+#define _JBLEN 10
+#endif
+#if defined(_C3x)
+#define _JBLEN 9
+#endif
+
+#ifdef __TIC80__
+#define _JBLEN 13
+#endif
+
+#ifdef __D10V__
+#define _JBLEN 8
+#endif
+
+#ifdef __D30V__
+#define _JBLEN ((64 /* GPR */ + (2*2) /* ACs */ + 18 /* CRs */) / 2)
+#define _JBTYPE double
+#endif
+
+#ifdef __frv__
+#define _JBLEN (68/2)  /* room for 68 32-bit regs */
+#define _JBTYPE double
+#endif
+
+#ifdef __CRX__
+#define _JBLEN 9
+#endif
+
+#ifdef __fr30__
+#define _JBLEN 10
+#endif
+
+#ifdef __iq2000__
+#define _JBLEN 32
+#endif
+
+#ifdef __mcore__
+#define _JBLEN 16
+#endif
+
+#ifdef __MMIX__
+/* Using a layout compatible with GCC's built-in.  */
+#define _JBLEN 5
+#define _JBTYPE unsigned long
+#endif
+
+#ifdef __mt__
+#define _JBLEN 16
+#endif
+
+#ifdef __SPU__
+#define _JBLEN 50 
+#define _JBTYPE __vector signed int
+#endif
+
+#ifdef __xstormy16__
+/* 4 GPRs plus SP plus PC. */
+#define _JBLEN 8
+#endif
+
+#ifdef __mep__
+/* 16 GPRs, pc, hi, lo */
+#define _JBLEN 19
+#endif
+
+#ifdef __CRIS__
+#define _JBLEN 18
+#endif
+
+#ifdef __lm32__
+#define _JBLEN 19
+#endif
+
+#ifdef __m32c__
+#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
+#define _JBLEN (22/2)
+#else
+#define _JBLEN (34/2)
+#endif
+#define _JBTYPE unsigned short
+#endif /* __m32c__ */
+
+#ifdef _JBLEN
+#ifdef _JBTYPE
+typedef        _JBTYPE jmp_buf[_JBLEN];
+#else
+typedef        int jmp_buf[_JBLEN];
+#endif
+#endif
+
+_END_STD_C
+
+#if defined(__CYGWIN__) || defined(__rtems__)
+#include <signal.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* POSIX sigsetjmp/siglongjmp macros */
+typedef int sigjmp_buf[_JBLEN+2];
+
+#define _SAVEMASK      _JBLEN
+#define _SIGMASK       (_JBLEN+1)
+
+#ifdef __CYGWIN__
+# define _CYGWIN_WORKING_SIGSETJMP
+#endif
+
+#ifdef _POSIX_THREADS
+#define __SIGMASK_FUNC pthread_sigmask
+#else
+#define __SIGMASK_FUNC sigprocmask
+#endif
+
+#if defined(__GNUC__)
+
+#define sigsetjmp(env, savemask) \
+            __extension__ \
+            ({ \
+              sigjmp_buf *_sjbuf = &(env); \
+              ((*_sjbuf)[_SAVEMASK] = savemask,\
+              __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\
+              setjmp (*_sjbuf)); \
+            })
+
+#define siglongjmp(env, val) \
+            __extension__ \
+            ({ \
+              sigjmp_buf *_sjbuf = &(env); \
+              ((((*_sjbuf)[_SAVEMASK]) ? \
+               __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\
+               : 0), \
+               longjmp (*_sjbuf, val)); \
+            })
+
+#else /* !__GNUC__ */
+
+#define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\
+               __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\
+               setjmp (env))
+
+#define siglongjmp(env, val) ((((env)[_SAVEMASK])?\
+               __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\
+               longjmp (env, val))
+
+#endif
+
+/* POSIX _setjmp/_longjmp, maintained for XSI compatibility.  These
+   are equivalent to sigsetjmp/siglongjmp when not saving the signal mask.
+   New applications should use sigsetjmp/siglongjmp instead. */
+#ifdef __CYGWIN__
+extern void _longjmp(jmp_buf, int);
+extern int _setjmp(jmp_buf);
+#else
+#define _setjmp(env)           sigsetjmp ((env), 0)
+#define _longjmp(env, val)     siglongjmp ((env), (val))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CYGWIN__ or __rtems__ */
diff --git a/newlib/include/machine/stdlib.h b/newlib/include/machine/stdlib.h
new file mode 100644 (file)
index 0000000..fa3f3a1
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef        _MACHSTDLIB_H_
+#define        _MACHSTDLIB_H_
+
+/* place holder so platforms may add stdlib.h extensions */
+
+#endif /* _MACHSTDLIB_H_ */
+
+
diff --git a/newlib/include/machine/termios.h b/newlib/include/machine/termios.h
new file mode 100644 (file)
index 0000000..41fd459
--- /dev/null
@@ -0,0 +1 @@
+#define __MAX_BAUD  B4000000
diff --git a/newlib/include/machine/time.h b/newlib/include/machine/time.h
new file mode 100644 (file)
index 0000000..0caf126
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef        _MACHTIME_H_
+#define        _MACHTIME_H_
+
+#if defined(__rtems__)
+#define _CLOCKS_PER_SEC_  sysconf(_SC_CLK_TCK)
+#else  /* !__rtems__ */
+#if defined(__arm__) || defined(__thumb__)
+#define _CLOCKS_PER_SEC_ 100
+#endif
+#endif /* !__rtems__ */
+
+#endif /* _MACHTIME_H_ */
+
+
diff --git a/newlib/include/machine/types.h b/newlib/include/machine/types.h
new file mode 100644 (file)
index 0000000..40a75fa
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef        _MACHTYPES_H_
+#define        _MACHTYPES_H_
+
+/*
+ *  The following section is RTEMS specific and is needed to more
+ *  closely match the types defined in the BSD machine/types.h.
+ *  This is needed to let the RTEMS/BSD TCP/IP stack compile.
+ */
+#if defined(__rtems__)
+#include <machine/_types.h>
+#endif
+
+#define        _CLOCK_T_       unsigned long           /* clock() */
+#define        _TIME_T_        long                    /* time() */
+#define _CLOCKID_T_    unsigned long
+#define _TIMER_T_      unsigned long
+
+#ifndef _HAVE_SYSTYPES
+typedef long int __off_t;
+typedef int __pid_t;
+#ifdef __GNUC__
+__extension__ typedef long long int __loff_t;
+#else
+typedef long int __loff_t;
+#endif
+#endif
+
+#endif /* _MACHTYPES_H_ */
+
+
diff --git a/newlib/include/malloc.h b/newlib/include/malloc.h
new file mode 100644 (file)
index 0000000..c46357c
--- /dev/null
@@ -0,0 +1,169 @@
+/* malloc.h -- header file for memory routines.  */
+
+#ifndef _INCLUDE_MALLOC_H_
+#define _INCLUDE_MALLOC_H_
+
+#include <_ansi.h>
+#include <sys/reent.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* include any machine-specific extensions */
+#include <machine/malloc.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* This version of struct mallinfo must match the one in
+   libc/stdlib/mallocr.c.  */
+
+struct mallinfo {
+  int arena;    /* total space allocated from system */
+  int ordblks;  /* number of non-inuse chunks */
+  int smblks;   /* unused -- always zero */
+  int hblks;    /* number of mmapped regions */
+  int hblkhd;   /* total space in mmapped regions */
+  int usmblks;  /* unused -- always zero */
+  int fsmblks;  /* unused -- always zero */
+  int uordblks; /* total allocated space */
+  int fordblks; /* total non-inuse space */
+  int keepcost; /* top-most, releasable (via malloc_trim) space */
+};     
+
+/* The routines.  */
+
+extern _PTR malloc _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _malloc_r
+#define _malloc_r(r, s) malloc (s)
+#else
+extern _PTR _malloc_r _PARAMS ((struct _reent *, size_t));
+#endif
+
+extern _VOID free _PARAMS ((_PTR));
+#ifdef __CYGWIN__
+#undef _free_r
+#define _free_r(r, p) free (p)
+#else
+extern _VOID _free_r _PARAMS ((struct _reent *, _PTR));
+#endif
+
+extern _PTR realloc _PARAMS ((_PTR, size_t));
+#ifdef __CYGWIN__
+#undef _realloc_r
+#define _realloc_r(r, p, s) realloc (p, s)
+#else
+extern _PTR _realloc_r _PARAMS ((struct _reent *, _PTR, size_t));
+#endif
+
+extern _PTR calloc _PARAMS ((size_t, size_t));
+#ifdef __CYGWIN__
+#undef _calloc_r
+#define _calloc_r(r, s1, s2) calloc (s1, s2);
+#else
+extern _PTR _calloc_r _PARAMS ((struct _reent *, size_t, size_t));
+#endif
+
+extern _PTR memalign _PARAMS ((size_t, size_t));
+#ifdef __CYGWIN__
+#undef _memalign_r
+#define _memalign_r(r, s1, s2) memalign (s1, s2);
+#else
+extern _PTR _memalign_r _PARAMS ((struct _reent *, size_t, size_t));
+#endif
+
+extern struct mallinfo mallinfo _PARAMS ((void));
+#ifdef __CYGWIN__
+#undef _mallinfo_r
+#define _mallinfo_r(r) mallinfo ()
+#else
+extern struct mallinfo _mallinfo_r _PARAMS ((struct _reent *));
+#endif
+
+extern void malloc_stats _PARAMS ((void));
+#ifdef __CYGWIN__
+#undef _malloc_stats_r
+#define _malloc_stats_r(r) malloc_stats ()
+#else
+extern void _malloc_stats_r _PARAMS ((struct _reent *));
+#endif
+
+extern int mallopt _PARAMS ((int, int));
+#ifdef __CYGWIN__
+#undef _mallopt_r
+#define _mallopt_r(i1, i2) mallopt (i1, i2)
+#else
+extern int _mallopt_r _PARAMS ((struct _reent *, int, int));
+#endif
+
+extern size_t malloc_usable_size _PARAMS ((_PTR));
+#ifdef __CYGWIN__
+#undef _malloc_usable_size_r
+#define _malloc_usable_size_r(r, p) malloc_usable_size (p)
+#else
+extern size_t _malloc_usable_size_r _PARAMS ((struct _reent *, _PTR));
+#endif
+
+/* These aren't too useful on an embedded system, but we define them
+   anyhow.  */
+
+extern _PTR valloc _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _valloc_r
+#define _valloc_r(r, s) valloc (s)
+#else
+extern _PTR _valloc_r _PARAMS ((struct _reent *, size_t));
+#endif
+
+extern _PTR pvalloc _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _pvalloc_r
+#define _pvalloc_r(r, s) pvalloc (s)
+#else
+extern _PTR _pvalloc_r _PARAMS ((struct _reent *, size_t));
+#endif
+
+extern int malloc_trim _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _malloc_trim_r
+#define _malloc_trim_r(r, s) malloc_trim (s)
+#else
+extern int _malloc_trim_r _PARAMS ((struct _reent *, size_t));
+#endif
+
+/* A compatibility routine for an earlier version of the allocator.  */
+
+extern _VOID mstats _PARAMS ((char *));
+#ifdef __CYGWIN__
+#undef _mstats_r
+#define _mstats_r(r, p) mstats (p)
+#else
+extern _VOID _mstats_r _PARAMS ((struct _reent *, char *));
+#endif
+
+/* SVID2/XPG mallopt options */
+
+#define M_MXFAST  1    /* UNUSED in this malloc */
+#define M_NLBLKS  2    /* UNUSED in this malloc */
+#define M_GRAIN   3    /* UNUSED in this malloc */
+#define M_KEEP    4    /* UNUSED in this malloc */
+
+/* mallopt options that actually do something */
+  
+#define M_TRIM_THRESHOLD    -1
+#define M_TOP_PAD           -2
+#define M_MMAP_THRESHOLD    -3 
+#define M_MMAP_MAX          -4
+
+#ifndef __CYGWIN__
+/* Some systems provide this, so do too for compatibility.  */
+extern void cfree _PARAMS ((_PTR));
+#endif /* __CYGWIN__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INCLUDE_MALLOC_H_ */
diff --git a/newlib/include/math.h b/newlib/include/math.h
new file mode 100644 (file)
index 0000000..ce72631
--- /dev/null
@@ -0,0 +1,483 @@
+#ifndef  _MATH_H_
+
+#define  _MATH_H_
+
+#include <sys/reent.h>
+#include <machine/ieeefp.h>
+#include "_ansi.h"
+
+_BEGIN_STD_C
+
+union __dmath
+{
+  __ULong i[2];
+  double d;
+};
+
+union __fmath
+{
+  __ULong i[1];
+  float f;
+};
+
+union __ldmath
+{
+  __ULong i[4];
+  _LONG_DOUBLE ld;
+};
+
+/* Natural log of 2 */
+#define _M_LOG2_E        0.693147180559945309417
+
+#if defined(__GNUC__) && \
+  ( (__GNUC__ >= 4) || \
+    ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 3) ) )
+
+ /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values.  */
+
+# ifndef HUGE_VAL
+#  define HUGE_VAL (__builtin_huge_val())
+# endif
+
+# ifndef HUGE_VALF
+#  define HUGE_VALF (__builtin_huge_valf())
+# endif
+
+# ifndef HUGE_VALL
+#  define HUGE_VALL (__builtin_huge_vall())
+# endif
+
+# ifndef INFINITY
+#  define INFINITY (__builtin_inff())
+# endif
+
+# ifndef NAN
+#  define NAN (__builtin_nanf(""))
+# endif
+
+#else /* !gcc >= 3.3  */
+
+ /* No builtins.  Use floating-point unions instead.  Declare as an array
+    without bounds so no matter what small data support a port and/or
+    library has, the reference will be via the general method for accessing
+    globals. */
+
+ #ifndef HUGE_VAL
+  extern __IMPORT const union __dmath __infinity[];
+  #define HUGE_VAL (__infinity[0].d)
+ #endif
+
+ #ifndef HUGE_VALF
+  extern __IMPORT const union __fmath __infinityf[];
+  #define HUGE_VALF (__infinityf[0].f)
+ #endif
+
+ #ifndef HUGE_VALL
+  extern __IMPORT const union __ldmath __infinityld[];
+  #define HUGE_VALL (__infinityld[0].ld)
+ #endif
+
+#endif /* !gcc >= 3.3  */
+
+/* Reentrant ANSI C functions.  */
+
+#ifndef __math_68881
+extern double atan _PARAMS((double));
+extern double cos _PARAMS((double));
+extern double sin _PARAMS((double));
+extern double tan _PARAMS((double));
+extern double tanh _PARAMS((double));
+extern double frexp _PARAMS((double, int *));
+extern double modf _PARAMS((double, double *));
+extern double ceil _PARAMS((double));
+extern double fabs _PARAMS((double));
+extern double floor _PARAMS((double));
+#endif /* ! defined (__math_68881) */
+
+/* Non reentrant ANSI C functions.  */
+
+#ifndef _REENT_ONLY
+#ifndef __math_6881
+extern double acos _PARAMS((double));
+extern double asin _PARAMS((double));
+extern double atan2 _PARAMS((double, double));
+extern double cosh _PARAMS((double));
+extern double sinh _PARAMS((double));
+extern double exp _PARAMS((double));
+extern double ldexp _PARAMS((double, int));
+extern double log _PARAMS((double));
+extern double log10 _PARAMS((double));
+extern double pow _PARAMS((double, double));
+extern double sqrt _PARAMS((double));
+extern double fmod _PARAMS((double, double));
+#endif /* ! defined (__math_68881) */
+#endif /* ! defined (_REENT_ONLY) */
+
+#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L
+
+/* ISO C99 types and macros. */
+
+#ifndef FLT_EVAL_METHOD
+#define FLT_EVAL_METHOD 0
+typedef float float_t;
+typedef double double_t;
+#endif /* FLT_EVAL_METHOD */
+
+#define FP_NAN         0
+#define FP_INFINITE    1
+#define FP_ZERO        2
+#define FP_SUBNORMAL   3
+#define FP_NORMAL      4
+
+#ifndef FP_ILOGB0
+# define FP_ILOGB0 (-INT_MAX)
+#endif
+#ifndef FP_ILOGBNAN
+# define FP_ILOGBNAN INT_MAX
+#endif
+
+#ifndef MATH_ERRNO
+# define MATH_ERRNO 1
+#endif
+#ifndef MATH_ERREXCEPT
+# define MATH_ERREXCEPT 2
+#endif
+#ifndef math_errhandling
+# define math_errhandling MATH_ERRNO
+#endif
+
+extern int __isinff (float x);
+extern int __isinfd (double x);
+extern int __isnanf (float x);
+extern int __isnand (double x);
+extern int __fpclassifyf (float x);
+extern int __fpclassifyd (double x);
+extern int __signbitf (float x);
+extern int __signbitd (double x);
+
+#define fpclassify(x) \
+          (__extension__ ({__typeof__(x) __x = (x); \
+                           (sizeof (__x) == sizeof (float))  ? __fpclassifyf(__x) : __fpclassifyd(__x);}))
+
+#ifndef isfinite
+#define isfinite(y) \
+          (__extension__ ({__typeof__(y) __y = (y); \
+                           fpclassify(__y) != FP_INFINITE && fpclassify(__y) != FP_NAN;}))
+#endif
+
+/* Note: isinf and isnan were once functions in newlib that took double
+ *       arguments.  C99 specifies that these names are reserved for macros
+ *       supporting multiple floating point types.  Thus, they are
+ *       now defined as macros.  Implementations of the old functions
+ *       taking double arguments still exist for compatibility purposes.  */
+#ifndef isinf
+#define isinf(x) \
+          (__extension__ ({__typeof__(x) __x = (x); \
+                           (sizeof (__x) == sizeof (float))  ? __isinff(__x) : __isinfd(__x);}))
+#endif
+
+#ifndef isnan
+#define isnan(x) \
+          (__extension__ ({__typeof__(x) __x = (x); \
+                           (sizeof (__x) == sizeof (float))  ? __isnanf(__x) : __isnand(__x);}))
+#endif
+
+#define isnormal(y) (fpclassify(y) == FP_NORMAL)
+#define signbit(x) \
+          (__extension__ ({__typeof__(x) __x = (x); \
+                           (sizeof(__x) == sizeof(float)) ? __signbitf(__x) : __signbitd(__x);}))
+
+#define isgreater(x,y) \
+          (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
+                           !isunordered(__x,__y) && (__x > __y);}))
+#define isgreaterequal(x,y) \
+          (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
+                           !isunordered(__x,__y) && (__x >= __y);}))
+#define isless(x,y) \
+          (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
+                           !isunordered(__x,__y) && (__x < __y);}))
+#define islessequal(x,y) \
+          (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
+                           !isunordered(__x,__y) && (__x <= __y);}))
+#define islessgreater(x,y) \
+          (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
+                           !isunordered(__x,__y) && (__x < __y || __x > __y);}))
+
+#define isunordered(a,b) \
+          (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \
+                           fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;}))
+
+/* Non ANSI double precision functions.  */
+
+extern double infinity _PARAMS((void));
+extern double nan _PARAMS((const char *));
+extern int finite _PARAMS((double));
+extern double copysign _PARAMS((double, double));
+extern int ilogb _PARAMS((double));
+
+extern double asinh _PARAMS((double));
+extern double cbrt _PARAMS((double));
+extern double nextafter _PARAMS((double, double));
+extern double rint _PARAMS((double));
+extern double scalbn _PARAMS((double, int));
+
+extern double exp2 _PARAMS((double));
+extern double scalbln _PARAMS((double, long int));
+extern double tgamma _PARAMS((double));
+extern double nearbyint _PARAMS((double));
+extern long int lrint _PARAMS((double));
+extern _LONG_LONG_TYPE int llrint _PARAMS((double));
+extern double round _PARAMS((double));
+extern long int lround _PARAMS((double));
+extern double trunc _PARAMS((double));
+extern double remquo _PARAMS((double, double, int *));
+extern double copysign _PARAMS((double, double));
+extern double fdim _PARAMS((double, double));
+extern double fmax _PARAMS((double, double));
+extern double fmin _PARAMS((double, double));
+extern double fma _PARAMS((double, double, double));
+
+#ifndef __math_68881
+extern double log1p _PARAMS((double));
+extern double expm1 _PARAMS((double));
+#endif /* ! defined (__math_68881) */
+
+#ifndef _REENT_ONLY
+extern double acosh _PARAMS((double));
+extern double atanh _PARAMS((double));
+extern double remainder _PARAMS((double, double));
+extern double gamma _PARAMS((double));
+extern double lgamma _PARAMS((double));
+extern double erf _PARAMS((double));
+extern double erfc _PARAMS((double));
+#define log2(x) (log (x) / _M_LOG2_E)
+
+#ifndef __math_68881
+extern double hypot _PARAMS((double, double));
+#endif
+
+#endif /* ! defined (_REENT_ONLY) */
+
+/* Single precision versions of ANSI functions.  */
+
+extern float atanf _PARAMS((float));
+extern float cosf _PARAMS((float));
+extern float sinf _PARAMS((float));
+extern float tanf _PARAMS((float));
+extern float tanhf _PARAMS((float));
+extern float frexpf _PARAMS((float, int *));
+extern float modff _PARAMS((float, float *));
+extern float ceilf _PARAMS((float));
+extern float fabsf _PARAMS((float));
+extern float floorf _PARAMS((float));
+
+#ifndef _REENT_ONLY
+extern float acosf _PARAMS((float));
+extern float asinf _PARAMS((float));
+extern float atan2f _PARAMS((float, float));
+extern float coshf _PARAMS((float));
+extern float sinhf _PARAMS((float));
+extern float expf _PARAMS((float));
+extern float ldexpf _PARAMS((float, int));
+extern float logf _PARAMS((float));
+extern float log10f _PARAMS((float));
+extern float powf _PARAMS((float, float));
+extern float sqrtf _PARAMS((float));
+extern float fmodf _PARAMS((float, float));
+#endif /* ! defined (_REENT_ONLY) */
+
+/* Other single precision functions.  */
+
+extern float exp2f _PARAMS((float));
+extern float scalblnf _PARAMS((float, long int));
+extern float tgammaf _PARAMS((float));
+extern float nearbyintf _PARAMS((float));
+extern long int lrintf _PARAMS((float));
+extern _LONG_LONG_TYPE llrintf _PARAMS((float));
+extern float roundf _PARAMS((float));
+extern long int lroundf _PARAMS((float));
+extern float truncf _PARAMS((float));
+extern float remquof _PARAMS((float, float, int *));
+extern float copysignf _PARAMS((float, float));
+extern float fdimf _PARAMS((float, float));
+extern float fmaxf _PARAMS((float, float));
+extern float fminf _PARAMS((float, float));
+extern float fmaf _PARAMS((float, float, float));
+
+extern float infinityf _PARAMS((void));
+extern float nanf _PARAMS((const char *));
+extern int isnanf _PARAMS((float));
+extern int isinff _PARAMS((float));
+extern int finitef _PARAMS((float));
+extern float copysignf _PARAMS((float, float));
+extern int ilogbf _PARAMS((float));
+
+extern float asinhf _PARAMS((float));
+extern float cbrtf _PARAMS((float));
+extern float nextafterf _PARAMS((float, float));
+extern float rintf _PARAMS((float));
+extern float scalbnf _PARAMS((float, int));
+extern float log1pf _PARAMS((float));
+extern float expm1f _PARAMS((float));
+
+#ifndef _REENT_ONLY
+extern float acoshf _PARAMS((float));
+extern float atanhf _PARAMS((float));
+extern float remainderf _PARAMS((float, float));
+extern float gammaf _PARAMS((float));
+extern float lgammaf _PARAMS((float));
+extern float erff _PARAMS((float));
+extern float erfcf _PARAMS((float));
+#define log2f(x) (logf (x) / (float) _M_LOG2_E)
+extern float hypotf _PARAMS((float, float));
+#endif /* ! defined (_REENT_ONLY) */
+
+/* Other long double precision functions.  */
+extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE));
+extern long int lrintl _PARAMS((_LONG_DOUBLE));
+extern _LONG_LONG_TYPE llrintl _PARAMS((_LONG_DOUBLE));
+
+#endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */
+
+#if !defined (__STRICT_ANSI__) || defined(__cplusplus)
+
+extern double cabs();
+extern double drem _PARAMS((double, double));
+extern void sincos _PARAMS((double, double *, double *));
+extern double gamma_r _PARAMS((double, int *));
+extern double lgamma_r _PARAMS((double, int *));
+
+extern double y0 _PARAMS((double));
+extern double y1 _PARAMS((double));
+extern double yn _PARAMS((int, double));
+extern double j0 _PARAMS((double));
+extern double j1 _PARAMS((double));
+extern double jn _PARAMS((int, double));
+
+extern float cabsf();
+extern float dremf _PARAMS((float, float));
+extern void sincosf _PARAMS((float, float *, float *));
+extern float gammaf_r _PARAMS((float, int *));
+extern float lgammaf_r _PARAMS((float, int *));
+
+extern float y0f _PARAMS((float));
+extern float y1f _PARAMS((float));
+extern float ynf _PARAMS((int, float));
+extern float j0f _PARAMS((float));
+extern float j1f _PARAMS((float));
+extern float jnf _PARAMS((int, float));
+
+/* GNU extensions */
+# ifndef exp10
+extern double exp10 _PARAMS((double));
+# endif
+# ifndef pow10
+extern double pow10 _PARAMS((double));
+# endif
+# ifndef exp10f
+extern float exp10f _PARAMS((float));
+# endif
+# ifndef pow10f
+extern float pow10f _PARAMS((float));
+# endif
+
+#endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */
+
+#ifndef __STRICT_ANSI__
+
+/* The gamma functions use a global variable, signgam.  */
+#ifndef _REENT_ONLY
+#define signgam (*__signgam())
+extern int *__signgam _PARAMS((void));
+#endif /* ! defined (_REENT_ONLY) */
+
+#define __signgam_r(ptr) _REENT_SIGNGAM(ptr)
+
+/* The exception structure passed to the matherr routine.  */
+/* We have a problem when using C++ since `exception' is a reserved
+   name in C++.  */
+#ifdef __cplusplus
+struct __exception
+#else
+struct exception
+#endif
+{
+  int type;
+  char *name;
+  double arg1;
+  double arg2;
+  double retval;
+  int err;
+};
+
+#ifdef __cplusplus
+extern int matherr _PARAMS((struct __exception *e));
+#else
+extern int matherr _PARAMS((struct exception *e));
+#endif
+
+/* Values for the type field of struct exception.  */
+
+#define DOMAIN 1
+#define SING 2
+#define OVERFLOW 3
+#define UNDERFLOW 4
+#define TLOSS 5
+#define PLOSS 6
+
+/* Useful constants.  */
+
+#define MAXFLOAT       3.40282347e+38F
+
+#define M_E            2.7182818284590452354
+#define M_LOG2E                1.4426950408889634074
+#define M_LOG10E       0.43429448190325182765
+#define M_LN2          0.69314718055994530942
+#define M_LN10         2.30258509299404568402
+#define M_PI           3.14159265358979323846
+#define M_TWOPI         (M_PI * 2.0)
+#define M_PI_2         1.57079632679489661923
+#define M_PI_4         0.78539816339744830962
+#define M_3PI_4                2.3561944901923448370E0
+#define M_SQRTPI        1.77245385090551602792981
+#define M_1_PI         0.31830988618379067154
+#define M_2_PI         0.63661977236758134308
+#define M_2_SQRTPI     1.12837916709551257390
+#define M_SQRT2                1.41421356237309504880
+#define M_SQRT1_2      0.70710678118654752440
+#define M_LN2LO         1.9082149292705877000E-10
+#define M_LN2HI         6.9314718036912381649E-1
+#define M_SQRT3        1.73205080756887719000
+#define M_IVLN10        0.43429448190325182765 /* 1 / log(10) */
+#define M_LOG2_E        _M_LOG2_E
+#define M_INVLN2        1.4426950408889633870E0  /* 1 / log(2) */
+
+/* Global control over fdlibm error handling.  */
+
+enum __fdlibm_version
+{
+  __fdlibm_ieee = -1,
+  __fdlibm_svid,
+  __fdlibm_xopen,
+  __fdlibm_posix
+};
+
+#define _LIB_VERSION_TYPE enum __fdlibm_version
+#define _LIB_VERSION __fdlib_version
+
+extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION;
+
+#define _IEEE_  __fdlibm_ieee
+#define _SVID_  __fdlibm_svid
+#define _XOPEN_ __fdlibm_xopen
+#define _POSIX_ __fdlibm_posix
+
+#endif /* ! defined (__STRICT_ANSI__) */
+
+_END_STD_C
+
+#ifdef __FAST_MATH__
+#include <machine/fastmath.h>
+#endif
+
+#endif /* _MATH_H_ */
diff --git a/newlib/include/newlib.h b/newlib/include/newlib.h
new file mode 100644 (file)
index 0000000..068ebcd
--- /dev/null
@@ -0,0 +1,162 @@
+/* newlib.h.  Generated by configure.  */
+/* newlib.hin.  Generated from configure.in by autoheader.  */
+#ifndef __NEWLIB_H__
+
+#define __NEWLIB_H__ 1
+
+/* EL/IX level */
+/* #undef _ELIX_LEVEL */
+
+/* Newlib version */
+#define _NEWLIB_VERSION "1.17.0"
+
+/* C99 formats support (such as %a, %zu, ...) in IO functions like
+ * printf/scanf enabled */
+/* #undef _WANT_IO_C99_FORMATS */
+
+/* long long type support in IO functions like printf/scanf enabled */
+/* #undef _WANT_IO_LONG_LONG */
+
+/* long double type support in IO functions like printf/scanf enabled */
+/* #undef _WANT_IO_LONG_DOUBLE */
+
+/* Positional argument support in printf functions enabled.  */
+/* #undef _WANT_IO_POS_ARGS */
+
+/* Optional reentrant struct support.  Used mostly on platforms with
+   very restricted storage.  */
+/* #undef _WANT_REENT_SMALL */
+
+/* Multibyte supported */
+/* #undef _MB_CAPABLE */
+
+/* MB_LEN_MAX */
+#define _MB_LEN_MAX 1
+
+/* ICONV enabled */
+/* #undef _ICONV_ENABLED */
+
+/* Enable ICONV external CCS files loading capabilities */
+/* #undef _ICONV_ENABLE_EXTERNAL_CCS */
+
+/* Define if the linker supports .preinit_array/.init_array/.fini_array
+ * sections.  */
+#define  HAVE_INITFINI_ARRAY 1
+
+/* True if atexit() may dynamically allocate space for cleanup
+   functions.  */
+#define  _ATEXIT_DYNAMIC_ALLOC 1
+
+/* Define if the compiler supports aliasing an array to an address.  */
+/* #undef  _HAVE_ARRAY_ALIASING */
+
+/*
+ * Iconv encodings enabled ("to" direction)
+ */
+/* #undef _ICONV_TO_ENCODING_BIG5 */
+/* #undef _ICONV_TO_ENCODING_CP775 */
+/* #undef _ICONV_TO_ENCODING_CP850 */
+/* #undef _ICONV_TO_ENCODING_CP852 */
+/* #undef _ICONV_TO_ENCODING_CP855 */
+/* #undef _ICONV_TO_ENCODING_CP866 */
+/* #undef _ICONV_TO_ENCODING_EUC_JP */
+/* #undef _ICONV_TO_ENCODING_EUC_TW */
+/* #undef _ICONV_TO_ENCODING_EUC_KR */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_1 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_10 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_11 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_13 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_14 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_15 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_2 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_3 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_4 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_5 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_6 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_7 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_8 */
+/* #undef _ICONV_TO_ENCODING_ISO_8859_9 */
+/* #undef _ICONV_TO_ENCODING_ISO_IR_111 */
+/* #undef _ICONV_TO_ENCODING_KOI8_R */
+/* #undef _ICONV_TO_ENCODING_KOI8_RU */
+/* #undef _ICONV_TO_ENCODING_KOI8_U */
+/* #undef _ICONV_TO_ENCODING_KOI8_UNI */
+/* #undef _ICONV_TO_ENCODING_UCS_2 */
+/* #undef _ICONV_TO_ENCODING_UCS_2_INTERNAL */
+/* #undef _ICONV_TO_ENCODING_UCS_2BE */
+/* #undef _ICONV_TO_ENCODING_UCS_2LE */
+/* #undef _ICONV_TO_ENCODING_UCS_4 */
+/* #undef _ICONV_TO_ENCODING_UCS_4_INTERNAL */
+/* #undef _ICONV_TO_ENCODING_UCS_4BE */
+/* #undef _ICONV_TO_ENCODING_UCS_4LE */
+/* #undef _ICONV_TO_ENCODING_US_ASCII */
+/* #undef _ICONV_TO_ENCODING_UTF_16 */
+/* #undef _ICONV_TO_ENCODING_UTF_16BE */
+/* #undef _ICONV_TO_ENCODING_UTF_16LE */
+/* #undef _ICONV_TO_ENCODING_UTF_8 */
+/* #undef _ICONV_TO_ENCODING_WIN_1250 */
+/* #undef _ICONV_TO_ENCODING_WIN_1251 */
+/* #undef _ICONV_TO_ENCODING_WIN_1252 */
+/* #undef _ICONV_TO_ENCODING_WIN_1253 */
+/* #undef _ICONV_TO_ENCODING_WIN_1254 */
+/* #undef _ICONV_TO_ENCODING_WIN_1255 */
+/* #undef _ICONV_TO_ENCODING_WIN_1256 */
+/* #undef _ICONV_TO_ENCODING_WIN_1257 */
+/* #undef _ICONV_TO_ENCODING_WIN_1258 */
+
+/*
+ * Iconv encodings enabled ("from" direction)
+ */
+/* #undef _ICONV_FROM_ENCODING_BIG5 */
+/* #undef _ICONV_FROM_ENCODING_CP775 */
+/* #undef _ICONV_FROM_ENCODING_CP850 */
+/* #undef _ICONV_FROM_ENCODING_CP852 */
+/* #undef _ICONV_FROM_ENCODING_CP855 */
+/* #undef _ICONV_FROM_ENCODING_CP866 */
+/* #undef _ICONV_FROM_ENCODING_EUC_JP */
+/* #undef _ICONV_FROM_ENCODING_EUC_TW */
+/* #undef _ICONV_FROM_ENCODING_EUC_KR */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_1 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_10 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_11 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_13 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_14 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_15 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_2 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_3 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_4 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_5 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_6 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_7 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_8 */
+/* #undef _ICONV_FROM_ENCODING_ISO_8859_9 */
+/* #undef _ICONV_FROM_ENCODING_ISO_IR_111 */
+/* #undef _ICONV_FROM_ENCODING_KOI8_R */
+/* #undef _ICONV_FROM_ENCODING_KOI8_RU */
+/* #undef _ICONV_FROM_ENCODING_KOI8_U */
+/* #undef _ICONV_FROM_ENCODING_KOI8_UNI */
+/* #undef _ICONV_FROM_ENCODING_UCS_2 */
+/* #undef _ICONV_FROM_ENCODING_UCS_2_INTERNAL */
+/* #undef _ICONV_FROM_ENCODING_UCS_2BE */
+/* #undef _ICONV_FROM_ENCODING_UCS_2LE */
+/* #undef _ICONV_FROM_ENCODING_UCS_4 */
+/* #undef _ICONV_FROM_ENCODING_UCS_4_INTERNAL */
+/* #undef _ICONV_FROM_ENCODING_UCS_4BE */
+/* #undef _ICONV_FROM_ENCODING_UCS_4LE */
+/* #undef _ICONV_FROM_ENCODING_US_ASCII */
+/* #undef _ICONV_FROM_ENCODING_UTF_16 */
+/* #undef _ICONV_FROM_ENCODING_UTF_16BE */
+/* #undef _ICONV_FROM_ENCODING_UTF_16LE */
+/* #undef _ICONV_FROM_ENCODING_UTF_8 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1250 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1251 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1252 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1253 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1254 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1255 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1256 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1257 */
+/* #undef _ICONV_FROM_ENCODING_WIN_1258 */
+
+#endif /* !__NEWLIB_H__ */
+
diff --git a/newlib/include/paths.h b/newlib/include/paths.h
new file mode 100644 (file)
index 0000000..36cf78a
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef        _PATHS_H_
+#define _PATHS_H_
+
+#define _PATH_DEV      "/dev/"
+#define _PATH_BSHELL    "/bin/sh"
+
+#endif /* _PATHS_H_ */
diff --git a/newlib/include/process.h b/newlib/include/process.h
new file mode 100644 (file)
index 0000000..a73564a
--- /dev/null
@@ -0,0 +1,44 @@
+/* process.h.  This file comes with MSDOS and WIN32 systems.  */
+
+#ifndef __PROCESS_H_
+#define __PROCESS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int execl(const char *path, const char *argv0, ...);
+int execle(const char *path, const char *argv0, ... /*, char * const *envp */);
+int execlp(const char *path, const char *argv0, ...);
+int execlpe(const char *path, const char *argv0, ... /*, char * const *envp */);
+
+int execv(const char *path, char * const *argv);
+int execve(const char *path, char * const *argv, char * const *envp);
+int execvp(const char *path, char * const *argv);
+int execvpe(const char *path, char * const *argv, char * const *envp);
+
+int spawnl(int mode, const char *path, const char *argv0, ...);
+int spawnle(int mode, const char *path, const char *argv0, ... /*, char * const *envp */);
+int spawnlp(int mode, const char *path, const char *argv0, ...);
+int spawnlpe(int mode, const char *path, const char *argv0, ... /*, char * const *envp */);
+
+int spawnv(int mode, const char *path, const char * const *argv);
+int spawnve(int mode, const char *path, const char * const *argv, const char * const *envp);
+int spawnvp(int mode, const char *path, const char * const *argv);
+int spawnvpe(int mode, const char *path, const char * const *argv, const char * const *envp);
+
+int cwait(int *, int, int);
+
+#define _P_WAIT                1
+#define _P_NOWAIT      2       /* always generates error */
+#define _P_OVERLAY     3
+#define _P_NOWAITO     4
+#define _P_DETACH      5
+
+#define WAIT_CHILD 1
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/include/pthread.h b/newlib/include/pthread.h
new file mode 100644 (file)
index 0000000..fd90cf3
--- /dev/null
@@ -0,0 +1,361 @@
+/*  pthread.h
+ *
+ *  Written by Joel Sherrill <joel@OARcorp.com>.
+ *
+ *  COPYRIGHT (c) 1989-2000.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  Permission to use, copy, modify, and distribute this software for any
+ *  purpose without fee is hereby granted, provided that this entire notice
+ *  is included in all copies of any software which is or includes a copy
+ *  or modification of this software.
+ *
+ *  THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ *  WARRANTY.  IN PARTICULAR,  THE AUTHOR MAKES NO REPRESENTATION
+ *  OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
+ *  SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ *  $Id: pthread.h,v 1.6 2008/11/19 17:02:34 jjohnstn Exp $
+ */
+
+#ifndef __PTHREAD_h
+#define __PTHREAD_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <unistd.h>
+
+#if defined(_POSIX_THREADS)
+
+#include <sys/types.h>
+#include <time.h>
+#include <sys/sched.h>
+
+/* Register Fork Handlers, P1003.1c/Draft 10, P1003.1c/Draft 10, p. 27
+  
+    If an OS does not support processes, then it falls under this provision
+    and may not provide pthread_atfork():
+  
+    "Either the implementation shall support the pthread_atfork() function
+     as described above or the pthread_atfork() funciton shall not be 
+     provided."
+  
+    NOTE: RTEMS does not provide pthread_atfork().  */
+
+#if !defined(__rtems__)
+#warning "Add pthread_atfork() prototype"
+#endif
+
+/* Mutex Initialization Attributes, P1003.1c/Draft 10, p. 81 */
+
+int    _EXFUN(pthread_mutexattr_init, (pthread_mutexattr_t *__attr));
+int    _EXFUN(pthread_mutexattr_destroy, (pthread_mutexattr_t *__attr));
+int    _EXFUN(pthread_mutexattr_getpshared,
+               (_CONST pthread_mutexattr_t *__attr, int  *__pshared));
+int    _EXFUN(pthread_mutexattr_setpshared,
+               (pthread_mutexattr_t *__attr, int __pshared));
+
+#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
+
+/* Single UNIX Specification 2 Mutex Attributes types */
+
+int _EXFUN(pthread_mutexattr_gettype,
+               (_CONST pthread_mutexattr_t *__attr, int *__kind));
+int _EXFUN(pthread_mutexattr_settype,
+               (pthread_mutexattr_t *__attr, int __kind));
+
+#endif
+
+/* Initializing and Destroying a Mutex, P1003.1c/Draft 10, p. 87 */
+
+int    _EXFUN(pthread_mutex_init,
+       (pthread_mutex_t *__mutex, _CONST pthread_mutexattr_t *__attr));
+int    _EXFUN(pthread_mutex_destroy, (pthread_mutex_t *__mutex));
+
+/* This is used to statically initialize a pthread_mutex_t. Example:
+  
+    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+ */
+
+#define PTHREAD_MUTEX_INITIALIZER  ((pthread_mutex_t) 0xFFFFFFFF)
+
+/*  Locking and Unlocking a Mutex, P1003.1c/Draft 10, p. 93
+    NOTE: P1003.4b/D8 adds pthread_mutex_timedlock(), p. 29 */
+
+int    _EXFUN(pthread_mutex_lock, (pthread_mutex_t *__mutex));
+int    _EXFUN(pthread_mutex_trylock, (pthread_mutex_t *__mutex));
+int    _EXFUN(pthread_mutex_unlock, (pthread_mutex_t *__mutex));
+
+#if defined(_POSIX_TIMEOUTS)
+
+int    _EXFUN(pthread_mutex_timedlock,
+       (pthread_mutex_t *__mutex, _CONST struct timespec *__timeout));
+
+#endif /* _POSIX_TIMEOUTS */
+
+/* Condition Variable Initialization Attributes, P1003.1c/Draft 10, p. 96 */
+int    _EXFUN(pthread_condattr_init, (pthread_condattr_t *__attr));
+int    _EXFUN(pthread_condattr_destroy, (pthread_condattr_t *__attr));
+int    _EXFUN(pthread_condattr_getpshared,
+               (_CONST pthread_condattr_t *__attr, int *__pshared));
+int    _EXFUN(pthread_condattr_setpshared,
+               (pthread_condattr_t *__attr, int __pshared));
+/* Initializing and Destroying a Condition Variable, P1003.1c/Draft 10, p. 87 */
+int    _EXFUN(pthread_cond_init,
+       (pthread_cond_t *__cond, _CONST pthread_condattr_t *__attr));
+int    _EXFUN(pthread_cond_destroy, (pthread_cond_t *__mutex));
+/* This is used to statically initialize a pthread_cond_t. Example:
+  
+    pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+ */
+#define PTHREAD_COND_INITIALIZER  ((pthread_mutex_t) 0xFFFFFFFF)
+/* Broadcasting and Signaling a Condition, P1003.1c/Draft 10, p. 101 */
+int    _EXFUN(pthread_cond_signal, (pthread_cond_t *__cond));
+int    _EXFUN(pthread_cond_broadcast, (pthread_cond_t *__cond));
+/* Waiting on a Condition, P1003.1c/Draft 10, p. 105 */
+int    _EXFUN(pthread_cond_wait,
+       (pthread_cond_t *__cond, pthread_mutex_t *__mutex));
+int    _EXFUN(pthread_cond_timedwait,
+               (pthread_cond_t *__cond, pthread_mutex_t *__mutex,
+               _CONST struct timespec *__abstime));
+#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING)
+
+/* Thread Creation Scheduling Attributes, P1003.1c/Draft 10, p. 120 */
+
+int    _EXFUN(pthread_attr_setscope,
+               (pthread_attr_t *__attr, int __contentionscope));
+int    _EXFUN(pthread_attr_getscope,
+       (_CONST pthread_attr_t *__attr, int *__contentionscope));
+int    _EXFUN(pthread_attr_setinheritsched,
+       (pthread_attr_t *__attr, int __inheritsched));
+int    _EXFUN(pthread_attr_getinheritsched,
+       (_CONST pthread_attr_t *__attr, int *__inheritsched));
+int    _EXFUN(pthread_attr_setschedpolicy,
+       (pthread_attr_t *__attr, int __policy));
+int    _EXFUN(pthread_attr_getschedpolicy,
+       (_CONST pthread_attr_t *__attr, int *__policy));
+
+#endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */
+
+int    _EXFUN(pthread_attr_setschedparam,
+       (pthread_attr_t *__attr, _CONST struct sched_param *__param));
+int    _EXFUN(pthread_attr_getschedparam,
+       (_CONST pthread_attr_t *__attr, struct sched_param *__param));
+
+#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING)
+
+/* Dynamic Thread Scheduling Parameters Access, P1003.1c/Draft 10, p. 124 */
+
+int    _EXFUN(pthread_getschedparam,
+       (pthread_t __pthread, int *__policy, struct sched_param *__param));
+int    _EXFUN(pthread_setschedparam,
+       (pthread_t __pthread, int __policy, struct sched_param *__param));
+
+#endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */
+
+#if defined(_POSIX_THREAD_PRIO_INHERIT) || defined(_POSIX_THREAD_PRIO_PROTECT)
+
+/* Mutex Initialization Scheduling Attributes, P1003.1c/Draft 10, p. 128 */
+int    _EXFUN(pthread_mutexattr_setprotocol,
+       (pthread_mutexattr_t *__attr, int __protocol));
+int    _EXFUN(pthread_mutexattr_getprotocol,
+       (_CONST pthread_mutexattr_t *__attr, int *__protocol));
+int    _EXFUN(pthread_mutexattr_setprioceiling,
+       (pthread_mutexattr_t *__attr, int __prioceiling));
+int    _EXFUN(pthread_mutexattr_getprioceiling,
+       (_CONST pthread_mutexattr_t *__attr, int *__prioceiling));
+
+#endif /* _POSIX_THREAD_PRIO_INHERIT || _POSIX_THREAD_PRIO_PROTECT */
+
+#if defined(_POSIX_THREAD_PRIO_PROTECT)
+
+/* Change the Priority Ceiling of a Mutex, P1003.1c/Draft 10, p. 131 */
+
+int    _EXFUN(pthread_mutex_setprioceiling,
+       (pthread_mutex_t *__mutex, int __prioceiling, int *__old_ceiling));
+int    _EXFUN(pthread_mutex_getprioceiling,
+       (pthread_mutex_t *__mutex, int *__prioceiling));
+
+#endif /* _POSIX_THREAD_PRIO_PROTECT */
+
+/* Thread Creation Attributes, P1003.1c/Draft 10, p, 140 */
+
+int    _EXFUN(pthread_attr_init, (pthread_attr_t *__attr));
+int    _EXFUN(pthread_attr_destroy, (pthread_attr_t *__attr));
+int    _EXFUN(pthread_attr_getstacksize,
+       (_CONST pthread_attr_t *__attr, size_t *__stacksize));
+int    _EXFUN(pthread_attr_setstacksize,
+       (pthread_attr_t *__attr, size_t stacksize));
+int    _EXFUN(pthread_attr_getstackaddr,
+       (_CONST pthread_attr_t *__attr, void **__stackaddr));
+int    _EXFUN(pthread_attr_setstackaddr,
+       (pthread_attr_t  *__attr, void *__stackaddr));
+int    _EXFUN(pthread_attr_getdetachstate,
+       (_CONST pthread_attr_t *__attr, int *__detachstate));
+int    _EXFUN(pthread_attr_setdetachstate,
+       (pthread_attr_t *__attr, int __detachstate));
+
+/* Thread Creation, P1003.1c/Draft 10, p. 144 */
+
+int    _EXFUN(pthread_create,
+       (pthread_t *__pthread, _CONST pthread_attr_t  *__attr,
+       void *(*__start_routine)( void * ), void *__arg));
+
+/* Wait for Thread Termination, P1003.1c/Draft 10, p. 147 */
+
+int    _EXFUN(pthread_join, (pthread_t __pthread, void **__value_ptr));
+
+/* Detaching a Thread, P1003.1c/Draft 10, p. 149 */
+
+int    _EXFUN(pthread_detach, (pthread_t __pthread));
+
+/* Thread Termination, p1003.1c/Draft 10, p. 150 */
+
+void   _EXFUN(pthread_exit, (void *__value_ptr));
+
+/* Get Calling Thread's ID, p1003.1c/Draft 10, p. XXX */
+
+pthread_t      _EXFUN(pthread_self, (void));
+
+/* Compare Thread IDs, p1003.1c/Draft 10, p. 153 */
+
+int    _EXFUN(pthread_equal, (pthread_t __t1, pthread_t __t2));
+
+/* Dynamic Package Initialization */
+
+/* This is used to statically initialize a pthread_once_t. Example:
+  
+    pthread_once_t once = PTHREAD_ONCE_INIT;
+  
+    NOTE:  This is named inconsistently -- it should be INITIALIZER.  */
+#define PTHREAD_ONCE_INIT  { 1, 0 }  /* is initialized and not run */
+int    _EXFUN(pthread_once,
+       (pthread_once_t *__once_control, void (*__init_routine)(void)));
+
+/* Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */
+
+int    _EXFUN(pthread_key_create,
+       (pthread_key_t *__key, void (*__destructor)( void * )));
+
+/* Thread-Specific Data Management, P1003.1c/Draft 10, p. 165 */
+
+int    _EXFUN(pthread_setspecific,
+       (pthread_key_t __key, _CONST void *__value));
+void * _EXFUN(pthread_getspecific, (pthread_key_t __key));
+
+/* Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167 */
+
+int    _EXFUN(pthread_key_delete, (pthread_key_t __key));
+
+/* Execution of a Thread, P1003.1c/Draft 10, p. 181 */
+
+#define PTHREAD_CANCEL_ENABLE  0
+#define PTHREAD_CANCEL_DISABLE 1
+
+#define PTHREAD_CANCEL_DEFERRED 0
+#define PTHREAD_CANCEL_ASYNCHRONOUS 1
+
+#define PTHREAD_CANCELED ((void *) -1)
+
+int    _EXFUN(pthread_cancel, (pthread_t __pthread));
+
+/* Setting Cancelability State, P1003.1c/Draft 10, p. 183 */
+
+int    _EXFUN(pthread_setcancelstate, (int __state, int *__oldstate));
+int    _EXFUN(pthread_setcanceltype, (int __type, int *__oldtype));
+void   _EXFUN(pthread_testcancel, (void));
+
+/* Establishing Cancellation Handlers, P1003.1c/Draft 10, p. 184 */
+
+void   _EXFUN(pthread_cleanup_push,
+       (void (*__routine)( void * ), void *__arg));
+void   _EXFUN(pthread_cleanup_pop, (int __execute));
+
+#if defined(_POSIX_THREAD_CPUTIME)
+/* Accessing a Thread CPU-time Clock, P1003.4b/D8, p. 58 */
+int    _EXFUN(pthread_getcpuclockid,
+       (pthread_t __pthread_id, clockid_t *__clock_id));
+#endif /* defined(_POSIX_THREAD_CPUTIME) */
+
+
+#endif /* defined(_POSIX_THREADS) */
+
+#if defined(_POSIX_BARRIERS)
+
+int    _EXFUN(pthread_barrierattr_init, (pthread_barrierattr_t *__attr));
+int    _EXFUN(pthread_barrierattr_destroy, (pthread_barrierattr_t *__attr));
+int    _EXFUN(pthread_barrierattr_getpshared,
+       (_CONST pthread_barrierattr_t *__attr, int *__pshared));
+int    _EXFUN(pthread_barrierattr_setpshared,
+       (pthread_barrierattr_t *__attr, int __pshared));
+
+#define PTHREAD_BARRIER_SERIAL_THREAD -1
+
+int    _EXFUN(pthread_barrier_init,
+       (pthread_barrier_t *__barrier,
+       _CONST pthread_barrierattr_t *__attr, unsigned __count));
+int    _EXFUN(pthread_barrier_destroy, (pthread_barrier_t *__barrier));
+int    _EXFUN(pthread_barrier_wait,(pthread_barrier_t *__barrier));
+
+#endif /* defined(_POSIX_BARRIERS) */
+
+#if defined(_POSIX_SPIN_LOCKS)
+
+int    _EXFUN(pthread_spin_init,
+       (pthread_spinlock_t *__spinlock, int __pshared));
+int    _EXFUN(pthread_spin_destroy, (pthread_spinlock_t *__spinlock));
+int    _EXFUN(pthread_spin_lock, (pthread_spinlock_t *__spinlock));
+int    _EXFUN(pthread_spin_trylock, (pthread_spinlock_t *__spinlock));
+int    _EXFUN(pthread_spin_unlock, (pthread_spinlock_t *__spinlock));
+
+#endif /* defined(_POSIX_SPIN_LOCKS) */
+
+#if defined(_POSIX_READER_WRITER_LOCKS)
+
+int    _EXFUN(pthread_rwlockattr_init, (pthread_rwlockattr_t *__attr));
+int    _EXFUN(pthread_rwlockattr_destroy, (pthread_rwlockattr_t *__attr));
+int    _EXFUN(pthread_rwlockattr_getpshared,
+       (_CONST pthread_rwlockattr_t *__attr, int *__pshared));
+int    _EXFUN(pthread_rwlockattr_setpshared,
+       (pthread_rwlockattr_t *__attr, int __pshared));
+
+int    _EXFUN(pthread_rwlock_init,
+       (pthread_rwlock_t *__rwlock, _CONST pthread_rwlockattr_t *__attr));
+int    _EXFUN(pthread_rwlock_destroy, (pthread_rwlock_t *__rwlock));
+int    _EXFUN(pthread_rwlock_rdlock,(pthread_rwlock_t *__rwlock));
+int    _EXFUN(pthread_rwlock_tryrdlock,(pthread_rwlock_t *__rwlock));
+int    _EXFUN(pthread_rwlock_timedrdlock,
+        (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime));
+int    _EXFUN(pthread_rwlock_wrlock,(pthread_rwlock_t *__rwlock));
+int    _EXFUN(pthread_rwlock_trywrlock,(pthread_rwlock_t *__rwlock));
+int    _EXFUN(pthread_rwlock_timedwrlock,
+        (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime));
+
+#endif /* defined(_POSIX_READER_WRITER_LOCKS) */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/newlib/include/pwd.h b/newlib/include/pwd.h
new file mode 100644 (file)
index 0000000..1526abf
--- /dev/null
@@ -0,0 +1,78 @@
+/*-
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)pwd.h       5.13 (Berkeley) 5/28/91
+ */
+
+#ifndef _PWD_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define        _PWD_H_
+
+#include <sys/types.h>
+
+#ifndef _POSIX_SOURCE
+#define        _PATH_PASSWD            "/etc/passwd"
+
+#define        _PASSWORD_LEN           128     /* max length, not counting NULL */
+#endif
+
+struct passwd {
+       char    *pw_name;               /* user name */
+       char    *pw_passwd;             /* encrypted password */
+       uid_t   pw_uid;                 /* user uid */
+       gid_t   pw_gid;                 /* user gid */
+       char    *pw_comment;            /* comment */
+       char    *pw_gecos;              /* Honeywell login info */
+       char    *pw_dir;                /* home directory */
+       char    *pw_shell;              /* default shell */
+};
+
+#ifndef __INSIDE_CYGWIN__
+struct passwd  *getpwuid (uid_t);
+struct passwd  *getpwnam (const char *);
+int             getpwnam_r (const char *, struct passwd *,
+                       char *, size_t , struct passwd **);
+int             getpwuid_r (uid_t, struct passwd *, char *,
+                       size_t, struct passwd **);
+#ifndef _POSIX_SOURCE
+struct passwd  *getpwent (void);
+void            setpwent (void);
+void            endpwent (void);
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _PWD_H_ */
diff --git a/newlib/include/reent.h b/newlib/include/reent.h
new file mode 100644 (file)
index 0000000..50b0b57
--- /dev/null
@@ -0,0 +1,181 @@
+/* This header file provides the reentrancy.  */
+
+/* The reentrant system calls here serve two purposes:
+
+   1) Provide reentrant versions of the system calls the ANSI C library
+      requires.
+   2) Provide these system calls in a namespace clean way.
+
+   It is intended that *all* system calls that the ANSI C library needs
+   be declared here.  It documents them all in one place.  All library access
+   to the system is via some form of these functions.
+
+   The target may provide the needed syscalls by any of the following:
+
+   1) Define the reentrant versions of the syscalls directly.
+      (eg: _open_r, _close_r, etc.).  Please keep the namespace clean.
+      When you do this, set "syscall_dir" to "syscalls" and add
+      -DREENTRANT_SYSCALLS_PROVIDED to newlib_cflags in configure.host.
+
+   2) Define namespace clean versions of the system calls by prefixing
+      them with '_' (eg: _open, _close, etc.).  Technically, there won't be
+      true reentrancy at the syscall level, but the library will be namespace
+      clean.
+      When you do this, set "syscall_dir" to "syscalls" in configure.host.
+
+   3) Define or otherwise provide the regular versions of the syscalls
+      (eg: open, close, etc.).  The library won't be reentrant nor namespace
+      clean, but at least it will work.
+      When you do this, add -DMISSING_SYSCALL_NAMES to newlib_cflags in
+      configure.host.
+
+   4) Define or otherwise provide the regular versions of the syscalls,
+      and do not supply functional interfaces for any of the reentrant
+      calls. With this method, the reentrant syscalls are redefined to
+      directly call the regular system call without the reentrancy argument.
+      When you do this, specify both -DREENTRANT_SYSCALLS_PROVIDED and 
+      -DMISSING_SYSCALL_NAMES via newlib_cflags in configure.host and do
+      not specify "syscall_dir".
+
+   Stubs of the reentrant versions of the syscalls exist in the libc/reent
+   source directory and are provided if REENTRANT_SYSCALLS_PROVIDED isn't 
+   defined.  These stubs call the native system calls: _open, _close, etc. 
+   if MISSING_SYSCALL_NAMES is *not* defined, otherwise they call the
+   non-underscored versions: open, close, etc. when MISSING_SYSCALL_NAMES
+   *is* defined.
+
+   By default, newlib functions call the reentrant syscalls internally,
+   passing a reentrancy structure as an argument.  This reentrancy structure
+   contains data that is thread-specific.  For example, the errno value is
+   kept in the reentrancy structure.  If multiple threads exist, each will
+   keep a separate errno value which is intuitive since the application flow
+   cannot check for failure reliably otherwise.
+
+   The reentrant syscalls are either provided by the platform, by the 
+   libc/reent stubs, or in the case of both MISSING_SYSCALL_NAMES and 
+   REENTRANT_SYSCALLS_PROVIDED being defined, the calls are redefined to
+   simply call the regular syscalls with no reentrancy struct argument.
+
+   A single-threaded application does not need to worry about the reentrancy
+   structure.  It is used internally.  
+
+   A multi-threaded application needs either to manually manage reentrancy 
+   structures or use dynamic reentrancy.
+   
+   Manually managing reentrancy structures entails calling special reentrant
+   versions of newlib functions that have an additional reentrancy argument.
+   For example, _printf_r.  By convention, the first argument is the
+   reentrancy structure.  By default, the normal version of the function
+   uses the default reentrancy structure: _REENT.  The reentrancy structure
+   is passed internally, eventually to the reentrant syscalls themselves.
+   How the structures are stored and accessed in this model is up to the
+   application.
+
+   Dynamic reentrancy is specified by the __DYNAMIC_REENT__ flag.  This
+   flag denotes setting up a macro to replace _REENT with a function call
+   to __getreent().  This function needs to be implemented by the platform
+   and it is meant to return the reentrancy structure for the current
+   thread.  When the regular C functions (e.g. printf) go to call internal
+   routines with the default _REENT structure, they end up calling with 
+   the reentrancy structure for the thread.  Thus, application code does not
+   need to call the _r routines nor worry about reentrancy structures.  */
+
+/* WARNING: All identifiers here must begin with an underscore.  This file is
+   included by stdio.h and others and we therefore must only use identifiers
+   in the namespace allotted to us.  */
+
+#ifndef _REENT_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define _REENT_H_
+
+#include <sys/reent.h>
+#include <sys/_types.h>
+#include <machine/types.h>
+
+#define __need_size_t
+#define __need_ptrdiff_t
+#include <stddef.h>
+
+/* FIXME: not namespace clean */
+struct stat;
+struct tms;
+struct timeval;
+struct timezone;
+
+#if defined(REENTRANT_SYSCALLS_PROVIDED) && defined(MISSING_SYSCALL_NAMES)
+
+#define _close_r(__reent, __fd)                   close(__fd)
+#define _execve_r(__reent, __f, __arg, __env)     execve(__f, __arg, __env)
+#define _fcntl_r(__reent, __fd, __cmd, __arg)     fcntl(__fd, __cmd, __arg)
+#define _fork_r(__reent)                          fork()
+#define _fstat_r(__reent, __fdes, __stat)         fstat(__fdes, __stat)
+#define _getpid_r(__reent)                        getpid()
+#define _isatty_r(__reent, __desc)                isatty(__desc)
+#define _kill_r(__reent, __pid, __signal)         kill(__pid, __signal)
+#define _link_r(__reent, __oldpath, __newpath)    link(__oldpath, __newpath)
+#define _lseek_r(__reent, __fdes, __off, __w)     lseek(__fdes, __off, __w)
+#define _open_r(__reent, __path, __flag, __m)     open(__path, __flag, __m)
+#define _read_r(__reent, __fd, __buff, __cnt)     read(__fd, __buff, __cnt)
+#define _rename_r(__reent, __old, __new)         rename(__old, __new)
+#define _sbrk_r(__reent, __incr)                  sbrk(__incr)
+#define _stat_r(__reent, __path, __buff)          stat(__path, __buff)
+#define _times_r(__reent, __time)                 times(__time)
+#define _unlink_r(__reent, __path)                unlink(__path)
+#define _wait_r(__reent, __status)                wait(__status)
+#define _write_r(__reent, __fd, __buff, __cnt)    write(__fd, __buff, __cnt)
+#define _gettimeofday_r(__reent, __tp, __tzp)     gettimeofday(__tp, __tzp)
+
+#ifdef __LARGE64_FILES
+#define _lseek64_r(__reent, __fd, __off, __w)     lseek64(__fd, __off, __w)
+#define _fstat64_r(__reent, __fd, __buff)         fstat64(__fd, __buff)
+#define _open64_r(__reent, __path, __flag, __m)   open64(__path, __flag, __m)
+#endif
+
+#else
+/* Reentrant versions of system calls.  */
+
+extern int _close_r _PARAMS ((struct _reent *, int));
+extern int _execve_r _PARAMS ((struct _reent *, const char *, char *const *, char *const *));
+extern int _fcntl_r _PARAMS ((struct _reent *, int, int, int));
+extern int _fork_r _PARAMS ((struct _reent *));
+extern int _fstat_r _PARAMS ((struct _reent *, int, struct stat *));
+extern int _getpid_r _PARAMS ((struct _reent *));
+extern int _isatty_r _PARAMS ((struct _reent *, int));
+extern int _kill_r _PARAMS ((struct _reent *, int, int));
+extern int _link_r _PARAMS ((struct _reent *, const char *, const char *));
+extern _off_t _lseek_r _PARAMS ((struct _reent *, int, _off_t, int));
+extern int _open_r _PARAMS ((struct _reent *, const char *, int, int));
+extern _ssize_t _read_r _PARAMS ((struct _reent *, int, void *, size_t));
+extern int _rename_r _PARAMS ((struct _reent *, const char *, const char *));
+extern void *_sbrk_r _PARAMS ((struct _reent *, ptrdiff_t));
+extern int _stat_r _PARAMS ((struct _reent *, const char *, struct stat *));
+extern _CLOCK_T_ _times_r _PARAMS ((struct _reent *, struct tms *));
+extern int _unlink_r _PARAMS ((struct _reent *, const char *));
+extern int _wait_r _PARAMS ((struct _reent *, int *));
+extern _ssize_t _write_r _PARAMS ((struct _reent *, int, const void *, size_t));
+
+/* This one is not guaranteed to be available on all targets.  */
+extern int _gettimeofday_r _PARAMS ((struct _reent *, struct timeval *__tp, void *__tzp));
+
+#ifdef __LARGE64_FILES
+
+#if defined(__CYGWIN__) && defined(_COMPILING_NEWLIB)
+#define stat64 __stat64
+#endif
+
+struct stat64;
+
+extern _off64_t _lseek64_r _PARAMS ((struct _reent *, int, _off64_t, int));
+extern int _fstat64_r _PARAMS ((struct _reent *, int, struct stat64 *));
+extern int _open64_r _PARAMS ((struct _reent *, const char *, int, int));
+extern int _stat64_r _PARAMS ((struct _reent *, const char *, struct stat64 *));
+#endif
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _REENT_H_ */
diff --git a/newlib/include/regdef.h b/newlib/include/regdef.h
new file mode 100644 (file)
index 0000000..8cf144b
--- /dev/null
@@ -0,0 +1,7 @@
+/* regdef.h -- define register names.  */
+
+/* This is a standard include file for MIPS targets.  Other target
+   probably don't define it, and attempts to include this file will
+   fail.  */
+
+#include <machine/regdef.h>
diff --git a/newlib/include/regex.h b/newlib/include/regex.h
new file mode 100644 (file)
index 0000000..2ac78f4
--- /dev/null
@@ -0,0 +1,102 @@
+/*-
+ * Copyright (c) 1992 Henry Spencer.
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Henry Spencer of the University of Toronto.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)regex.h     8.2 (Berkeley) 1/3/94
+ * $FreeBSD: src/include/regex.h,v 1.4 2002/03/23 17:24:53 imp Exp $
+ */
+
+#ifndef _REGEX_H_
+#define        _REGEX_H_
+
+#include <sys/cdefs.h>
+
+/* types */
+typedef off_t regoff_t;
+
+typedef struct {
+       int re_magic;
+       size_t re_nsub;         /* number of parenthesized subexpressions */
+       __const char *re_endp;  /* end pointer for REG_PEND */
+       struct re_guts *re_g;   /* none of your business :-) */
+} regex_t;
+
+typedef struct {
+       regoff_t rm_so;         /* start of match */
+       regoff_t rm_eo;         /* end of match */
+} regmatch_t;
+
+/* regcomp() flags */
+#define        REG_BASIC       0000
+#define        REG_EXTENDED    0001
+#define        REG_ICASE       0002
+#define        REG_NOSUB       0004
+#define        REG_NEWLINE     0010
+#define        REG_NOSPEC      0020
+#define        REG_PEND        0040
+#define        REG_DUMP        0200
+
+/* regerror() flags */
+#define        REG_NOMATCH      1
+#define        REG_BADPAT       2
+#define        REG_ECOLLATE     3
+#define        REG_ECTYPE       4
+#define        REG_EESCAPE      5
+#define        REG_ESUBREG      6
+#define        REG_EBRACK       7
+#define        REG_EPAREN       8
+#define        REG_EBRACE       9
+#define        REG_BADBR       10
+#define        REG_ERANGE      11
+#define        REG_ESPACE      12
+#define        REG_BADRPT      13
+#define        REG_EMPTY       14
+#define        REG_ASSERT      15
+#define        REG_INVARG      16
+#define        REG_ATOI        255     /* convert name to number (!) */
+#define        REG_ITOA        0400    /* convert number to name (!) */
+
+/* regexec() flags */
+#define        REG_NOTBOL      00001
+#define        REG_NOTEOL      00002
+#define        REG_STARTEND    00004
+#define        REG_TRACE       00400   /* tracing of execution */
+#define        REG_LARGE       01000   /* force large representation */
+#define        REG_BACKR       02000   /* force use of backref code */
+
+__BEGIN_DECLS
+int    regcomp(regex_t *, const char *, int);
+size_t regerror(int, const regex_t *, char *, size_t);
+int    regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
+void   regfree(regex_t *);
+__END_DECLS
+
+#endif /* !_REGEX_H_ */
diff --git a/newlib/include/sched.h b/newlib/include/sched.h
new file mode 100644 (file)
index 0000000..a59a0f4
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef _SCHED_H_
+#define _SCHED_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/sched.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SCHED_H_ */
diff --git a/newlib/include/search.h b/newlib/include/search.h
new file mode 100644 (file)
index 0000000..c78ce18
--- /dev/null
@@ -0,0 +1,59 @@
+/*     $NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $     */
+/* $FreeBSD: src/include/search.h,v 1.4 2002/03/23 17:24:53 imp Exp $ */
+
+/*
+ * Written by J.T. Conklin <jtc@netbsd.org>
+ * Public domain.
+ */
+
+#ifndef _SEARCH_H_
+#define _SEARCH_H_
+
+#include <sys/cdefs.h>
+#include <machine/ansi.h>
+#include <sys/types.h>
+
+typedef struct entry {
+       char *key;
+       void *data;
+} ENTRY;
+
+typedef enum {
+       FIND, ENTER
+} ACTION;
+
+typedef enum {
+       preorder,
+       postorder,
+       endorder,
+       leaf
+} VISIT;
+
+#ifdef _SEARCH_PRIVATE
+typedef struct node {
+       char         *key;
+       struct node  *llink, *rlink;
+} node_t;
+#endif
+
+struct hsearch_data
+{
+  struct internal_head *htable;
+  size_t htablesize;
+};
+
+__BEGIN_DECLS
+int     hcreate(size_t);
+void    hdestroy(void);
+ENTRY  *hsearch(ENTRY, ACTION);
+int     hcreate_r(size_t, struct hsearch_data *);
+void    hdestroy_r(struct hsearch_data *);
+int    hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *);
+void   *tdelete(const void *, void **, int (*)(const void *, const void *));
+void   tdestroy (void *, void (*)(void *));
+void   *tfind(const void *, void **, int (*)(const void *, const void *));
+void   *tsearch(const void *, void **, int (*)(const void *, const void *));
+void      twalk(const void *, void (*)(const void *, VISIT, int));
+__END_DECLS
+
+#endif /* !_SEARCH_H_ */
diff --git a/newlib/include/setjmp.h b/newlib/include/setjmp.h
new file mode 100644 (file)
index 0000000..c958d90
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+       setjmp.h
+       stubs for future use.
+*/
+
+#ifndef _SETJMP_H_
+#define _SETJMP_H_
+
+#include "_ansi.h"
+#include <machine/setjmp.h>
+
+_BEGIN_STD_C
+
+void   _EXFUN(longjmp,(jmp_buf __jmpb, int __retval));
+int    _EXFUN(setjmp,(jmp_buf __jmpb));
+
+_END_STD_C
+
+#endif /* _SETJMP_H_ */
+
diff --git a/newlib/include/signal.h b/newlib/include/signal.h
new file mode 100644 (file)
index 0000000..1b3b57b
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef _SIGNAL_H_
+#define _SIGNAL_H_
+
+#include "_ansi.h"
+#include <sys/signal.h>
+
+_BEGIN_STD_C
+
+typedef int    sig_atomic_t;           /* Atomic entity type (ANSI) */
+
+#define SIG_DFL ((_sig_func_ptr)0)     /* Default action */
+#define SIG_IGN ((_sig_func_ptr)1)     /* Ignore action */
+#define SIG_ERR ((_sig_func_ptr)-1)    /* Error return */
+
+struct _reent;
+
+_sig_func_ptr _EXFUN(_signal_r, (struct _reent *, int, _sig_func_ptr));
+int    _EXFUN(_raise_r, (struct _reent *, int));
+
+#ifndef _REENT_ONLY
+_sig_func_ptr _EXFUN(signal, (int, _sig_func_ptr));
+int    _EXFUN(raise, (int));
+#endif
+
+_END_STD_C
+
+#endif /* _SIGNAL_H_ */
diff --git a/newlib/include/stdint.h b/newlib/include/stdint.h
new file mode 100644 (file)
index 0000000..671400b
--- /dev/null
@@ -0,0 +1,483 @@
+/*
+ * Copyright (c) 2004, 2005 by
+ * Ralf Corsepius, Ulm/Germany. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#ifndef _STDINT_H
+#define _STDINT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__GNUC__) && \
+  ( (__GNUC__ >= 4) || \
+    ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2) ) )
+/* gcc > 3.2 implicitly defines the values we are interested */
+#define __STDINT_EXP(x) __##x##__
+#else
+#define __STDINT_EXP(x) x
+#include <limits.h>
+#endif
+
+/* Check if "long long" is 64bit wide */
+/* Modern GCCs provide __LONG_LONG_MAX__, SUSv3 wants LLONG_MAX */
+#if ( defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff) ) \
+  || ( defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff) )
+#define __have_longlong64 1
+#endif
+
+/* Check if "long" is 64bit or 32bit wide */
+#if __STDINT_EXP(LONG_MAX) > 0x7fffffff
+#define __have_long64 1
+#elif __STDINT_EXP(LONG_MAX) == 0x7fffffff && !defined(__SPU__)
+#define __have_long32 1
+#endif
+
+#if __STDINT_EXP(SCHAR_MAX) == 0x7f
+typedef signed char int8_t ;
+typedef unsigned char uint8_t ;
+#define __int8_t_defined 1
+#endif
+
+#if __int8_t_defined
+typedef signed char int_least8_t;
+typedef unsigned char uint_least8_t;
+#define __int_least8_t_defined 1
+#endif
+
+#if __STDINT_EXP(SHRT_MAX) == 0x7fff
+typedef signed short int16_t;
+typedef unsigned short uint16_t;
+#define __int16_t_defined 1
+#elif __STDINT_EXP(INT_MAX) == 0x7fff
+typedef signed int int16_t;
+typedef unsigned int uint16_t;
+#define __int16_t_defined 1
+#elif __STDINT_EXP(SCHAR_MAX) == 0x7fff
+typedef signed char int16_t;
+typedef unsigned char uint16_t;
+#define __int16_t_defined 1
+#endif
+
+#if __int16_t_defined
+typedef int16_t        int_least16_t;
+typedef uint16_t       uint_least16_t;
+#define __int_least16_t_defined 1
+
+#if !__int_least8_t_defined
+typedef int16_t                int_least8_t;
+typedef uint16_t       uint_least8_t;
+#define __int_least8_t_defined 1
+#endif
+#endif
+
+#if __have_long32
+typedef signed long int32_t;
+typedef unsigned long uint32_t;
+#define __int32_t_defined 1
+#elif __STDINT_EXP(INT_MAX) == 0x7fffffffL
+typedef signed int int32_t;
+typedef unsigned int uint32_t;
+#define __int32_t_defined 1
+#elif __STDINT_EXP(SHRT_MAX) == 0x7fffffffL
+typedef signed short int32_t;
+typedef unsigned short uint32_t;
+#define __int32_t_defined 1
+#elif __STDINT_EXP(SCHAR_MAX) == 0x7fffffffL
+typedef signed char int32_t;
+typedef unsigned char uint32_t;
+#define __int32_t_defined 1
+#endif
+
+#if __int32_t_defined
+typedef int32_t        int_least32_t;
+typedef uint32_t       uint_least32_t;
+#define __int_least32_t_defined 1
+
+#if !__int_least8_t_defined
+typedef int32_t                int_least8_t;
+typedef uint32_t       uint_least8_t;
+#define __int_least8_t_defined 1
+#endif
+
+#if !__int_least16_t_defined
+typedef int32_t                int_least16_t;
+typedef uint32_t       uint_least16_t;
+#define __int_least16_t_defined 1
+#endif
+#endif
+
+#if __have_long64
+typedef signed long int64_t;
+typedef unsigned long uint64_t;
+#define __int64_t_defined 1
+#elif __have_longlong64
+typedef signed long long int64_t;
+typedef unsigned long long uint64_t;
+#define __int64_t_defined 1
+#elif  __STDINT_EXP(INT_MAX) > 0x7fffffff
+typedef signed int int64_t;
+typedef unsigned int uint64_t;
+#define __int64_t_defined 1
+#endif
+
+#if __int64_t_defined
+typedef int64_t        int_least64_t;
+typedef uint64_t       uint_least64_t;
+#define __int_least64_t_defined 1
+
+#if !__int_least8_t_defined
+typedef int64_t                int_least8_t;
+typedef uint64_t       uint_least8_t;
+#define __int_least8_t_defined 1
+#endif
+
+#if !__int_least16_t_defined
+typedef int64_t                int_least16_t;
+typedef uint64_t       uint_least16_t;
+#define __int_least16_t_defined 1
+#endif
+
+#if !__int_least32_t_defined
+typedef int64_t                int_least32_t;
+typedef uint64_t       uint_least32_t;
+#define __int_least32_t_defined 1
+#endif
+#endif
+
+/*
+ * Fastest minimum-width integer types
+ *
+ * Assume int to be the fastest type for all types with a width 
+ * less than __INT_MAX__ rsp. INT_MAX
+ */
+#if __STDINT_EXP(INT_MAX) >= 0x7f
+  typedef signed int int_fast8_t;
+  typedef unsigned int uint_fast8_t;
+#define __int_fast8_t_defined 1
+#endif
+
+#if __STDINT_EXP(INT_MAX) >= 0x7fff
+  typedef signed int int_fast16_t;
+  typedef unsigned int uint_fast16_t;
+#define __int_fast16_t_defined 1
+#endif
+
+#if __STDINT_EXP(INT_MAX) >= 0x7fffffff
+  typedef signed int int_fast32_t;
+  typedef unsigned int uint_fast32_t;
+#define __int_fast32_t_defined 1
+#endif
+
+#if __STDINT_EXP(INT_MAX) > 0x7fffffff
+  typedef signed int int_fast64_t;
+  typedef unsigned int uint_fast64_t;
+#define __int_fast64_t_defined 1
+#endif
+
+/*
+ * Fall back to [u]int_least<N>_t for [u]int_fast<N>_t types
+ * not having been defined, yet.
+ * Leave undefined, if [u]int_least<N>_t should not be available.
+ */
+#if !__int_fast8_t_defined
+#if __int_least8_t_defined
+  typedef int_least8_t int_fast8_t;
+  typedef uint_least8_t uint_fast8_t;
+#define __int_fast8_t_defined 1
+#endif
+#endif
+
+#if !__int_fast16_t_defined
+#if __int_least16_t_defined
+  typedef int_least16_t int_fast16_t;
+  typedef uint_least16_t uint_fast16_t;
+#define __int_fast16_t_defined 1
+#endif
+#endif
+
+#if !__int_fast32_t_defined
+#if __int_least32_t_defined
+  typedef int_least32_t int_fast32_t;
+  typedef uint_least32_t uint_fast32_t;
+#define __int_fast32_t_defined 1
+#endif
+#endif
+
+#if !__int_fast64_t_defined
+#if __int_least64_t_defined
+  typedef int_least64_t int_fast64_t;
+  typedef uint_least64_t uint_fast64_t;
+#define __int_fast64_t_defined 1
+#endif
+#endif
+
+/* Greatest-width integer types */
+/* Modern GCCs provide __INTMAX_TYPE__ */
+#if defined(__INTMAX_TYPE__)
+  typedef __INTMAX_TYPE__ intmax_t;
+#elif __have_longlong64
+  typedef signed long long intmax_t;
+#else
+  typedef signed long intmax_t;
+#endif
+
+/* Modern GCCs provide __UINTMAX_TYPE__ */
+#if defined(__UINTMAX_TYPE__)
+  typedef __UINTMAX_TYPE__ uintmax_t;
+#elif __have_longlong64
+  typedef unsigned long long uintmax_t;
+#else
+  typedef unsigned long uintmax_t;
+#endif
+
+/*
+ * GCC doesn't provide an appropriate macro for [u]intptr_t
+ * For now, use __PTRDIFF_TYPE__
+ */
+#if defined(__PTRDIFF_TYPE__)
+typedef signed __PTRDIFF_TYPE__ intptr_t;
+typedef unsigned __PTRDIFF_TYPE__ uintptr_t;
+#else
+/*
+ * Fallback to hardcoded values, 
+ * should be valid on cpu's with 32bit int/32bit void*
+ */
+typedef signed long intptr_t;
+typedef unsigned long uintptr_t;
+#endif
+
+/* Limits of Specified-Width Integer Types */
+
+#if __int8_t_defined
+#define INT8_MIN       -128
+#define INT8_MAX        127
+#define UINT8_MAX       255
+#endif
+
+#if __int_least8_t_defined
+#define INT_LEAST8_MIN         -128
+#define INT_LEAST8_MAX          127
+#define UINT_LEAST8_MAX         255
+#else
+#error required type int_least8_t missing
+#endif
+
+#if __int16_t_defined
+#define INT16_MIN      -32768
+#define INT16_MAX       32767
+#define UINT16_MAX      65535
+#endif
+
+#if __int_least16_t_defined
+#define INT_LEAST16_MIN        -32768
+#define INT_LEAST16_MAX         32767
+#define UINT_LEAST16_MAX 65535
+#else
+#error required type int_least16_t missing
+#endif
+
+#if __int32_t_defined
+#if __have_long32
+#define INT32_MIN       (-2147483647L-1)
+#define INT32_MAX       2147483647L
+#define UINT32_MAX       4294967295UL
+#else
+#define INT32_MIN       (-2147483647-1)
+#define INT32_MAX       2147483647
+#define UINT32_MAX       4294967295U
+#endif
+#endif
+
+#if __int_least32_t_defined
+#if __have_long32
+#define INT_LEAST32_MIN  (-2147483647L-1)
+#define INT_LEAST32_MAX  2147483647L
+#define UINT_LEAST32_MAX 4294967295UL
+#else
+#define INT_LEAST32_MIN  (-2147483647-1)
+#define INT_LEAST32_MAX  2147483647
+#define UINT_LEAST32_MAX 4294967295U
+#endif
+#else
+#error required type int_least32_t missing
+#endif
+
+#if __int64_t_defined
+#if __have_long64
+#define INT64_MIN      (-9223372036854775807L-1L)
+#define INT64_MAX       9223372036854775807L
+#define UINT64_MAX     18446744073709551615U
+#elif __have_longlong64
+#define INT64_MIN      (-9223372036854775807LL-1LL)
+#define INT64_MAX       9223372036854775807LL
+#define UINT64_MAX     18446744073709551615ULL
+#endif
+#endif
+
+#if __int_least64_t_defined
+#if __have_long64
+#define INT_LEAST64_MIN  (-9223372036854775807L-1L)
+#define INT_LEAST64_MAX  9223372036854775807L
+#define UINT_LEAST64_MAX 18446744073709551615U
+#elif __have_longlong64
+#define INT_LEAST64_MIN  (-9223372036854775807LL-1LL)
+#define INT_LEAST64_MAX  9223372036854775807LL
+#define UINT_LEAST64_MAX 18446744073709551615ULL
+#endif
+#endif
+
+#if __int_fast8_t_defined
+#if __STDINT_EXP(INT_MAX) >= 0x7f
+#define INT_FAST8_MIN  (-__STDINT_EXP(INT_MAX)-1)
+#define INT_FAST8_MAX  __STDINT_EXP(INT_MAX)
+#define UINT_FAST8_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
+#else
+#define INT_FAST8_MIN  INT_LEAST8_MIN
+#define INT_FAST8_MAX  INT_LEAST8_MAX
+#define UINT_FAST8_MAX UINT_LEAST8_MAX
+#endif
+#endif
+
+#if __int_fast16_t_defined
+#if __STDINT_EXP(INT_MAX) >= 0x7fff
+#define INT_FAST16_MIN (-__STDINT_EXP(INT_MAX)-1)
+#define INT_FAST16_MAX __STDINT_EXP(INT_MAX)
+#define UINT_FAST16_MAX        (__STDINT_EXP(INT_MAX)*2U+1U)
+#else
+#define INT_FAST16_MIN INT_LEAST16_MIN
+#define INT_FAST16_MAX INT_LEAST16_MAX
+#define UINT_FAST16_MAX        UINT_LEAST16_MAX
+#endif
+#endif
+
+#if __int_fast32_t_defined
+#if __STDINT_EXP(INT_MAX) >= 0x7fffffff
+#define INT_FAST32_MIN (-__STDINT_EXP(INT_MAX)-1)
+#define INT_FAST32_MAX __STDINT_EXP(INT_MAX)
+#define UINT_FAST32_MAX        (__STDINT_EXP(INT_MAX)*2U+1U)
+#else
+#define INT_FAST32_MIN INT_LEAST32_MIN
+#define INT_FAST32_MAX INT_LEAST32_MAX
+#define UINT_FAST32_MAX        UINT_LEAST32_MAX
+#endif
+#endif
+
+#if __int_fast64_t_defined
+#if __STDINT_EXP(INT_MAX) > 0x7fffffff
+#define INT_FAST64_MIN (-__STDINT_EXP(INT_MAX)-1)
+#define INT_FAST64_MAX __STDINT_EXP(INT_MAX)
+#define UINT_FAST64_MAX        (__STDINT_EXP(INT_MAX)*2U+1U)
+#else
+#define INT_FAST64_MIN INT_LEAST64_MIN
+#define INT_FAST64_MAX INT_LEAST64_MAX
+#define UINT_FAST64_MAX        UINT_LEAST64_MAX
+#endif
+#endif
+
+#ifdef __INTMAX_MAX__
+#define INTMAX_MAX __INTMAX_MAX__
+#define INTMAX_MIN (-INTMAX_MAX - 1)
+#elif defined(__INTMAX_TYPE__)
+/* All relevant GCC versions prefer long to long long for intmax_t.  */
+#define INTMAX_MAX INT64_MAX
+#define INTMAX_MIN INT64_MIN
+#endif
+
+#ifdef __UINTMAX_MAX__
+#define UINTMAX_MAX __UINTMAX_MAX__
+#elif defined(__UINTMAX_TYPE__)
+/* All relevant GCC versions prefer long to long long for intmax_t.  */
+#define UINTMAX_MAX UINT64_MAX
+#endif
+
+/* This must match size_t in stddef.h, currently long unsigned int */
+#ifdef __SIZE_MAX__
+#define SIZE_MAX __SIZE_MAX__
+#else
+#define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)
+#endif
+
+/* This must match sig_atomic_t in <signal.h> (currently int) */
+#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
+#define SIG_ATOMIC_MAX __STDINT_EXP(INT_MAX)
+
+/* This must match ptrdiff_t  in <stddef.h> (currently long int) */
+#ifdef __PTRDIFF_MAX__
+#define PTRDIFF_MAX __PTRDIFF_MAX__
+#else
+#define PTRDIFF_MAX __STDINT_EXP(LONG_MAX)
+#endif
+#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
+
+#ifdef __WCHAR_MAX__
+#define WCHAR_MAX __WCHAR_MAX__
+#endif
+#ifdef __WCHAR_MIN__
+#define WCHAR_MIN __WCHAR_MIN__
+#endif
+
+/* wint_t is unsigned int on almost all GCC targets.  */
+#ifdef __WINT_MAX__
+#define WINT_MAX __WINT_MAX__
+#else
+#define WINT_MAX (__STDINT_EXP(INT_MAX) * 2U + 1U)
+#endif
+#ifdef __WINT_MIN__
+#define WINT_MIN __WINT_MIN__
+#else
+#define WINT_MIN 0U
+#endif
+
+/** Macros for minimum-width integer constant expressions */
+#define INT8_C(x)      x
+#if __STDINT_EXP(INT_MAX) > 0x7f
+#define UINT8_C(x)     x
+#else
+#define UINT8_C(x)     x##U
+#endif
+
+#define INT16_C(x)     x
+#if __STDINT_EXP(INT_MAX) > 0x7fff
+#define UINT16_C(x)    x
+#else
+#define UINT16_C(x)    x##U
+#endif
+
+#if __have_long32
+#define INT32_C(x)     x##L
+#define UINT32_C(x)    x##UL
+#else
+#define INT32_C(x)     x
+#define UINT32_C(x)    x##U
+#endif
+
+#if __int64_t_defined
+#if __have_longlong64
+#define INT64_C(x)     x##LL
+#define UINT64_C(x)    x##ULL
+#else
+#define INT64_C(x)     x##L
+#define UINT64_C(x)    x##UL
+#endif
+#endif
+
+/** Macros for greatest-width integer constant expression */
+#if __have_longlong64
+#define INTMAX_C(x)    x##LL
+#define UINTMAX_C(x)   x##ULL
+#else
+#define INTMAX_C(x)    x##L
+#define UINTMAX_C(x)   x##UL
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _STDINT_H */
diff --git a/newlib/include/stdio.h b/newlib/include/stdio.h
new file mode 100644 (file)
index 0000000..a55dd69
--- /dev/null
@@ -0,0 +1,703 @@
+/*
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)stdio.h     5.3 (Berkeley) 3/15/86
+ */
+
+/*
+ * NB: to fit things in six character monocase externals, the
+ * stdio code uses the prefix `__s' for stdio objects, typically
+ * followed by a three-character attempt at a mnemonic.
+ */
+
+#ifndef _STDIO_H_
+#define        _STDIO_H_
+
+#include "_ansi.h"
+
+#define        _FSTDIO                 /* ``function stdio'' */
+
+#define __need_size_t
+#include <stddef.h>
+
+#define __need___va_list
+#include <stdarg.h>
+
+/*
+ * <sys/reent.h> defines __FILE, _fpos_t.
+ * They must be defined there because struct _reent needs them (and we don't
+ * want reent.h to include this file.
+ */
+
+#include <sys/reent.h>
+#include <sys/types.h>
+
+_BEGIN_STD_C
+
+typedef __FILE FILE;
+
+#ifdef __CYGWIN__
+#ifdef __CYGWIN_USE_BIG_TYPES__
+typedef _fpos64_t fpos_t;
+#else
+typedef _fpos_t fpos_t;
+#endif
+#else
+typedef _fpos_t fpos_t;
+#ifdef __LARGE64_FILES
+typedef _fpos64_t fpos64_t;
+#endif
+#endif /* !__CYGWIN__ */
+
+#include <sys/stdio.h>
+
+#define        __SLBF  0x0001          /* line buffered */
+#define        __SNBF  0x0002          /* unbuffered */
+#define        __SRD   0x0004          /* OK to read */
+#define        __SWR   0x0008          /* OK to write */
+       /* RD and WR are never simultaneously asserted */
+#define        __SRW   0x0010          /* open for reading & writing */
+#define        __SEOF  0x0020          /* found EOF */
+#define        __SERR  0x0040          /* found error */
+#define        __SMBF  0x0080          /* _buf is from malloc */
+#define        __SAPP  0x0100          /* fdopen()ed in append mode - so must  write to end */
+#define        __SSTR  0x0200          /* this is an sprintf/snprintf string */
+#define        __SOPT  0x0400          /* do fseek() optimisation */
+#define        __SNPT  0x0800          /* do not do fseek() optimisation */
+#define        __SOFF  0x1000          /* set iff _offset is in fact correct */
+#define        __SORD  0x2000          /* true => stream orientation (byte/wide) decided */
+#if defined(__CYGWIN__)
+#  define __SCLE  0x4000        /* convert line endings CR/LF <-> NL */
+#endif
+#define        __SL64  0x8000          /* is 64-bit offset large file */
+
+/* _flags2 flags */
+#define        __SWID  0x2000          /* true => stream orientation wide, false => byte, only valid if __SORD in _flags is true */
+
+/*
+ * The following three definitions are for ANSI C, which took them
+ * from System V, which stupidly took internal interface macros and
+ * made them official arguments to setvbuf(), without renaming them.
+ * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
+ *
+ * Although these happen to match their counterparts above, the
+ * implementation does not rely on that (so these could be renumbered).
+ */
+#define        _IOFBF  0               /* setvbuf should set fully buffered */
+#define        _IOLBF  1               /* setvbuf should set line buffered */
+#define        _IONBF  2               /* setvbuf should set unbuffered */
+
+#ifndef NULL
+#define        NULL    0
+#endif
+
+#define        EOF     (-1)
+
+#ifdef __BUFSIZ__
+#define        BUFSIZ          __BUFSIZ__
+#else
+#define        BUFSIZ          1024
+#endif
+
+#ifdef __FOPEN_MAX__
+#define FOPEN_MAX      __FOPEN_MAX__
+#else
+#define        FOPEN_MAX       20
+#endif
+
+#ifdef __FILENAME_MAX__
+#define FILENAME_MAX    __FILENAME_MAX__
+#else
+#define        FILENAME_MAX    1024
+#endif
+
+#ifdef __L_tmpnam__
+#define L_tmpnam       __L_tmpnam__
+#else
+#define        L_tmpnam        FILENAME_MAX
+#endif
+
+#ifndef __STRICT_ANSI__
+#define P_tmpdir        "/tmp"
+#endif
+
+#ifndef SEEK_SET
+#define        SEEK_SET        0       /* set file offset to offset */
+#endif
+#ifndef SEEK_CUR
+#define        SEEK_CUR        1       /* set file offset to current plus offset */
+#endif
+#ifndef SEEK_END
+#define        SEEK_END        2       /* set file offset to EOF plus offset */
+#endif
+
+#define        TMP_MAX         26
+
+#ifndef _REENT_ONLY
+#define        stdin   (_REENT->_stdin)
+#define        stdout  (_REENT->_stdout)
+#define        stderr  (_REENT->_stderr)
+#else /* _REENT_ONLY */
+#define        stdin   (_impure_ptr->_stdin)
+#define        stdout  (_impure_ptr->_stdout)
+#define        stderr  (_impure_ptr->_stderr)
+#endif /* _REENT_ONLY */
+
+#define _stdin_r(x)    ((x)->_stdin)
+#define _stdout_r(x)   ((x)->_stdout)
+#define _stderr_r(x)   ((x)->_stderr)
+
+/*
+ * Functions defined in ANSI C standard.
+ */
+
+#ifdef __GNUC__
+#define __VALIST __gnuc_va_list
+#else
+#define __VALIST char*
+#endif
+
+FILE * _EXFUN(tmpfile, (void));
+char * _EXFUN(tmpnam, (char *));
+int    _EXFUN(fclose, (FILE *));
+int    _EXFUN(fflush, (FILE *));
+FILE * _EXFUN(freopen, (const char *, const char *, FILE *));
+void   _EXFUN(setbuf, (FILE *, char *));
+int    _EXFUN(setvbuf, (FILE *, char *, int, size_t));
+int    _EXFUN(fprintf, (FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+int    _EXFUN(fscanf, (FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
+int    _EXFUN(printf, (const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 1, 2))));
+int    _EXFUN(scanf, (const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 1, 2))));
+int    _EXFUN(sscanf, (const char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
+int    _EXFUN(vfprintf, (FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(vprintf, (const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 1, 0))));
+int    _EXFUN(vsprintf, (char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(fgetc, (FILE *));
+char *  _EXFUN(fgets, (char *, int, FILE *));
+int    _EXFUN(fputc, (int, FILE *));
+int    _EXFUN(fputs, (const char *, FILE *));
+int    _EXFUN(getc, (FILE *));
+int    _EXFUN(getchar, (void));
+char *  _EXFUN(gets, (char *));
+int    _EXFUN(putc, (int, FILE *));
+int    _EXFUN(putchar, (int));
+int    _EXFUN(puts, (const char *));
+int    _EXFUN(ungetc, (int, FILE *));
+size_t _EXFUN(fread, (_PTR, size_t _size, size_t _n, FILE *));
+size_t _EXFUN(fwrite, (const _PTR , size_t _size, size_t _n, FILE *));
+#ifdef _COMPILING_NEWLIB
+int    _EXFUN(fgetpos, (FILE *, _fpos_t *));
+#else
+int    _EXFUN(fgetpos, (FILE *, fpos_t *));
+#endif
+int    _EXFUN(fseek, (FILE *, long, int));
+#ifdef _COMPILING_NEWLIB
+int    _EXFUN(fsetpos, (FILE *, const _fpos_t *));
+#else
+int    _EXFUN(fsetpos, (FILE *, const fpos_t *));
+#endif
+long   _EXFUN(ftell, ( FILE *));
+void   _EXFUN(rewind, (FILE *));
+void   _EXFUN(clearerr, (FILE *));
+int    _EXFUN(feof, (FILE *));
+int    _EXFUN(ferror, (FILE *));
+void    _EXFUN(perror, (const char *));
+#ifndef _REENT_ONLY
+FILE * _EXFUN(fopen, (const char *_name, const char *_type));
+int    _EXFUN(sprintf, (char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+int    _EXFUN(remove, (const char *));
+int    _EXFUN(rename, (const char *, const char *));
+#endif
+#ifndef __STRICT_ANSI__
+#ifdef _COMPILING_NEWLIB
+int    _EXFUN(fseeko, (FILE *, _off_t, int));
+_off_t _EXFUN(ftello, ( FILE *));
+#else
+int    _EXFUN(fseeko, (FILE *, off_t, int));
+off_t  _EXFUN(ftello, ( FILE *));
+#endif
+#ifndef _REENT_ONLY
+int    _EXFUN(asiprintf, (char **, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+char * _EXFUN(asniprintf, (char *, size_t *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+char * _EXFUN(asnprintf, (char *, size_t *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(asprintf, (char **, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+#ifndef diprintf
+int    _EXFUN(diprintf, (int, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+#endif
+int    _EXFUN(fcloseall, (_VOID));
+int    _EXFUN(fiprintf, (FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+int    _EXFUN(fiscanf, (FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
+int    _EXFUN(iprintf, (const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 1, 2))));
+int    _EXFUN(iscanf, (const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 1, 2))));
+int    _EXFUN(siprintf, (char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+int    _EXFUN(siscanf, (const char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
+int    _EXFUN(snprintf, (char *, size_t, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(sniprintf, (char *, size_t, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+char * _EXFUN(tempnam, (const char *, const char *));
+int    _EXFUN(vasiprintf, (char **, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+char * _EXFUN(vasniprintf, (char *, size_t *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+char * _EXFUN(vasnprintf, (char *, size_t *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(vasprintf, (char **, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(vdiprintf, (int, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(vfiprintf, (FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(vfiscanf, (FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
+int    _EXFUN(vfscanf, (FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
+int    _EXFUN(viprintf, (const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 1, 0))));
+int    _EXFUN(viscanf, (const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 1, 0))));
+int    _EXFUN(vscanf, (const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 1, 0))));
+int    _EXFUN(vsiprintf, (char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(vsiscanf, (const char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
+int    _EXFUN(vsniprintf, (char *, size_t, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(vsnprintf, (char *, size_t, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(vsscanf, (const char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
+#endif /* !_REENT_ONLY */
+#endif /* !__STRICT_ANSI__ */
+
+/*
+ * Routines in POSIX 1003.1:2001.
+ */
+
+#ifndef __STRICT_ANSI__
+#ifndef _REENT_ONLY
+FILE * _EXFUN(fdopen, (int, const char *));
+#endif
+int    _EXFUN(fileno, (FILE *));
+int    _EXFUN(getw, (FILE *));
+int    _EXFUN(pclose, (FILE *));
+FILE *  _EXFUN(popen, (const char *, const char *));
+int    _EXFUN(putw, (int, FILE *));
+void    _EXFUN(setbuffer, (FILE *, char *, int));
+int    _EXFUN(setlinebuf, (FILE *));
+int    _EXFUN(getc_unlocked, (FILE *));
+int    _EXFUN(getchar_unlocked, (void));
+void   _EXFUN(flockfile, (FILE *));
+int    _EXFUN(ftrylockfile, (FILE *));
+void   _EXFUN(funlockfile, (FILE *));
+int    _EXFUN(putc_unlocked, (int, FILE *));
+int    _EXFUN(putchar_unlocked, (int));
+#endif /* ! __STRICT_ANSI__ */
+
+/*
+ * Routines in POSIX 1003.1:200x.
+ */
+
+#ifndef __STRICT_ANSI__
+# ifndef _REENT_ONLY
+#  ifndef dprintf
+int    _EXFUN(dprintf, (int, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+#  endif
+FILE * _EXFUN(fmemopen, (void *, size_t, const char *));
+/* getdelim - see __getdelim for now */
+/* getline - see __getline for now */
+FILE * _EXFUN(open_memstream, (char **, size_t *));
+#if defined (__CYGWIN__)
+int    _EXFUN(renameat, (int, const char *, int, const char *));
+int    _EXFUN(symlinkat, (const char *, int, const char *));
+#endif
+int    _EXFUN(vdprintf, (int, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+# endif
+#endif
+
+/*
+ * Recursive versions of the above.
+ */
+
+int    _EXFUN(_asiprintf_r, (struct _reent *, char **, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+char * _EXFUN(_asniprintf_r, (struct _reent *, char *, size_t *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 5))));
+char * _EXFUN(_asnprintf_r, (struct _reent *, char *, size_t *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 5))));
+int    _EXFUN(_asprintf_r, (struct _reent *, char **, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(_diprintf_r, (struct _reent *, int, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(_dprintf_r, (struct _reent *, int, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(_fclose_r, (struct _reent *, FILE *));
+int    _EXFUN(_fcloseall_r, (struct _reent *));
+FILE * _EXFUN(_fdopen_r, (struct _reent *, int, const char *));
+int    _EXFUN(_fflush_r, (struct _reent *, FILE *));
+int    _EXFUN(_fgetc_r, (struct _reent *, FILE *));
+char *  _EXFUN(_fgets_r, (struct _reent *, char *, int, FILE *));
+#ifdef _COMPILING_NEWLIB
+int    _EXFUN(_fgetpos_r, (struct _reent *, FILE *, _fpos_t *));
+int    _EXFUN(_fsetpos_r, (struct _reent *, FILE *, const _fpos_t *));
+#else
+int    _EXFUN(_fgetpos_r, (struct _reent *, FILE *, fpos_t *));
+int    _EXFUN(_fsetpos_r, (struct _reent *, FILE *, const fpos_t *));
+#endif
+int    _EXFUN(_fiprintf_r, (struct _reent *, FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(_fiscanf_r, (struct _reent *, FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
+FILE * _EXFUN(_fmemopen_r, (struct _reent *, void *, size_t, const char *));
+FILE * _EXFUN(_fopen_r, (struct _reent *, const char *, const char *));
+FILE * _EXFUN(_freopen_r, (struct _reent *, const char *, const char *, FILE *));
+int    _EXFUN(_fprintf_r, (struct _reent *, FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(_fputc_r, (struct _reent *, int, FILE *));
+int    _EXFUN(_fputs_r, (struct _reent *, const char *, FILE *));
+size_t _EXFUN(_fread_r, (struct _reent *, _PTR, size_t _size, size_t _n, FILE *));
+int    _EXFUN(_fscanf_r, (struct _reent *, FILE *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
+int    _EXFUN(_fseek_r, (struct _reent *, FILE *, long, int));
+int    _EXFUN(_fseeko_r,(struct _reent *, FILE *, _off_t, int));
+long   _EXFUN(_ftell_r, (struct _reent *, FILE *));
+_off_t _EXFUN(_ftello_r,(struct _reent *, FILE *));
+void   _EXFUN(_rewind_r, (struct _reent *, FILE *));
+size_t _EXFUN(_fwrite_r, (struct _reent *, const _PTR , size_t _size, size_t _n, FILE *));
+int    _EXFUN(_getc_r, (struct _reent *, FILE *));
+int    _EXFUN(_getc_unlocked_r, (struct _reent *, FILE *));
+int    _EXFUN(_getchar_r, (struct _reent *));
+int    _EXFUN(_getchar_unlocked_r, (struct _reent *));
+char * _EXFUN(_gets_r, (struct _reent *, char *));
+int    _EXFUN(_iprintf_r, (struct _reent *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+int    _EXFUN(_iscanf_r, (struct _reent *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
+int    _EXFUN(_mkstemp_r, (struct _reent *, char *));
+char * _EXFUN(_mktemp_r, (struct _reent *, char *));
+FILE * _EXFUN(_open_memstream_r, (struct _reent *, char **, size_t *));
+void   _EXFUN(_perror_r, (struct _reent *, const char *));
+int    _EXFUN(_printf_r, (struct _reent *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 3))));
+int    _EXFUN(_putc_r, (struct _reent *, int, FILE *));
+int    _EXFUN(_putc_unlocked_r, (struct _reent *, int, FILE *));
+int    _EXFUN(_putchar_unlocked_r, (struct _reent *, int));
+int    _EXFUN(_putchar_r, (struct _reent *, int));
+int    _EXFUN(_puts_r, (struct _reent *, const char *));
+int    _EXFUN(_remove_r, (struct _reent *, const char *));
+int    _EXFUN(_rename_r, (struct _reent *,
+                          const char *_old, const char *_new));
+int    _EXFUN(_scanf_r, (struct _reent *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
+int    _EXFUN(_siprintf_r, (struct _reent *, char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(_siscanf_r, (struct _reent *, const char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
+int    _EXFUN(_sniprintf_r, (struct _reent *, char *, size_t, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 5))));
+int    _EXFUN(_snprintf_r, (struct _reent *, char *, size_t, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 5))));
+int    _EXFUN(_sprintf_r, (struct _reent *, char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
+int    _EXFUN(_sscanf_r, (struct _reent *, const char *, const char *, ...)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
+char * _EXFUN(_tempnam_r, (struct _reent *, const char *, const char *));
+FILE * _EXFUN(_tmpfile_r, (struct _reent *));
+char * _EXFUN(_tmpnam_r, (struct _reent *, char *));
+int    _EXFUN(_ungetc_r, (struct _reent *, int, FILE *));
+int    _EXFUN(_vasiprintf_r, (struct _reent *, char **, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+char * _EXFUN(_vasniprintf_r, (struct _reent*, char *, size_t *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 0))));
+char * _EXFUN(_vasnprintf_r, (struct _reent*, char *, size_t *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 0))));
+int    _EXFUN(_vasprintf_r, (struct _reent *, char **, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(_vdiprintf_r, (struct _reent *, int, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(_vdprintf_r, (struct _reent *, int, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(_vfiprintf_r, (struct _reent *, FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(_vfiscanf_r, (struct _reent *, FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
+int    _EXFUN(_vfprintf_r, (struct _reent *, FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(_vfscanf_r, (struct _reent *, FILE *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
+int    _EXFUN(_viprintf_r, (struct _reent *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(_viscanf_r, (struct _reent *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
+int    _EXFUN(_vprintf_r, (struct _reent *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 2, 0))));
+int    _EXFUN(_vscanf_r, (struct _reent *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
+int    _EXFUN(_vsiprintf_r, (struct _reent *, char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(_vsiscanf_r, (struct _reent *, const char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
+int    _EXFUN(_vsniprintf_r, (struct _reent *, char *, size_t, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 0))));
+int    _EXFUN(_vsnprintf_r, (struct _reent *, char *, size_t, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 4, 0))));
+int    _EXFUN(_vsprintf_r, (struct _reent *, char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
+int    _EXFUN(_vsscanf_r, (struct _reent *, const char *, const char *, __VALIST)
+               _ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
+
+ssize_t _EXFUN(__getdelim, (char **, size_t *, int, FILE *));
+ssize_t _EXFUN(__getline, (char **, size_t *, FILE *));
+
+#ifdef __LARGE64_FILES
+#if !defined(__CYGWIN__) || defined(_COMPILING_NEWLIB)
+FILE * _EXFUN(fdopen64, (int, const char *));
+FILE *  _EXFUN(fopen64, (const char *, const char *));
+FILE *  _EXFUN(freopen64, (_CONST char *, _CONST char *, FILE *));
+_off64_t _EXFUN(ftello64, (FILE *));
+_off64_t _EXFUN(fseeko64, (FILE *, _off64_t, int));
+int     _EXFUN(fgetpos64, (FILE *, _fpos64_t *));
+int     _EXFUN(fsetpos64, (FILE *, const _fpos64_t *));
+FILE *  _EXFUN(tmpfile64, (void));
+
+FILE * _EXFUN(_fdopen64_r, (struct _reent *, int, const char *));
+FILE *  _EXFUN(_fopen64_r, (struct _reent *,const char *, const char *));
+FILE *  _EXFUN(_freopen64_r, (struct _reent *, _CONST char *, _CONST char *, FILE *));
+_off64_t _EXFUN(_ftello64_r, (struct _reent *, FILE *));
+_off64_t _EXFUN(_fseeko64_r, (struct _reent *, FILE *, _off64_t, int));
+int     _EXFUN(_fgetpos64_r, (struct _reent *, FILE *, _fpos64_t *));
+int     _EXFUN(_fsetpos64_r, (struct _reent *, FILE *, const _fpos64_t *));
+FILE *  _EXFUN(_tmpfile64_r, (struct _reent *));
+#endif /* !__CYGWIN__ */
+#endif /* __LARGE64_FILES */
+
+/*
+ * Routines internal to the implementation.
+ */
+
+int    _EXFUN(__srget_r, (struct _reent *, FILE *));
+int    _EXFUN(__swbuf_r, (struct _reent *, int, FILE *));
+
+/*
+ * Stdio function-access interface.
+ */
+
+#ifndef __STRICT_ANSI__
+# ifdef __LARGE64_FILES
+FILE   *_EXFUN(funopen,(const _PTR __cookie,
+               int (*__readfn)(_PTR __c, char *__buf, int __n),
+               int (*__writefn)(_PTR __c, const char *__buf, int __n),
+               _fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence),
+               int (*__closefn)(_PTR __c)));
+FILE   *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie,
+               int (*__readfn)(_PTR __c, char *__buf, int __n),
+               int (*__writefn)(_PTR __c, const char *__buf, int __n),
+               _fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence),
+               int (*__closefn)(_PTR __c)));
+# else
+FILE   *_EXFUN(funopen,(const _PTR __cookie,
+               int (*__readfn)(_PTR __cookie, char *__buf, int __n),
+               int (*__writefn)(_PTR __cookie, const char *__buf, int __n),
+               fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence),
+               int (*__closefn)(_PTR __cookie)));
+FILE   *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie,
+               int (*__readfn)(_PTR __cookie, char *__buf, int __n),
+               int (*__writefn)(_PTR __cookie, const char *__buf, int __n),
+               fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence),
+               int (*__closefn)(_PTR __cookie)));
+# endif /* !__LARGE64_FILES */
+
+# define       fropen(__cookie, __fn) funopen(__cookie, __fn, (int (*)())0, \
+                                              (fpos_t (*)())0, (int (*)())0)
+# define       fwopen(__cookie, __fn) funopen(__cookie, (int (*)())0, __fn, \
+                                              (fpos_t (*)())0, (int (*)())0)
+
+typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n);
+typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf,
+                                       size_t __n);
+# ifdef __LARGE64_FILES
+typedef int cookie_seek_function_t(void *__cookie, _off64_t *__off,
+                                  int __whence);
+# else
+typedef int cookie_seek_function_t(void *__cookie, off_t *__off, int __whence);
+# endif /* !__LARGE64_FILES */
+typedef int cookie_close_function_t(void *__cookie);
+typedef struct
+{
+  /* These four struct member names are dictated by Linux; hopefully,
+     they don't conflict with any macros.  */
+  cookie_read_function_t  *read;
+  cookie_write_function_t *write;
+  cookie_seek_function_t  *seek;
+  cookie_close_function_t *close;
+} cookie_io_functions_t;
+FILE *_EXFUN(fopencookie,(void *__cookie,
+               const char *__mode, cookie_io_functions_t __functions));
+FILE *_EXFUN(_fopencookie_r,(struct _reent *, void *__cookie,
+               const char *__mode, cookie_io_functions_t __functions));
+#endif /* ! __STRICT_ANSI__ */
+
+#ifndef __CUSTOM_FILE_IO__
+/*
+ * The __sfoo macros are here so that we can 
+ * define function versions in the C library.
+ */
+#define       __sgetc_raw_r(__ptr, __f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++))
+
+#ifdef __SCLE
+/*  For a platform with CR/LF, additional logic is required by
+  __sgetc_r which would otherwise simply be a macro; therefore we
+  use an inlined function.  The function is only meant to be inlined
+  in place as used and the function body should never be emitted.  
+
+  There are two possible means to this end when compiling with GCC,
+  one when compiling with a standard C99 compiler, and for other
+  compilers we're just stuck.  At the moment, this issue only
+  affects the Cygwin target, so we'll most likely be using GCC.
+
+  The traditional meaning of 'extern inline' for GCC is not
+  to emit the function body unless the address is explicitly
+  taken.  However this behaviour is changing to match the C99
+  standard, which uses 'extern inline' to indicate that the
+  function body *must* be emitted.  If we are using GCC, but do
+  not have the new behaviour, we need to use extern inline; if
+  we are using a new GCC with the C99-compatible behaviour, or
+  a non-GCC compiler (which we will have to hope is C99, since
+  there is no other way to achieve the effect of omitting the
+  function if it isn't referenced) we just use plain 'inline',
+  which c99 defines to mean more-or-less the same as the Gnu C
+  'extern inline'.  */
+#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
+/* We're using GCC, but without the new C99-compatible behaviour.  */
+#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__))
+#else
+/* We're using GCC in C99 mode, or an unknown compiler which 
+  we just have to hope obeys the C99 semantics of inline.  */
+#define _ELIDABLE_INLINE __inline__
+#endif
+
+_ELIDABLE_INLINE int __sgetc_r(struct _reent *__ptr, FILE *__p)
+  {
+    int __c = __sgetc_raw_r(__ptr, __p);
+    if ((__p->_flags & __SCLE) && (__c == '\r'))
+      {
+      int __c2 = __sgetc_raw_r(__ptr, __p);
+      if (__c2 == '\n')
+        __c = __c2;
+      else
+        ungetc(__c2, __p);
+      }
+    return __c;
+  }
+#else
+#define __sgetc_r(__ptr, __p) __sgetc_raw_r(__ptr, __p)
+#endif
+
+#ifdef _never /* __GNUC__ */
+/* If this inline is actually used, then systems using coff debugging
+   info get hopelessly confused.  21sept93 rich@cygnus.com.  */
+_ELIDABLE_INLINE int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
+       if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
+               return (*_p->_p++ = _c);
+       else
+               return (__swbuf_r(_ptr, _c, _p));
+}
+#else
+/*
+ * This has been tuned to generate reasonable code on the vax using pcc
+ */
+#define       __sputc_raw_r(__ptr, __c, __p) \
+       (--(__p)->_w < 0 ? \
+               (__p)->_w >= (__p)->_lbfsize ? \
+                       (*(__p)->_p = (__c)), *(__p)->_p != '\n' ? \
+                               (int)*(__p)->_p++ : \
+                               __swbuf_r(__ptr, '\n', __p) : \
+                       __swbuf_r(__ptr, (int)(__c), __p) : \
+               (*(__p)->_p = (__c), (int)*(__p)->_p++))
+#ifdef __SCLE
+#define __sputc_r(__ptr, __c, __p) \
+        ((((__p)->_flags & __SCLE) && ((__c) == '\n')) \
+          ? __sputc_raw_r(__ptr, '\r', (__p)) : 0 , \
+        __sputc_raw_r((__ptr), (__c), (__p)))
+#else
+#define __sputc_r(__ptr, __c, __p) __sputc_raw_r(__ptr, __c, __p)
+#endif
+#endif
+
+#define        __sfeof(p)      (((p)->_flags & __SEOF) != 0)
+#define        __sferror(p)    (((p)->_flags & __SERR) != 0)
+#define        __sclearerr(p)  ((void)((p)->_flags &= ~(__SERR|__SEOF)))
+#define        __sfileno(p)    ((p)->_file)
+
+#ifndef _REENT_SMALL
+#define        feof(p)         __sfeof(p)
+#define        ferror(p)       __sferror(p)
+#define        clearerr(p)     __sclearerr(p)
+#endif
+
+#if 0 /*ndef __STRICT_ANSI__ - FIXME: must initialize stdio first, use fn */
+#define        fileno(p)       __sfileno(p)
+#endif
+
+#ifndef __CYGWIN__
+#ifndef lint
+#define        getc(fp)        __sgetc_r(_REENT, fp)
+#define putc(x, fp)    __sputc_r(_REENT, x, fp)
+#endif /* lint */
+#endif /* __CYGWIN__ */
+
+#ifndef __STRICT_ANSI__
+/* fast always-buffered version, true iff error */
+#define        fast_putc(x,p) (--(p)->_w < 0 ? \
+       __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0))
+
+#define        L_cuserid       9               /* posix says it goes in stdio.h :( */
+#ifdef __CYGWIN__
+#define L_ctermid       16
+#endif
+#endif
+
+#endif /* !__CUSTOM_FILE_IO__ */
+
+#define        getchar()       getc(stdin)
+#define        putchar(x)      putc(x, stdout)
+
+_END_STD_C
+
+#endif /* _STDIO_H_ */
diff --git a/newlib/include/stdlib.h b/newlib/include/stdlib.h
new file mode 100644 (file)
index 0000000..be4fa44
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * stdlib.h
+ *
+ * Definitions for common types, variables, and functions.
+ */
+
+#ifndef _STDLIB_H_
+#define _STDLIB_H_
+
+#include "_ansi.h"
+
+#define __need_size_t
+#define __need_wchar_t
+#include <stddef.h>
+
+#include <sys/reent.h>
+#include <machine/stdlib.h>
+#ifndef __STRICT_ANSI__
+#include <alloca.h>
+#endif
+
+#ifdef __CYGWIN__
+#include <cygwin/stdlib.h>
+#endif
+
+_BEGIN_STD_C
+
+typedef struct 
+{
+  int quot; /* quotient */
+  int rem; /* remainder */
+} div_t;
+
+typedef struct 
+{
+  long quot; /* quotient */
+  long rem; /* remainder */
+} ldiv_t;
+
+#ifndef __STRICT_ANSI__
+typedef struct
+{
+  long long int quot; /* quotient */
+  long long int rem; /* remainder */
+} lldiv_t;
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+
+#define RAND_MAX __RAND_MAX
+
+extern __IMPORT int __mb_cur_max;
+
+#define MB_CUR_MAX __mb_cur_max
+
+_VOID  _EXFUN(abort,(_VOID) _ATTRIBUTE ((noreturn)));
+int    _EXFUN(abs,(int));
+int    _EXFUN(atexit,(_VOID (*__func)(_VOID)));
+double _EXFUN(atof,(const char *__nptr));
+#ifndef __STRICT_ANSI__
+float  _EXFUN(atoff,(const char *__nptr));
+#endif
+int    _EXFUN(atoi,(const char *__nptr));
+int    _EXFUN(_atoi_r,(struct _reent *, const char *__nptr));
+long   _EXFUN(atol,(const char *__nptr));
+long   _EXFUN(_atol_r,(struct _reent *, const char *__nptr));
+_PTR   _EXFUN(bsearch,(const _PTR __key,
+                      const _PTR __base,
+                      size_t __nmemb,
+                      size_t __size,
+                      int _EXPARM(_compar,(const _PTR, const _PTR))));
+_PTR   _EXFUN(calloc,(size_t __nmemb, size_t __size));
+div_t  _EXFUN(div,(int __numer, int __denom));
+_VOID  _EXFUN(exit,(int __status) _ATTRIBUTE ((noreturn)));
+_VOID  _EXFUN(free,(_PTR));
+char *  _EXFUN(getenv,(const char *__string));
+char * _EXFUN(_getenv_r,(struct _reent *, const char *__string));
+char * _EXFUN(_findenv,(_CONST char *, int *));
+char * _EXFUN(_findenv_r,(struct _reent *, _CONST char *, int *));
+long   _EXFUN(labs,(long));
+ldiv_t _EXFUN(ldiv,(long __numer, long __denom));
+_PTR   _EXFUN(malloc,(size_t __size));
+int    _EXFUN(mblen,(const char *, size_t));
+int    _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, _mbstate_t *));
+int    _EXFUN(mbtowc,(wchar_t *, const char *, size_t));
+int    _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
+int    _EXFUN(wctomb,(char *, wchar_t));
+int    _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, _mbstate_t *));
+size_t _EXFUN(mbstowcs,(wchar_t *, const char *, size_t));
+size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
+size_t _EXFUN(wcstombs,(char *, const wchar_t *, size_t));
+size_t _EXFUN(_wcstombs_r,(struct _reent *, char *, const wchar_t *, size_t, _mbstate_t *));
+#ifndef __STRICT_ANSI__
+#ifndef _REENT_ONLY
+int     _EXFUN(mkstemp,(char *));
+char *  _EXFUN(mktemp,(char *));
+#endif
+#endif
+_VOID  _EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, int(*_compar)(const _PTR, const _PTR)));
+int    _EXFUN(rand,(_VOID));
+_PTR   _EXFUN(realloc,(_PTR __r, size_t __size));
+#ifndef __STRICT_ANSI__
+_PTR   _EXFUN(reallocf,(_PTR __r, size_t __size));
+#endif
+_VOID  _EXFUN(srand,(unsigned __seed));
+double _EXFUN(strtod,(const char *__n, char **__end_PTR));
+double _EXFUN(_strtod_r,(struct _reent *,const char *__n, char **__end_PTR));
+float  _EXFUN(strtof,(const char *__n, char **__end_PTR));
+#ifndef __STRICT_ANSI__
+/* the following strtodf interface is deprecated...use strtof instead */
+# ifndef strtodf 
+#  define strtodf strtof
+# endif
+#endif
+long   _EXFUN(strtol,(const char *__n, char **__end_PTR, int __base));
+long   _EXFUN(_strtol_r,(struct _reent *,const char *__n, char **__end_PTR, int __base));
+unsigned long _EXFUN(strtoul,(const char *__n, char **__end_PTR, int __base));
+unsigned long _EXFUN(_strtoul_r,(struct _reent *,const char *__n, char **__end_PTR, int __base));
+
+int    _EXFUN(system,(const char *__string));
+
+#ifndef __STRICT_ANSI__
+long    _EXFUN(a64l,(const char *__input));
+char *  _EXFUN(l64a,(long __input));
+char *  _EXFUN(_l64a_r,(struct _reent *,long __input));
+int    _EXFUN(on_exit,(_VOID (*__func)(int, _PTR),_PTR __arg));
+_VOID  _EXFUN(_Exit,(int __status) _ATTRIBUTE ((noreturn)));
+int    _EXFUN(putenv,(char *__string));
+int    _EXFUN(_putenv_r,(struct _reent *, char *__string));
+_PTR   _EXFUN(_reallocf_r,(struct _reent *, _PTR, size_t));
+int    _EXFUN(setenv,(const char *__string, const char *__value, int __overwrite));
+int    _EXFUN(_setenv_r,(struct _reent *, const char *__string, const char *__value, int __overwrite));
+
+char * _EXFUN(gcvt,(double,int,char *));
+char * _EXFUN(gcvtf,(float,int,char *));
+char * _EXFUN(fcvt,(double,int,int *,int *));
+char * _EXFUN(fcvtf,(float,int,int *,int *));
+char * _EXFUN(ecvt,(double,int,int *,int *));
+char * _EXFUN(ecvtbuf,(double, int, int*, int*, char *));
+char * _EXFUN(fcvtbuf,(double, int, int*, int*, char *));
+char * _EXFUN(ecvtf,(float,int,int *,int *));
+char * _EXFUN(dtoa,(double, int, int, int *, int*, char**));
+int    _EXFUN(rand_r,(unsigned *__seed));
+
+double _EXFUN(drand48,(_VOID));
+double _EXFUN(_drand48_r,(struct _reent *));
+double _EXFUN(erand48,(unsigned short [3]));
+double _EXFUN(_erand48_r,(struct _reent *, unsigned short [3]));
+long   _EXFUN(jrand48,(unsigned short [3]));
+long   _EXFUN(_jrand48_r,(struct _reent *, unsigned short [3]));
+_VOID  _EXFUN(lcong48,(unsigned short [7]));
+_VOID  _EXFUN(_lcong48_r,(struct _reent *, unsigned short [7]));
+long   _EXFUN(lrand48,(_VOID));
+long   _EXFUN(_lrand48_r,(struct _reent *));
+long   _EXFUN(mrand48,(_VOID));
+long   _EXFUN(_mrand48_r,(struct _reent *));
+long   _EXFUN(nrand48,(unsigned short [3]));
+long   _EXFUN(_nrand48_r,(struct _reent *, unsigned short [3]));
+unsigned short *
+       _EXFUN(seed48,(unsigned short [3]));
+unsigned short *
+       _EXFUN(_seed48_r,(struct _reent *, unsigned short [3]));
+_VOID  _EXFUN(srand48,(long));
+_VOID  _EXFUN(_srand48_r,(struct _reent *, long));
+long long _EXFUN(atoll,(const char *__nptr));
+long long _EXFUN(_atoll_r,(struct _reent *, const char *__nptr));
+long long _EXFUN(llabs,(long long));
+lldiv_t        _EXFUN(lldiv,(long long __numer, long long __denom));
+long long _EXFUN(strtoll,(const char *__n, char **__end_PTR, int __base));
+long long _EXFUN(_strtoll_r,(struct _reent *, const char *__n, char **__end_PTR, int __base));
+unsigned long long _EXFUN(strtoull,(const char *__n, char **__end_PTR, int __base));
+unsigned long long _EXFUN(_strtoull_r,(struct _reent *, const char *__n, char **__end_PTR, int __base));
+
+#ifndef __CYGWIN__
+_VOID  _EXFUN(cfree,(_PTR));
+int    _EXFUN(unsetenv,(const char *__string));
+int    _EXFUN(_unsetenv_r,(struct _reent *, const char *__string));
+#endif
+
+#endif /* ! __STRICT_ANSI__ */
+
+char * _EXFUN(_dtoa_r,(struct _reent *, double, int, int, int *, int*, char**));
+#ifndef __CYGWIN__
+_PTR   _EXFUN(_malloc_r,(struct _reent *, size_t));
+_PTR   _EXFUN(_calloc_r,(struct _reent *, size_t, size_t));
+_VOID  _EXFUN(_free_r,(struct _reent *, _PTR));
+_PTR   _EXFUN(_realloc_r,(struct _reent *, _PTR, size_t));
+_VOID  _EXFUN(_mstats_r,(struct _reent *, char *));
+#endif
+int    _EXFUN(_system_r,(struct _reent *, const char *));
+
+_VOID  _EXFUN(__eprintf,(const char *, const char *, unsigned int, const char *));
+
+_END_STD_C
+
+#endif /* _STDLIB_H_ */
diff --git a/newlib/include/string.h b/newlib/include/string.h
new file mode 100644 (file)
index 0000000..9962768
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * string.h
+ *
+ * Definitions for memory and string functions.
+ */
+
+#ifndef _STRING_H_
+#define        _STRING_H_
+
+#include "_ansi.h"
+#include <sys/reent.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+_BEGIN_STD_C
+
+_PTR    _EXFUN(memchr,(const _PTR, int, size_t));
+int     _EXFUN(memcmp,(const _PTR, const _PTR, size_t));
+_PTR    _EXFUN(memcpy,(_PTR, const _PTR, size_t));
+_PTR    _EXFUN(memmove,(_PTR, const _PTR, size_t));
+_PTR    _EXFUN(memset,(_PTR, int, size_t));
+char   *_EXFUN(strcat,(char *, const char *));
+char   *_EXFUN(strchr,(const char *, int));
+int     _EXFUN(strcmp,(const char *, const char *));
+int     _EXFUN(strcoll,(const char *, const char *));
+char   *_EXFUN(strcpy,(char *, const char *));
+size_t  _EXFUN(strcspn,(const char *, const char *));
+char   *_EXFUN(strerror,(int));
+size_t  _EXFUN(strlen,(const char *));
+char   *_EXFUN(strncat,(char *, const char *, size_t));
+int     _EXFUN(strncmp,(const char *, const char *, size_t));
+char   *_EXFUN(strncpy,(char *, const char *, size_t));
+char   *_EXFUN(strpbrk,(const char *, const char *));
+char   *_EXFUN(strrchr,(const char *, int));
+size_t  _EXFUN(strspn,(const char *, const char *));
+char   *_EXFUN(strstr,(const char *, const char *));
+
+#ifndef _REENT_ONLY
+char   *_EXFUN(strtok,(char *, const char *));
+#endif
+
+size_t  _EXFUN(strxfrm,(char *, const char *, size_t));
+
+#ifndef __STRICT_ANSI__
+char   *_EXFUN(strtok_r,(char *, const char *, char **));
+
+int     _EXFUN(bcmp,(const void *, const void *, size_t));
+void    _EXFUN(bcopy,(const void *, void *, size_t));
+void    _EXFUN(bzero,(void *, size_t));
+int     _EXFUN(ffs,(int));
+char   *_EXFUN(index,(const char *, int));
+_PTR    _EXFUN(memccpy,(_PTR, const _PTR, int, size_t));
+_PTR    _EXFUN(mempcpy,(_PTR, const _PTR, size_t));
+_PTR    _EXFUN(memmem, (const _PTR, size_t, const _PTR, size_t));
+char   *_EXFUN(rindex,(const char *, int));
+char   *_EXFUN(stpcpy,(char *, const char *));
+char   *_EXFUN(stpncpy,(char *, const char *, size_t));
+int     _EXFUN(strcasecmp,(const char *, const char *));
+char   *_EXFUN(strcasestr,(const char *, const char *));
+char   *_EXFUN(strdup,(const char *));
+char   *_EXFUN(_strdup_r,(struct _reent *, const char *));
+char   *_EXFUN(strndup,(const char *, size_t));
+char   *_EXFUN(_strndup_r,(struct _reent *, const char *, size_t));
+char   *_EXFUN(strerror_r,(int, char *, size_t));
+size_t  _EXFUN(strlcat,(char *, const char *, size_t));
+size_t  _EXFUN(strlcpy,(char *, const char *, size_t));
+int     _EXFUN(strncasecmp,(const char *, const char *, size_t));
+size_t  _EXFUN(strnlen,(const char *, size_t));
+char   *_EXFUN(strsep,(char **, const char *));
+char   *_EXFUN(strlwr,(char *));
+char   *_EXFUN(strupr,(char *));
+#ifdef __CYGWIN__
+#ifndef DEFS_H /* Kludge to work around problem compiling in gdb */
+char  *_EXFUN(strsignal, (int __signo));
+#endif
+int     _EXFUN(strtosigno, (const char *__name));
+#endif
+
+/* These function names are used on Windows and perhaps other systems.  */
+#ifndef strcmpi
+#define strcmpi strcasecmp
+#endif
+#ifndef stricmp
+#define stricmp strcasecmp
+#endif
+#ifndef strncmpi
+#define strncmpi strncasecmp
+#endif
+#ifndef strnicmp
+#define strnicmp strncasecmp
+#endif
+
+#endif /* ! __STRICT_ANSI__ */
+
+#include <sys/string.h>
+
+_END_STD_C
+
+#endif /* _STRING_H_ */
diff --git a/newlib/include/sys/_default_fcntl.h b/newlib/include/sys/_default_fcntl.h
new file mode 100644 (file)
index 0000000..ccef613
--- /dev/null
@@ -0,0 +1,200 @@
+
+#ifndef        _SYS__DEFAULT_FCNTL_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define        _SYS__DEFAULT_FCNTL_H_
+#include <_ansi.h>
+#define        _FOPEN          (-1)    /* from sys/file.h, kernel use only */
+#define        _FREAD          0x0001  /* read enabled */
+#define        _FWRITE         0x0002  /* write enabled */
+#define        _FAPPEND        0x0008  /* append (writes guaranteed at the end) */
+#define        _FMARK          0x0010  /* internal; mark during gc() */
+#define        _FDEFER         0x0020  /* internal; defer for next gc pass */
+#define        _FASYNC         0x0040  /* signal pgrp when data ready */
+#define        _FSHLOCK        0x0080  /* BSD flock() shared lock present */
+#define        _FEXLOCK        0x0100  /* BSD flock() exclusive lock present */
+#define        _FCREAT         0x0200  /* open with file create */
+#define        _FTRUNC         0x0400  /* open with truncation */
+#define        _FEXCL          0x0800  /* error on open if file exists */
+#define        _FNBIO          0x1000  /* non blocking I/O (sys5 style) */
+#define        _FSYNC          0x2000  /* do all writes synchronously */
+#define        _FNONBLOCK      0x4000  /* non blocking I/O (POSIX style) */
+#define        _FNDELAY        _FNONBLOCK      /* non blocking I/O (4.2 style) */
+#define        _FNOCTTY        0x8000  /* don't assign a ctty on this open */
+
+#define        O_ACCMODE       (O_RDONLY|O_WRONLY|O_RDWR)
+
+/*
+ * Flag values for open(2) and fcntl(2)
+ * The kernel adds 1 to the open modes to turn it into some
+ * combination of FREAD and FWRITE.
+ */
+#define        O_RDONLY        0               /* +1 == FREAD */
+#define        O_WRONLY        1               /* +1 == FWRITE */
+#define        O_RDWR          2               /* +1 == FREAD|FWRITE */
+#define        O_APPEND        _FAPPEND
+#define        O_CREAT         _FCREAT
+#define        O_TRUNC         _FTRUNC
+#define        O_EXCL          _FEXCL
+#define O_SYNC         _FSYNC
+/*     O_NDELAY        _FNDELAY        set in include/fcntl.h */
+/*     O_NDELAY        _FNBIO          set in include/fcntl.h */
+#define        O_NONBLOCK      _FNONBLOCK
+#define        O_NOCTTY        _FNOCTTY
+/* For machines which care - */
+#if defined (_WIN32) || defined (__CYGWIN__)
+#define _FBINARY        0x10000
+#define _FTEXT          0x20000
+#define _FNOINHERIT    0x40000
+
+#define O_BINARY       _FBINARY
+#define O_TEXT         _FTEXT
+#define O_NOINHERIT    _FNOINHERIT
+
+/* The windows header files define versions with a leading underscore.  */
+#define _O_RDONLY      O_RDONLY
+#define _O_WRONLY      O_WRONLY
+#define _O_RDWR                O_RDWR
+#define _O_APPEND      O_APPEND
+#define _O_CREAT       O_CREAT
+#define _O_TRUNC       O_TRUNC
+#define _O_EXCL                O_EXCL
+#define _O_TEXT                O_TEXT
+#define _O_BINARY      O_BINARY
+#define _O_RAW         O_BINARY
+#define _O_NOINHERIT   O_NOINHERIT
+#endif
+
+#ifndef        _POSIX_SOURCE
+
+/*
+ * Flags that work for fcntl(fd, F_SETFL, FXXXX)
+ */
+#define        FAPPEND         _FAPPEND
+#define        FSYNC           _FSYNC
+#define        FASYNC          _FASYNC
+#define        FNBIO           _FNBIO
+#define        FNONBIO         _FNONBLOCK      /* XXX fix to be NONBLOCK everywhere */
+#define        FNDELAY         _FNDELAY
+
+/*
+ * Flags that are disallowed for fcntl's (FCNTLCANT);
+ * used for opens, internal state, or locking.
+ */
+#define        FREAD           _FREAD
+#define        FWRITE          _FWRITE
+#define        FMARK           _FMARK
+#define        FDEFER          _FDEFER
+#define        FSHLOCK         _FSHLOCK
+#define        FEXLOCK         _FEXLOCK
+
+/*
+ * The rest of the flags, used only for opens
+ */
+#define        FOPEN           _FOPEN
+#define        FCREAT          _FCREAT
+#define        FTRUNC          _FTRUNC
+#define        FEXCL           _FEXCL
+#define        FNOCTTY         _FNOCTTY
+
+#endif /* !_POSIX_SOURCE */
+
+/* XXX close on exec request; must match UF_EXCLOSE in user.h */
+#define        FD_CLOEXEC      1       /* posix */
+
+/* fcntl(2) requests */
+#define        F_DUPFD         0       /* Duplicate fildes */
+#define        F_GETFD         1       /* Get fildes flags (close on exec) */
+#define        F_SETFD         2       /* Set fildes flags (close on exec) */
+#define        F_GETFL         3       /* Get file flags */
+#define        F_SETFL         4       /* Set file flags */
+#ifndef        _POSIX_SOURCE
+#define        F_GETOWN        5       /* Get owner - for ASYNC */
+#define        F_SETOWN        6       /* Set owner - for ASYNC */
+#endif /* !_POSIX_SOURCE */
+#define        F_GETLK         7       /* Get record-locking information */
+#define        F_SETLK         8       /* Set or Clear a record-lock (Non-Blocking) */
+#define        F_SETLKW        9       /* Set or Clear a record-lock (Blocking) */
+#ifndef        _POSIX_SOURCE
+#define        F_RGETLK        10      /* Test a remote lock to see if it is blocked */
+#define        F_RSETLK        11      /* Set or unlock a remote lock */
+#define        F_CNVT          12      /* Convert a fhandle to an open fd */
+#define        F_RSETLKW       13      /* Set or Clear remote record-lock(Blocking) */
+#endif /* !_POSIX_SOURCE */
+
+/* fcntl(2) flags (l_type field of flock structure) */
+#define        F_RDLCK         1       /* read lock */
+#define        F_WRLCK         2       /* write lock */
+#define        F_UNLCK         3       /* remove lock(s) */
+#ifndef        _POSIX_SOURCE
+#define        F_UNLKSYS       4       /* remove remote locks for a given system */
+#endif /* !_POSIX_SOURCE */
+
+#ifdef __CYGWIN__
+/* Special descriptor value to denote the cwd in calls to openat(2) etc. */
+#define AT_FDCWD -2
+
+/* Flag values for faccessat2) et al. */
+#define AT_EACCESS              1
+#define AT_SYMLINK_NOFOLLOW     2
+#define AT_SYMLINK_FOLLOW       4
+#define AT_REMOVEDIR            8
+#endif
+
+/*#include <sys/stdtypes.h>*/
+
+#ifndef __CYGWIN__
+/* file segment locking set data type - information passed to system by user */
+struct flock {
+       short   l_type;         /* F_RDLCK, F_WRLCK, or F_UNLCK */
+       short   l_whence;       /* flag to choose starting offset */
+       long    l_start;        /* relative offset, in bytes */
+       long    l_len;          /* length, in bytes; 0 means lock to EOF */
+       short   l_pid;          /* returned with F_GETLK */
+       short   l_xxx;          /* reserved for future use */
+};
+#endif /* __CYGWIN__ */
+
+#ifndef        _POSIX_SOURCE
+/* extended file segment locking set data type */
+struct eflock {
+       short   l_type;         /* F_RDLCK, F_WRLCK, or F_UNLCK */
+       short   l_whence;       /* flag to choose starting offset */
+       long    l_start;        /* relative offset, in bytes */
+       long    l_len;          /* length, in bytes; 0 means lock to EOF */
+       short   l_pid;          /* returned with F_GETLK */
+       short   l_xxx;          /* reserved for future use */
+       long    l_rpid;         /* Remote process id wanting this lock */
+       long    l_rsys;         /* Remote system id wanting this lock */
+};
+#endif /* !_POSIX_SOURCE */
+
+
+#include <sys/types.h>
+#include <sys/stat.h>          /* sigh. for the mode bits for open/creat */
+
+extern int open _PARAMS ((const char *, int, ...));
+extern int creat _PARAMS ((const char *, mode_t));
+extern int fcntl _PARAMS ((int, int, ...));
+#ifdef __CYGWIN__
+#include <sys/time.h>
+extern int futimesat _PARAMS ((int, const char *, const struct timeval *));
+extern int openat _PARAMS ((int, const char *, int, ...));
+extern int unlinkat _PARAMS ((int, const char *, int));
+#endif
+
+/* Provide _<systemcall> prototypes for functions provided by some versions
+   of newlib.  */
+#ifdef _COMPILING_NEWLIB
+extern int _open _PARAMS ((const char *, int, ...));
+extern int _fcntl _PARAMS ((int, int, ...));
+#ifdef __LARGE64_FILES
+extern int _open64 _PARAMS ((const char *, int, ...));
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !_SYS__DEFAULT_FCNTL_H_ */
diff --git a/newlib/include/sys/_types.h b/newlib/include/sys/_types.h
new file mode 100644 (file)
index 0000000..25252ed
--- /dev/null
@@ -0,0 +1,87 @@
+/* ANSI C namespace clean utility typedefs */
+
+/* This file defines various typedefs needed by the system calls that support
+   the C library.  Basically, they're just the POSIX versions with an '_'
+   prepended.  This file lives in the `sys' directory so targets can provide
+   their own if desired (or they can put target dependant conditionals here).
+*/
+
+#ifndef        _SYS__TYPES_H
+#define _SYS__TYPES_H
+
+#include <machine/_types.h>
+#include <sys/lock.h>
+
+#ifndef __off_t_defined
+typedef long _off_t;
+#endif
+
+#if defined(__rtems__)
+/* device numbers are 32-bit major and and 32-bit minor */
+typedef unsigned long long __dev_t;
+#else
+#ifndef __dev_t_defined
+typedef short __dev_t;
+#endif
+#endif
+
+#ifndef __uid_t_defined
+typedef unsigned short __uid_t;
+#endif
+#ifndef __gid_t_defined
+typedef unsigned short __gid_t;
+#endif
+
+#ifndef __off64_t_defined
+__extension__ typedef long long _off64_t;
+#endif
+
+/*
+ * We need fpos_t for the following, but it doesn't have a leading "_",
+ * so we use _fpos_t instead.
+ */
+#ifndef __fpos_t_defined
+typedef long _fpos_t;          /* XXX must match off_t in <sys/types.h> */
+                               /* (and must be `long' for now) */
+#endif
+
+#ifdef __LARGE64_FILES
+#ifndef __fpos64_t_defined
+typedef _off64_t _fpos64_t;
+#endif
+#endif
+
+#ifndef __ssize_t_defined
+#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
+typedef int _ssize_t;
+#else
+typedef long _ssize_t;
+#endif
+#endif
+
+#define __need_wint_t
+#include <stddef.h>
+
+#ifndef __mbstate_t_defined
+/* Conversion state information.  */
+typedef struct
+{
+  int __count;
+  union
+  {
+    wint_t __wch;
+    unsigned char __wchb[4];
+  } __value;           /* Value so far.  */
+} _mbstate_t;
+#endif
+
+#ifndef __flock_t_defined
+typedef _LOCK_RECURSIVE_T _flock_t;
+#endif
+
+#ifndef __iconv_t_defined
+/* Iconv descriptor type */
+typedef void *_iconv_t;
+#endif
+
+#endif /* _SYS__TYPES_H */
diff --git a/newlib/include/sys/cdefs.h b/newlib/include/sys/cdefs.h
new file mode 100644 (file)
index 0000000..f0b6a27
--- /dev/null
@@ -0,0 +1,123 @@
+/* libc/sys/linux/sys/cdefs.h - Helper macros for K&R vs. ANSI C compat. */
+
+/* Written 2000 by Werner Almesberger */
+
+/*
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Berkeley Software Design, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)cdefs.h     8.8 (Berkeley) 1/9/95
+ * $FreeBSD: src/sys/sys/cdefs.h,v 1.54 2002/05/11 03:58:24 alfred Exp $
+ */
+
+#ifndef _SYS_CDEFS_H
+#define _SYS_CDEFS_H
+
+#define __FBSDID(x) /* nothing */
+/*
+ * Note: the goal here is not compatibility to K&R C. Since we know that we
+ * have GCC which understands ANSI C perfectly well, we make use of this.
+ */
+
+#define __P(args)      args
+#define __PMT(args)    args
+#define __const                const
+#define __signed       signed
+#define __volatile     volatile
+#define __DOTS         , ...
+#define __THROW
+
+#define __ptr_t void *
+#define __long_double_t  long double
+
+#define __attribute_malloc__
+#define __attribute_pure__
+#define __attribute_format_strfmon__(a,b)
+#define __flexarr      [0]
+
+#ifdef  __cplusplus
+# define __BEGIN_DECLS  extern "C" {
+# define __END_DECLS    }
+#else
+# define __BEGIN_DECLS
+# define __END_DECLS
+#endif
+
+#ifndef __BOUNDED_POINTERS__
+# define __bounded      /* nothing */
+# define __unbounded    /* nothing */
+# define __ptrvalue     /* nothing */
+#endif
+
+#ifdef __GNUC__
+#define        __strong_reference(sym,aliassym)        \
+       extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)));
+#ifdef __ELF__
+#ifdef __STDC__
+#define        __weak_reference(sym,alias)     \
+       __asm__(".weak " #alias);       \
+       __asm__(".equ "  #alias ", " #sym)
+#define        __warn_references(sym,msg)      \
+       __asm__(".section .gnu.warning." #sym); \
+       __asm__(".asciz \"" msg "\"");  \
+       __asm__(".previous")
+#else
+#define        __weak_reference(sym,alias)     \
+       __asm__(".weak alias");         \
+       __asm__(".equ alias, sym")
+#define        __warn_references(sym,msg)      \
+       __asm__(".section .gnu.warning.sym"); \
+       __asm__(".asciz \"msg\"");      \
+       __asm__(".previous")
+#endif /* __STDC__ */
+#else  /* !__ELF__ */
+#ifdef __STDC__
+#define        __weak_reference(sym,alias)     \
+       __asm__(".stabs \"_" #alias "\",11,0,0,0");     \
+       __asm__(".stabs \"_" #sym "\",1,0,0,0")
+#define        __warn_references(sym,msg)      \
+       __asm__(".stabs \"" msg "\",30,0,0,0");         \
+       __asm__(".stabs \"_" #sym "\",1,0,0,0")
+#else
+#define        __weak_reference(sym,alias)     \
+       __asm__(".stabs \"_/**/alias\",11,0,0,0");      \
+       __asm__(".stabs \"_/**/sym\",1,0,0,0")
+#define        __warn_references(sym,msg)      \
+       __asm__(".stabs msg,30,0,0,0");                 \
+       __asm__(".stabs \"_/**/sym\",1,0,0,0")
+#endif /* __STDC__ */
+#endif /* __ELF__ */
+#endif /* __GNUC__ */
+
+#endif /* _SYS_CDEFS_H */
diff --git a/newlib/include/sys/config.h b/newlib/include/sys/config.h
new file mode 100644 (file)
index 0000000..3084193
--- /dev/null
@@ -0,0 +1,213 @@
+#ifndef __SYS_CONFIG_H__
+#define __SYS_CONFIG_H__
+
+#include <machine/ieeefp.h>  /* floating point macros */
+
+/* exceptions first */
+#if defined(__H8500__) || defined(__W65__)
+#define __SMALL_BITFIELDS
+/* ???  This conditional is true for the h8500 and the w65, defining H8300
+   in those cases probably isn't the right thing to do.  */
+#define H8300 1
+#endif
+
+/* 16 bit integer machines */
+#if defined(__Z8001__) || defined(__Z8002__) || defined(__H8500__) || defined(__W65__) || defined (__mn10200__) || defined (__AVR__)
+
+#undef INT_MAX
+#undef UINT_MAX
+#define INT_MAX 32767
+#define UINT_MAX 65535
+#endif
+
+#if defined (__H8300__) || defined (__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)
+#define __SMALL_BITFIELDS
+#define H8300 1
+#undef INT_MAX
+#undef UINT_MAX
+#define INT_MAX __INT_MAX__
+#define UINT_MAX (__INT_MAX__ * 2U + 1)
+#endif
+
+#ifdef __W65__
+#define __SMALL_BITFIELDS
+#endif
+
+#if defined(__D10V__)
+#define __SMALL_BITFIELDS
+#undef INT_MAX
+#undef UINT_MAX
+#define INT_MAX __INT_MAX__
+#define UINT_MAX (__INT_MAX__ * 2U + 1)
+#define _POINTER_INT short
+#endif
+
+#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
+#undef INT_MAX
+#undef UINT_MAX
+#define INT_MAX __INT_MAX__
+#define UINT_MAX (__INT_MAX__ * 2U + 1)
+#define _POINTER_INT short
+#endif
+
+#ifdef ___AM29K__
+#define _FLOAT_RET double
+#endif
+
+#ifdef __i386__
+#ifndef __unix__
+/* in other words, go32 */
+#define _FLOAT_RET double
+#endif
+#if defined(__linux__) || defined(__RDOS__)
+/* we want the reentrancy structure to be returned by a function */
+#define __DYNAMIC_REENT__
+#define HAVE_GETDATE
+#define _HAVE_SYSTYPES
+#define _READ_WRITE_RETURN_TYPE _ssize_t
+#define __LARGE64_FILES 1
+/* we use some glibc header files so turn on glibc large file feature */
+#define _LARGEFILE64_SOURCE 1
+#endif
+#endif
+
+#ifdef __mn10200__
+#define __SMALL_BITFIELDS
+#endif
+
+#ifdef __AVR__
+#define __SMALL_BITFIELDS
+#define _POINTER_INT short
+#endif
+
+#ifdef __v850
+#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__sda__))
+#endif
+
+/* For the PowerPC eabi, force the _impure_ptr to be in .sdata */
+#if defined(__PPC__)
+#if defined(_CALL_SYSV)
+#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
+#endif
+#ifdef __SPE__
+#define _LONG_DOUBLE double
+#endif
+#endif
+
+#if defined(__mips__) && !defined(__rtems__)
+#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
+#endif
+
+#ifdef __xstormy16__
+#define __SMALL_BITFIELDS
+#undef INT_MAX
+#undef UINT_MAX
+#define INT_MAX __INT_MAX__
+#define UINT_MAX (__INT_MAX__ * 2U + 1)
+#define MALLOC_ALIGNMENT 8
+#define _POINTER_INT short
+#define __BUFSIZ__ 16
+#define _REENT_SMALL
+#endif
+#ifdef __m32c__
+#define __SMALL_BITFIELDS
+#undef INT_MAX
+#undef UINT_MAX
+#define INT_MAX __INT_MAX__
+#define UINT_MAX (__INT_MAX__ * 2U + 1)
+#define MALLOC_ALIGNMENT 8
+#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
+#define _POINTER_INT short
+#else
+#define _POINTER_INT long
+#endif
+#define __BUFSIZ__ 16
+#define _REENT_SMALL
+#endif /* __m32c__ */
+
+#ifdef __thumb2__
+/* Thumb-2 based ARMv7M devices are really small.  */
+#define _REENT_SMALL
+#endif
+
+#ifdef __SPU__
+#define MALLOC_ALIGNMENT 16
+#define __CUSTOM_FILE_IO__
+#endif
+
+/* This block should be kept in sync with GCC's limits.h.  The point
+   of having these definitions here is to not include limits.h, which
+   would pollute the user namespace, while still using types of the
+   the correct widths when deciding how to define __int32_t and
+   __int64_t.  */
+#ifndef __INT_MAX__
+# ifdef INT_MAX
+#  define __INT_MAX__ INT_MAX
+# else
+#  define __INT_MAX__ 2147483647
+# endif
+#endif
+
+#ifndef __LONG_MAX__
+# ifdef LONG_MAX
+#  define __LONG_MAX__ LONG_MAX
+# else
+#  if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) \
+      || defined (__sparcv9)
+#   define __LONG_MAX__ 9223372036854775807L
+#  else
+#   define __LONG_MAX__ 2147483647L
+#  endif /* __alpha__ || sparc64 */
+# endif
+#endif
+/* End of block that should be kept in sync with GCC's limits.h.  */
+
+#ifndef _POINTER_INT
+#define _POINTER_INT long
+#endif
+
+#ifdef __frv__
+#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
+#endif
+#undef __RAND_MAX
+#if __INT_MAX__ == 32767
+#define __RAND_MAX 32767
+#else
+#define __RAND_MAX 0x7fffffff
+#endif
+
+#if defined(__CYGWIN__)
+#include <cygwin/config.h>
+#endif
+
+#if defined(__rtems__)
+#define __FILENAME_MAX__ 255
+#define _READ_WRITE_RETURN_TYPE _ssize_t
+#endif
+
+#ifndef __IMPORT
+#define __IMPORT
+#endif
+
+/* Define return type of read/write routines.  In POSIX, the return type
+   for read()/write() is "ssize_t" but legacy newlib code has been using
+   "int" for some time.  If not specified, "int" is defaulted.  */
+#ifndef _READ_WRITE_RETURN_TYPE
+#define _READ_WRITE_RETURN_TYPE int
+#endif
+
+#ifndef __WCHAR_MAX__
+#if __INT_MAX__ == 32767 || defined (_WIN32)
+#define __WCHAR_MAX__ 0xffffu
+#endif
+#endif
+
+/* See if small reent asked for at configuration time and
+   is not chosen by the platform by default.  */
+#ifdef _WANT_REENT_SMALL
+#ifndef _REENT_SMALL
+#define _REENT_SMALL
+#endif
+#endif
+
+#endif /* __SYS_CONFIG_H__ */
diff --git a/newlib/include/sys/custom_file.h b/newlib/include/sys/custom_file.h
new file mode 100644 (file)
index 0000000..96314fb
--- /dev/null
@@ -0,0 +1,2 @@
+#error System-specific custom_file.h is missing.
+
diff --git a/newlib/include/sys/dirent.h b/newlib/include/sys/dirent.h
new file mode 100644 (file)
index 0000000..a3fb5c0
--- /dev/null
@@ -0,0 +1,13 @@
+/* <dirent.h> includes <sys/dirent.h>, which is this file.  On a
+   system which supports <dirent.h>, this file is overridden by
+   dirent.h in the libc/sys/.../sys directory.  On a system which does
+   not support <dirent.h>, we will get this file which uses #error to force
+   an error.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#error "<dirent.h> not supported"
+#ifdef __cplusplus
+}
+#endif
diff --git a/newlib/include/sys/errno.h b/newlib/include/sys/errno.h
new file mode 100644 (file)
index 0000000..f130e3e
--- /dev/null
@@ -0,0 +1,164 @@
+/* errno is not a global variable, because that would make using it
+   non-reentrant.  Instead, its address is returned by the function
+   __errno.  */
+
+#ifndef _SYS_ERRNO_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define _SYS_ERRNO_H_
+
+#include <sys/reent.h>
+
+#ifndef _REENT_ONLY
+#define errno (*__errno())
+extern int *__errno _PARAMS ((void));
+#endif
+
+/* Please don't use these variables directly.
+   Use strerror instead. */
+extern __IMPORT _CONST char * _CONST _sys_errlist[];
+extern __IMPORT int _sys_nerr;
+#ifdef __CYGWIN__
+extern __IMPORT const char * const sys_errlist[];
+extern __IMPORT int sys_nerr;
+#endif
+
+#define __errno_r(ptr) ((ptr)->_errno)
+
+#define        EPERM 1         /* Not super-user */
+#define        ENOENT 2        /* No such file or directory */
+#define        ESRCH 3         /* No such process */
+#define        EINTR 4         /* Interrupted system call */
+#define        EIO 5           /* I/O error */
+#define        ENXIO 6         /* No such device or address */
+#define        E2BIG 7         /* Arg list too long */
+#define        ENOEXEC 8       /* Exec format error */
+#define        EBADF 9         /* Bad file number */
+#define        ECHILD 10       /* No children */
+#define        EAGAIN 11       /* No more processes */
+#define        ENOMEM 12       /* Not enough core */
+#define        EACCES 13       /* Permission denied */
+#define        EFAULT 14       /* Bad address */
+#define        ENOTBLK 15      /* Block device required */
+#define        EBUSY 16        /* Mount device busy */
+#define        EEXIST 17       /* File exists */
+#define        EXDEV 18        /* Cross-device link */
+#define        ENODEV 19       /* No such device */
+#define        ENOTDIR 20      /* Not a directory */
+#define        EISDIR 21       /* Is a directory */
+#define        EINVAL 22       /* Invalid argument */
+#define        ENFILE 23       /* Too many open files in system */
+#define        EMFILE 24       /* Too many open files */
+#define        ENOTTY 25       /* Not a typewriter */
+#define        ETXTBSY 26      /* Text file busy */
+#define        EFBIG 27        /* File too large */
+#define        ENOSPC 28       /* No space left on device */
+#define        ESPIPE 29       /* Illegal seek */
+#define        EROFS 30        /* Read only file system */
+#define        EMLINK 31       /* Too many links */
+#define        EPIPE 32        /* Broken pipe */
+#define        EDOM 33         /* Math arg out of domain of func */
+#define        ERANGE 34       /* Math result not representable */
+#define        ENOMSG 35       /* No message of desired type */
+#define        EIDRM 36        /* Identifier removed */
+#define        ECHRNG 37       /* Channel number out of range */
+#define        EL2NSYNC 38     /* Level 2 not synchronized */
+#define        EL3HLT 39       /* Level 3 halted */
+#define        EL3RST 40       /* Level 3 reset */
+#define        ELNRNG 41       /* Link number out of range */
+#define        EUNATCH 42      /* Protocol driver not attached */
+#define        ENOCSI 43       /* No CSI structure available */
+#define        EL2HLT 44       /* Level 2 halted */
+#define        EDEADLK 45      /* Deadlock condition */
+#define        ENOLCK 46       /* No record locks available */
+#define EBADE 50       /* Invalid exchange */
+#define EBADR 51       /* Invalid request descriptor */
+#define EXFULL 52      /* Exchange full */
+#define ENOANO 53      /* No anode */
+#define EBADRQC 54     /* Invalid request code */
+#define EBADSLT 55     /* Invalid slot */
+#define EDEADLOCK 56   /* File locking deadlock error */
+#define EBFONT 57      /* Bad font file fmt */
+#define ENOSTR 60      /* Device not a stream */
+#define ENODATA 61     /* No data (for no delay io) */
+#define ETIME 62       /* Timer expired */
+#define ENOSR 63       /* Out of streams resources */
+#define ENONET 64      /* Machine is not on the network */
+#define ENOPKG 65      /* Package not installed */
+#define EREMOTE 66     /* The object is remote */
+#define ENOLINK 67     /* The link has been severed */
+#define EADV 68                /* Advertise error */
+#define ESRMNT 69      /* Srmount error */
+#define        ECOMM 70        /* Communication error on send */
+#define EPROTO 71      /* Protocol error */
+#define        EMULTIHOP 74    /* Multihop attempted */
+#define        ELBIN 75        /* Inode is remote (not really error) */
+#define        EDOTDOT 76      /* Cross mount point (not really error) */
+#define EBADMSG 77     /* Trying to read unreadable message */
+#define EFTYPE 79      /* Inappropriate file type or format */
+#define ENOTUNIQ 80    /* Given log. name not unique */
+#define EBADFD 81      /* f.d. invalid for this operation */
+#define EREMCHG 82     /* Remote address changed */
+#define ELIBACC 83     /* Can't access a needed shared lib */
+#define ELIBBAD 84     /* Accessing a corrupted shared lib */
+#define ELIBSCN 85     /* .lib section in a.out corrupted */
+#define ELIBMAX 86     /* Attempting to link in too many libs */
+#define ELIBEXEC 87    /* Attempting to exec a shared library */
+#define ENOSYS 88      /* Function not implemented */
+#define ENMFILE 89      /* No more files */
+#define ENOTEMPTY 90   /* Directory not empty */
+#define ENAMETOOLONG 91        /* File or path name too long */
+#define ELOOP 92       /* Too many symbolic links */
+#define EOPNOTSUPP 95  /* Operation not supported on transport endpoint */
+#define EPFNOSUPPORT 96 /* Protocol family not supported */
+#define ECONNRESET 104  /* Connection reset by peer */
+#define ENOBUFS 105    /* No buffer space available */
+#define EAFNOSUPPORT 106 /* Address family not supported by protocol family */
+#define EPROTOTYPE 107 /* Protocol wrong type for socket */
+#define ENOTSOCK 108   /* Socket operation on non-socket */
+#define ENOPROTOOPT 109        /* Protocol not available */
+#define ESHUTDOWN 110  /* Can't send after socket shutdown */
+#define ECONNREFUSED 111       /* Connection refused */
+#define EADDRINUSE 112         /* Address already in use */
+#define ECONNABORTED 113       /* Connection aborted */
+#define ENETUNREACH 114                /* Network is unreachable */
+#define ENETDOWN 115           /* Network interface is not configured */
+#define ETIMEDOUT 116          /* Connection timed out */
+#define EHOSTDOWN 117          /* Host is down */
+#define EHOSTUNREACH 118       /* Host is unreachable */
+#define EINPROGRESS 119                /* Connection already in progress */
+#define EALREADY 120           /* Socket already connected */
+#define EDESTADDRREQ 121       /* Destination address required */
+#define EMSGSIZE 122           /* Message too long */
+#define EPROTONOSUPPORT 123    /* Unknown protocol */
+#define ESOCKTNOSUPPORT 124    /* Socket type not supported */
+#define EADDRNOTAVAIL 125      /* Address not available */
+#define ENETRESET 126
+#define EISCONN 127            /* Socket is already connected */
+#define ENOTCONN 128           /* Socket is not connected */
+#define ETOOMANYREFS 129
+#define EPROCLIM 130
+#define EUSERS 131
+#define EDQUOT 132
+#define ESTALE 133
+#define ENOTSUP 134            /* Not supported */
+#define ENOMEDIUM 135   /* No medium (in tape drive) */
+#define ENOSHARE 136    /* No such host or network path */
+#define ECASECLASH 137  /* Filename exists with different case */
+#define EILSEQ 138
+#define EOVERFLOW 139  /* Value too large for defined data type */
+#define ECANCELED 140  /* Operation canceled */
+#define ENOTRECOVERABLE 141    /* State not recoverable */
+#define EOWNERDEAD 142 /* Previous owner died */
+
+
+/* From cygwin32.  */
+#define EWOULDBLOCK EAGAIN     /* Operation would block */
+
+#define __ELASTERROR 2000      /* Users can add values starting here */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _SYS_ERRNO_H */
diff --git a/newlib/include/sys/fcntl.h b/newlib/include/sys/fcntl.h
new file mode 100644 (file)
index 0000000..be85f40
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef _SYS_FCNTL_H_
+#define _SYS_FCNTL_H_
+#include <sys/_default_fcntl.h>
+#endif
diff --git a/newlib/include/sys/features.h b/newlib/include/sys/features.h
new file mode 100644 (file)
index 0000000..e43f261
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ *  Written by Joel Sherrill <joel@OARcorp.com>.
+ *
+ *  COPYRIGHT (c) 1989-2000.
+ *
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  Permission to use, copy, modify, and distribute this software for any
+ *  purpose without fee is hereby granted, provided that this entire notice
+ *  is included in all copies of any software which is or includes a copy
+ *  or modification of this software.
+ *
+ *  THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ *  WARRANTY.  IN PARTICULAR,  THE AUTHOR MAKES NO REPRESENTATION
+ *  OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
+ *  SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ *  $Id: features.h,v 1.16 2008/12/12 17:16:03 jjohnstn Exp $
+ */
+
+#ifndef _SYS_FEATURES_H
+#define _SYS_FEATURES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RTEMS adheres to POSIX -- 1003.1b with some features from annexes.  */
+
+#ifdef __rtems__
+#define _POSIX_JOB_CONTROL                     1
+#define _POSIX_SAVED_IDS                       1
+#define _POSIX_VERSION                 199309L
+#define _POSIX_ASYNCHRONOUS_IO         1
+#define _POSIX_FSYNC                   1
+#define _POSIX_MAPPED_FILES            1
+#define _POSIX_MEMLOCK                 1
+#define _POSIX_MEMLOCK_RANGE           1
+#define _POSIX_MEMORY_PROTECTION       1
+#define _POSIX_MESSAGE_PASSING         1
+#define _POSIX_MONOTONIC_CLOCK         200112L
+#define _POSIX_PRIORITIZED_IO          1
+#define _POSIX_PRIORITY_SCHEDULING     1
+#define _POSIX_REALTIME_SIGNALS                1
+#define _POSIX_SEMAPHORES              1
+/* #define _POSIX_SHARED_MEMORY_OBJECTS        1 */
+#define _POSIX_SYNCHRONIZED_IO         1
+#define _POSIX_TIMERS                  1
+#define _POSIX_BARRIERS                 200112L
+#define _POSIX_READER_WRITER_LOCKS      200112L
+#define _POSIX_SPIN_LOCKS               200112L
+
+
+/* In P1003.1b but defined by drafts at least as early as P1003.1c/D10  */
+#define _POSIX_THREADS                         1
+#define _POSIX_THREAD_ATTR_STACKADDR           1
+#define _POSIX_THREAD_ATTR_STACKSIZE           1
+#define _POSIX_THREAD_PRIORITY_SCHEDULING      1
+#define _POSIX_THREAD_PRIO_INHERIT             1
+#define _POSIX_THREAD_PRIO_PROTECT             1
+#define _POSIX_THREAD_PROCESS_SHARED           1
+#define _POSIX_THREAD_SAFE_FUNCTIONS           1
+
+/* P1003.4b/D8 defines the constants below this comment. */
+#define _POSIX_SPAWN                           1
+#define _POSIX_TIMEOUTS                                1
+#define _POSIX_CPUTIME                         1
+#define _POSIX_THREAD_CPUTIME                  1
+#define _POSIX_SPORADIC_SERVER                 1
+#define _POSIX_THREAD_SPORADIC_SERVER          1
+#define _POSIX_DEVICE_CONTROL                  1
+#define _POSIX_DEVCTL_DIRECTION                        1
+#define _POSIX_INTERRUPT_CONTROL               1
+#define _POSIX_ADVISORY_INFO                   1
+
+#endif
+
+#ifdef __svr4__
+# define _POSIX_JOB_CONTROL     1
+# define _POSIX_SAVED_IDS       1
+# define _POSIX_VERSION 199009L
+#endif
+
+#ifdef __CYGWIN__
+
+#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L
+#define _POSIX_VERSION                         200112L
+#define _POSIX2_VERSION                                200112L
+#define _XOPEN_VERSION                            600
+
+#define _POSIX_ADVISORY_INFO                   200112L
+/* #define _POSIX_ASYNCHRONOUS_IO                  -1 */
+/* #define _POSIX_BARRIERS                         -1 */
+#define _POSIX_CHOWN_RESTRICTED                             1
+/* #define _POSIX_CLOCK_SELECTION                  -1 */
+/* #define _POSIX_CPUTIME                          -1 */
+#define _POSIX_FSYNC                           200112L
+#define _POSIX_IPV6                            200112L
+#define _POSIX_JOB_CONTROL                          1
+#define _POSIX_MAPPED_FILES                    200112L
+/* #define _POSIX_MEMLOCK                          -1 */
+#define _POSIX_MEMLOCK_RANGE                   200112L
+#define _POSIX_MEMORY_PROTECTION               200112L
+#define _POSIX_MESSAGE_PASSING                 200112L
+/* #define _POSIX_MONOTONIC_CLOCK                  -1 */
+#define _POSIX_NO_TRUNC                                     1
+/* #define _POSIX_PRIORITIZED_IO                   -1 */
+#define _POSIX_PRIORITY_SCHEDULING             200112L
+#define _POSIX_RAW_SOCKETS                     200112L
+#define _POSIX_READER_WRITER_LOCKS             200112L
+#define _POSIX_REALTIME_SIGNALS                        200112L
+#define _POSIX_REGEXP                               1
+#define _POSIX_SAVED_IDS                            1
+#define _POSIX_SEMAPHORES                      200112L
+#define _POSIX_SHARED_MEMORY_OBJECTS           200112L 
+#define _POSIX_SHELL                                1
+/* #define _POSIX_SPAWN                                    -1 */
+/* #define _POSIX_SPIN_LOCKS                       -1 */
+/* #define _POSIX_SPORADIC_SERVER                  -1 */
+#define _POSIX_SYNCHRONIZED_IO                 200112L
+/* #define _POSIX_THREAD_ATTR_STACKADDR                    -1 */
+#define _POSIX_THREAD_ATTR_STACKSIZE           200112L
+/* #define _POSIX_THREAD_CPUTIME                   -1 */
+/* #define _POSIX_THREAD_PRIO_INHERIT              -1 */
+/* #define _POSIX_THREAD_PRIO_PROTECT              -1 */
+#define _POSIX_THREAD_PRIORITY_SCHEDULING      200112L
+#define _POSIX_THREAD_PROCESS_SHARED           200112L
+#define _POSIX_THREAD_SAFE_FUNCTIONS           200112L
+/* #define _POSIX_THREAD_SPORADIC_SERVER           -1 */
+#define _POSIX_THREADS                         200112L
+/* #define _POSIX_TIMEOUTS                         -1 */
+#define _POSIX_TIMERS                               1
+/* #define _POSIX_TRACE                                    -1 */
+/* #define _POSIX_TRACE_EVENT_FILTER               -1 */
+/* #define _POSIX_TRACE_INHERIT                            -1 */
+/* #define _POSIX_TRACE_LOG                        -1 */
+/* #define _POSIX_TYPED_MEMORY_OBJECTS             -1 */
+#define _POSIX_VDISABLE                                   '\0'
+#define _POSIX2_C_BIND                         200112L
+#define _POSIX2_C_DEV                          200112L
+#define _POSIX2_CHAR_TERM                      200112L
+/* #define _POSIX2_FORT_DEV                        -1 */
+/* #define _POSIX2_FORT_RUN                        -1 */
+/* #define _POSIX2_LOCALEDEF                       -1 */
+/* #define _POSIX2_PBS                             -1 */
+/* #define _POSIX2_PBS_ACCOUNTING                  -1 */
+/* #define _POSIX2_PBS_CHECKPOINT                  -1 */
+/* #define _POSIX2_PBS_LOCATE                      -1 */
+/* #define _POSIX2_PBS_MESSAGE                     -1 */
+/* #define _POSIX2_PBS_TRACK                       -1 */
+#define _POSIX2_SW_DEV                         200112L
+#define _POSIX2_UPE                            200112L
+#define _POSIX_V6_ILP32_OFF32                      -1
+#define _XBS5_ILP32_OFF32                      _POSIX_V6_ILP32_OFF32
+#define _POSIX_V6_ILP32_OFFBIG                      1
+#define _XBS5_ILP32_OFFBIG                     _POSIX_V6_ILP32_OFFBIG
+#define _POSIX_V6_LP64_OFF64                       -1
+#define _XBS5_LP64_OFF64                       _POSIX_V6_LP64_OFF64
+#define _POSIX_V6_LPBIG_OFFBIG                     -1
+#define _XBS5_LPBIG_OFFBIG                     _POSIX_V6_LPBIG_OFFBIG
+#define _XOPEN_CRYPT                                1
+#define _XOPEN_ENH_I18N                                     1
+/* #define _XOPEN_LEGACY                           -1 */
+/* #define _XOPEN_REALTIME                         -1 */
+/* #define _XOPEN_REALTIME_THREADS                 -1 */
+#define _XOPEN_SHM                                  1
+/* #define _XOPEN_STREAMS                          -1 */
+/* #define _XOPEN_UNIX                             -1 */
+
+#endif /* !__STRICT_ANSI__ || __cplusplus || __STDC_VERSION__ >= 199901L */
+#endif /* __CYGWIN__ */
+
+#ifdef __SPU__
+/* Not much for now! */
+#define _POSIX_TIMERS                               1
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _SYS_FEATURES_H */
diff --git a/newlib/include/sys/file.h b/newlib/include/sys/file.h
new file mode 100644 (file)
index 0000000..58d4fac
--- /dev/null
@@ -0,0 +1,2 @@
+
+#include <sys/fcntl.h>
diff --git a/newlib/include/sys/iconvnls.h b/newlib/include/sys/iconvnls.h
new file mode 100644 (file)
index 0000000..09ea183
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2003-2004, Artem B. Bityuckiy.
+ * Rights transferred to Franklin Electronic Publishers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Funtions, macros, etc implimented in iconv library but used by other
+ * NLS-related subsystems too.
+ */
+#ifndef __SYS_ICONVNLS_H__
+#define __SYS_ICONVNLS_H__
+
+#include <_ansi.h>
+#include <reent.h>
+#include <wchar.h>
+#include <iconv.h>
+
+/* Iconv data path environment variable name */
+#define NLS_ENVVAR_NAME  "NLSPATH"
+/* Default NLSPATH value */
+#define ICONV_DEFAULT_NLSPATH "/usr/locale"
+/* Direction markers */
+#define ICONV_NLS_FROM 0
+#define ICONV_NLS_TO   1
+
+_VOID
+_EXFUN(_iconv_nls_get_state, (iconv_t cd, mbstate_t *ps, int direction));
+
+int
+_EXFUN(_iconv_nls_set_state, (iconv_t cd, mbstate_t *ps, int direction));
+
+int
+_EXFUN(_iconv_nls_is_stateful, (iconv_t cd, int direction));
+
+int
+_EXFUN(_iconv_nls_get_mb_cur_max, (iconv_t cd, int direction));
+
+size_t
+_EXFUN(_iconv_nls_conv, (struct _reent *rptr, iconv_t cd,
+                        _CONST char **inbuf, size_t *inbytesleft,
+                        char **outbuf, size_t *outbytesleft));
+
+_CONST char *
+_EXFUN(_iconv_nls_construct_filename, (struct _reent *rptr, _CONST char *file,
+                                      _CONST char *dir, _CONST char *ext));
+
+
+int
+_EXFUN(_iconv_nls_open, (struct _reent *rptr, _CONST char *encoding,
+                        iconv_t *towc, iconv_t *fromwc, int flag));
+
+char *
+_EXFUN(_iconv_resolve_encoding_name, (struct _reent *rptr, _CONST char *ca));
+
+#endif /* __SYS_ICONVNLS_H__ */
+
diff --git a/newlib/include/sys/lock.h b/newlib/include/sys/lock.h
new file mode 100644 (file)
index 0000000..9075e35
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef __SYS_LOCK_H__
+#define __SYS_LOCK_H__
+
+/* dummy lock routines for single-threaded aps */
+
+typedef int _LOCK_T;
+typedef int _LOCK_RECURSIVE_T;
+#include <_ansi.h>
+
+#define __LOCK_INIT(class,lock) static int lock = 0;
+#define __LOCK_INIT_RECURSIVE(class,lock) static int lock = 0;
+#define __lock_init(lock) (_CAST_VOID 0)
+#define __lock_init_recursive(lock) (_CAST_VOID 0)
+#define __lock_close(lock) (_CAST_VOID 0)
+#define __lock_close_recursive(lock) (_CAST_VOID 0)
+#define __lock_acquire(lock) (_CAST_VOID 0)
+#define __lock_acquire_recursive(lock) (_CAST_VOID 0)
+#define __lock_try_acquire(lock) (_CAST_VOID 0)
+#define __lock_try_acquire_recursive(lock) (_CAST_VOID 0)
+#define __lock_release(lock) (_CAST_VOID 0)
+#define __lock_release_recursive(lock) (_CAST_VOID 0)
+
+#endif /* __SYS_LOCK_H__ */
diff --git a/newlib/include/sys/param.h b/newlib/include/sys/param.h
new file mode 100644 (file)
index 0000000..7e8762a
--- /dev/null
@@ -0,0 +1,25 @@
+/* This is a dummy <sys/param.h> file, not customized for any
+   particular system.  If there is a param.h in libc/sys/SYSDIR/sys,
+   it will override this one.  */
+
+#ifndef _SYS_PARAM_H
+# define _SYS_PARAM_H
+
+#include <sys/config.h>
+#include <machine/endian.h>
+#include <machine/param.h>
+
+#ifndef HZ
+# define HZ (60)
+#endif
+#ifndef NOFILE
+# define NOFILE        (60)
+#endif
+#ifndef PATHSIZE
+# define PATHSIZE (1024)
+#endif
+
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+
+#endif
diff --git a/newlib/include/sys/queue.h b/newlib/include/sys/queue.h
new file mode 100644 (file)
index 0000000..af637ca
--- /dev/null
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)queue.h     8.5 (Berkeley) 8/20/94
+ * $FreeBSD: src/sys/sys/queue.h,v 1.48 2002/04/17 14:00:37 tmm Exp $
+ */
+
+#ifndef _SYS_QUEUE_H_
+#define        _SYS_QUEUE_H_
+
+#include <machine/ansi.h>      /* for __offsetof */
+
+/*
+ * This file defines four types of data structures: singly-linked lists,
+ * singly-linked tail queues, lists and tail queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction.  Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A singly-linked tail queue is headed by a pair of pointers, one to the
+ * head of the list and the other to the tail of the list. The elements are
+ * singly linked for minimum space and pointer manipulation overhead at the
+ * expense of O(n) removal for arbitrary elements. New elements can be added
+ * to the list after an existing element, at the head of the list, or at the
+ * end of the list. Elements being removed from the head of the tail queue
+ * should use the explicit macro for this purpose for optimum efficiency.
+ * A singly-linked tail queue may only be traversed in the forward direction.
+ * Singly-linked tail queues are ideal for applications with large datasets
+ * and few or no removals or for implementing a FIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ *
+ *
+ *                     SLIST   LIST    STAILQ  TAILQ
+ * _HEAD               +       +       +       +
+ * _HEAD_INITIALIZER   +       +       +       +
+ * _ENTRY              +       +       +       +
+ * _INIT               +       +       +       +
+ * _EMPTY              +       +       +       +
+ * _FIRST              +       +       +       +
+ * _NEXT               +       +       +       +
+ * _PREV               -       -       -       +
+ * _LAST               -       -       +       +
+ * _FOREACH            +       +       +       +
+ * _FOREACH_REVERSE    -       -       -       +
+ * _INSERT_HEAD                +       +       +       +
+ * _INSERT_BEFORE      -       +       -       +
+ * _INSERT_AFTER       +       +       +       +
+ * _INSERT_TAIL                -       -       +       +
+ * _CONCAT             -       -       +       +
+ * _REMOVE_HEAD                +       -       +       -
+ * _REMOVE             +       +       +       +
+ *
+ */
+
+/*
+ * Singly-linked List declarations.
+ */
+#define        SLIST_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *slh_first; /* first element */                     \
+}
+
+#define        SLIST_HEAD_INITIALIZER(head)                                    \
+       { NULL }
+#define        SLIST_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *sle_next;  /* next element */                      \
+}
+/*
+ * Singly-linked List functions.
+ */
+#define        SLIST_EMPTY(head)       ((head)->slh_first == NULL)
+
+#define        SLIST_FIRST(head)       ((head)->slh_first)
+
+#define        SLIST_FOREACH(var, head, field)                                 \
+       for ((var) = SLIST_FIRST((head));                               \
+           (var);                                                      \
+           (var) = SLIST_NEXT((var), field))
+
+#define        SLIST_INIT(head) do {                                           \
+       SLIST_FIRST((head)) = NULL;                                     \
+} while (0)
+
+#define        SLIST_INSERT_AFTER(slistelm, elm, field) do {                   \
+       SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field);       \
+       SLIST_NEXT((slistelm), field) = (elm);                          \
+} while (0)
+
+#define        SLIST_INSERT_HEAD(head, elm, field) do {                        \
+       SLIST_NEXT((elm), field) = SLIST_FIRST((head));                 \
+       SLIST_FIRST((head)) = (elm);                                    \
+} while (0)
+
+#define        SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
+
+#define        SLIST_REMOVE(head, elm, type, field) do {                       \
+       if (SLIST_FIRST((head)) == (elm)) {                             \
+               SLIST_REMOVE_HEAD((head), field);                       \
+       }                                                               \
+       else {                                                          \
+               struct type *curelm = SLIST_FIRST((head));              \
+               while (SLIST_NEXT(curelm, field) != (elm))              \
+                       curelm = SLIST_NEXT(curelm, field);             \
+               SLIST_NEXT(curelm, field) =                             \
+                   SLIST_NEXT(SLIST_NEXT(curelm, field), field);       \
+       }                                                               \
+} while (0)
+
+#define        SLIST_REMOVE_HEAD(head, field) do {                             \
+       SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field);   \
+} while (0)
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define        STAILQ_HEAD(name, type)                                         \
+struct name {                                                          \
+       struct type *stqh_first;/* first element */                     \
+       struct type **stqh_last;/* addr of last next element */         \
+}
+
+#define        STAILQ_HEAD_INITIALIZER(head)                                   \
+       { NULL, &(head).stqh_first }
+
+#define        STAILQ_ENTRY(type)                                              \
+struct {                                                               \
+       struct type *stqe_next; /* next element */                      \
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define        STAILQ_CONCAT(head1, head2) do {                                \
+       if (!STAILQ_EMPTY((head2))) {                                   \
+               *(head1)->stqh_last = (head2)->stqh_first;              \
+               (head1)->stqh_last = (head2)->stqh_last;                \
+               STAILQ_INIT((head2));                                   \
+       }                                                               \
+} while (0)
+
+#define        STAILQ_EMPTY(head)      ((head)->stqh_first == NULL)
+
+#define        STAILQ_FIRST(head)      ((head)->stqh_first)
+
+#define        STAILQ_FOREACH(var, head, field)                                \
+       for((var) = STAILQ_FIRST((head));                               \
+          (var);                                                       \
+          (var) = STAILQ_NEXT((var), field))
+
+#define        STAILQ_INIT(head) do {                                          \
+       STAILQ_FIRST((head)) = NULL;                                    \
+       (head)->stqh_last = &STAILQ_FIRST((head));                      \
+} while (0)
+
+#define        STAILQ_INSERT_AFTER(head, tqelm, elm, field) do {               \
+       if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
+               (head)->stqh_last = &STAILQ_NEXT((elm), field);         \
+       STAILQ_NEXT((tqelm), field) = (elm);                            \
+} while (0)
+
+#define        STAILQ_INSERT_HEAD(head, elm, field) do {                       \
+       if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
+               (head)->stqh_last = &STAILQ_NEXT((elm), field);         \
+       STAILQ_FIRST((head)) = (elm);                                   \
+} while (0)
+
+#define        STAILQ_INSERT_TAIL(head, elm, field) do {                       \
+       STAILQ_NEXT((elm), field) = NULL;                               \
+       *(head)->stqh_last = (elm);                                     \
+       (head)->stqh_last = &STAILQ_NEXT((elm), field);                 \
+} while (0)
+
+#define        STAILQ_LAST(head, type, field)                                  \
+       (STAILQ_EMPTY((head)) ?                                         \
+               NULL :                                                  \
+               ((struct type *)                                        \
+               ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
+
+#define        STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+#define        STAILQ_REMOVE(head, elm, type, field) do {                      \
+       if (STAILQ_FIRST((head)) == (elm)) {                            \
+               STAILQ_REMOVE_HEAD((head), field);                      \
+       }                                                               \
+       else {                                                          \
+               struct type *curelm = STAILQ_FIRST((head));             \
+               while (STAILQ_NEXT(curelm, field) != (elm))             \
+                       curelm = STAILQ_NEXT(curelm, field);            \
+               if ((STAILQ_NEXT(curelm, field) =                       \
+                    STAILQ_NEXT(STAILQ_NEXT(curelm, field), field)) == NULL)\
+                       (head)->stqh_last = &STAILQ_NEXT((curelm), field);\
+       }                                                               \
+} while (0)
+
+#define        STAILQ_REMOVE_HEAD(head, field) do {                            \
+       if ((STAILQ_FIRST((head)) =                                     \
+            STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL)         \
+               (head)->stqh_last = &STAILQ_FIRST((head));              \
+} while (0)
+
+#define        STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do {                 \
+       if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \
+               (head)->stqh_last = &STAILQ_FIRST((head));              \
+} while (0)
+
+/*
+ * List declarations.
+ */
+#define        LIST_HEAD(name, type)                                           \
+struct name {                                                          \
+       struct type *lh_first;  /* first element */                     \
+}
+
+#define        LIST_HEAD_INITIALIZER(head)                                     \
+       { NULL }
+
+#define        LIST_ENTRY(type)                                                \
+struct {                                                               \
+       struct type *le_next;   /* next element */                      \
+       struct type **le_prev;  /* address of previous next element */  \
+}
+
+/*
+ * List functions.
+ */
+
+#define        LIST_EMPTY(head)        ((head)->lh_first == NULL)
+
+#define        LIST_FIRST(head)        ((head)->lh_first)
+
+#define        LIST_FOREACH(var, head, field)                                  \
+       for ((var) = LIST_FIRST((head));                                \
+           (var);                                                      \
+           (var) = LIST_NEXT((var), field))
+
+#define        LIST_INIT(head) do {                                            \
+       LIST_FIRST((head)) = NULL;                                      \
+} while (0)
+
+#define        LIST_INSERT_AFTER(listelm, elm, field) do {                     \
+       if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
+               LIST_NEXT((listelm), field)->field.le_prev =            \
+                   &LIST_NEXT((elm), field);                           \
+       LIST_NEXT((listelm), field) = (elm);                            \
+       (elm)->field.le_prev = &LIST_NEXT((listelm), field);            \
+} while (0)
+
+#define        LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
+       (elm)->field.le_prev = (listelm)->field.le_prev;                \
+       LIST_NEXT((elm), field) = (listelm);                            \
+       *(listelm)->field.le_prev = (elm);                              \
+       (listelm)->field.le_prev = &LIST_NEXT((elm), field);            \
+} while (0)
+
+#define        LIST_INSERT_HEAD(head, elm, field) do {                         \
+       if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL)     \
+               LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
+       LIST_FIRST((head)) = (elm);                                     \
+       (elm)->field.le_prev = &LIST_FIRST((head));                     \
+} while (0)
+
+#define        LIST_NEXT(elm, field)   ((elm)->field.le_next)
+
+#define        LIST_REMOVE(elm, field) do {                                    \
+       if (LIST_NEXT((elm), field) != NULL)                            \
+               LIST_NEXT((elm), field)->field.le_prev =                \
+                   (elm)->field.le_prev;                               \
+       *(elm)->field.le_prev = LIST_NEXT((elm), field);                \
+} while (0)
+
+/*
+ * Tail queue declarations.
+ */
+#define        TAILQ_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *tqh_first; /* first element */                     \
+       struct type **tqh_last; /* addr of last next element */         \
+}
+
+#define        TAILQ_HEAD_INITIALIZER(head)                                    \
+       { NULL, &(head).tqh_first }
+
+#define        TAILQ_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *tqe_next;  /* next element */                      \
+       struct type **tqe_prev; /* address of previous next element */  \
+}
+
+/*
+ * Tail queue functions.
+ */
+#define        TAILQ_CONCAT(head1, head2, field) do {                          \
+       if (!TAILQ_EMPTY(head2)) {                                      \
+               *(head1)->tqh_last = (head2)->tqh_first;                \
+               (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+               (head1)->tqh_last = (head2)->tqh_last;                  \
+               TAILQ_INIT((head2));                                    \
+       }                                                               \
+} while (0)
+
+#define        TAILQ_EMPTY(head)       ((head)->tqh_first == NULL)
+
+#define        TAILQ_FIRST(head)       ((head)->tqh_first)
+
+#define        TAILQ_FOREACH(var, head, field)                                 \
+       for ((var) = TAILQ_FIRST((head));                               \
+           (var);                                                      \
+           (var) = TAILQ_NEXT((var), field))
+
+#define        TAILQ_FOREACH_REVERSE(var, head, headname, field)               \
+       for ((var) = TAILQ_LAST((head), headname);                      \
+           (var);                                                      \
+           (var) = TAILQ_PREV((var), headname, field))
+
+#define        TAILQ_INIT(head) do {                                           \
+       TAILQ_FIRST((head)) = NULL;                                     \
+       (head)->tqh_last = &TAILQ_FIRST((head));                        \
+} while (0)
+
+#define        TAILQ_INSERT_AFTER(head, listelm, elm, field) do {              \
+       if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
+               TAILQ_NEXT((elm), field)->field.tqe_prev =              \
+                   &TAILQ_NEXT((elm), field);                          \
+       else                                                            \
+               (head)->tqh_last = &TAILQ_NEXT((elm), field);           \
+       TAILQ_NEXT((listelm), field) = (elm);                           \
+       (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field);          \
+} while (0)
+
+#define        TAILQ_INSERT_BEFORE(listelm, elm, field) do {                   \
+       (elm)->field.tqe_prev = (listelm)->field.tqe_prev;              \
+       TAILQ_NEXT((elm), field) = (listelm);                           \
+       *(listelm)->field.tqe_prev = (elm);                             \
+       (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field);          \
+} while (0)
+
+#define        TAILQ_INSERT_HEAD(head, elm, field) do {                        \
+       if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL)   \
+               TAILQ_FIRST((head))->field.tqe_prev =                   \
+                   &TAILQ_NEXT((elm), field);                          \
+       else                                                            \
+               (head)->tqh_last = &TAILQ_NEXT((elm), field);           \
+       TAILQ_FIRST((head)) = (elm);                                    \
+       (elm)->field.tqe_prev = &TAILQ_FIRST((head));                   \
+} while (0)
+
+#define        TAILQ_INSERT_TAIL(head, elm, field) do {                        \
+       TAILQ_NEXT((elm), field) = NULL;                                \
+       (elm)->field.tqe_prev = (head)->tqh_last;                       \
+       *(head)->tqh_last = (elm);                                      \
+       (head)->tqh_last = &TAILQ_NEXT((elm), field);                   \
+} while (0)
+
+#define        TAILQ_LAST(head, headname)                                      \
+       (*(((struct headname *)((head)->tqh_last))->tqh_last))
+
+#define        TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+
+#define        TAILQ_PREV(elm, headname, field)                                \
+       (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+
+#define        TAILQ_REMOVE(head, elm, field) do {                             \
+       if ((TAILQ_NEXT((elm), field)) != NULL)                         \
+               TAILQ_NEXT((elm), field)->field.tqe_prev =              \
+                   (elm)->field.tqe_prev;                              \
+       else                                                            \
+               (head)->tqh_last = (elm)->field.tqe_prev;               \
+       *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field);              \
+} while (0)
+
+
+#ifdef _KERNEL
+
+/*
+ * XXX insque() and remque() are an old way of handling certain queues.
+ * They bogusly assumes that all queue heads look alike.
+ */
+
+struct quehead {
+       struct quehead *qh_link;
+       struct quehead *qh_rlink;
+};
+
+#ifdef __GNUC__
+
+static __inline void
+insque(void *a, void *b)
+{
+       struct quehead *element = (struct quehead *)a,
+                *head = (struct quehead *)b;
+
+       element->qh_link = head->qh_link;
+       element->qh_rlink = head;
+       head->qh_link = element;
+       element->qh_link->qh_rlink = element;
+}
+
+static __inline void
+remque(void *a)
+{
+       struct quehead *element = (struct quehead *)a;
+
+       element->qh_link->qh_rlink = element->qh_rlink;
+       element->qh_rlink->qh_link = element->qh_link;
+       element->qh_rlink = 0;
+}
+
+#else /* !__GNUC__ */
+
+void   insque(void *a, void *b);
+void   remque(void *a);
+
+#endif /* __GNUC__ */
+
+#endif /* _KERNEL */
+
+#endif /* !_SYS_QUEUE_H_ */
diff --git a/newlib/include/sys/reent.h b/newlib/include/sys/reent.h
new file mode 100644 (file)
index 0000000..55fb9ff
--- /dev/null
@@ -0,0 +1,837 @@
+/* This header file provides the reentrancy.  */
+
+/* WARNING: All identifiers here must begin with an underscore.  This file is
+   included by stdio.h and others and we therefore must only use identifiers
+   in the namespace allotted to us.  */
+
+#ifndef _SYS_REENT_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define _SYS_REENT_H_
+
+#include <_ansi.h>
+#include <sys/_types.h>
+
+#define _NULL 0
+
+#ifndef __Long
+#if __LONG_MAX__ == 2147483647L
+#define __Long long
+typedef unsigned __Long __ULong;
+#elif __INT_MAX__ == 2147483647
+#define __Long int
+typedef unsigned __Long __ULong;
+#endif
+#endif
+
+#if !defined( __Long)
+#include <sys/types.h>
+#endif
+
+#ifndef __Long
+#define __Long __int32_t
+typedef __uint32_t __ULong;
+#endif
+
+struct _reent;
+
+/*
+ * If _REENT_SMALL is defined, we make struct _reent as small as possible,
+ * by having nearly everything possible allocated at first use.
+ */
+
+struct _Bigint
+{
+  struct _Bigint *_next;
+  int _k, _maxwds, _sign, _wds;
+  __ULong _x[1];
+};
+
+/* needed by reentrant structure */
+struct __tm
+{
+  int   __tm_sec;
+  int   __tm_min;
+  int   __tm_hour;
+  int   __tm_mday;
+  int   __tm_mon;
+  int   __tm_year;
+  int   __tm_wday;
+  int   __tm_yday;
+  int   __tm_isdst;
+};
+
+/*
+ * atexit() support.
+ */
+
+#define        _ATEXIT_SIZE 32 /* must be at least 32 to guarantee ANSI conformance */
+
+struct _on_exit_args {
+       void *  _fnargs[_ATEXIT_SIZE];          /* user fn args */
+       void *  _dso_handle[_ATEXIT_SIZE];
+       /* Bitmask is set if user function takes arguments.  */
+       __ULong _fntypes;                       /* type of exit routine -
+                                  Must have at least _ATEXIT_SIZE bits */
+       /* Bitmask is set if function was registered via __cxa_atexit.  */
+       __ULong _is_cxa;
+};
+
+#ifdef _REENT_SMALL
+struct _atexit {
+       struct  _atexit *_next;                 /* next in list */
+       int     _ind;                           /* next index in this table */
+       void    (*_fns[_ATEXIT_SIZE])(void);    /* the table itself */
+        struct _on_exit_args * _on_exit_args_ptr;
+};
+#else
+struct _atexit {
+       struct  _atexit *_next;                 /* next in list */
+       int     _ind;                           /* next index in this table */
+       /* Some entries may already have been called, and will be NULL.  */
+       void    (*_fns[_ATEXIT_SIZE])(void);    /* the table itself */
+        struct _on_exit_args _on_exit_args;
+};
+#endif
+
+/*
+ * Stdio buffers.
+ *
+ * This and __FILE are defined here because we need them for struct _reent,
+ * but we don't want stdio.h included when stdlib.h is.
+ */
+
+struct __sbuf {
+       unsigned char *_base;
+       int     _size;
+};
+
+/*
+ * Stdio state variables.
+ *
+ * The following always hold:
+ *
+ *     if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
+ *             _lbfsize is -_bf._size, else _lbfsize is 0
+ *     if _flags&__SRD, _w is 0
+ *     if _flags&__SWR, _r is 0
+ *
+ * This ensures that the getc and putc macros (or inline functions) never
+ * try to write or read from a file that is in `read' or `write' mode.
+ * (Moreover, they can, and do, automatically switch from read mode to
+ * write mode, and back, on "r+" and "w+" files.)
+ *
+ * _lbfsize is used only to make the inline line-buffered output stream
+ * code as compact as possible.
+ *
+ * _ub, _up, and _ur are used when ungetc() pushes back more characters
+ * than fit in the current _bf, or when ungetc() pushes back a character
+ * that does not match the previous one in _bf.  When this happens,
+ * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
+ * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
+ */
+
+#ifdef _REENT_SMALL
+/*
+ * struct __sFILE_fake is the start of a struct __sFILE, with only the
+ * minimal fields allocated.  In __sinit() we really allocate the 3
+ * standard streams, etc., and point away from this fake.
+ */
+struct __sFILE_fake {
+  unsigned char *_p;   /* current position in (some) buffer */
+  int  _r;             /* read space left for getc() */
+  int  _w;             /* write space left for putc() */
+  short        _flags;         /* flags, below; this FILE is free if 0 */
+  short        _file;          /* fileno, if Unix descriptor, else -1 */
+  struct __sbuf _bf;   /* the buffer (at least 1 byte, if !NULL) */
+  int  _lbfsize;       /* 0 or -_bf._size, for inline putc */
+
+  struct _reent *_data;
+};
+
+/* Following is needed both in libc/stdio and libc/stdlib so we put it
+ * here instead of libc/stdio/local.h where it was previously. */
+
+extern _VOID   _EXFUN(__sinit,(struct _reent *));
+
+# define _REENT_SMALL_CHECK_INIT(ptr)          \
+  do                                           \
+    {                                          \
+      if ((ptr) && !(ptr)->__sdidinit)         \
+       __sinit (ptr);                          \
+    }                                          \
+  while (0)
+#else
+# define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */
+#endif
+
+struct __sFILE {
+  unsigned char *_p;   /* current position in (some) buffer */
+  int  _r;             /* read space left for getc() */
+  int  _w;             /* write space left for putc() */
+  short        _flags;         /* flags, below; this FILE is free if 0 */
+  short        _file;          /* fileno, if Unix descriptor, else -1 */
+  struct __sbuf _bf;   /* the buffer (at least 1 byte, if !NULL) */
+  int  _lbfsize;       /* 0 or -_bf._size, for inline putc */
+
+#ifdef _REENT_SMALL
+  struct _reent *_data;
+#endif
+
+  /* operations */
+  _PTR _cookie;        /* cookie passed to io functions */
+
+  _READ_WRITE_RETURN_TYPE _EXFUN((*_read),(struct _reent *, _PTR,
+                                          char *, int));
+  _READ_WRITE_RETURN_TYPE _EXFUN((*_write),(struct _reent *, _PTR,
+                                           const char *, int));
+  _fpos_t _EXFUN((*_seek),(struct _reent *, _PTR, _fpos_t, int));
+  int _EXFUN((*_close),(struct _reent *, _PTR));
+
+  /* separate buffer for long sequences of ungetc() */
+  struct __sbuf _ub;   /* ungetc buffer */
+  unsigned char *_up;  /* saved _p when _p is doing ungetc data */
+  int  _ur;            /* saved _r when _r is counting ungetc data */
+
+  /* tricks to meet minimum requirements even when malloc() fails */
+  unsigned char _ubuf[3];      /* guarantee an ungetc() buffer */
+  unsigned char _nbuf[1];      /* guarantee a getc() buffer */
+
+  /* separate buffer for fgetline() when line crosses buffer boundary */
+  struct __sbuf _lb;   /* buffer for fgetline() */
+
+  /* Unix stdio files get aligned to block boundaries on fseek() */
+  int  _blksize;       /* stat.st_blksize (may be != _bf._size) */
+  int  _offset;        /* current lseek offset */
+
+#ifndef _REENT_SMALL
+  struct _reent *_data;        /* Here for binary compatibility? Remove? */
+#endif
+
+#ifndef __SINGLE_THREAD__
+  _flock_t _lock;      /* for thread-safety locking */
+#endif
+  _mbstate_t _mbstate; /* for wide char stdio functions. */
+  int   _flags2;        /* for future use */
+};
+
+#ifdef __CUSTOM_FILE_IO__
+
+/* Get custom _FILE definition.  */
+#include <sys/custom_file.h>
+
+#else /* !__CUSTOM_FILE_IO__ */
+#ifdef __LARGE64_FILES
+struct __sFILE64 {
+  unsigned char *_p;   /* current position in (some) buffer */
+  int  _r;             /* read space left for getc() */
+  int  _w;             /* write space left for putc() */
+  short        _flags;         /* flags, below; this FILE is free if 0 */
+  short        _file;          /* fileno, if Unix descriptor, else -1 */
+  struct __sbuf _bf;   /* the buffer (at least 1 byte, if !NULL) */
+  int  _lbfsize;       /* 0 or -_bf._size, for inline putc */
+
+  struct _reent *_data;
+
+  /* operations */
+  _PTR _cookie;        /* cookie passed to io functions */
+
+  _READ_WRITE_RETURN_TYPE _EXFUN((*_read),(struct _reent *, _PTR,
+                                          char *, int));
+  _READ_WRITE_RETURN_TYPE _EXFUN((*_write),(struct _reent *, _PTR,
+                                           const char *, int));
+  _fpos_t _EXFUN((*_seek),(struct _reent *, _PTR, _fpos_t, int));
+  int _EXFUN((*_close),(struct _reent *, _PTR));
+
+  /* separate buffer for long sequences of ungetc() */
+  struct __sbuf _ub;   /* ungetc buffer */
+  unsigned char *_up;  /* saved _p when _p is doing ungetc data */
+  int  _ur;            /* saved _r when _r is counting ungetc data */
+
+  /* tricks to meet minimum requirements even when malloc() fails */
+  unsigned char _ubuf[3];      /* guarantee an ungetc() buffer */
+  unsigned char _nbuf[1];      /* guarantee a getc() buffer */
+
+  /* separate buffer for fgetline() when line crosses buffer boundary */
+  struct __sbuf _lb;   /* buffer for fgetline() */
+
+  /* Unix stdio files get aligned to block boundaries on fseek() */
+  int  _blksize;       /* stat.st_blksize (may be != _bf._size) */
+  int   _flags2;        /* for future use */
+
+  _off64_t _offset;     /* current lseek offset */
+  _fpos64_t _EXFUN((*_seek64),(struct _reent *, _PTR, _fpos64_t, int));
+
+#ifndef __SINGLE_THREAD__
+  _flock_t _lock;      /* for thread-safety locking */
+#endif
+  _mbstate_t _mbstate; /* for wide char stdio functions. */
+};
+typedef struct __sFILE64 __FILE;
+#else
+typedef struct __sFILE   __FILE;
+#endif /* __LARGE64_FILES */
+#endif /* !__CUSTOM_FILE_IO__ */
+
+struct _glue
+{
+  struct _glue *_next;
+  int _niobs;
+  __FILE *_iobs;
+};
+
+/*
+ * rand48 family support
+ *
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+#define        _RAND48_SEED_0  (0x330e)
+#define        _RAND48_SEED_1  (0xabcd)
+#define        _RAND48_SEED_2  (0x1234)
+#define        _RAND48_MULT_0  (0xe66d)
+#define        _RAND48_MULT_1  (0xdeec)
+#define        _RAND48_MULT_2  (0x0005)
+#define        _RAND48_ADD     (0x000b)
+struct _rand48 {
+  unsigned short _seed[3];
+  unsigned short _mult[3];
+  unsigned short _add;
+#ifdef _REENT_SMALL
+  /* Put this in here as well, for good luck.  */
+  __extension__ unsigned long long _rand_next;
+#endif
+};
+
+/* How big the some arrays are.  */
+#define _REENT_EMERGENCY_SIZE 25
+#define _REENT_ASCTIME_SIZE 26
+#define _REENT_SIGNAL_SIZE 24
+
+/*
+ * struct _reent
+ *
+ * This structure contains *all* globals needed by the library.
+ * It's raison d'etre is to facilitate threads by making all library routines
+ * reentrant.  IE: All state information is contained here.
+ */
+
+#ifdef _REENT_SMALL
+
+struct _mprec
+{
+  /* used by mprec routines */
+  struct _Bigint *_result;
+  int _result_k;
+  struct _Bigint *_p5s;
+  struct _Bigint **_freelist;
+};
+
+
+struct _misc_reent
+{
+  /* miscellaneous reentrant data */
+  char *_strtok_last;
+  _mbstate_t _mblen_state;
+  _mbstate_t _wctomb_state;
+  _mbstate_t _mbtowc_state;
+  char _l64a_buf[8];
+  int _getdate_err;
+  _mbstate_t _mbrlen_state;
+  _mbstate_t _mbrtowc_state;
+  _mbstate_t _mbsrtowcs_state;
+  _mbstate_t _wcrtomb_state;
+  _mbstate_t _wcsrtombs_state;
+};
+
+/* This version of _reent is layed our with "int"s in pairs, to help
+ * ports with 16-bit int's but 32-bit pointers, align nicely.  */
+struct _reent
+{
+
+  /* FILE is a big struct and may change over time.  To try to achieve binary
+     compatibility with future versions, put stdin,stdout,stderr here.
+     These are pointers into member __sf defined below.  */
+  __FILE *_stdin, *_stdout, *_stderr;  /* XXX */
+
+  int _errno;                  /* local copy of errno */
+
+  int  _inc;                   /* used by tmpnam */
+
+  char *_emergency;
+
+  int __sdidinit;              /* 1 means stdio has been init'd */
+
+  int _current_category;       /* used by setlocale */
+  _CONST char *_current_locale;
+
+  struct _mprec *_mp;
+
+  void _EXFUN((*__cleanup),(struct _reent *));
+
+  int _gamma_signgam;
+
+  /* used by some fp conversion routines */
+  int _cvtlen;                 /* should be size_t */
+  char *_cvtbuf;
+
+  struct _rand48 *_r48;
+  struct __tm *_localtime_buf;
+  char *_asctime_buf;
+
+  /* signal info */
+  void (**(_sig_func))(int);
+
+  /* atexit stuff */
+  struct _atexit *_atexit;
+  struct _atexit _atexit0;
+
+  struct _glue __sglue;                        /* root of glue chain */
+  __FILE *__sf;                                /* file descriptors */
+  struct _misc_reent *_misc;            /* strtok, multibyte states */
+  char *_signal_buf;                    /* strsignal */
+};
+
+extern const struct __sFILE_fake __sf_fake_stdin;
+extern const struct __sFILE_fake __sf_fake_stdout;
+extern const struct __sFILE_fake __sf_fake_stderr;
+
+#define _REENT_INIT(var) \
+  { (__FILE *)&__sf_fake_stdin, \
+    (__FILE *)&__sf_fake_stdout, \
+    (__FILE *)&__sf_fake_stderr, \
+    0, \
+    0, \
+    _NULL, \
+    0, \
+    0, \
+    "C", \
+    _NULL, \
+    _NULL, \
+    0, \
+    0, \
+    _NULL, \
+    _NULL, \
+    _NULL, \
+    _NULL, \
+    _NULL, \
+    _NULL, \
+    {_NULL, 0, {_NULL}, _NULL}, \
+    {_NULL, 0, _NULL}, \
+    _NULL, \
+    _NULL, \
+    _NULL \
+  }
+
+#define _REENT_INIT_PTR(var) \
+  { (var)->_stdin = (__FILE *)&__sf_fake_stdin; \
+    (var)->_stdout = (__FILE *)&__sf_fake_stdout; \
+    (var)->_stderr = (__FILE *)&__sf_fake_stderr; \
+    (var)->_errno = 0; \
+    (var)->_inc = 0; \
+    (var)->_emergency = _NULL; \
+    (var)->__sdidinit = 0; \
+    (var)->_current_category = 0; \
+    (var)->_current_locale = "C"; \
+    (var)->_mp = _NULL; \
+    (var)->__cleanup = _NULL; \
+    (var)->_gamma_signgam = 0; \
+    (var)->_cvtlen = 0; \
+    (var)->_cvtbuf = _NULL; \
+    (var)->_r48 = _NULL; \
+    (var)->_localtime_buf = _NULL; \
+    (var)->_asctime_buf = _NULL; \
+    (var)->_sig_func = _NULL; \
+    (var)->_atexit = _NULL; \
+    (var)->_atexit0._next = _NULL; \
+    (var)->_atexit0._ind = 0; \
+    (var)->_atexit0._fns[0] = _NULL; \
+    (var)->_atexit0._on_exit_args_ptr = _NULL; \
+    (var)->__sglue._next = _NULL; \
+    (var)->__sglue._niobs = 0; \
+    (var)->__sglue._iobs = _NULL; \
+    (var)->__sf = 0; \
+    (var)->_misc = _NULL; \
+    (var)->_signal_buf = _NULL; \
+  }
+
+/* Only built the assert() calls if we are built with debugging.  */
+#if DEBUG
+#include <assert.h>
+#define __reent_assert(x) assert(x)
+#else
+#define __reent_assert(x) ((void)0)
+#endif
+
+#ifdef __CUSTOM_FILE_IO__
+#error Custom FILE I/O and _REENT_SMALL not currently supported.
+#endif
+
+/* Generic _REENT check macro.  */
+#define _REENT_CHECK(var, what, type, size, init) do { \
+  struct _reent *_r = (var); \
+  if (_r->what == NULL) { \
+    _r->what = (type)malloc(size); \
+    __reent_assert(_r->what); \
+    init; \
+  } \
+} while (0)
+
+#define _REENT_CHECK_TM(var) \
+  _REENT_CHECK(var, _localtime_buf, struct __tm *, sizeof *((var)->_localtime_buf), \
+    /* nothing */)
+
+#define _REENT_CHECK_ASCTIME_BUF(var) \
+  _REENT_CHECK(var, _asctime_buf, char *, _REENT_ASCTIME_SIZE, \
+    memset((var)->_asctime_buf, 0, _REENT_ASCTIME_SIZE))
+
+/* Handle the dynamically allocated rand48 structure. */
+#define _REENT_INIT_RAND48(var) do { \
+  struct _reent *_r = (var); \
+  _r->_r48->_seed[0] = _RAND48_SEED_0; \
+  _r->_r48->_seed[1] = _RAND48_SEED_1; \
+  _r->_r48->_seed[2] = _RAND48_SEED_2; \
+  _r->_r48->_mult[0] = _RAND48_MULT_0; \
+  _r->_r48->_mult[1] = _RAND48_MULT_1; \
+  _r->_r48->_mult[2] = _RAND48_MULT_2; \
+  _r->_r48->_add = _RAND48_ADD; \
+  _r->_r48->_rand_next = 1; \
+} while (0)
+#define _REENT_CHECK_RAND48(var) \
+  _REENT_CHECK(var, _r48, struct _rand48 *, sizeof *((var)->_r48), _REENT_INIT_RAND48((var)))
+
+#define _REENT_INIT_MP(var) do { \
+  struct _reent *_r = (var); \
+  _r->_mp->_result_k = 0; \
+  _r->_mp->_result = _r->_mp->_p5s = _NULL; \
+  _r->_mp->_freelist = _NULL; \
+} while (0)
+#define _REENT_CHECK_MP(var) \
+  _REENT_CHECK(var, _mp, struct _mprec *, sizeof *((var)->_mp), _REENT_INIT_MP(var))
+
+#define _REENT_CHECK_EMERGENCY(var) \
+  _REENT_CHECK(var, _emergency, char *, _REENT_EMERGENCY_SIZE, /* nothing */)
+
+#define _REENT_INIT_MISC(var) do { \
+  struct _reent *_r = (var); \
+  _r->_misc->_strtok_last = _NULL; \
+  _r->_misc->_mblen_state.__count = 0; \
+  _r->_misc->_mblen_state.__value.__wch = 0; \
+  _r->_misc->_wctomb_state.__count = 0; \
+  _r->_misc->_wctomb_state.__value.__wch = 0; \
+  _r->_misc->_mbtowc_state.__count = 0; \
+  _r->_misc->_mbtowc_state.__value.__wch = 0; \
+  _r->_misc->_mbrlen_state.__count = 0; \
+  _r->_misc->_mbrlen_state.__value.__wch = 0; \
+  _r->_misc->_mbrtowc_state.__count = 0; \
+  _r->_misc->_mbrtowc_state.__value.__wch = 0; \
+  _r->_misc->_mbsrtowcs_state.__count = 0; \
+  _r->_misc->_mbsrtowcs_state.__value.__wch = 0; \
+  _r->_misc->_wcrtomb_state.__count = 0; \
+  _r->_misc->_wcrtomb_state.__value.__wch = 0; \
+  _r->_misc->_wcsrtombs_state.__count = 0; \
+  _r->_misc->_wcsrtombs_state.__value.__wch = 0; \
+  _r->_misc->_l64a_buf[0] = '\0'; \
+  _r->_misc->_getdate_err = 0; \
+} while (0)
+#define _REENT_CHECK_MISC(var) \
+  _REENT_CHECK(var, _misc, struct _misc_reent *, sizeof *((var)->_misc), _REENT_INIT_MISC(var))
+
+#define _REENT_CHECK_SIGNAL_BUF(var) \
+  _REENT_CHECK(var, _signal_buf, char *, _REENT_SIGNAL_SIZE, /* nothing */)
+
+#define _REENT_SIGNGAM(ptr)    ((ptr)->_gamma_signgam)
+#define _REENT_RAND_NEXT(ptr)  ((ptr)->_r48->_rand_next)
+#define _REENT_RAND48_SEED(ptr)        ((ptr)->_r48->_seed)
+#define _REENT_RAND48_MULT(ptr)        ((ptr)->_r48->_mult)
+#define _REENT_RAND48_ADD(ptr) ((ptr)->_r48->_add)
+#define _REENT_MP_RESULT(ptr)  ((ptr)->_mp->_result)
+#define _REENT_MP_RESULT_K(ptr)        ((ptr)->_mp->_result_k)
+#define _REENT_MP_P5S(ptr)     ((ptr)->_mp->_p5s)
+#define _REENT_MP_FREELIST(ptr)        ((ptr)->_mp->_freelist)
+#define _REENT_ASCTIME_BUF(ptr)        ((ptr)->_asctime_buf)
+#define _REENT_TM(ptr)         ((ptr)->_localtime_buf)
+#define _REENT_EMERGENCY(ptr)  ((ptr)->_emergency)
+#define _REENT_STRTOK_LAST(ptr)        ((ptr)->_misc->_strtok_last)
+#define _REENT_MBLEN_STATE(ptr)        ((ptr)->_misc->_mblen_state)
+#define _REENT_MBTOWC_STATE(ptr)((ptr)->_misc->_mbtowc_state)
+#define _REENT_WCTOMB_STATE(ptr)((ptr)->_misc->_wctomb_state)
+#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_misc->_mbrlen_state)
+#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_misc->_mbrtowc_state)
+#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_misc->_mbsrtowcs_state)
+#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_misc->_wcrtomb_state)
+#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_misc->_wcsrtombs_state)
+#define _REENT_L64A_BUF(ptr)    ((ptr)->_misc->_l64a_buf)
+#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_misc->_getdate_err))
+#define _REENT_SIGNAL_BUF(ptr)  ((ptr)->_signal_buf)
+
+#else /* !_REENT_SMALL */
+
+struct _reent
+{
+  int _errno;                  /* local copy of errno */
+
+  /* FILE is a big struct and may change over time.  To try to achieve binary
+     compatibility with future versions, put stdin,stdout,stderr here.
+     These are pointers into member __sf defined below.  */
+  __FILE *_stdin, *_stdout, *_stderr;
+
+  int  _inc;                   /* used by tmpnam */
+  char _emergency[_REENT_EMERGENCY_SIZE];
+
+  int _current_category;       /* used by setlocale */
+  _CONST char *_current_locale;
+
+  int __sdidinit;              /* 1 means stdio has been init'd */
+
+  void _EXFUN((*__cleanup),(struct _reent *));
+
+  /* used by mprec routines */
+  struct _Bigint *_result;
+  int _result_k;
+  struct _Bigint *_p5s;
+  struct _Bigint **_freelist;
+
+  /* used by some fp conversion routines */
+  int _cvtlen;                 /* should be size_t */
+  char *_cvtbuf;
+
+  union
+    {
+      struct
+        {
+          unsigned int _unused_rand;
+          char * _strtok_last;
+          char _asctime_buf[_REENT_ASCTIME_SIZE];
+          struct __tm _localtime_buf;
+          int _gamma_signgam;
+          __extension__ unsigned long long _rand_next;
+          struct _rand48 _r48;
+          _mbstate_t _mblen_state;
+          _mbstate_t _mbtowc_state;
+          _mbstate_t _wctomb_state;
+          char _l64a_buf[8];
+          char _signal_buf[_REENT_SIGNAL_SIZE];
+          int _getdate_err;
+          _mbstate_t _mbrlen_state;
+          _mbstate_t _mbrtowc_state;
+          _mbstate_t _mbsrtowcs_state;
+          _mbstate_t _wcrtomb_state;
+          _mbstate_t _wcsrtombs_state;
+         int _h_errno;
+        } _reent;
+  /* Two next two fields were once used by malloc.  They are no longer
+     used. They are used to preserve the space used before so as to
+     allow addition of new reent fields and keep binary compatibility.   */
+      struct
+        {
+#define _N_LISTS 30
+          unsigned char * _nextf[_N_LISTS];
+          unsigned int _nmalloc[_N_LISTS];
+        } _unused;
+    } _new;
+
+  /* atexit stuff */
+  struct _atexit *_atexit;     /* points to head of LIFO stack */
+  struct _atexit _atexit0;     /* one guaranteed table, required by ANSI */
+
+  /* signal info */
+  void (**(_sig_func))(int);
+
+  /* These are here last so that __FILE can grow without changing the offsets
+     of the above members (on the off chance that future binary compatibility
+     would be broken otherwise).  */
+  struct _glue __sglue;                /* root of glue chain */
+  __FILE __sf[3];              /* first three file descriptors */
+};
+
+#define _REENT_INIT(var) \
+  { 0, \
+    &(var).__sf[0], \
+    &(var).__sf[1], \
+    &(var).__sf[2], \
+    0, \
+    "", \
+    0, \
+    "C", \
+    0, \
+    _NULL, \
+    _NULL, \
+    0, \
+    _NULL, \
+    _NULL, \
+    0, \
+    _NULL, \
+    { \
+      { \
+        0, \
+        _NULL, \
+        "", \
+        {0, 0, 0, 0, 0, 0, 0, 0, 0}, \
+        0, \
+        1, \
+        { \
+          {_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \
+          {_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, \
+          _RAND48_ADD \
+        }, \
+        {0, {0}}, \
+        {0, {0}}, \
+        {0, {0}}, \
+        "", \
+        "", \
+        0, \
+        {0, {0}}, \
+        {0, {0}}, \
+        {0, {0}}, \
+        {0, {0}}, \
+        {0, {0}} \
+      } \
+    }, \
+    _NULL, \
+    {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}, \
+    _NULL, \
+    {_NULL, 0, _NULL} \
+  }
+
+#define _REENT_INIT_PTR(var) \
+  { (var)->_errno = 0; \
+    (var)->_stdin = &(var)->__sf[0]; \
+    (var)->_stdout = &(var)->__sf[1]; \
+    (var)->_stderr = &(var)->__sf[2]; \
+    (var)->_inc = 0; \
+    memset(&(var)->_emergency, 0, sizeof((var)->_emergency)); \
+    (var)->_current_category = 0; \
+    (var)->_current_locale = "C"; \
+    (var)->__sdidinit = 0; \
+    (var)->__cleanup = _NULL; \
+    (var)->_result = _NULL; \
+    (var)->_result_k = 0; \
+    (var)->_p5s = _NULL; \
+    (var)->_freelist = _NULL; \
+    (var)->_cvtlen = 0; \
+    (var)->_cvtbuf = _NULL; \
+    (var)->_new._reent._unused_rand = 0; \
+    (var)->_new._reent._strtok_last = _NULL; \
+    (var)->_new._reent._asctime_buf[0] = 0; \
+    memset(&(var)->_new._reent._localtime_buf, 0, sizeof((var)->_new._reent._localtime_buf)); \
+    (var)->_new._reent._gamma_signgam = 0; \
+    (var)->_new._reent._rand_next = 1; \
+    (var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \
+    (var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \
+    (var)->_new._reent._r48._seed[2] = _RAND48_SEED_2; \
+    (var)->_new._reent._r48._mult[0] = _RAND48_MULT_0; \
+    (var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
+    (var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
+    (var)->_new._reent._r48._add = _RAND48_ADD; \
+    (var)->_new._reent._mblen_state.__count = 0; \
+    (var)->_new._reent._mblen_state.__value.__wch = 0; \
+    (var)->_new._reent._mbtowc_state.__count = 0; \
+    (var)->_new._reent._mbtowc_state.__value.__wch = 0; \
+    (var)->_new._reent._wctomb_state.__count = 0; \
+    (var)->_new._reent._wctomb_state.__value.__wch = 0; \
+    (var)->_new._reent._mbrlen_state.__count = 0; \
+    (var)->_new._reent._mbrlen_state.__value.__wch = 0; \
+    (var)->_new._reent._mbrtowc_state.__count = 0; \
+    (var)->_new._reent._mbrtowc_state.__value.__wch = 0; \
+    (var)->_new._reent._mbsrtowcs_state.__count = 0; \
+    (var)->_new._reent._mbsrtowcs_state.__value.__wch = 0; \
+    (var)->_new._reent._wcrtomb_state.__count = 0; \
+    (var)->_new._reent._wcrtomb_state.__value.__wch = 0; \
+    (var)->_new._reent._wcsrtombs_state.__count = 0; \
+    (var)->_new._reent._wcsrtombs_state.__value.__wch = 0; \
+    (var)->_new._reent._l64a_buf[0] = '\0'; \
+    (var)->_new._reent._signal_buf[0] = '\0'; \
+    (var)->_new._reent._getdate_err = 0; \
+    (var)->_atexit = _NULL; \
+    (var)->_atexit0._next = _NULL; \
+    (var)->_atexit0._ind = 0; \
+    (var)->_atexit0._fns[0] = _NULL; \
+    (var)->_atexit0._on_exit_args._fntypes = 0; \
+    (var)->_atexit0._on_exit_args._fnargs[0] = _NULL; \
+    (var)->_sig_func = _NULL; \
+    (var)->__sglue._next = _NULL; \
+    (var)->__sglue._niobs = 0; \
+    (var)->__sglue._iobs = _NULL; \
+    memset(&(var)->__sf, 0, sizeof((var)->__sf)); \
+  }
+
+#define _REENT_CHECK_RAND48(ptr)       /* nothing */
+#define _REENT_CHECK_MP(ptr)           /* nothing */
+#define _REENT_CHECK_TM(ptr)           /* nothing */
+#define _REENT_CHECK_ASCTIME_BUF(ptr)  /* nothing */
+#define _REENT_CHECK_EMERGENCY(ptr)    /* nothing */
+#define _REENT_CHECK_MISC(ptr)         /* nothing */
+#define _REENT_CHECK_SIGNAL_BUF(ptr)   /* nothing */
+
+#define _REENT_SIGNGAM(ptr)    ((ptr)->_new._reent._gamma_signgam)
+#define _REENT_RAND_NEXT(ptr)  ((ptr)->_new._reent._rand_next)
+#define _REENT_RAND48_SEED(ptr)        ((ptr)->_new._reent._r48._seed)
+#define _REENT_RAND48_MULT(ptr)        ((ptr)->_new._reent._r48._mult)
+#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
+#define _REENT_MP_RESULT(ptr)  ((ptr)->_result)
+#define _REENT_MP_RESULT_K(ptr)        ((ptr)->_result_k)
+#define _REENT_MP_P5S(ptr)     ((ptr)->_p5s)
+#define _REENT_MP_FREELIST(ptr)        ((ptr)->_freelist)
+#define _REENT_ASCTIME_BUF(ptr)        ((ptr)->_new._reent._asctime_buf)
+#define _REENT_TM(ptr)         (&(ptr)->_new._reent._localtime_buf)
+#define _REENT_EMERGENCY(ptr)  ((ptr)->_emergency)
+#define _REENT_STRTOK_LAST(ptr)        ((ptr)->_new._reent._strtok_last)
+#define _REENT_MBLEN_STATE(ptr)        ((ptr)->_new._reent._mblen_state)
+#define _REENT_MBTOWC_STATE(ptr)((ptr)->_new._reent._mbtowc_state)
+#define _REENT_WCTOMB_STATE(ptr)((ptr)->_new._reent._wctomb_state)
+#define _REENT_MBRLEN_STATE(ptr)((ptr)->_new._reent._mbrlen_state)
+#define _REENT_MBRTOWC_STATE(ptr)((ptr)->_new._reent._mbrtowc_state)
+#define _REENT_MBSRTOWCS_STATE(ptr)((ptr)->_new._reent._mbsrtowcs_state)
+#define _REENT_WCRTOMB_STATE(ptr)((ptr)->_new._reent._wcrtomb_state)
+#define _REENT_WCSRTOMBS_STATE(ptr)((ptr)->_new._reent._wcsrtombs_state)
+#define _REENT_L64A_BUF(ptr)    ((ptr)->_new._reent._l64a_buf)
+#define _REENT_SIGNAL_BUF(ptr)  ((ptr)->_new._reent._signal_buf)
+#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
+
+#endif /* !_REENT_SMALL */
+
+/*
+ * All references to struct _reent are via this pointer.
+ * Internally, newlib routines that need to reference it should use _REENT.
+ */
+
+#ifndef __ATTRIBUTE_IMPURE_PTR__
+#define __ATTRIBUTE_IMPURE_PTR__
+#endif
+
+extern struct _reent *_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
+extern struct _reent *_CONST _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
+
+void _reclaim_reent _PARAMS ((struct _reent *));
+
+/* #define _REENT_ONLY define this to get only reentrant routines */
+
+#ifndef _REENT_ONLY
+
+#if defined(__DYNAMIC_REENT__) && !defined(__SINGLE_THREAD__)
+#ifndef __getreent
+  struct _reent * _EXFUN(__getreent, (void));
+#endif
+# define _REENT (__getreent())
+#else /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
+# define _REENT _impure_ptr
+#endif /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
+
+#endif /* !_REENT_ONLY */
+
+#define _GLOBAL_REENT _global_impure_ptr
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _SYS_REENT_H_ */
diff --git a/newlib/include/sys/resource.h b/newlib/include/sys/resource.h
new file mode 100644 (file)
index 0000000..eb82755
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _SYS_RESOURCE_H_
+#define _SYS_RESOURCE_H_
+
+#include <sys/time.h>
+
+#define        RUSAGE_SELF     0               /* calling process */
+#define        RUSAGE_CHILDREN -1              /* terminated child processes */
+
+struct rusage {
+       struct timeval ru_utime;        /* user time used */
+       struct timeval ru_stime;        /* system time used */
+};
+
+#endif
+
diff --git a/newlib/include/sys/sched.h b/newlib/include/sys/sched.h
new file mode 100644 (file)
index 0000000..4316b89
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ *  Written by Joel Sherrill <joel@OARcorp.com>.
+ *
+ *  COPYRIGHT (c) 1989-2000.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  Permission to use, copy, modify, and distribute this software for any
+ *  purpose without fee is hereby granted, provided that this entire notice
+ *  is included in all copies of any software which is or includes a copy
+ *  or modification of this software.
+ *
+ *  THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ *  WARRANTY.  IN PARTICULAR,  THE AUTHOR MAKES NO REPRESENTATION
+ *  OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
+ *  SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ *  $Id: sched.h,v 1.2 2002/06/20 19:51:24 fitzsim Exp $
+ */
+
+
+#ifndef __POSIX_SYS_SCHEDULING_h
+#define __POSIX_SYS_SCHEDULING_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/unistd.h>
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+/* Scheduling Policies, P1003.1b-1993, p. 250
+   NOTE:  SCHED_SPORADIC added by P1003.4b/D8, p. 34.  */
+
+#define SCHED_OTHER    0
+#define SCHED_FIFO     1
+#define SCHED_RR       2
+
+#if defined(_POSIX_SPORADIC_SERVER)
+#define SCHED_SPORADIC 3 
+#endif
+
+/* Scheduling Parameters, P1003.1b-1993, p. 249
+   NOTE:  Fields whose name begins with "ss_" added by P1003.4b/D8, p. 33.  */
+
+struct sched_param {
+  int sched_priority;           /* Process execution scheduling priority */
+
+#if defined(_POSIX_SPORADIC_SERVER)
+  int ss_low_priority;          /* Low scheduling priority for sporadic */
+                                /*   server */
+  struct timespec ss_replenish_period; 
+                                /* Replenishment period for sporadic server */
+  struct timespec ss_initial_budget;   /* Initial budget for sporadic server */
+#endif
+};
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif
+/* end of include file */
+
diff --git a/newlib/include/sys/signal.h b/newlib/include/sys/signal.h
new file mode 100644 (file)
index 0000000..454fbc1
--- /dev/null
@@ -0,0 +1,316 @@
+/* sys/signal.h */
+
+#ifndef _SYS_SIGNAL_H
+#define _SYS_SIGNAL_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "_ansi.h"
+#include <sys/features.h>
+
+/* #ifndef __STRICT_ANSI__*/
+
+#if defined(_POSIX_THREADS)
+#include <sys/types.h>   /* for pthread data types */
+#endif
+
+typedef unsigned long sigset_t;
+
+#if defined(__rtems__)
+
+#if defined(_POSIX_REALTIME_SIGNALS)
+
+/* sigev_notify values
+   NOTE: P1003.1c/D10, p. 34 adds SIGEV_THREAD.  */
+
+#define SIGEV_NONE   1  /* No asynchronous notification shall be delivered */
+                        /*   when the event of interest occurs. */
+#define SIGEV_SIGNAL 2  /* A queued signal, with an application defined */
+                        /*  value, shall be delivered when the event of */
+                        /*  interest occurs. */
+#define SIGEV_THREAD 3  /* A notification function shall be called to */
+                        /*   perform notification. */
+
+/*  Signal Generation and Delivery, P1003.1b-1993, p. 63
+    NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and
+          sigev_notify_attributes to the sigevent structure.  */
+
+union sigval {
+  int    sival_int;    /* Integer signal value */
+  void  *sival_ptr;    /* Pointer signal value */
+};
+
+struct sigevent {
+  int              sigev_notify;               /* Notification type */
+  int              sigev_signo;                /* Signal number */
+  union sigval     sigev_value;                /* Signal value */
+
+#if defined(_POSIX_THREADS)
+  void           (*sigev_notify_function)( union sigval );
+                                               /* Notification function */
+  pthread_attr_t  *sigev_notify_attributes;    /* Notification Attributes */
+#endif
+};
+
+/* Signal Actions, P1003.1b-1993, p. 64 */
+/* si_code values, p. 66 */
+
+#define SI_USER    1    /* Sent by a user. kill(), abort(), etc */
+#define SI_QUEUE   2    /* Sent by sigqueue() */
+#define SI_TIMER   3    /* Sent by expiration of a timer_settime() timer */
+#define SI_ASYNCIO 4    /* Indicates completion of asycnhronous IO */
+#define SI_MESGQ   5    /* Indicates arrival of a message at an empty queue */
+
+typedef struct {
+  int          si_signo;    /* Signal number */
+  int          si_code;     /* Cause of the signal */
+  union sigval si_value;    /* Signal value */
+} siginfo_t;
+#endif
+
+/*  3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */
+
+#define SA_NOCLDSTOP 1   /* Do not generate SIGCHLD when children stop */
+#define SA_SIGINFO   2   /* Invoke the signal catching function with */
+                         /*   three arguments instead of one. */
+
+/* struct sigaction notes from POSIX:
+ *
+ *  (1) Routines stored in sa_handler should take a single int as
+ *      their argument although the POSIX standard does not require this.
+ *  (2) The fields sa_handler and sa_sigaction may overlap, and a conforming
+ *      application should not use both simultaneously.
+ */
+
+typedef void (*_sig_func_ptr)();
+
+struct sigaction {
+  int         sa_flags;       /* Special flags to affect behavior of signal */
+  sigset_t    sa_mask;        /* Additional set of signals to be blocked */
+                              /*   during execution of signal-catching */
+                              /*   function. */
+  union {
+    _sig_func_ptr _handler;  /* SIG_DFL, SIG_IGN, or pointer to a function */
+#if defined(_POSIX_REALTIME_SIGNALS)
+    void      (*_sigaction)( int, siginfo_t *, void * );
+#endif
+  } _signal_handlers;
+};
+
+#define sa_handler    _signal_handlers._handler
+#if defined(_POSIX_REALTIME_SIGNALS)
+#define sa_sigaction  _signal_handlers._sigaction
+#endif
+
+#elif defined(__CYGWIN__)
+#include <cygwin/signal.h>
+#else
+#define SA_NOCLDSTOP 1  /* only value supported now for sa_flags */
+
+typedef void (*_sig_func_ptr)(int);
+
+struct sigaction 
+{
+       _sig_func_ptr sa_handler;
+       sigset_t sa_mask;
+       int sa_flags;
+};
+#endif /* defined(__rtems__) */
+
+#define SIG_SETMASK 0  /* set mask with sigprocmask() */
+#define SIG_BLOCK 1    /* set of signals to block */
+#define SIG_UNBLOCK 2  /* set of signals to, well, unblock */
+
+/* These depend upon the type of sigset_t, which right now 
+   is always a long.. They're in the POSIX namespace, but
+   are not ANSI. */
+#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
+#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0)
+#define sigemptyset(what)   (*(what) = 0, 0)
+#define sigfillset(what)    (*(what) = ~(0), 0)
+#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0)
+
+int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset));
+
+#if defined(_POSIX_THREADS)
+int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset));
+#endif
+
+/* protos for functions found in winsup sources for CYGWIN */
+#if defined(__CYGWIN__) || defined(__rtems__)
+#undef sigaddset
+#undef sigdelset
+#undef sigemptyset
+#undef sigfillset
+#undef sigismember
+/* The first argument to kill should be pid_t.  Right now
+   <sys/types.h> always defines pid_t to be int.  If that ever
+   changes, then we will need to do something else, perhaps along the
+   lines of <machine/types.h>.  */
+int _EXFUN(kill, (int, int));
+int _EXFUN(killpg, (pid_t, int));
+int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *));
+int _EXFUN(sigaddset, (sigset_t *, const int));
+int _EXFUN(sigdelset, (sigset_t *, const int));
+int _EXFUN(sigismember, (const sigset_t *, int));
+int _EXFUN(sigfillset, (sigset_t *));
+int _EXFUN(sigemptyset, (sigset_t *));
+int _EXFUN(sigpending, (sigset_t *));
+int _EXFUN(sigsuspend, (const sigset_t *));
+int _EXFUN(sigpause, (int));
+
+#if defined(_POSIX_THREADS)
+#ifdef __CYGWIN__
+#  ifndef _CYGWIN_TYPES_H
+#    error You need the winsup sources or a cygwin installation to compile the cygwin version of newlib.
+#  endif
+#endif
+int _EXFUN(pthread_kill, (pthread_t thread, int sig));
+#endif