Index: cpukit/ChangeLog
===================================================================
--- cpukit/ChangeLog	(revision 3041f6900aee63cc88be348b4102e469c6f8cdf0)
+++ cpukit/ChangeLog	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -1,2 +1,21 @@
+2007-03-26	Joel Sherrill <joel@OARcorp.com>
+
+	* libcsupport/src/assoc.c, libcsupport/src/libio.c, 
+	libcsupport/src/write.c: Split files to shrink minimum.exe. Hopefully
+	this will not be deemed necessary to commit to the 4.7 branch.
+	* libcsupport/src/assoclocalbyname.c,
+	libcsupport/src/assoclocalbyremote.c,
+	libcsupport/src/assoclocalbyremotebitfield.c,
+	libcsupport/src/assocnamebylocal.c,
+	libcsupport/src/assocnamebylocalbitfield.c,
+	libcsupport/src/assocnamebyremote.c,
+	libcsupport/src/assocnamebyremotebitfield.c,
+	libcsupport/src/assocptrbylocal.c, libcsupport/src/assocptrbyname.c,
+	libcsupport/src/assocptrbyremote.c,
+	libcsupport/src/assocremotebylocal.c,
+	libcsupport/src/assocremotebylocalbitfield.c,
+	libcsupport/src/assocremotebyname.c, libcsupport/src/libio_init.c,
+	libcsupport/src/write_r.c: New files.
+
 2007-03-26	Joel Sherrill <joel@OARcorp.com>
 
Index: cpukit/libcsupport/src/assoc.c
===================================================================
--- cpukit/libcsupport/src/assoc.c	(revision 3041f6900aee63cc88be348b4102e469c6f8cdf0)
+++ cpukit/libcsupport/src/assoc.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -10,4 +10,6 @@
 #endif
 
+#define INSIDE_ASSOC
+
 #include <rtems.h>
 #include <rtems/assoc.h>
@@ -15,240 +17,19 @@
 #include <string.h>             /* strcat, strcmp */
 
-#define STREQ(a,b)      (strcmp((a), (b)) == 0)
-#define rtems_assoc_is_default(ap)  ((ap)->name && STREQ(ap->name, RTEMS_ASSOC_DEFAULT_NAME))
 
-const rtems_assoc_t *
-rtems_assoc_ptr_by_name(
-    const rtems_assoc_t *ap,
-    const char *name
-  )
+const rtems_assoc_t *rtems_assoc_ptr_by_name(
+  const rtems_assoc_t *ap,
+  const char          *name
+)
 {
-    const rtems_assoc_t *default_ap = 0;
+  const rtems_assoc_t *default_ap = 0;
 
-    if (rtems_assoc_is_default(ap))
-        default_ap = ap++;
+  if (rtems_assoc_is_default(ap))
+    default_ap = ap++;
 
-    for ( ; ap->name; ap++)
-        if (strcmp(ap->name, name) == 0)
-            return ap;
+  for ( ; ap->name; ap++)
+    if (strcmp(ap->name, name) == 0)
+	return ap;
 
-    return default_ap;
+  return default_ap;
 }
