* libgloss/nds32/_getpid.S: Don't issue _getpid system call, it is always successful. * libgloss/nds32/_gettimeofday.S: No error for _gettimeofday is defined in SYS_geterr handler. * libgloss/nds32/_isatty.S: No error for _isatty is defined in SYS_geterr handler. * libgloss/nds32/_kill.S: Alway fail. errno = EINVAL. * libgloss/nds32/_link.S: Alway fail. errno = EMLINK. * libgloss/nds32/_times.S: Alway fail. errno = EACCES. * libgloss/nds32/_unlink.S: fix copy and paste error. * libgloss/nds32/crt0.S: Add pre_c_init, post_c_init, arg_init. * libgloss/nds32/crt1.S: Add pre_c_init, post_c_init, arg_init. * libgloss/nds32/syscall_extra.h: Re-format. * libgloss/nds32/vh.h: Add more virtual hosting number.
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 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 VH_GETPID       0x7F2E
 | ||
| #define VH_KILL         0x7F2F
 | ||
| #define VH_TIMES        0x7F30
 | ||
| 
 | ||
| 
 | ||
| /* 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 */
 |