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

Jeff Johnston jjohnstn@redhat.com
Wed Jan 3 16:55:00 GMT 2007


Patch checked in.

-- Jeff J.

Kazu Hirata wrote:
> 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)
>  {



More information about the Newlib mailing list