| #ifndef ROS_INC_ARCH_SYSCALL32_H | 
 | #define ROS_INC_ARCH_SYSCALL32_H | 
 |  | 
 | #ifndef ROS_INC_ARCH_SYSCALL_H | 
 | #error "Do not include include ros/arch/syscall32.h directly" | 
 | #endif | 
 |  | 
 | #define T_SYSCALL	0x80 | 
 |  | 
 | #ifndef ROS_KERNEL | 
 |  | 
 | #include <sys/types.h> | 
 | #include <stdint.h> | 
 | #include <ros/common.h> | 
 | #include <assert.h> | 
 |  | 
 | static inline intreg_t __syscall_sysenter(uintreg_t a0, uintreg_t a1) | 
 | { | 
 | 	/* The kernel clobbers ecx, so we save it manually. */ | 
 | 	intreg_t ret = 0; | 
 | 	asm volatile ("  pushl %%ecx;        " | 
 | 	              "  pushl %%edx;        " | 
 | 	              "  pushl %%ebp;        " | 
 | 	              "  movl %%esp, %%ebp;  " | 
 | 	              "  leal 1f, %%edx;     " | 
 | 	              "  sysenter;           " | 
 | 	              "1:                    " | 
 | 	              "  popl %%ebp;         " | 
 | 	              "  popl %%edx;         " | 
 | 	              "  popl %%ecx;         " | 
 | 	              : "=a" (ret) | 
 | 	              : "a" (a0), | 
 | 	                "S" (a1) | 
 | 	              : "cc", "memory"); | 
 | 	return ret; | 
 | } | 
 |  | 
 | static inline intreg_t __syscall_trap(uintreg_t a0, uintreg_t a1) | 
 | { | 
 | 	intreg_t ret; | 
 |  | 
 | 	/* If you change this, change pop_user_ctx() */ | 
 | 	asm volatile("int %1" | 
 | 	             : "=a" (ret) | 
 | 	             : "i" (T_SYSCALL), | 
 | 	               "a" (a0), | 
 | 	               "d" (a1) | 
 | 	             : "cc", "memory"); | 
 | 	return ret; | 
 | } | 
 |  | 
 | #endif | 
 |  | 
 | #endif /* ROS_INC_ARCH_SYSCALL32_H */ |