-
-const rtems_assoc_t *
-rtems_assoc_ptr_by_local(
-    const rtems_assoc_t *ap,
-    uint32_t       local_value
-  )
-{
-    const rtems_assoc_t *default_ap = 0;
-
-    if (rtems_assoc_is_default(ap))
-        default_ap = ap++;
-
-    for ( ; ap->name; ap++)
-        if (ap->local_value == local_value)
-            return ap;
-
-    return default_ap;
-}
-
-
-const rtems_assoc_t *
-rtems_assoc_ptr_by_remote(
-    const rtems_assoc_t *ap,
-    uint32_t       remote_value
-  )
-{
-    const rtems_assoc_t *default_ap = 0;
-
-    if (rtems_assoc_is_default(ap))
-        default_ap = ap++;
-
-    for ( ; ap->name; ap++)
-        if (ap->remote_value == remote_value)
-            return ap;
-
-    return default_ap;
-}
-
-
-/*
- * Get values
- */
-
-uint32_t
-rtems_assoc_remote_by_local(
-    const rtems_assoc_t *ap,
-    uint32_t       local_value
-  )
-{
-    const rtems_assoc_t *nap;
-    nap = rtems_assoc_ptr_by_local(ap, local_value);
-    if (nap)
-        return nap->remote_value;
-
-    return 0;
-}
-
-uint32_t
-rtems_assoc_local_by_remote(
-    const rtems_assoc_t *ap,
-    uint32_t       remote_value
-  )
-{
-    const rtems_assoc_t *nap;
-    nap = rtems_assoc_ptr_by_remote(ap, remote_value);
-    if (nap)
-        return nap->local_value;
-
-    return 0;
-}
-
-uint32_t
-rtems_assoc_remote_by_name(
-    const rtems_assoc_t *ap,
-    const char          *name
-  )
-{
-    const rtems_assoc_t *nap;
-    nap = rtems_assoc_ptr_by_name(ap, name);
-    if (nap)
-        return nap->remote_value;
-
-    return 0;
-}
-
-uint32_t
-rtems_assoc_local_by_name(
-    const rtems_assoc_t *ap,
-    const char          *name
-  )
-{
-    const rtems_assoc_t *nap;
-    nap = rtems_assoc_ptr_by_name(ap, name);
-    if (nap)
-        return nap->local_value;
-
-    return 0;
-}
-
-/*
- * what to return if a value is not found
- * this is not reentrant, but it really shouldn't be invoked anyway
- */
-
-const char *rtems_assoc_name_bad(
-    uint32_t   bad_value
-);
-
-/* body in separate file to reduce dependency on printf */
-
-
-const char *
-rtems_assoc_name_by_local(
-    const rtems_assoc_t *ap,
-    uint32_t       local_value
-  )
-{
-    const rtems_assoc_t *nap;
-    nap = rtems_assoc_ptr_by_local(ap, local_value);
-    if (nap)
-        return nap->name;
-
-    return rtems_assoc_name_bad(local_value);
-}
-
-const char *
-rtems_assoc_name_by_remote(
-    const rtems_assoc_t *ap,
-    uint32_t       remote_value
-  )
-{
-    const rtems_assoc_t *nap;
-    nap = rtems_assoc_ptr_by_remote(ap, remote_value);
-    if (nap)
-        return nap->name;
-
-    return rtems_assoc_name_bad(remote_value);
-}
-
-/*
- * Bitfield functions assume just 1 bit set in each of remote and local
- *      entries; they do not check for this.
- */
-
-uint32_t   rtems_assoc_remote_by_local_bitfield(
-    const rtems_assoc_t *ap,
-    uint32_t       local_value
-  )
-{
-    uint32_t   b;
-    uint32_t   remote_value = 0;
-
-    for (b = 1; b; b <<= 1)
-        if (b & local_value)
-            remote_value |= rtems_assoc_remote_by_local(ap, b);
-
-    return remote_value;
-}
-
-
-uint32_t   rtems_assoc_local_by_remote_bitfield(
-    const rtems_assoc_t *ap,
-    uint32_t       remote_value
-  )
-{
-    uint32_t   b;
-    uint32_t   local_value = 0;
-
-    for (b = 1; b; b <<= 1)
-        if (b & remote_value)
-            local_value |= rtems_assoc_local_by_remote(ap, b);
-
-    return local_value;
-}
-
-char *
-rtems_assoc_name_by_remote_bitfield(
-    const rtems_assoc_t *ap,
-    uint32_t       value,
-    char          *buffer
-  )
-{
-    uint32_t   b;
-
-    *buffer = 0;
-
-    for (b = 1; b; b <<= 1)
-        if (b & value)
-        {
-            if (*buffer)
-                strcat(buffer, " ");
-            strcat(buffer, rtems_assoc_name_by_remote(ap, b));
-        }
-
-    return buffer;
-}
-
-char *
-rtems_assoc_name_by_local_bitfield(
-    const rtems_assoc_t *ap,
-    uint32_t       value,
-    char          *buffer
-  )
-{
-    uint32_t   b;
-
-    *buffer = 0;
-
-    for (b = 1; b; b <<= 1)
-        if (b & value)
-        {
-            if (*buffer)
-                strcat(buffer, " ");
-            strcat(buffer, rtems_assoc_name_by_local(ap, b));
-        }
-
-    return buffer;
-}
Index: cpukit/libcsupport/src/assoclocalbyname.c
===================================================================
--- cpukit/libcsupport/src/assoclocalbyname.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assoclocalbyname.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,31 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+uint32_t rtems_assoc_local_by_name(
+  const rtems_assoc_t *ap,
+  const char          *name
+)
+{
+  const rtems_assoc_t *nap;
+
+  nap = rtems_assoc_ptr_by_name(ap, name);
+  if (nap)
+    return nap->local_value;
+
+  return 0;
+}
Index: cpukit/libcsupport/src/assoclocalbyremote.c
===================================================================
--- cpukit/libcsupport/src/assoclocalbyremote.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assoclocalbyremote.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,31 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+uint32_t rtems_assoc_local_by_remote(
+  const rtems_assoc_t *ap,
+  uint32_t             remote_value
+)
+{
+  const rtems_assoc_t *nap;
+
+  nap = rtems_assoc_ptr_by_remote(ap, remote_value);
+  if (nap)
+    return nap->local_value;
+
+  return 0;
+}
Index: cpukit/libcsupport/src/assoclocalbyremotebitfield.c
===================================================================
--- cpukit/libcsupport/src/assoclocalbyremotebitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assoclocalbyremotebitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,34 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+
+uint32_t   rtems_assoc_local_by_remote_bitfield(
+    const rtems_assoc_t *ap,
+    uint32_t       remote_value
+)
+{
+  uint32_t   b;
+  uint32_t   local_value = 0;
+
+  for (b = 1; b; b <<= 1) {
+    if (b & remote_value)
+      local_value |= rtems_assoc_local_by_remote(ap, b);
+  }
+
+  return local_value;
+}
Index: cpukit/libcsupport/src/assocnamebylocal.c
===================================================================
--- cpukit/libcsupport/src/assocnamebylocal.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocnamebylocal.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,31 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+const char *rtems_assoc_name_by_local(
+  const rtems_assoc_t *ap,
+  uint32_t             local_value
+)
+{
+  const rtems_assoc_t *nap;
+
+  nap = rtems_assoc_ptr_by_local(ap, local_value);
+  if (nap)
+    return nap->name;
+
+  return rtems_assoc_name_bad(local_value);
+}
Index: cpukit/libcsupport/src/assocnamebylocalbitfield.c
===================================================================
--- cpukit/libcsupport/src/assocnamebylocalbitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocnamebylocalbitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,38 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+char *rtems_assoc_name_by_local_bitfield(
+  const rtems_assoc_t *ap,
+  uint32_t             value,
+  char                *buffer
+)
+{
+  uint32_t   b;
+
+  *buffer = 0;
+
+  for (b = 1; b; b <<= 1) {
+    if (b & value) {
+      if (*buffer)
+        strcat(buffer, " ");
+      strcat(buffer, rtems_assoc_name_by_local(ap, b));
+    }
+  }
+
+  return buffer;
+}
Index: cpukit/libcsupport/src/assocnamebyremote.c
===================================================================
--- cpukit/libcsupport/src/assocnamebyremote.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocnamebyremote.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,33 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+
+const char *rtems_assoc_name_by_remote(
+  const rtems_assoc_t *ap,
+  uint32_t             remote_value
+)
+{
+  const rtems_assoc_t *nap;
+  nap = rtems_assoc_ptr_by_remote(ap, remote_value);
+
+  if (nap)
+    return nap->name;
+
+  return rtems_assoc_name_bad(remote_value);
+}
+
Index: cpukit/libcsupport/src/assocnamebyremotebitfield.c
===================================================================
--- cpukit/libcsupport/src/assocnamebyremotebitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocnamebyremotebitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,39 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+
+char *rtems_assoc_name_by_remote_bitfield(
+  const rtems_assoc_t *ap,
+  uint32_t             value,
+  char                *buffer
+)
+{
+  uint32_t   b;
+
+  *buffer = 0;
+
+  for (b = 1; b; b <<= 1) {
+    if (b & value) {
+      if (*buffer)
+	strcat(buffer, " ");
+      strcat(buffer, rtems_assoc_name_by_remote(ap, b));
+    }
+  }
+
+  return buffer;
+}
Index: cpukit/libcsupport/src/assocptrbylocal.c
===================================================================
--- cpukit/libcsupport/src/assocptrbylocal.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocptrbylocal.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,34 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+const rtems_assoc_t *rtems_assoc_ptr_by_local(
+  const rtems_assoc_t *ap,
+  uint32_t             local_value
+)
+{
+  const rtems_assoc_t *default_ap = 0;
+
+  if (rtems_assoc_is_default(ap))
+    default_ap = ap++;
+
+  for ( ; ap->name; ap++)
+    if (ap->local_value == local_value)
+      return ap;
+
+  return default_ap;
+}
Index: cpukit/libcsupport/src/assocptrbyname.c
===================================================================
--- cpukit/libcsupport/src/assocptrbyname.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocptrbyname.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,35 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+
+const rtems_assoc_t *rtems_assoc_ptr_by_name(
+  const rtems_assoc_t *ap,
+  const char          *name
+)
+{
+  const rtems_assoc_t *default_ap = 0;
+
+  if (rtems_assoc_is_default(ap))
+    default_ap = ap++;
+
+  for ( ; ap->name; ap++)
+    if (strcmp(ap->name, name) == 0)
+	return ap;
+
+  return default_ap;
+}
Index: cpukit/libcsupport/src/assocptrbyremote.c
===================================================================
--- cpukit/libcsupport/src/assocptrbyremote.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocptrbyremote.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,34 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+const rtems_assoc_t *rtems_assoc_ptr_by_remote(
+  const rtems_assoc_t *ap,
+  uint32_t       remote_value
+)
+{
+  const rtems_assoc_t *default_ap = 0;
+
+  if (rtems_assoc_is_default(ap))
+    default_ap = ap++;
+
+  for ( ; ap->name; ap++)
+    if (ap->remote_value == remote_value)
+      return ap;
+
+  return default_ap;
+}
Index: cpukit/libcsupport/src/assocremotebylocal.c
===================================================================
--- cpukit/libcsupport/src/assocremotebylocal.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocremotebylocal.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,31 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+uint32_t rtems_assoc_remote_by_local(
+  const rtems_assoc_t *ap,
+  uint32_t       local_value
+)
+{
+  const rtems_assoc_t *nap;
+
+  nap = rtems_assoc_ptr_by_local(ap, local_value);
+  if (nap)
+    return nap->remote_value;
+
+  return 0;
+}
Index: cpukit/libcsupport/src/assocremotebylocalbitfield.c
===================================================================
--- cpukit/libcsupport/src/assocremotebylocalbitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocremotebylocalbitfield.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,33 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+
+uint32_t   rtems_assoc_remote_by_local_bitfield(
+    const rtems_assoc_t *ap,
+    uint32_t             local_value
+)
+{
+  uint32_t   b;
+  uint32_t   remote_value = 0;
+
+  for (b = 1; b; b <<= 1)
+    if (b & local_value)
+      remote_value |= rtems_assoc_remote_by_local(ap, b);
+
+  return remote_value;
+}
Index: cpukit/libcsupport/src/assocremotebyname.c
===================================================================
--- cpukit/libcsupport/src/assocremotebyname.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/assocremotebyname.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,31 @@
+/*
+ * assoc.c
+ *      rtems assoc routines
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define INSIDE_ASSOC
+
+#include <rtems.h>
+#include <rtems/assoc.h>
+
+#include <string.h>             /* strcat, strcmp */
+
+uint32_t rtems_assoc_remote_by_name(
+  const rtems_assoc_t *ap,
+  const char          *name
+)
+{
+  const rtems_assoc_t *nap;
+
+  nap = rtems_assoc_ptr_by_name(ap, name);
+  if (nap)
+    return nap->remote_value;
+
+  return 0;
+}
Index: cpukit/libcsupport/src/libio.c
===================================================================
--- cpukit/libcsupport/src/libio.c	(revision 3041f6900aee63cc88be348b4102e469c6f8cdf0)
+++ cpukit/libcsupport/src/libio.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -52,55 +52,8 @@
  */
 
