diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 91c65b19f..3f966e778 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,25 @@
+2003-06-20  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* libc/include/sys/reent.h (_REENT_INIT_PTR): Fix macros
+	to handle latest on_exit change.
+	* libc/sys/linux/Makefile.am: Remove special compilation
+	for malloc.c and mcheck.c.
+	* libc/sys/linux/Makefile.in: Regenerated.
+	* libc/sys/linux/mntent.c: Add definition of _LIBC flag
+	after including <features.h>.
+	* libc/sys/linux/mcheck.c: Ditto.
+	* libc/sys/linux/malloc.c: Ditto plus define _GNU_SOURCE
+	for <features.h>.
+	* libc/sys/linux/intl/Makefile.am: Remove -D_LIBC and
+	add -DNOT_IN_libc to C flags.
+	* libc/sys/linux/intl/Makefile.in: Regenerated.
+	* libc/sys/linux/intl/config.h: Add definition of _LIBC.
+	* libc/sys/linux/linuxthreads/semaphore.h: Include
+	<bits/pthreadtypes.h>.
+	* libc/sys/linux/sys/dirent.h: Define _LIBC and NOT_IN_libc after
+	including <features.h>.
+	* libc/sys/linux/sys/lock.h: Ditto.
+
 2003-06-11  Nick Clifton  <nickc@redhat.com>
 
 	* libc/reent/reent.c (reclaim_reent): Fix typo in code to free
diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index d1a04dc43..1c4fccf86 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -407,8 +407,7 @@ struct _reent
     var->_sig_func = _NULL; \
     var->_atexit._ind = 0; \
     var->_atexit._fns[0] = _NULL; \
-    var->_atexit._fnargs[0] = _NULL; \
-    var->_atexit._fntypes = 0; \
+    var->_atexit._on_exit_args = _NULL; \
     var->__sglue._next = _NULL; \
     var->__sglue._niobs = 0; \
     var->__sglue._iobs = _NULL; \
@@ -673,7 +672,8 @@ struct _reent
     var->_atexit = _NULL; \
     var->_atexit0._ind = 0; \
     var->_atexit0._fns[0] = _NULL; \
-    var->_atexit0._fntypes = 0; \
+    var->_atexit0._on_exit_args._fntypes = 0; \
+    var->_atexit0._on_exit_args._fnargs[0] = _NULL; \
     var->_sig_func = _NULL; \
     var->__sglue._next = _NULL; \
     var->__sglue._niobs = 0; \
diff --git a/newlib/libc/sys/linux/Makefile.am b/newlib/libc/sys/linux/Makefile.am
index be9790308..935f60d03 100644
--- a/newlib/libc/sys/linux/Makefile.am
+++ b/newlib/libc/sys/linux/Makefile.am
@@ -224,12 +224,6 @@ crt0.o: machine/crt0.o
 
 machine/crt0.o: ; @true
 
-malloc.$(oext): $(srcdir)/malloc.c
-	$(LIBC_COMPILE) -D_LIBC=1 -c $< -o $@
-
-mcheck.$(oext): $(srcdir)/mcheck.c
-	$(LIBC_COMPILE) -D_LIBC=1 -c $< -o $@
-
 sig.$(oext):	siglist.inc
 
 siglist.inc:
diff --git a/newlib/libc/sys/linux/Makefile.in b/newlib/libc/sys/linux/Makefile.in
index 560ce1b58..a9065799d 100644
--- a/newlib/libc/sys/linux/Makefile.in
+++ b/newlib/libc/sys/linux/Makefile.in
@@ -715,12 +715,6 @@ crt0.o: machine/crt0.o
 
 machine/crt0.o: ; @true
 
-malloc.$(oext): $(srcdir)/malloc.c
-	$(LIBC_COMPILE) -D_LIBC=1 -c $< -o $@
-
-mcheck.$(oext): $(srcdir)/mcheck.c
-	$(LIBC_COMPILE) -D_LIBC=1 -c $< -o $@
-
 sig.$(oext):	siglist.inc
 
 siglist.inc:
