* nds32/_argv.S: Replace syscall with break.
        * nds32/_argvlen.S: Ditto.
        * nds32/_chdir.S: Ditto.
        * nds32/_chmod.S: Ditto.
        * nds32/_close.S: Ditto.
        * nds32/_exit.S: Ditto.
        * nds32/_fstat.S: Ditto.
        * nds32/_getpid.S: Ditto.
        * nds32/_gettimeofday.S: Ditto.
        * nds32/_isatty.S: Ditto.
        * nds32/_kill.S: Ditto.
        * nds32/_link.S: Ditto.
        * nds32/_lseek.S: Ditto.
        * nds32/_open.S: Ditto.
        * nds32/_read.S: Ditto.
        * nds32/_rename.S: Ditto.
        * nds32/_stat.S: Ditto.
        * nds32/_system.S: Ditto.
        * nds32/_time.S: Ditto.
        * nds32/_times.S: Ditto.
        * nds32/_unlink.S: Ditto.
        * nds32/_utime.S: Ditto.
        * nds32/_write.S: Ditto.
        * nds32/syscall_error_handler.S: Ditto.
        * nds32/vh.h: New.
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _VH_H
 | 
						||
#define _VH_H
 | 
						||
 | 
						||
/*
 | 
						||
BREAK #SWID definition:
 | 
						||
0x00 – 0x1F: Free to use
 | 
						||
0x20 – 0x1FF: Reserved for EX9
 | 
						||
0x0200 – 0x7EFF: Free to use
 | 
						||
0x7F00 – 0x7FFF: Reserved for virtual hosting
 | 
						||
*/
 | 
						||
/* These are #SWID defined for Virtual Hosting. */
 | 
						||
#define VH_FOPEN	0x7F00
 | 
						||
#define VH_FREOPEN	0x7F01
 | 
						||
#define VH_FCLOSE	0x7F02
 | 
						||
#define VH_FFLUSH	0x7F03
 | 
						||
#define VH_FREAD	0x7F04
 | 
						||
#define VH_FWRITE	0x7F05
 | 
						||
#define VH_FGETC	0x7F06
 | 
						||
#define VH_FGETS	0x7F07
 | 
						||
#define VH_FPUTC	0x7F08
 | 
						||
#define VH_FPUTS	0x7F09
 | 
						||
#define VH_UNGETC	0x7F0A
 | 
						||
#define VH_FTELL	0x7F0B
 | 
						||
#define VH_FSEEK	0x7F0C
 | 
						||
#define VH_REWIND	0x7F0D
 | 
						||
#define VH_CLEARERR	0x7F0E
 | 
						||
#define VH_FEOF		0x7F0F
 | 
						||
#define VH_FERROR	0x7F10
 | 
						||
#define VH_REMOVE	0x7F11
 | 
						||
#define VH_TMPFILE	0x7F12
 | 
						||
/* From here, define Low-level routines. */
 | 
						||
#define VH_EXIT		0x7F20
 | 
						||
#define VH_OPEN         0x7F21
 | 
						||
#define VH_CLOSE        0x7F22
 | 
						||
#define VH_READ         0x7F23
 | 
						||
#define VH_WRITE        0x7F24
 | 
						||
#define VH_LSEEK        0x7F25
 | 
						||
#define VH_UNLINK       0x7F26
 | 
						||
#define VH_RENAME       0x7F27
 | 
						||
#define VH_FSTAT        0x7F28
 | 
						||
#define VH_STAT         0x7F29
 | 
						||
#define VH_GETTIMEOFDAY 0x7F2A
 | 
						||
#define VH_ISATTY       0x7F2B
 | 
						||
#define VH_SYSTEM       0x7F2C
 | 
						||
#define VH_GETERR       0x7F2D	/* The method we get errno.  */
 | 
						||
 | 
						||
 | 
						||
/* Define macros that generate assembly output.
 | 
						||
   Generate a System Call exception to notify GDB
 | 
						||
   to handle this virtual I/O routine.  */
 | 
						||
 | 
						||
.macro TYPE0 name num
 | 
						||
/* If r0 is not NULL(0), set errno.  */
 | 
						||
        .text
 | 
						||
        .global \name
 | 
						||
        .type   \name, @function
 | 
						||
        .align  2
 | 
						||
\name:
 | 
						||
	BREAK	\num		/* Generate_Exception(Breakpoint);  */
 | 
						||
	bnez	$r0, 1f		/* Branch if success.
 | 
						||
				   r0 value is not NULL(0).  */
 | 
						||
	BREAK	VH_GETERR
 | 
						||
	l.w	$r15, _impure_ptr
 | 
						||
        swi	$r0, [$r15]	/* Set errno.  */
 | 
						||
	move	$r0, 0		/* Set return value as 0.  */
 | 
						||
1:
 | 
						||
        ret
 | 
						||
        .size   \name, .-\name
 | 
						||
.endm
 | 
						||
 | 
						||
.macro TYPE1 name num
 | 
						||
/* If r0 is EOF(-1), set errno.  */
 | 
						||
        .text
 | 
						||
        .global \name
 | 
						||
        .type   \name, @function
 | 
						||
        .align  2
 | 
						||
\name:
 | 
						||
	BREAK	\num		/* Generate_Exception(Breakpoint);  */
 | 
						||
	addi	$r15, $r0, 1
 | 
						||
        bnezs8  1f		/* Branch if success.
 | 
						||
				   r0 value is EOF(-1).  */
 | 
						||
	BREAK	VH_GETERR
 | 
						||
	l.w	$r15, _impure_ptr
 | 
						||
        swi	$r0, [$r15]	/* Set errno.  */
 | 
						||
        move    $r0, -1		/* Set return value as -1.  */
 | 
						||
1:
 | 
						||
        ret
 | 
						||
        .size   \name, .-\name
 | 
						||
.endm
 | 
						||
 | 
						||
.macro TYPE2 name num
 | 
						||
/* If r0 is less than r2, set errno.  */
 | 
						||
        .text
 | 
						||
        .global \name
 | 
						||
        .type   \name, @function
 | 
						||
        .align  2
 | 
						||
\name:
 | 
						||
	BREAK	\num		/* Generate_Exception(Breakpoint);  */
 | 
						||
	slt	$r15, $r0, $r2	/* If r15 is set, set errno.  */
 | 
						||
        beqzs8  1f		/* Branch if success.
 | 
						||
				   r15 is zero.  */
 | 
						||
	move	$r4, $r0	/* Keep return value r0.  */
 | 
						||
	BREAK	VH_GETERR
 | 
						||
	l.w	$r15, _impure_ptr
 | 
						||
        swi	$r0, [$r15]	/* Set errno.  */
 | 
						||
        move    $r0, $r4	/* Restore r0.  */
 | 
						||
1:
 | 
						||
        ret
 | 
						||
        .size   \name, .-\name
 | 
						||
.endm
 | 
						||
 | 
						||
.macro TYPE3 name num
 | 
						||
/* No errors are defined.  */
 | 
						||
        .text
 | 
						||
        .global \name
 | 
						||
        .type   \name, @function
 | 
						||
        .align  2
 | 
						||
\name:
 | 
						||
	BREAK	\num		/* Generate_Exception(Breakpoint);  */
 | 
						||
        ret
 | 
						||
        .size   \name, .-\name
 | 
						||
.endm
 | 
						||
#endif /* _VH_H */
 |