-extern uint32_t    rtems_libio_number_iops;
-rtems_id           rtems_libio_semaphore;
-rtems_libio_t     *rtems_libio_iops;
-rtems_libio_t     *rtems_libio_iop_freelist;
-
-/*
- *  rtems_libio_init
- *
- *  Called by BSP startup code to initialize the libio subsystem.
- */
-
-void rtems_libio_init( void )
-{
-    rtems_status_code rc;
-    int i;
-    rtems_libio_t *iop;
-
-    if (rtems_libio_number_iops > 0)
-    {
-        rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
-                                                    sizeof(rtems_libio_t));
-        if (rtems_libio_iops == NULL)
-            rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
-
-        iop = rtems_libio_iop_freelist = rtems_libio_iops;
-	for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++)
-		iop->data1 = iop + 1;
-	iop->data1 = NULL;
-    }
-
-  /*
-   *  Create the binary semaphore used to provide mutual exclusion
-   *  on the IOP Table.
-   */
-
-  rc = rtems_semaphore_create(
-    RTEMS_LIBIO_SEM,
-    1,
-    RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
-    RTEMS_NO_PRIORITY,
-    &rtems_libio_semaphore
-  );
-  if ( rc != RTEMS_SUCCESSFUL )
-    rtems_fatal_error_occurred( rc );
-
-  /*
-   *  Initialize the base file system infrastructure.
-   */
-
-  rtems_filesystem_initialize();
-}
+extern uint32_t       rtems_libio_number_iops;
+extern rtems_id       rtems_libio_semaphore;
+extern rtems_libio_t *rtems_libio_iops;
+extern rtems_libio_t *rtems_libio_iop_freelist;
 
 /*
Index: cpukit/libcsupport/src/libio_init.c
===================================================================
--- cpukit/libcsupport/src/libio_init.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/libio_init.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,90 @@
+/*
+ *  This file contains the support infrastructure used to manage the
+ *  table of integer style file descriptors used by the low level
+ *  POSIX system calls like open(), read, fstat(), etc.
+ *
+ *  COPYRIGHT (c) 1989-1999.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.com/license/LICENSE.
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/libio_.h>               /* libio_.h pulls in rtems */
+#include <rtems.h>
+#include <rtems/assoc.h>                /* assoc.h not included by rtems.h */
+
+#include <stdio.h>                      /* O_RDONLY, et.al. */
+#include <fcntl.h>                      /* O_RDONLY, et.al. */
+#include <assert.h>
+#include <errno.h>
+
+#include <errno.h>
+#include <string.h>                     /* strcmp */
+#include <unistd.h>
+#include <stdlib.h>                     /* calloc() */
+
+#include <rtems/libio.h>                /* libio.h not pulled in by rtems */
+
+/*
+ *  File descriptor Table Information
+ */
+
+extern uint32_t    rtems_libio_number_iops;
+rtems_id           rtems_libio_semaphore;
+rtems_libio_t     *rtems_libio_iops;
+rtems_libio_t     *rtems_libio_iop_freelist;
+
+/*
+ *  rtems_libio_init
+ *
+ *  Called by BSP startup code to initialize the libio subsystem.
+ */
+
+void rtems_libio_init( void )
+{
+    rtems_status_code rc;
+    int i;
+    rtems_libio_t *iop;
+
+    if (rtems_libio_number_iops > 0)
+    {
+        rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
+                                                    sizeof(rtems_libio_t));
+        if (rtems_libio_iops == NULL)
+            rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
+
+        iop = rtems_libio_iop_freelist = rtems_libio_iops;
+	for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++)
+		iop->data1 = iop + 1;
+	iop->data1 = NULL;
+    }
+
+  /*
+   *  Create the binary semaphore used to provide mutual exclusion
+   *  on the IOP Table.
+   */
+
+  rc = rtems_semaphore_create(
+    RTEMS_LIBIO_SEM,
+    1,
+    RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
+    RTEMS_NO_PRIORITY,
+    &rtems_libio_semaphore
+  );
+  if ( rc != RTEMS_SUCCESSFUL )
+    rtems_fatal_error_occurred( rc );
+
+  /*
+   *  Initialize the base file system infrastructure.
+   */
+
+  rtems_filesystem_initialize();
+}
Index: cpukit/libcsupport/src/write.c
===================================================================
--- cpukit/libcsupport/src/write.c	(revision 3041f6900aee63cc88be348b4102e469c6f8cdf0)
+++ cpukit/libcsupport/src/write.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -2,5 +2,5 @@
  *  write() - POSIX 1003.1b 6.4.2 - Write to a File
  *
