Newer
Older
barebox / examples / syscall.S
@wdenk wdenk on 27 Jun 2003 2 KB * Code cleanup:
#include <ppc_asm.tmpl>
#include <ppc_defs.h>
#include <syscall.h>

#ifdef CONFIG_ARM /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
#warning ARM version not implemented yet /* XXXXXXXXXXXXXXXXXXXXXXXXXXXX */
	.global	mon_getc
	.type	mon_getc,function
mon_getc:
	.global	mon_tstc
	.type	mon_tstc,function
mon_tstc:
	.global	mon_putc
	.type	mon_putc,function
mon_putc:
	.global	mon_puts
	.type	mon_puts,function
mon_puts:
	.global	mon_printf
	.type	mon_printf,function
mon_printf:
	.global	mon_install_hdlr
	.type	mon_install_hdlr,function
mon_install_hdlr:
	.global	mon_free_hdlr
	.type	mon_free_hdlr,function
mon_free_hdlr:
	.global	mon_malloc
	.type	mon_malloc,function
mon_malloc:
	.global	mon_free
	.type	mon_free,function
mon_free:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, current_function_anonymous_args = 0
	mov     ip, sp
	stmfd   sp!, {fp, ip, lr, pc}
	sub     fp, ip, #4
	ldmea   fp, {fp, sp, pc}
#elif defined(CONFIG_MIPS)/* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
#warning MIPS version not implemented yet
	.global	mon_getc
	.type	mon_getc,function
mon_getc:
	.global	mon_tstc
	.type	mon_tstc,function
mon_tstc:
	.global	mon_putc
	.type	mon_putc,function
mon_putc:
	.global	mon_puts
	.type	mon_puts,function
mon_puts:
	.global	mon_printf
	.type	mon_printf,function
mon_printf:
	.global	mon_install_hdlr
	.type	mon_install_hdlr,function
mon_install_hdlr:
	.global	mon_free_hdlr
	.type	mon_free_hdlr,function
mon_free_hdlr:
	.global	mon_malloc
	.type	mon_malloc,function
mon_malloc:
	.global	mon_free
	.type	mon_free,function
mon_free:

#else

#ifdef CONFIG_I386 /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
#define SYMBOL_NAME(X) 	X
#define SYMBOL_NAME_LABEL(X) 	X##:

#define SYSCALL(name,n) \
	.globl SYMBOL_NAME(name) ; \
SYMBOL_NAME_LABEL(name)     		 ; \
	movl    $n, %eax ;\
	pushl   %ebx; \
	pushl   %ecx; \
	int     $0x40 ;\


#endif	/* CONFIG_I386 */

#ifdef CONFIG_PPC
#define SYSCALL(name,n) \
	.globl name		; \
name:				; \
	li r0,n			; \
	sc			; \
	blr
#endif	/* CONFIG_PPC */

	.text

	/*
	 * Make sure these functions are in the same order as they
	 * appear in the "include/syscall.h" header file !!!
	 */

	SYSCALL(mon_getc,SYSCALL_GETC)
	SYSCALL(mon_tstc,SYSCALL_TSTC)
	SYSCALL(mon_putc,SYSCALL_PUTC)
	SYSCALL(mon_puts,SYSCALL_PUTS)
	SYSCALL(mon_printf,SYSCALL_PRINTF)
	SYSCALL(mon_install_hdlr,SYSCALL_INSTALL_HDLR)
	SYSCALL(mon_free_hdlr,SYSCALL_FREE_HDLR)
	SYSCALL(mon_malloc,SYSCALL_MALLOC)
	SYSCALL(mon_free,SYSCALL_FREE)
	SYSCALL(mon_udelay,SYSCALL_UDELAY)
	SYSCALL(mon_get_timer,SYSCALL_GET_TIMER)
#endif /* CONFIG_ARM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */