[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