- *  COPYRIGHT (c) 1989-1999.
+ *  COPYRIGHT (c) 1989-2007.
  *  On-Line Applications Research Corporation (OAR).
  *
@@ -56,23 +56,2 @@
   return rc;
 }
-
-/*
- *  _write_r
- *
- *  This is the Newlib dependent reentrant version of write().
- */
-
-#if defined(RTEMS_NEWLIB)
-
-#include <reent.h>
-
-_ssize_t _write_r(
-  struct _reent *ptr,
-  int            fd,
-  const void    *buf,
-  size_t         nbytes
-)
-{
-  return write( fd, buf, nbytes );
-}
-#endif
Index: cpukit/libcsupport/src/write_r.c
===================================================================
--- cpukit/libcsupport/src/write_r.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
+++ cpukit/libcsupport/src/write_r.c	(revision 55568af2e70d7026b57fe54ce14f6980a37c4e08)
@@ -0,0 +1,40 @@
+/*
+ *  write_r() - POSIX 1003.1b 6.4.2 - Write to a File
+ *
+ *  COPYRIGHT (c) 1989-2007.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.com/license/LICENSE.
+ *
+ *  $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/libio_.h>
+#include <rtems/seterr.h>
+
+/*
+ *  _write_r
+ *
+ *  This is the Newlib dependent reentrant version of write().
+ */
+
+#if defined(RTEMS_NEWLIB)
+
+#include <reent.h>
+
+_ssize_t _write_r(
+  struct _reent *ptr,
+  int            fd,
+  const void    *buf,
+  size_t         nbytes
+)
+{
+  return write( fd, buf, nbytes );
+}
+#endif
