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


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

libsysbase


Hi,

I've done some work on adding a support library to libgloss designed to support pseudo device drivers based on the current libnosys. I've used this on a few embedded platforms to implement printf and filesystem support within newlib. I'd like to present my patch here for peer review and guidance in contributing this to newlib if it's acceptable.

My psuedo devices are implemented as a table of function pointers which include entries for stdin, stdout and stderr. I've allowed for a total of 16 devices.

typedef struct {
const char *name;
int structSize;
int (*open_r)(struct _reent *r, void *fileStruct, const char *path,int flags,int mode);
int (*close_r)(struct _reent *r,int fd);
int (*write_r)(struct _reent *r,int fd,const char *ptr,int len);
int (*read_r)(struct _reent *r,int fd,char *ptr,int len);
int (*seek_r)(struct _reent *r,int fd,int pos,int dir);
int (*fstat_r)(struct _reent *r,int fd,struct stat *st);
int (*stat_r)(struct _reent *r,const char *file,struct stat *st);
int (*link_r)(struct _reent *r,char *existing, char *new);
int (*unlink_r)(struct _reent *r,char *name);
int (*chdir_r)(struct _reent *r,char *name);
} devoptab_t;


The name field is the name of the device - the support framework checks for this name followed by a colon at the start of a filename passed to fopen.

Currently I make printf and associated functions work by creating a devopt_tab entry with just a write function and insert this in the table for stdin & stderr, setting these streams as unbuffered.

#include <sys/iosupport.h>

int con_write(struct _reent *r,int fd,const char *ptr,int len) {
   ...
   code to output string
   ...
   return len;
}

const devoptab_t dotab_stdout = {
   "con",
   0,
   NULL,
   NULL,
   con_write,
   NULL,
   NULL,
   NULL
};

   devoptab_list[STD_OUT] = &dotab_stdout;
   devoptab_list[STD_ERR] = &dotab_stdout;
   setvbuf(stderr, NULL , _IONBF, 0);
   setvbuf(stdout, NULL , _IONBF, 0);

I should probably add a function to set these entries in iosupport.c rather than setting the table entries directly.

For filesystem devices I've provided AddDevice which takes a pointer to a devoptab_t structure as shown above and inserts it into a free space in the device table, returning a device number or -1 on failure.

SetDefaultDevice sets the device number to be used when no device descriptor is found at the start of the filename.

I'm still planning on adding chdir and getcwd to this and providing some method of parsing directories. I've considered adding functions similar to TOS ( fsfirst and fsnext ) if anyone is familiar with the old Atari machines. I also noticed opendir, readdir etc in the posix folder but these are dependent on dirent.h which is stubbed in the default newlib install. How would I go about installing a suitable header to use for these functions in my library?

The sbrk function I've implemented here is similar to the one found in libc/sys/arm but extended a little to allow for situations where the heap and the stack are not in the same memory area as is the case on a couple of the platforms I target. I usually set the extent of the heap in my crt0 files using the fake_heap_start and fake_heap_end variables I've added.

If this is suitable for contribution to newlib it might be worth adding a configure switch along the lines of --enable-libsysbase. How would I go about doing that?

I'm not sure if newlib/libc/include/sys is a good place to put the iosupport.h header I've added. Is there a better place for that to go?

I should also write some comprehensive documentation for this addition. What format should that be in and where should it be placed?

thanks
Dave
diff -Nbaur newlib-1.14.0/libgloss/configure newlib-1.14.0-arm/libgloss/configure
--- newlib-1.14.0/libgloss/configure	Mon Dec 12 11:25:07 2005
+++ newlib-1.14.0-arm/libgloss/configure	Fri Apr 14 22:08:39 2006
@@ -711,9 +711,9 @@
 
 
 if test -z "${with_multisubdir}" ; then
-  configdirs="doc libnosys"
+  configdirs="doc libnosys libsysbase"
 else
-  configdirs="libnosys"
+  configdirs="libnosys libsysbase"
 fi
 
 case "${target}" in
diff -Nbaur newlib-1.14.0/libgloss/configure.in newlib-1.14.0-arm/libgloss/configure.in
--- newlib-1.14.0/libgloss/configure.in	Mon Dec 12 11:25:07 2005
+++ newlib-1.14.0-arm/libgloss/configure.in	Fri Apr 14 22:08:39 2006
@@ -22,9 +22,9 @@
 AC_CANONICAL_SYSTEM
 
 if test -z "${with_multisubdir}" ; then
-  configdirs="doc libnosys"
+  configdirs="doc libnosys libsysbase"
 else