diff --git a/newlib/libc/sys/linux/intl/Makefile.am b/newlib/libc/sys/linux/intl/Makefile.am
index ec1021793..e484b2b53 100644
--- a/newlib/libc/sys/linux/intl/Makefile.am
+++ b/newlib/libc/sys/linux/intl/Makefile.am
@@ -27,7 +27,7 @@ endif # USE_LIBTOOL
 
 include $(srcdir)/../../../../Makefile.shared
 
-AM_CFLAGS = -D_LIBC -DHAVE_CONFIG_H -D_GNU_SOURCE -D__libc_enable_secure=1 -D'LOCALEDIR="$(msgcatdir)"' -D'LOCALE_ALIAS_PATH="$(msgcatdir)"' -DNLSPATH='"$(msgcatdir)/%L/%N:$(msgcatdir)/%L/LC_MESSAGES/%N:$(msgcatdir)/%l/%N:$(msgcatdir)/%l/LC_MESSAGES/%N:"'
+AM_CFLAGS = -DNOT_IN_libc -DHAVE_CONFIG_H -D_GNU_SOURCE -D__libc_enable_secure=1 -D'LOCALEDIR="$(msgcatdir)"' -D'LOCALE_ALIAS_PATH="$(msgcatdir)"' -DNLSPATH='"$(msgcatdir)/%L/%N:$(msgcatdir)/%L/LC_MESSAGES/%N:$(msgcatdir)/%l/%N:$(msgcatdir)/%l/LC_MESSAGES/%N:"'
 
 # shouldn't have to do the following, but if needed
 BISONFLAGS = --yacc --name-prefix=__gettext --output
diff --git a/newlib/libc/sys/linux/intl/Makefile.in b/newlib/libc/sys/linux/intl/Makefile.in
index 8cbf52b6f..62ab58425 100644
--- a/newlib/libc/sys/linux/intl/Makefile.in
+++ b/newlib/libc/sys/linux/intl/Makefile.in
@@ -73,6 +73,8 @@ CXX = @CXX@
 CXXCPP = @CXXCPP@
 DLLTOOL = @DLLTOOL@
 EXEEXT = @EXEEXT@
+EXTRA_SUBDIRS = @EXTRA_SUBDIRS@
+EXTRA_SUBLIBS = @EXTRA_SUBLIBS@
 GCJ = @GCJ@
 GCJFLAGS = @GCJFLAGS@
 LDFLAGS = @LDFLAGS@
@@ -117,7 +119,7 @@ msgcatdir = /usr/share/locale
 @USE_LIBTOOL_FALSE@noinst_LIBRARIES = @USE_LIBTOOL_FALSE@lib.a
 @USE_LIBTOOL_FALSE@lib_a_SOURCES = @USE_LIBTOOL_FALSE@$(LIB_SOURCES)
 
-AM_CFLAGS = -D_LIBC -DHAVE_CONFIG_H -D_GNU_SOURCE -D__libc_enable_secure=1 -D'LOCALEDIR="$(msgcatdir)"' -D'LOCALE_ALIAS_PATH="$(msgcatdir)"' -DNLSPATH='"$(msgcatdir)/%L/%N:$(msgcatdir)/%L/LC_MESSAGES/%N:$(msgcatdir)/%l/%N:$(msgcatdir)/%l/LC_MESSAGES/%N:"'
+AM_CFLAGS = -DNOT_IN_libc -DHAVE_CONFIG_H -D_GNU_SOURCE -D__libc_enable_secure=1 -D'LOCALEDIR="$(msgcatdir)"' -D'LOCALE_ALIAS_PATH="$(msgcatdir)"' -DNLSPATH='"$(msgcatdir)/%L/%N:$(msgcatdir)/%L/LC_MESSAGES/%N:$(msgcatdir)/%l/%N:$(msgcatdir)/%l/LC_MESSAGES/%N:"'
 
 # shouldn't have to do the following, but if needed
 BISONFLAGS = --yacc --name-prefix=__gettext --output
