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]

[patch] libgloss/arm: Put _exit and _kill in separate files.


Hi,

Attached is a patch to put _exit and _kill in separate files to reduce
the minimum executable size.

Tested by building binutils.  OK to apply?

Kazu Hirata

libgloss/
2006-12-26  Kazu Hirata  <kazu@codesourcery.com>

	* arm/Makefile (RDPMON_OBJS): Add _exit.o and _kill.o.
	(RDIMON_OBJS): Define in terms of RDPMON_OBJS.
	(rdimon-_exit.o, rdimon-_kill.o): New.
	* arm/_exit.c, arm/_kill.c: New.
	* arm/syscalls.c (_exit, _kill): Remove.

Index: libgloss/arm/Makefile.in
===================================================================
RCS file: /cvs/src/src/libgloss/arm/Makefile.in,v
retrieving revision 1.7
diff -u -d -p -r1.7 Makefile.in
--- libgloss/arm/Makefile.in	30 May 2006 17:40:47 -0000	1.7
+++ libgloss/arm/Makefile.in	26 Dec 2006 05:48:51 -0000
@@ -66,13 +66,13 @@ REDBOOT_INSTALL	= install-redboot
 
 RDPMON_CRT0	= rdpmon-crt0.o
 RDPMON_BSP	= librdpmon.a
-RDPMON_OBJS	= syscalls.o libcfunc.o trap.o
+RDPMON_OBJS	= syscalls.o libcfunc.o trap.o _exit.o _kill.o
 RDPMON_SCRIPTS	= rdpmon.specs
 RDPMON_INSTALL	= install-rdpmon
 
 RDIMON_CRT0	= rdimon-crt0.o
 RDIMON_BSP	= librdimon.a
-RDIMON_OBJS	= rdimon-syscalls.o rdimon-libcfunc.o rdimon-trap.o
+RDIMON_OBJS	= $(patsubst %,rdimon-%,$(RDPMON_OBJS))
 RDIMON_SCRIPTS	= rdimon.specs
 RDIMON_INSTALL	= install-rdimon
 
@@ -115,6 +115,12 @@ rdimon-crt0.o: crt0.S
 rdimon-trap.o: trap.S
 	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
+rdimon-_exit.o: _exit.c
+	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+
+rdimon-_kill.o: _kill.c
+	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+
 rdimon-syscalls.o: syscalls.c
 	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
Index: libgloss/arm/_exit.c
===================================================================
RCS file: libgloss/arm/_exit.c
diff -N libgloss/arm/_exit.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libgloss/arm/_exit.c	26 Dec 2006 05:48:51 -0000
@@ -0,0 +1,15 @@
+#include <_ansi.h>
+
+int _kill _PARAMS ((int, int));
+void _exit _PARAMS ((int));
+
+void
+_exit (int status)
+{
+  /* There is only one SWI for both _exit and _kill. For _exit, call
+     the SWI with the second argument set to -1, an invalid value for
+     signum, so that the SWI handler can distinguish the two calls.
+     Note: The RDI implementation of _kill throws away both its
+     arguments.  */
+  _kill (status, -1);
+}
Index: libgloss/arm/_kill.c
===================================================================
RCS file: libgloss/arm/_kill.c
diff -N libgloss/arm/_kill.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libgloss/arm/_kill.c	26 Dec 2006 05:48:51 -0000
@@ -0,0 +1,25 @@
+#include <_ansi.h>
+#include <signal.h>
+#include "swi.h"
+
+int _kill _PARAMS ((int, int));
+
+int
+_kill (int pid, int sig)
+{
+  (void) pid; (void) sig;
+#ifdef ARM_RDI_MONITOR
+  /* Note: The pid argument is thrown away.  */
+  switch (sig)
+    {
+    case SIGABRT:
+      return do_AngelSWI (AngelSWI_Reason_ReportException,
+			  (void *) ADP_Stopped_RunTimeError);
+    default:
+      return do_AngelSWI (AngelSWI_Reason_ReportException,
+			  (void *) ADP_Stopped_ApplicationExit);
+    }
+#else
+  asm ("swi %a0" :: "i" (SWI_Exit));
+#endif
+}
Index: libgloss/arm/syscalls.c
===================================================================
RCS file: /cvs/src/src/libgloss/arm/syscalls.c,v
retrieving revision 1.13
diff -u -d -p -r1.13 syscalls.c
--- libgloss/arm/syscalls.c	25 Dec 2006 23:05:24 -0000	1.13
+++ libgloss/arm/syscalls.c	26 Dec 2006 05:48:51 -0000
@@ -13,7 +13,6 @@
 #include <sys/times.h>
 #include <errno.h>
 #include <reent.h>
-#include <signal.h>
 #include <unistd.h>
 #include <sys/wait.h>
 #include "swi.h"
@@ -30,8 +29,6 @@ int     _stat 		_PARAMS ((const char *, 
 int     _fstat 		_PARAMS ((int, struct stat *));
 caddr_t _sbrk		_PARAMS ((int));
 int     _getpid		_PARAMS ((int));
-int     _kill		_PARAMS ((int, int));
-void    _exit		_PARAMS ((int));
 int     _close		_PARAMS ((int));
 clock_t _clock		_PARAMS ((void));
 int     _swiclose	_PARAMS ((int));
@@ -439,36 +436,6 @@ _close (int file)
   return wrap (_swiclose (file));
 }
 
-int
-_kill (int pid, int sig)
-{
-  (void)pid; (void)sig;
-#ifdef ARM_RDI_MONITOR
-  /* Note: The pid argument is thrown away.  */
-  switch (sig) {
-	  case SIGABRT:
-		  return do_AngelSWI (AngelSWI_Reason_ReportException,
-				  (void *) ADP_Stopped_RunTimeError);
-	  default:
-		  return do_AngelSWI (AngelSWI_Reason_ReportException,
-				  (void *) ADP_Stopped_ApplicationExit);
-  }
-#else
-  asm ("swi %a0" :: "i" (SWI_Exit));
-#endif
-}
-
-void
-_exit (int status)
-{
-  /* There is only one SWI for both _exit and _kill. For _exit, call
-     the SWI with the second argument set to -1, an invalid value for
-     signum, so that the SWI handler can distinguish the two calls.
-     Note: The RDI implementation of _kill throws away both its
-     arguments.  */
-  _kill(status, -1);
-}
-
 int __attribute__((weak))
 _getpid (int n)
 {


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