-  configdirs="libnosys"
+  configdirs="libnosys libsysbase"
 fi
 
 case "${target}" in
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/Makefile.in newlib-1.14.0-arm/libgloss/libsysbase/Makefile.in
--- newlib-1.14.0/libgloss/libsysbase/Makefile.in	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/Makefile.in	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,145 @@
+# Copyright (c) 1998 Cygnus Support
+#
+# The authors hereby grant permission to use, copy, modify, distribute,
+# and license this software and its documentation for any purpose, provided
+# that existing copyright notices are retained in all copies and that this
+# notice is included verbatim in any distributions. No written agreement,
+# license, or royalty fee is required for any of the authorized uses.
+# Modifications to this software may be copyrighted by their authors
+# and need not follow the licensing terms described here, provided that
+# the new terms are clearly indicated on the first page of each file where
+# they apply.
+
+DESTDIR =
+VPATH = @srcdir@
+srcdir = @srcdir@
+objdir = .
+srcroot = $(srcdir)/../..
+objroot = $(objdir)/../..
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+host_alias = @host_alias@
+target_alias = @target_alias@
+program_transform_name = @program_transform_name@
+
+bindir = @bindir@
+libdir = @libdir@
+tooldir = $(exec_prefix)/$(target_alias)
+
+# Multilib support variables.
+# TOP is used instead of MULTI{BUILD,SRC}TOP.
+MULTIDIRS =
+MULTISUBDIR =
+MULTIDO = true
+MULTICLEAN = true
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+
+SHELL =	/bin/sh
+
+CC = @CC@
+
+#AS = @AS@
+AS = `if [ -f ${objroot}/../gas/as.new ] ; \
+	then echo ${objroot}/../gas/as.new ; \
+	else echo as ; fi`
+
+AR = @AR@
+
+#LD = @LD@
+LD = `if [ -f ${objroot}/../ld/ld.new ] ; \
+	then echo ${objroot}/../ld/ld.new ; \
+	else echo ld ; fi`
+
+RANLIB = @RANLIB@
+
+OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
+	then echo ${objroot}/../binutils/objdump ; \
+	else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
+OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
+	then echo ${objroot}/../binutils/objcopy ; \
+	else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
+
+# object files needed
+OBJS = abort.o iosupport.o close.o environ.o execve.o fork.o fstat.o getpid.o gettod.o \
+	isatty.o kill.o link.o lseek.o open.o read.o sbrk.o stat.o \
+	times.o unlink.o wait.o write.o _exit.o malloc_vars.o
+
+# Object files specific to particular targets.
+EVALOBJS = ${OBJS}
+
+GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \
+	then echo -L${objroot}/../gcc ; fi`
+
+OUTPUTS = libsysbase.a
+
+NEWLIB_CFLAGS = `if [ -d ${objroot}/newlib ]; then echo -I${objroot}/newlib/targ-include -I${srcroot}/newlib/libc/include; fi`
+NEWLIB_LDFLAGS = `if [ -d ${objroot}/newlib ]; then echo -B${objroot}/newlib/ -L${objroot}/newlib/; fi`
+
+INCLUDES = -I. -I$(srcdir)/..
+# Note that when building the library, ${MULTILIB} is not the way multilib
+# options are passed; they're passed in $(CFLAGS).
+CFLAGS_FOR_TARGET = ${MULTILIB} ${INCLUDES} ${NEWLIB_CFLAGS}
+LDFLAGS_FOR_TARGET = ${MULTILIB} ${NEWLIB_LDFLAGS}
+AR_FLAGS = qc
+
+.c.o:
+	$(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $<
+
+.C.o:
+	$(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $<
+.s.o:
+	$(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $<
+
+#
+# GCC knows to run the preprocessor on .S files before it assembles them.
+#
+.S.o:
+	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $<
+
+#
+# this is a bogus target that'll produce an assembler from the
+# C source with the right compiler options. this is so we can
+# track down code generation or debug symbol bugs.
+#
+.c.s:
+	$(CC) $(CFLAGS_FOR_TARGET) -S $(INCLUDES) $(CFLAGS) $<
+
+all: ${OUTPUTS}
+
+#
+# here's where we build the library for each target
+#
+
+libsysbase.a: $(EVALOBJS)
+	${AR} ${ARFLAGS} $@ $(EVALOBJS)
+	${RANLIB} $@
+
+doc:
+
+clean mostlyclean:
+	rm -f $(OUTPUTS) *.i *~ *.o *-test *.srec *.dis *.map *.x
+
+distclean maintainer-clean realclean: clean
+	rm -f Makefile config.status $(OUTPUTS)
+
+.PHONY: install info install-info clean-info
+install:
+	@for outputs in ${OUTPUTS}; do\
+	 mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \
+	 $(INSTALL_PROGRAM) $${outputs} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \
+	done
+
+info:
+install-info:
+clean-info:
+
+Makefile: Makefile.in config.status @host_makefile_frag_path@
+	$(SHELL) config.status
+
+config.status: configure
+	$(SHELL) config.status --recheck
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/_exit.c newlib-1.14.0-arm/libgloss/libsysbase/_exit.c
--- newlib-1.14.0/libgloss/libsysbase/_exit.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/_exit.c	Wed May 10 20:44:45 2006
@@ -0,0 +1,14 @@
+/* Stub version of _exit.  */
+
+#include <limits.h>
+#include "config.h"
+#include <_ansi.h>
+#include <_syslist.h>
+
+_VOID
+_DEFUN (_exit, (rc),
+	int rc)
+{
+
+	while(1);
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/abort.c newlib-1.14.0-arm/libgloss/libsysbase/abort.c
--- newlib-1.14.0/libgloss/libsysbase/abort.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/abort.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,8 @@
+#include <stdlib.h>
+#include <unistd.h>
+
+void abort(void) {
+  write (2, "Abort called.\n", sizeof("Abort called.\n")-1);
+  exit (1);
+}
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/acconfig.h newlib-1.14.0-arm/libgloss/libsysbase/acconfig.h
--- newlib-1.14.0/libgloss/libsysbase/acconfig.h	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/acconfig.h	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,26 @@
+/* Name of package.  */
+#undef PACKAGE
+
+/* Version of package.  */
+#undef VERSION
+
+/* Missing syscall names */
+#undef MISSING_SYSCALL_NAMES
+
+/* Using ELF format */
+#undef HAVE_ELF
+
+/* Using GNU LD */
+#undef HAVE_GNU_LD
+
+/* .previous directive allowed */
+#undef HAVE_ASM_PREVIOUS_DIRECTIVE
+
+/* .pushsection/.popsection directives allowed */
+#undef HAVE_ASM_POPSECTION_DIRECTIVE
+
+/* support for section attributes */
+#undef HAVE_SECTION_ATTRIBUTES
+
+/* symbol prefix */
+#undef __SYMBOL_PREFIX
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/close.c newlib-1.14.0-arm/libgloss/libsysbase/close.c
--- newlib-1.14.0/libgloss/libsysbase/close.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/close.c	Wed May 10 20:19:42 2006
@@ -0,0 +1,38 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include <sys/iosupport.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN(_close_r,(ptr,fileDesc),
+		   struct _reent *ptr _AND
+           int fileDesc) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN(_close,(fileDesc),
+           int fileDesc) {
+//---------------------------------------------------------------------------------
+	struct _reent *ptr = _REENT;
+#endif
+	int ret = -1;
+	unsigned int dev = 0;
+	unsigned int fd = -1;
+
+	if(fileDesc!=-1) {
+		
+		__handle *handle = fileDesc;
+		
+		dev = handle->device;
+		fd = handle->fileStruct;
+		
+		if(devoptab_list[dev]->close_r)
+			ret = devoptab_list[dev]->close_r(ptr,fd);
+		
+		free(fileDesc);
+	}
+	return ret;
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/config.h.in newlib-1.14.0-arm/libgloss/libsysbase/config.h.in
--- newlib-1.14.0/libgloss/libsysbase/config.h.in	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/config.h.in	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,22 @@
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+
+/* Missing syscall names */
+#undef MISSING_SYSCALL_NAMES
+
+/* Using ELF format */
+#undef HAVE_ELF
+
+/* Using GNU LD */
+#undef HAVE_GNU_LD
+
+/* .previous directive allowed */
+#undef HAVE_ASM_PREVIOUS_DIRECTIVE
+
+/* .pushsection/.popsection directives allowed */
+#undef HAVE_ASM_POPSECTION_DIRECTIVE
+
+/* support for section attributes */
+#undef HAVE_SECTION_ATTRIBUTES
+
+/* symbol prefix */
+#undef __SYMBOL_PREFIX
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure newlib-1.14.0-arm/libgloss/libsysbase/configure
--- newlib-1.14.0/libgloss/libsysbase/configure	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/configure	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,1461 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=close.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='	'
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+if test "${enable_shared}" = "yes" ; then
+    echo "Shared libraries not supported for cross compiling, ignored"
+fi
+
+if test "$srcdir" = "." ; then
+  if test "${with_target_subdir}" != "." ; then
+    libgloss_topdir="${srcdir}/${with_multisrctop}../../.."
+  else
+    libgloss_topdir="${srcdir}/${with_multisrctop}../.."
+  fi
+else
+  libgloss_topdir="${srcdir}/../.."
+fi
+ac_aux_dir=
+for ac_dir in $libgloss_topdir $srcdir/$libgloss_topdir; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $libgloss_topdir $srcdir/$libgloss_topdir" 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+
+# Do some error checking and defaulting for the host and target type.
+# The inputs are:
+#    configure --host=HOST --target=TARGET --build=BUILD NONOPT
+#
+# The rules are:
+# 1. You are not allowed to specify --host, --target, and nonopt at the
+#    same time.
+# 2. Host defaults to nonopt.
+# 3. If nonopt is not specified, then host defaults to the current host,
+#    as determined by config.guess.
+# 4. Target and build default to nonopt.
+# 5. If nonopt is not specified, then target and build default to host.
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+case $host---$target---$nonopt in
+NONE---*---* | *---NONE---* | *---*---NONE) ;;
+*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
+esac
+
+
+# Make sure we can run config.sub.
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:588: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+  case $nonopt in
+  NONE)
+    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
+    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+    fi ;;
+  *) host_alias=$nonopt ;;
+  esac ;;
+esac
+
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+echo $ac_n "checking target system type""... $ac_c" 1>&6
+echo "configure:609: checking target system type" >&5
+
+target_alias=$target
+case "$target_alias" in
+NONE)
+  case $nonopt in
+  NONE) target_alias=$host_alias ;;
+  *) target_alias=$nonopt ;;
+  esac ;;
+esac
+
+target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
+target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$target" 1>&6
+
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:627: checking build system type" >&5
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+  case $nonopt in
+  NONE) build_alias=$host_alias ;;
+  *) build_alias=$nonopt ;;
+  esac ;;
+esac
+
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+test "$host_alias" != "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+  rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:681: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+	  if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  else
+	    ac_cv_path_install="$ac_dir/$ac_prog -c"
+	    break 2
+	  fi
+	fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+# FIXME: We temporarily define our own version of AC_PROG_CC.  This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
+# are building a library that must be included in all links, so we 
+# can't link an executable until this lib is built.
+# autoconf should provide a way to do this.
+
+
+
+cat >> confdefs.h <<\EOF
+#define HAVE_GNU_LD 1
+EOF
+
+case "${target}" in
+  *-*-cygwin*)
+	;;
+  a29k-amd-udi)
+	;;
+  arc-*-*)
+	;;
+  arm-*-pe)
+	;;
+  arm-*-*)
+	;;
+  strongarm-*-*)
+	;;
+  d10v*)
+	;;
+  h8300*-*-*)
+	;;	
+  h8500-*-*)
+	;;	
+  i345686-*-sco*)
+	;;
+  m32r-*-*)
+	;;
+  mn10?00-*-*)
+	;;
+  powerpcle-*-pe)
+	;;
+  sh*-*-*)
+	;;
+  sparc-sun-sunos*)
+	;;
+  sparc64-*-*)
+	;;
+  thumb-*-pe)
+	;;
+  thumb-*-*)
+	;;
+  v850-*-*)
+	;;
+  v850e-*-*)
+	;;
+  v850ea-*-*)
+	;;
+  w65-*-*)
+	;;	
+  xstormy16-*-*)
+	;;
+  z8k-*-*)
+	;;
+  *)
+	cat >> confdefs.h <<\EOF
+#define MISSING_SYSCALL_NAMES 1
+EOF
+
+	;;
+esac
+
+case "${target}" in
+  *-*-elf)
+        cat >> confdefs.h <<\EOF
+#define HAVE_ELF 1
+EOF
+
+
+        echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
+echo "configure:811: checking for .previous assembler directive" >&5
+if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+          cat > conftest.s <<EOF
+.section foo_section
+.previous
+EOF
+        if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:819: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+          cat >> confdefs.h <<\EOF
+#define HAVE_ASM_PREVIOUS_DIRECTIVE 1
+EOF
+
+        fi
+        rm -f conftest*
+fi
+
+echo "$ac_t""$libc_cv_asm_previous_directive" 1>&6
+
+        echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
+echo "configure:831: checking for .popsection assembler directive" >&5
+if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+          cat > conftest.s <<EOF
+.pushsection foo_section
+.popsection
+EOF
+        if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+          cat >> confdefs.h <<\EOF
+#define HAVE_ASM_POPSECTION_DIRECTIVE 1
+EOF
+
+        fi
+        rm -f conftest*
+fi
+
+echo "$ac_t""$libc_cv_asm_popsection_directive" 1>&6
+
+        echo $ac_n "checking for section attributes""... $ac_c" 1>&6
+echo "configure:851: checking for section attributes" >&5
+if eval "test \"`echo '$''{'libc_cv_section_attributes'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+          cat > conftest.c <<EOF
+int secttest __attribute__ ((section (".gnu.warning.secttest"))) = 10;
+int main() {}
+EOF
+        if { ac_try='${CC-cc} -c $CFLAGS conftest.c 1>&5'; { (eval echo configure:859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+          cat >> confdefs.h <<\EOF
+#define HAVE_SECTION_ATTRIBUTES 1
+EOF
+
+        fi
+        rm -f conftest*
+fi
+
+echo "$ac_t""$libc_cv_section_attributes" 1>&6
+        ;;
+esac
+
+echo $ac_n "checking for function prefix""... $ac_c" 1>&6
+echo "configure:873: checking for function prefix" >&5
+if eval "test \"`echo '$''{'libc_dollar_prefix'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<\EOF
+foo () { }
+EOF
+if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null'; { (eval echo configure:880: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
+then
+  libc_dollar_prefix=yes
+else
+  libc_dollar_prefix=no
+fi
+rm -f conftest* 
+fi
+
+echo "$ac_t""$libc_dollar_prefix" 1>&6
+if test $libc_dollar_prefix = yes ; then
+  cat >> confdefs.h <<\EOF
+#define __SYMBOL_PREFIX "$"
+EOF
+
+else
+  cat >> confdefs.h <<\EOF
+#define __SYMBOL_PREFIX ""
+EOF
+
+fi
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:905: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:935: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+	continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:984: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+  ac_test_CFLAGS="${CFLAGS+set}"
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS=
+  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:1008: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+  if test "$ac_test_CFLAGS" = set; then
+    CFLAGS="$ac_save_CFLAGS"
+  elif test $ac_cv_prog_cc_g = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-O2"
+  fi
+else
+  GCC=
+  test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+
+AS=${AS-as}
+
+AR=${AR-ar}
+
+LD=${LD-ld}
+
+# Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1044: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+host_makefile_frag=${srcdir}/../config/default.mh
+
+host_makefile_frag_path=$host_makefile_frag
+
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@target@%$target%g
+s%@target_alias@%$target_alias%g
+s%@target_cpu@%$target_cpu%g
+s%@target_vendor@%$target_vendor%g
+s%@target_os@%$target_os%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@CC@%$CC%g
+s%@AS@%$AS%g
+s%@AR@%$AR%g
+s%@LD@%$LD%g
+s%@RANLIB@%$RANLIB%g
+s%@host_makefile_frag_path@%$host_makefile_frag_path%g
+/@host_makefile_frag@/r $host_makefile_frag
+s%@host_makefile_frag@%%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
+ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_uB='\([ 	]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+srcdir=${srcdir}
+target=${target}
+ac_configure_args="${ac_configure_args} --enable-multilib"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+libgloss_topdir=${libgloss_topdir}
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+ac_file=Makefile . ${libgloss_topdir}/config-ml.in
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure.in newlib-1.14.0-arm/libgloss/libsysbase/configure.in
--- newlib-1.14.0/libgloss/libsysbase/configure.in	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/configure.in	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,219 @@
+# Copyright (c) 1995, 1996 Cygnus Support
+#
+# The authors hereby grant permission to use, copy, modify, distribute,
+# and license this software and its documentation for any purpose, provided
+# that existing copyright notices are retained in all copies and that this
+# notice is included verbatim in any distributions. No written agreement,
+# license, or royalty fee is required for any of the authorized uses.
+# Modifications to this software may be copyrighted by their authors
+# and need not follow the licensing terms described here, provided that
+# the new terms are clearly indicated on the first page of each file where
+# they apply.
+#
+# Process this file with autoconf to produce a configure script.
+#
+AC_PREREQ(2.5)dnl
+AC_INIT(close.c)
+AC_CONFIG_HEADER(config.h)
+
+if test "${enable_shared}" = "yes" ; then
+    echo "Shared libraries not supported for cross compiling, ignored"
+fi
+
+if test "$srcdir" = "." ; then
+  if test "${with_target_subdir}" != "." ; then
+    libgloss_topdir="${srcdir}/${with_multisrctop}../../.."
+  else
+    libgloss_topdir="${srcdir}/${with_multisrctop}../.."
+  fi
+else
+  libgloss_topdir="${srcdir}/../.."
+fi
+AC_CONFIG_AUX_DIR($libgloss_topdir)
+
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+
+AC_PROG_INSTALL
+
+# FIXME: We temporarily define our own version of AC_PROG_CC.  This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
+# are building a library that must be included in all links, so we 
+# can't link an executable until this lib is built.
+# autoconf should provide a way to do this.
+
+AC_DEFUN(LIB_AC_PROG_CC,
+[AC_BEFORE([$0], [AC_PROG_CPP])dnl
+AC_CHECK_PROG(CC, gcc, gcc)
+if test -z "$CC"; then
+  AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+  test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
+fi
+
+AC_PROG_CC_GNU
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+dnl Check whether -g works, even if CFLAGS is set, in case the package
+dnl plays around with CFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+  ac_test_CFLAGS="${CFLAGS+set}"
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS=
+  AC_PROG_CC_G
+  if test "$ac_test_CFLAGS" = set; then
+    CFLAGS="$ac_save_CFLAGS"
+  elif test $ac_cv_prog_cc_g = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-O2"
+  fi
+else
+  GCC=
+  test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+])
+
+AC_DEFINE(HAVE_GNU_LD)
+dnl Make sure syscall names match those being used by newlib
+case "${target}" in
+  *-*-cygwin*)
+	;;
+  a29k-amd-udi)
+	;;
+  arc-*-*)
+	;;
+  arm-*-pe)
+	;;
+  arm-*-*)
+	;;
+  strongarm-*-*)
+	;;
+  d10v*)
+	;;
+  h8300*-*-*)
+	;;	
+  h8500-*-*)
+	;;	
+  i[3456]86-*-sco*)
+	;;
+  m32r-*-*)
+	;;
+  mn10?00-*-*)
+	;;
+  powerpcle-*-pe)
+	;;
+  sh*-*-*)
+	;;
+  sparc-sun-sunos*)
+	;;
+  sparc64-*-*)
+	;;
+  thumb-*-pe)
+	;;
+  thumb-*-*)
+	;;
+  v850-*-*)
+	;;
+  v850e-*-*)
+	;;
+  v850ea-*-*)
+	;;
+  w65-*-*)
+	;;	
+  xstormy16-*-*)
+	;;
+  z8k-*-*)
+	;;
+  *)
+	AC_DEFINE(MISSING_SYSCALL_NAMES)
+	;;
+esac
+
+dnl Make sure we know if elf format used
+case "${target}" in
+  *-*-elf)
+        AC_DEFINE(HAVE_ELF)
+
+        AC_CACHE_CHECK(for .previous assembler directive,
+                         libc_cv_asm_previous_directive, [dnl
+        cat > conftest.s <<EOF
+.section foo_section
+.previous
+EOF
+        if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AC_FD_CC); then
+          AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE)
+        fi
+        rm -f conftest*])
+
+        AC_CACHE_CHECK(for .popsection assembler directive,
+                         libc_cv_asm_popsection_directive, [dnl
+        cat > conftest.s <<EOF
+.pushsection foo_section
+.popsection
+EOF
+        if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AC_FD_CC); then
+          AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE)
+        fi
+        rm -f conftest*])
+
+        AC_CACHE_CHECK(for section attributes,
+                         libc_cv_section_attributes, [dnl
+        cat > conftest.c <<EOF
+int secttest __attribute__ ((section (".gnu.warning.secttest"))) = 10;
+int main() {}
+EOF
+        if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.c 1>&AC_FD_CC); then
+          AC_DEFINE(HAVE_SECTION_ATTRIBUTES)
+        fi
+        rm -f conftest*])
+        ;;
+esac
+
+AC_CACHE_CHECK(for function prefix, libc_dollar_prefix, [dnl
+cat > conftest.c <<\EOF
+foo () { }
+EOF
+dnl
+if AC_TRY_COMMAND([${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null]);
+then
+  libc_dollar_prefix=yes
+else
+  libc_dollar_prefix=no
+fi
+rm -f conftest* ])
+if test $libc_dollar_prefix = yes ; then
+  AC_DEFINE(__SYMBOL_PREFIX, "$")
+else
+  AC_DEFINE(__SYMBOL_PREFIX, "")
+fi
+
+LIB_AC_PROG_CC
+AS=${AS-as}
+AC_SUBST(AS)
+AR=${AR-ar}
+AC_SUBST(AR)
+LD=${LD-ld}
+AC_SUBST(LD)
+AC_PROG_RANLIB
+
+host_makefile_frag=${srcdir}/../config/default.mh
+
+dnl We have to assign the same value to other variables because autoconf
+dnl doesn't provide a mechanism to substitute a replacement keyword with
+dnl arbitrary data or pathnames.
+dnl
+host_makefile_frag_path=$host_makefile_frag
+AC_SUBST(host_makefile_frag_path)
+AC_SUBST_FILE(host_makefile_frag)
+
+AC_OUTPUT(Makefile,
+ac_file=Makefile . ${libgloss_topdir}/config-ml.in,
+srcdir=${srcdir}
+target=${target}
+ac_configure_args="${ac_configure_args} --enable-multilib"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+libgloss_topdir=${libgloss_topdir}
+)
+
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/environ.c newlib-1.14.0-arm/libgloss/libsysbase/environ.c
--- newlib-1.14.0/libgloss/libsysbase/environ.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/environ.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,6 @@
+/*
+ * Version of environ for no OS.
+ */
+
+char *__env[1] = { 0 }; 
+char **environ = __env; 
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/execve.c newlib-1.14.0-arm/libgloss/libsysbase/execve.c
--- newlib-1.14.0/libgloss/libsysbase/execve.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/execve.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,21 @@
+/*
+ * Stub version of execve.
+ */
+
+#include "config.h"
+#include <_ansi.h>
+#include <_syslist.h>
+#include <errno.h>
+#include "warning.h"
+
+int
+_DEFUN (_execve, (name, argv, env),
+        char  *name  _AND
+        char **argv  _AND
+        char **env)
+{
+  errno = ENOSYS;
+  return -1;
+}
+
+stub_warning(_execve)
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fork.c newlib-1.14.0-arm/libgloss/libsysbase/fork.c
--- newlib-1.14.0/libgloss/libsysbase/fork.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/fork.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,19 @@
+/*
+ * Stub version of fork.
+ */
+
+#include "config.h"
+#include <_ansi.h>
+#include <_syslist.h>
+#include <errno.h>
+#include "warning.h"
+
+int
+_DEFUN (_fork, (),
+        _NOARGS)
+{
+  errno = ENOSYS;
+  return -1;
+}
+
+stub_warning(_fork)
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fstat.c newlib-1.14.0-arm/libgloss/libsysbase/fstat.c
--- newlib-1.14.0/libgloss/libsysbase/fstat.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/fstat.c	Fri May 19 11:48:22 2006
@@ -0,0 +1,45 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#include <sys/iosupport.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN (_fstat_r,(r,fileDesc, st),
+			struct _reent * r _AND
+			int fileDesc _AND
+			struct stat *st) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN (_fstat,(fileDesc, st),
+			int fileDesc _AND
+			struct stat *st) {
+//---------------------------------------------------------------------------------
+	struct _reent *r = _REENT;
+#endif
+	int ret = -1;
+	unsigned int dev = 0;
+	unsigned int fd = -1;
+
+	__handle * handle = NULL;
+
+	if(fileDesc!=-1) {
+		if ( fileDesc < 3) {
+			dev = fileDesc;
+		} else {
+			handle = (__handle *)fileDesc;
+			dev = handle->device;
+			fd = (int)handle->fileStruct;
+		}
+		if(devoptab_list[dev]->fstat_r) {
+			ret = devoptab_list[dev]->fstat_r(r,fd,st);
+		} else {
+			r->_errno = ENOSYS;
+		}
+	}
+	return ret;
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/getpid.c newlib-1.14.0-arm/libgloss/libsysbase/getpid.c
--- newlib-1.14.0/libgloss/libsysbase/getpid.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/getpid.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,20 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <errno.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN(	_getpid_r,(ptr),
+						struct _reent *ptr) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN (_getpid, (),
+						_NOARGS) {
+//---------------------------------------------------------------------------------
+	struct _reent *ptr = _REENT;
+#endif
+	ptr->_errno = ENOSYS;
+	return -1;
+}
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/gettod.c newlib-1.14.0-arm/libgloss/libsysbase/gettod.c
--- newlib-1.14.0/libgloss/libsysbase/gettod.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/gettod.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,25 @@
+/*
+ * Stub version of gettimeofday.
+ */
+
+#include "config.h"
+#include <_ansi.h>
+#include <_syslist.h>
+#include <sys/time.h>
+#include <sys/times.h>
+#include <errno.h>
+#include "warning.h"
+
+struct timeval;
+struct timezone;
+
+int
+_DEFUN (_gettimeofday, (ptimeval, ptimezone),
+        struct timeval  *ptimeval  _AND
+        struct timezone *ptimezone)
+{
+  errno = ENOSYS;
+  return -1;
+}
+
+stub_warning(_gettimeofday)
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/iosupport.c newlib-1.14.0-arm/libgloss/libsysbase/iosupport.c
--- newlib-1.14.0/libgloss/libsysbase/iosupport.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/iosupport.c	Sat May 20 19:49:43 2006
@@ -0,0 +1,98 @@
+#include <stdlib.h>
+#include <string.h>
+#include <sys/iosupport.h>
+
+static int defaultDevice = -1;
+
+//---------------------------------------------------------------------------------
+void setDefaultDevice( int device ) {
+//---------------------------------------------------------------------------------
+
+	if ( device >2 && device <= STD_MAX)
+		defaultDevice = device;
+}
+
+//---------------------------------------------------------------------------------
+const devoptab_t dotab_stdnull = {
+//---------------------------------------------------------------------------------
+	"stdnull",	// device name
+	0,			// size of file structure
+	NULL,		// device open
+	NULL,		// device close
+	NULL,		// device write
+	NULL,		// device read
+	NULL,		// device seek
+	NULL,		// device fstat
+	NULL,		// device stat
+	NULL,		// device link
+	NULL,		// device unlink
+	NULL		// device chdir
+};
+
+//---------------------------------------------------------------------------------
+const devoptab_t *devoptab_list[STD_MAX] = {
+//---------------------------------------------------------------------------------
+	&dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull,
+	&dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull,
+	&dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull,
+	&dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull
+};
+
+//---------------------------------------------------------------------------------
+int FindDevice(const char* name) {
+//---------------------------------------------------------------------------------
+	int i = 0, namelen, dev = -1;
+
+	while(i<STD_MAX) {
+		if(devoptab_list[i]) {
+			namelen = strlen(devoptab_list[i]->name);
+			if(strncmp(devoptab_list[i]->name,name,namelen)==0 ) {
+				if ( name[namelen] == ':' || (isdigit(name[namelen]) && name[namelen+1] ==':' )) {
+					dev = i;
+					break;
+				}
+			}
+		}
+		i++;
+	}
+
+	if ( dev == -1 && defaultDevice != -1 ) dev = defaultDevice;
+
+	return dev;
+}
+
+//---------------------------------------------------------------------------------
+int RemoveDevice( const char* name) {
+//---------------------------------------------------------------------------------
+	int dev = FindDevice(name);
+	
+	if ( -1 != dev ) {
+		devoptab_list[dev] = &dotab_stdnull;
+		return 0;
+	}
+	
+	return -1;
+		
+}
+//---------------------------------------------------------------------------------
+int AddDevice( const devoptab_t* device) {
+//---------------------------------------------------------------------------------
+
+	int devnum;
+
+	for ( devnum = 3;devnum <STD_MAX; devnum++ ) {
+
+		if ( (strcmp(devoptab_list[devnum]->name, device->name) &&
+					strlen(devoptab_list[devnum]->name) == strlen(device->name) ) ||
+			 		!strcmp(devoptab_list[devnum]->name, "stdnull")
+			 )
+			 break;
+	}
+
+	if ( devnum == STD_MAX ) {
+		devnum = -1;
+	} else {
+		devoptab_list[devnum] = device;
+	}
+	return devnum;
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/isatty.c newlib-1.14.0-arm/libgloss/libsysbase/isatty.c
--- newlib-1.14.0/libgloss/libsysbase/isatty.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/isatty.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,10 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <errno.h>
+
+//---------------------------------------------------------------------------------
+int _DEFUN(isatty,(file),
+           int file) {
+//---------------------------------------------------------------------------------
+	return 0;
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/kill.c newlib-1.14.0-arm/libgloss/libsysbase/kill.c
--- newlib-1.14.0/libgloss/libsysbase/kill.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/kill.c	Fri Apr 14 22:10:52 2006
@@ -0,0 +1,24 @@
+/*
+ * Stub version of kill.
+ */
+
+#include "config.h"
+#include <_ansi.h>
+#include <_syslist.h>
+#include <errno.h>
+#include "warning.h"
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+int _DEFUN(_kill_r,(ptr,pid,sig),
+		   struct _reent *ptr _AND
+           int			 pid  _AND
+           int			 sig) {
+#else
+int _DEFUN(_kill,(pid,sig),
+           int pid  _AND
+           int sig)	{
+	struct _reent *ptr = _REENT;
+#endif
+  ptr->_errno = ENOSYS;
+  return -1;
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/link.c newlib-1.14.0-arm/libgloss/libsysbase/link.c
--- newlib-1.14.0/libgloss/libsysbase/link.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/link.c	Fri May 19 11:50:37 2006
@@ -0,0 +1,36 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <reent.h>
+#include <errno.h>
+#include <sys/iosupport.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+int _DEFUN (_link_r, (r, existing, new),
+					struct _reent r _AND
+					char *existing _AND
+					char *new) {
+#else
+int _DEFUN (_link,	(existing, new),
+					char *existing _AND
+					char *new) {
+	struct _reent *r = _REENT;
+#endif
+	int ret;
+	int sourceDev = findDevice(existing);
+	int destDev = findDevice(new);
+	
+	ret = -1;
+
+	if ( sourceDev == destDev) {
+		if (devoptab_list[destDev]->link_r) {
+			ret = devoptab_list[destDev]->link_r( r, existing, new);
+		} else {
+			r->_errno = ENOSYS;
+		}			
+	} else {
+		r->_errno = EXDEV;
+	}
+
+	return ret;
+}
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/lseek.c newlib-1.14.0-arm/libgloss/libsysbase/lseek.c
--- newlib-1.14.0/libgloss/libsysbase/lseek.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/lseek.c	Sat May 20 19:58:52 2006
@@ -0,0 +1,46 @@
+
+#include <_ansi.h>
+#include <_syslist.h>
+#include <errno.h>
+
+#include <sys/iosupport.h>
+
+//---------------------------------------------------------------------------------
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN(_lseek_r,(r, fileDesc, pos, dir),
+           struct _reent * r _AND
+           int   fileDesc  _AND
+		   int   pos   _AND
+           int   dir)
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN(_lseek,(fileDesc, pos, dir),
+           int   fileDesc  _AND
+		   int   pos   _AND
+           int   dir) {
+//---------------------------------------------------------------------------------
+	struct _reent *r = _REENT;
+//---------------------------------------------------------------------------------
+#endif
+//---------------------------------------------------------------------------------
+	int ret = -1;
+	unsigned int dev = 0;
+	unsigned int fd = -1;
+
+	__handle * handle;
+
+	if(fileDesc!=-1) {
+
+		handle = (__handle *)fileDesc;
+		dev = handle->device;
+		fd = (int)handle->fileStruct;
+
+		if(devoptab_list[dev]->seek_r)
+			ret = devoptab_list[dev]->seek_r(0,fd,pos,dir);
+
+	}
+	return ret;
+
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/malloc_vars.c newlib-1.14.0-arm/libgloss/libsysbase/malloc_vars.c
--- newlib-1.14.0/libgloss/libsysbase/malloc_vars.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/malloc_vars.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,2 @@
+char *fake_heap_end = (char*)0;
+char *fake_heap_start = (char*)0;
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/open.c newlib-1.14.0-arm/libgloss/libsysbase/open.c
--- newlib-1.14.0/libgloss/libsysbase/open.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/open.c	Fri May 19 11:49:07 2006
@@ -0,0 +1,57 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <sys/iosupport.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN (_open_r, (r, file, flags, mode),
+			struct _reent * r _AND
+			char *file  _AND
+			int   flags _AND
+			int   mode) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN (_open, (file, flags, mode),
+        char *file  _AND
+        int   flags _AND
+        int   mode) {
+//---------------------------------------------------------------------------------
+	struct _reent *r = _REENT;
+#endif
+	__handle *handle;
+	int dev,fd;
+
+	r->_errno = ENOSYS;
+	dev = FindDevice(file);
+
+	fd = -1;
+	handle = (__handle *)-1;
+	if(dev!=-1 && devoptab_list[dev]->open_r) {
+		
+		handle = (__handle *)malloc( sizeof(__handle) + devoptab_list[dev]->structSize );
+		
+		if ( NULL != handle ) {
+			handle->device = dev;
+			handle->fileStruct = ((void *)handle) + sizeof(handle); 
+		
+			fd = devoptab_list[dev]->open_r(r, handle->fileStruct, file, flags, mode);
+		
+			if ( fd == -1 ) {
+				free(handle);
+				handle = (__handle *)-1;
+			}
+		} else {
+			r->_errno = ENOSR;
+			handle = (__handle *)-1;
+		}
+	}
+
+	return (int)handle;
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/read.c newlib-1.14.0-arm/libgloss/libsysbase/read.c
--- newlib-1.14.0/libgloss/libsysbase/read.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/read.c	Wed May 10 20:52:51 2006
@@ -0,0 +1,44 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include <sys/iosupport.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN(_read_r,(r, fileDesc, ptr, len),
+			struct _reent * r _AND
+			int   fileDesc  _AND
+			char *ptr   _AND
+			int   len) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN(_read,(fileDesc, ptr, len),
+           int   fileDesc  _AND
+           char *ptr   _AND
+           int   len) {
+//---------------------------------------------------------------------------------
+	struct _reent *r = _REENT;
+#endif
+	int ret = -1;
+	unsigned int dev = 0;
+	unsigned int fd = -1;
+
+	__handle * handle = NULL;
+
+	if(fileDesc!=-1) {
+		if ( fileDesc < 3) {
+			dev = fileDesc;
+		} else {
+			handle = (__handle *)fileDesc;
+			dev = handle->device;
+			fd = (int)handle->fileStruct;
+		}
+		if(devoptab_list[dev]->read_r)
+			ret = devoptab_list[dev]->read_r(r,fd,ptr,len);
+	}
+	return ret;
+}
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/sbrk.c newlib-1.14.0-arm/libgloss/libsysbase/sbrk.c
--- newlib-1.14.0/libgloss/libsysbase/sbrk.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/sbrk.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,61 @@
+#include <_ansi.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/fcntl.h>
+#include <stdio.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/times.h>
+#include <errno.h>
+#include <reent.h>
+#include <unistd.h>
+
+
+extern char *fake_heap_end;
+extern char *fake_heap_start;
+
+/* Register name faking - works in collusion with the linker.  */
+register char * stack_ptr asm ("sp");
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+caddr_t _sbrk_r (struct _reent *ptr, int incr) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+caddr_t _sbrk (int incr) {
+//---------------------------------------------------------------------------------
+	struct _reent *ptr = _REENT;
+#endif
+	extern char   end asm ("end");	/* Defined by the linker.  */
+	static char * heap_start;
+
+
+	char *	prev_heap_start;
+	char *	heap_end;
+
+	if (heap_start == NULL) {
+  		if (fake_heap_start == NULL) {
+    			heap_start = &end;
+    	} else {
+    		heap_start = fake_heap_start;
+		}
+	}
+
+	prev_heap_start = heap_start;
+
+	if (fake_heap_end == NULL) {
+		heap_end = stack_ptr;
+	} else {
+		heap_end = fake_heap_end;
+	}
+
+	if (heap_start + incr > heap_end) {
+		ptr->_errno = ENOMEM;
+		return (caddr_t) -1;
+	}
+
+	heap_start += incr;
+
+	return (caddr_t) prev_heap_start;
+}
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/stat.c newlib-1.14.0-arm/libgloss/libsysbase/stat.c
--- newlib-1.14.0/libgloss/libsysbase/stat.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/stat.c	Fri May 19 11:36:58 2006
@@ -0,0 +1,39 @@
+#include "config.h"
+#include <_ansi.h>
+#include <_syslist.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/iosupport.h>
+#include <errno.h>
+
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN (_stat_r,(r,file, st),
+			struct _reent * r _AND
+			const char *file _AND
+			struct stat *st) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int
+_DEFUN (_stat, (file, st),
+        const char  *file _AND
+        struct stat *st)
+{
+//---------------------------------------------------------------------------------
+	struct _reent *r = _REENT;
+#endif
+	int dev,ret;
+
+	dev = FindDevice(file);
+
+	if(dev!=-1 && devoptab_list[dev]->stat_r) {
+		ret = devoptab_list[dev]->stat_r(r,file,st);
+	} else {
+		ret = -1;
+		r->_errno = ENODEV;
+	}
+	return ret;
+}
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/times.c newlib-1.14.0-arm/libgloss/libsysbase/times.c
--- newlib-1.14.0/libgloss/libsysbase/times.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/times.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,13 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <sys/times.h>
+#include <errno.h>
+
+//---------------------------------------------------------------------------------
+clock_t _DEFUN (_times, (buf),
+        struct tms *buf) {
+//---------------------------------------------------------------------------------
+  errno = ENOSYS;
+  return -1;
+}
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/unlink.c newlib-1.14.0-arm/libgloss/libsysbase/unlink.c
--- newlib-1.14.0/libgloss/libsysbase/unlink.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/unlink.c	Fri May 19 11:23:45 2006
@@ -0,0 +1,32 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <reent.h>
+#include <errno.h>
+#include <sys/iosupport.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN (_unlink_r, (r, name),
+		struct _reent * r _AND
+		char *name ) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN (_unlink, (name),
+        char *name) {
+//---------------------------------------------------------------------------------
+	struct _reent *r = _REENT;
+#endif
+	int dev,ret;
+
+	dev = FindDevice(name);
+	if(dev!=-1 && devoptab_list[dev]->unlink_r) {
+		ret = devoptab_list[dev]->unlink_r(r,name);
+	} else {
+		ret = -1;
+		r->_errno = ENODEV;
+	}
+
+	return ret;
+}
+
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/wait.c newlib-1.14.0-arm/libgloss/libsysbase/wait.c
--- newlib-1.14.0/libgloss/libsysbase/wait.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/wait.c	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,19 @@
+/*
+ * Stub version of wait.
+ */
+
+#include "config.h"
+#include <_ansi.h>
+#include <_syslist.h>
+#include <errno.h>
+#include "warning.h"
+
+int
+_DEFUN (_wait, (status),
+        int  *status)
+{
+  errno = ENOSYS;
+  return -1;
+}
+
+stub_warning(_wait)
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/warning.h newlib-1.14.0-arm/libgloss/libsysbase/warning.h
--- newlib-1.14.0/libgloss/libsysbase/warning.h	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/warning.h	Fri Apr 14 22:08:39 2006
@@ -0,0 +1,43 @@
+#ifndef __WARNING_H__
+#define __WARNING_H__
+
+#ifdef HAVE_GNU_LD
+# ifdef HAVE_ELF
+
+/* We want the .gnu.warning.SYMBOL section to be unallocated.  */
+#  ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
+#   define __make_section_unallocated(section_string)   \
+  asm(".section " section_string "; .previous");
+#  elif defined (HAVE_ASM_POPSECTION_DIRECTIVE)
+#   define __make_section_unallocated(section_string)   \
+  asm(".pushsection " section_string "; .popsection");
+#  else
+#   define __make_section_unallocated(section_string)
+#  endif
+
+#  ifdef HAVE_SECTION_ATTRIBUTES
+#   define link_warning(symbol, msg)                     \
+  __make_section_unallocated (".gnu.warning." #symbol)  \
+  static const char __evoke_link_warning_##symbol[]     \
+    __attribute__ ((section (".gnu.warning." #symbol))) = msg;
+#  else
+#   define link_warning(symbol, msg)
+#  endif
+
+#else /* !ELF */
+
+#  define link_warning(symbol, msg)             \
+  asm(".stabs \"" msg "\",30,0,0,0\n"   \
+      ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
+# endif
+#else /* !GNULD */
+/* We will never be heard; they will all die horribly.  */
+# define link_warning(symbol, msg)
+#endif
+
+/* A canned warning for sysdeps/stub functions.  */
+#define stub_warning(name) \
+  link_warning (name, \
+                "warning: " #name " is not implemented and will always fail")
+
+#endif /* __WARNING_H__ */
diff -Nbaur newlib-1.14.0/libgloss/libsysbase/write.c newlib-1.14.0-arm/libgloss/libsysbase/write.c
--- newlib-1.14.0/libgloss/libsysbase/write.c	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/libgloss/libsysbase/write.c	Wed May 10 22:09:00 2006
@@ -0,0 +1,44 @@
+#include <_ansi.h>
+#include <_syslist.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include <sys/iosupport.h>
+
+#ifdef REENTRANT_SYSCALLS_PROVIDED
+//---------------------------------------------------------------------------------
+int _DEFUN(_write_r,(r, fileDesc, ptr, len),
+			struct _reent * r _AND
+			int   fileDesc  _AND
+			char *ptr   _AND
+			int   len) {
+//---------------------------------------------------------------------------------
+#else
+//---------------------------------------------------------------------------------
+int _DEFUN (_write, (fileDesc, ptr, len),
+        int   fileDesc  _AND
+        char *ptr   _AND
+        int   len) {
+//---------------------------------------------------------------------------------
+	struct _reent *r = _REENT;
+#endif
+	int ret = -1;
+	unsigned int dev = 0;
+	unsigned int fd = -1;
+
+	__handle * handle = NULL;
+
+
+	if(fileDesc!=-1) {
+		if ( fileDesc < 3) {
+			dev = fileDesc;
+		} else {
+			handle = (__handle *)fileDesc;
+			dev = handle->device;
+			fd = (int)handle->fileStruct;
+		}
+		if(devoptab_list[dev]->write_r)
+			ret = devoptab_list[dev]->write_r(r,fd,ptr,len);
+	}
+	return ret;
+}
diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/iosupport.h newlib-1.14.0-arm/newlib/libc/include/sys/iosupport.h
--- newlib-1.14.0/newlib/libc/include/sys/iosupport.h	Thu Jan  1 00:00:00 1970
+++ newlib-1.14.0-arm/newlib/libc/include/sys/iosupport.h	Sat May 20 13:07:58 2006
@@ -0,0 +1,45 @@
+//---------------------------------------------------------------------------------
+#ifndef __iosupp_h__
+#define __iosupp_h__
+//---------------------------------------------------------------------------------
+
+#include <reent.h>
+
+enum	{
+	STD_IN,
+	STD_OUT,
+	STD_ERR,
+	STD_MAX = 16
+};
+
+
+typedef struct {
+	int device;
+	void *fileStruct;
+} __handle;
+
+typedef struct {
+	const char *name;
+	int	structSize;
+	int (*open_r)(struct _reent *r, void *fileStruct, const char *path,int flags,int mode);
+	int (*close_r)(struct _reent *r,int fd);
+	int (*write_r)(struct _reent *r,int fd,const char *ptr,int len);
+	int (*read_r)(struct _reent *r,int fd,char *ptr,int len);
+	int (*seek_r)(struct _reent *r,int fd,int pos,int dir);
+	int (*fstat_r)(struct _reent *r,int fd,struct stat *st);
+	int (*stat_r)(struct _reent *r,const char *file,struct stat *st);
+	int (*link_r)(struct _reent *r,char *existing, char  *new);
+	int (*unlink_r)(struct _reent *r,char *name);
+	int (*chdir_r)(struct _reent *r,char *name);
+} devoptab_t;
+
+extern const devoptab_t *devoptab_list[];
+
+int AddDevice( const devoptab_t* device);
+int FindDevice(const char* name);
+int RemoveDevice(const char* name);
+void setDefaultDevice( int device );
+
+//---------------------------------------------------------------------------------
+#endif
+//---------------------------------------------------------------------------------
diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/reent.h newlib-1.14.0-arm/newlib/libc/include/sys/reent.h
--- newlib-1.14.0/newlib/libc/include/sys/reent.h	Tue Feb  8 01:33:16 2005
+++ newlib-1.14.0-arm/newlib/libc/include/sys/reent.h	Wed May 10 15:36:06 2006
@@ -151,7 +151,7 @@
   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 */
+  int	_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 */
 
@@ -168,7 +168,7 @@
   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 */
+  int	_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 */
 
@@ -216,7 +216,7 @@
   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 */
+  int	_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 */
 

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