diff --git a/newlib/libc/sys/linux/intl/config.h b/newlib/libc/sys/linux/intl/config.h
index 010de6079..69de0abcb 100644
--- a/newlib/libc/sys/linux/intl/config.h
+++ b/newlib/libc/sys/linux/intl/config.h
@@ -24,3 +24,6 @@
 #define UINT32_C(c)    c ## U
 
 #include <machine/sysdep.h>
+#include <features.h>
+
+#define _LIBC 1
diff --git a/newlib/libc/sys/linux/linuxthreads/semaphore.h b/newlib/libc/sys/linux/linuxthreads/semaphore.h
index 9c283c864..5971f0d51 100644
--- a/newlib/libc/sys/linux/linuxthreads/semaphore.h
+++ b/newlib/libc/sys/linux/linuxthreads/semaphore.h
@@ -17,6 +17,7 @@
 
 #include <features.h>
 #include <sys/types.h>
+#include <bits/pthreadtypes.h>
 #ifdef __USE_XOPEN2K
 # define __need_timespec
 # include <time.h>
diff --git a/newlib/libc/sys/linux/malloc.c b/newlib/libc/sys/linux/malloc.c
index ecebb369c..25007e889 100644
--- a/newlib/libc/sys/linux/malloc.c
+++ b/newlib/libc/sys/linux/malloc.c
@@ -302,6 +302,11 @@
 #endif
 #endif /*Void_t*/
 
+#define _GNU_SOURCE
+#include <features.h>
+#define _LIBC 1
+#define NOT_IN_libc 1
+
 #if __STD_C
 # include <stddef.h>   /* for size_t */
 # if defined _LIBC || defined MALLOC_HOOKS
diff --git a/newlib/libc/sys/linux/mcheck.c b/newlib/libc/sys/linux/mcheck.c
index 9e42dccad..eeb99da89 100644
--- a/newlib/libc/sys/linux/mcheck.c
+++ b/newlib/libc/sys/linux/mcheck.c
@@ -22,6 +22,8 @@
 
 #ifndef	_MALLOC_INTERNAL
 # define _MALLOC_INTERNAL
+# include <features.h>
+# define _LIBC 1
 # include <malloc.h>
 # include <mcheck.h>
 # include <stdint.h>
diff --git a/newlib/libc/sys/linux/mntent.c b/newlib/libc/sys/linux/mntent.c
index ecd223f50..0101b94e4 100644
--- a/newlib/libc/sys/linux/mntent.c
+++ b/newlib/libc/sys/linux/mntent.c
@@ -17,9 +17,12 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <features.h>
 #include <mntent.h>
 #include <stdlib.h>
 #include <libc-symbols.h>
+#define  _LIBC 1
+#define  NOT_IN_libc 1
 #include <bits/libc-lock.h>
 
 /* We don't want to allocate the static buffer all the time since it
diff --git a/newlib/libc/sys/linux/sys/dirent.h b/newlib/libc/sys/linux/sys/dirent.h
index f9b6fec7a..083158eb3 100644
--- a/newlib/libc/sys/linux/sys/dirent.h
+++ b/newlib/libc/sys/linux/sys/dirent.h
@@ -9,6 +9,7 @@
 #include <sys/types.h>
 #include <linux/dirent.h>
 #define _LIBC 1
+#define  NOT_IN_libc 1
 #include <sys/lock.h>
 #undef _LIBC
 
diff --git a/newlib/libc/sys/linux/sys/lock.h b/newlib/libc/sys/linux/sys/lock.h
index 03d27ee43..c70c56cb1 100644
--- a/newlib/libc/sys/linux/sys/lock.h
+++ b/newlib/libc/sys/linux/sys/lock.h
@@ -2,8 +2,11 @@
 #define __SYS_LOCK_H__
 
 #include <machine/weakalias.h>
+#include <features.h>
+
+#define  _LIBC  1
+#define  NOT_IN_libc 1
 
-#define _LIBC 1
 #include <bits/libc-lock.h>
 
 typedef __libc_lock_t _LOCK_T;