Index: cpukit/ChangeLog
===================================================================
--- cpukit/ChangeLog	(revision 1f27c1f7654f95944d2c88f6589cd9183ccfb8b5)
+++ cpukit/ChangeLog	(revision e49bb542270acf31e2247ab33cd5cb39b6afc9f5)
@@ -1,2 +1,9 @@
+2008-08-18	Joel Sherrill <joel.sherrill@oarcorp.com>
+
+	* libcsupport/Makefile.am, libcsupport/src/newlibc.c: Split libc_init()
+	into a separate file to avoid linkage dependencies on newlibc.c which
+	in turn pulls in fclose() and other C library methods.
+	* libcsupport/src/newlibc_init.c: New file.
+
 2008-08-18	Ralf Corsepius <ralf.corsepius@rtems.org>
 
Index: cpukit/libcsupport/Makefile.am
===================================================================
--- cpukit/libcsupport/Makefile.am	(revision 1f27c1f7654f95944d2c88f6589cd9183ccfb8b5)
+++ cpukit/libcsupport/Makefile.am	(revision e49bb542270acf31e2247ab33cd5cb39b6afc9f5)
@@ -95,5 +95,6 @@
 LIBC_GLUE_C_FILES = src/__getpid.c src/__gettod.c src/__times.c \
     src/truncate.c src/access.c src/stat.c src/lstat.c src/pathconf.c \
-    src/newlibc.c src/newlibc_exit.c src/no_posix.c src/no_libc.c src/utsname.c
+    src/newlibc.c src/newlibc_init.c src/newlibc_exit.c src/no_posix.c \
+    src/no_libc.c src/utsname.c
 
 BSD_LIBC_C_FILES = src/strlcpy.c src/strlcat.c
Index: cpukit/libcsupport/src/newlibc.c
===================================================================
--- cpukit/libcsupport/src/newlibc.c	(revision 1f27c1f7654f95944d2c88f6589cd9183ccfb8b5)
+++ cpukit/libcsupport/src/newlibc.c	(revision e49bb542270acf31e2247ab33cd5cb39b6afc9f5)
@@ -51,6 +51,5 @@
 int _fwalk(struct _reent *ptr, int (*function) (FILE *) );
 
-struct _reent    libc_global_reent
-    __ATTRIBUTE_IMPURE_PTR__ = _REENT_INIT(libc_global_reent);
+extern struct _reent    libc_global_reent __ATTRIBUTE_IMPURE_PTR__;
 
 /*
@@ -174,25 +173,3 @@
 }
 
-/*
- *  Init libc for CYGNUS newlib
- * 
- *  Set up _REENT to use our global libc_global_reent.
- *  (newlib provides a global of its own, but we prefer our own name for it)
- *
- *  If reentrancy is desired (which it should be), then
- *  we install the task extension hooks to maintain the
- *  newlib reentrancy global variable _REENT on task
- *  create, delete, switch, exit, etc.
- *
- */
-
-
-void
-libc_init(void)
-{
-  _REENT = &libc_global_reent;
-
-  _Thread_Set_libc_reent (&_REENT);
-}
-
 #endif
Index: cpukit/libcsupport/src/newlibc_init.c
===================================================================
--- cpukit/libcsupport/src/newlibc_init.c	(revision e49bb542270acf31e2247ab33cd5cb39b6afc9f5)
+++ cpukit/libcsupport/src/newlibc_init.c	(revision e49bb542270acf31e2247ab33cd5cb39b6afc9f5)
@@ -0,0 +1,61 @@
+/*
+ *  Implementation of hooks for the CYGNUS newlib libc
+ *  These hooks set things up so that:
+ *       + '_REENT' is switched at task switch time.
+ *
+ *  COPYRIGHT (c) 1994 by Division Incorporated
+ *
+ *  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
+
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
+#include <rtems.h>
+
+#if defined(RTEMS_NEWLIB)
+#include <rtems/libcsupport.h>
+
+/* Since we compile with strict ANSI we need to undef it to get
+ * prototypes for extensions
+ */
+#undef __STRICT_ANSI__
+
+#include <stdlib.h>             /* for free() */
+#include <string.h>             /* for memset() */
+
+#include <sys/reent.h>          /* for extern of _REENT (aka _impure_ptr) */
+#include <errno.h>
+
+/*
+ *  Init libc for CYGNUS newlib
+ * 
+ *  Set up _REENT to use our global libc_global_reent.
+ *  (newlib provides a global of its own, but we prefer our own name for it)
+ *
+ *  If reentrancy is desired (which it should be), then
+ *  we install the task extension hooks to maintain the
+ *  newlib reentrancy global variable _REENT on task
+ *  create, delete, switch, exit, etc.
+ *
+ */
+
+
+struct _reent    libc_global_reent
+    __ATTRIBUTE_IMPURE_PTR__ = _REENT_INIT(libc_global_reent);
+void
+libc_init(void)
+{
+  _REENT = &libc_global_reent;
+
+  _Thread_Set_libc_reent (&_REENT);
+}
+
+#endif
