diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2007-01-03 16:55:25 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2007-01-03 16:55:25 +0000 |
commit | 4d95d0e99afd7799f3c8b0e1273d67e1cd136e8d (patch) | |
tree | 0c6b70e5f7a987edcd99156f9ea25dc8280c9ea1 /libgloss/arm | |
parent | 35b4db0f3040b76139e03af1e888cb7d04f197cf (diff) | |
download | newlib-4d95d0e99afd7799f3c8b0e1273d67e1cd136e8d.zip newlib-4d95d0e99afd7799f3c8b0e1273d67e1cd136e8d.tar.gz newlib-4d95d0e99afd7799f3c8b0e1273d67e1cd136e8d.tar.bz2 |
2006-01-03 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.
Diffstat (limited to 'libgloss/arm')
-rw-r--r-- | libgloss/arm/Makefile.in | 10 | ||||
-rw-r--r-- | libgloss/arm/_exit.c | 15 | ||||
-rw-r--r-- | libgloss/arm/_kill.c | 25 | ||||
-rw-r--r-- | libgloss/arm/syscalls.c | 33 |
4 files changed, 48 insertions, 35 deletions
diff --git a/libgloss/arm/Makefile.in b/libgloss/arm/Makefile.in index 523baea..cecadfd 100644 --- a/libgloss/arm/Makefile.in +++ b/libgloss/arm/Makefile.in @@ -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 $< diff --git a/libgloss/arm/_exit.c b/libgloss/arm/_exit.c new file mode 100644 index 0000000..ed00876 --- /dev/null +++ b/libgloss/arm/_exit.c @@ -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); +} diff --git a/libgloss/arm/_kill.c b/libgloss/arm/_kill.c new file mode 100644 index 0000000..81354d4 --- /dev/null +++ b/libgloss/arm/_kill.c @@ -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 +} diff --git a/libgloss/arm/syscalls.c b/libgloss/arm/syscalls.c index 913dd3d..81d1724 100644 --- a/libgloss/arm/syscalls.c +++ b/libgloss/arm/syscalls.c @@ -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 *, struct stat *)); 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) { |