diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2004-06-09 19:06:50 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2004-06-09 19:06:50 +0000 |
commit | a7364adeb97e9950b43d9efcdb3b650cb442f465 (patch) | |
tree | 292d6f381716e887b0d592ffc886c3cc398641e2 /libgloss/arm/libcfunc.c | |
parent | a170abec0842d3f027a9ea7f4aa1af9642d21bc7 (diff) | |
download | cygnal-a7364adeb97e9950b43d9efcdb3b650cb442f465.tar.gz cygnal-a7364adeb97e9950b43d9efcdb3b650cb442f465.tar.bz2 cygnal-a7364adeb97e9950b43d9efcdb3b650cb442f465.zip |
2004-06-09 Toralf Lund <toralf@procaptura.com>
* arm/crt0.S: Copied from newlib and it now also sets up stacks for
FIQ and IRQ mode, plus calls hardware_init_hook() and
software_init_hook() if present.
* arm/libcfunc.c, arm/swi.h, arm/syscalls.c: Copied
from newlib.
* arm/Makefile.in: Build crt0.o, rdpmon-crt0.o, rdimon-crt0.o,
librdpmon.a, librdimon.a - support file for "bare" setup, as well
as "RDP" and "RDI" monitors.
* arm/coff-rdpmon.specs, arm/elf-rdpmon.specs,
arm/coff-rdimon.specs, arm/elf-rdimon.specs: gcc specs files to go
with above mentioned support libs and startfiles.
Diffstat (limited to 'libgloss/arm/libcfunc.c')
-rw-r--r-- | libgloss/arm/libcfunc.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/libgloss/arm/libcfunc.c b/libgloss/arm/libcfunc.c new file mode 100644 index 000000000..ddc611f34 --- /dev/null +++ b/libgloss/arm/libcfunc.c @@ -0,0 +1,40 @@ +/* Support files for GNU libc. Files in the C namespace go here. + Files in the system namespace (ie those that start with an underscore) + go in syscalls.c. + + Note: These functions are in a seperate file so that OS providers can + overrride the system call stubs (defined in syscalls.c) without having + to provide libc funcitons as well. */ +#include "swi.h" + +#ifdef ARM_RDI_MONITOR + +static inline int +do_AngelSWI (int reason, void * arg) +{ + int value; + asm volatile ("mov r0, %1; mov r1, %2; swi %a3; mov %0, r0" + : "=r" (value) /* Outputs */ + : "r" (reason), "r" (arg), "i" (AngelSWI) /* Inputs */ + : "r0", "r1", "lr" + /* Clobbers r0 and r1, and lr if in supervisor mode */); + return value; +} +#endif /* ARM_RDI_MONITOR */ + + +void +abort (void) +{ +#ifdef ARM_RDI_MONITOR + do_AngelSWI (AngelSWI_Reason_ReportException, + (void *) ADP_Stopped_RunTimeError); +#else + asm ("mov r0,#17\nswi %a0" :: "i" (SWI_Exit)); +#endif +} + +void +alarm (void) +{ +} |