34 lines · 785 B · C
RawDownload
 static inline int32_tsyscall(int num, int check, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5){	int32_t ret; 	// Generic system call: pass system call number in AX,	// up to five parameters in DX, CX, BX, DI, SI.	// Interrupt kernel with T_SYSCALL.	//	// The "volatile" tells the assembler not to optimize	// this instruction away just because we don't use the	// return value.	// 	// The last clause tells the assembler that this can	// potentially change the condition codes and arbitrary	// memory locations. 	asm volatile("syscall\n"		: "=a" (ret)		: "a" (num),		  "d" (a1),		  "c" (a2),		  "b" (a3),		  "D" (a4),		  "S" (a5)		: "cc", "memory");		if(check && ret > 0)		panic("syscall %d returned %d (> 0)", num, ret); 	return ret;}