Commit 542dc79f authored by Benjamin Berg's avatar Benjamin Berg Committed by Johannes Berg
Browse files

um: Add generic stub_syscall6 function



This function will be used by the new syscall handling code.

Signed-off-by: default avatarBenjamin Berg <benjamin@sipsolutions.net>
Link: https://patch.msgid.link/20240703134536.1161108-4-benjamin@sipsolutions.net


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent dc26184a
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -80,6 +80,28 @@ static __always_inline long stub_syscall5(long syscall, long arg1, long arg2,
	return ret;
}

static __always_inline long stub_syscall6(long syscall, long arg1, long arg2,
					  long arg3, long arg4, long arg5,
					  long arg6)
{
	struct syscall_args {
		int ebx, ebp;
	} args = { arg1, arg6 };
	long ret;

	__asm__ volatile ("pushl %%ebp;"
			"movl 0x4(%%ebx),%%ebp;"
			"movl (%%ebx),%%ebx;"
			"int $0x80;"
			"popl %%ebp"
			: "=a" (ret)
			: "0" (syscall), "b" (&args),
			"c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5)
			: "memory");

	return ret;
}

static __always_inline void trap_myself(void)
{
	__asm("int3");
+16 −0
Original line number Diff line number Diff line
@@ -80,6 +80,22 @@ static __always_inline long stub_syscall5(long syscall, long arg1, long arg2,
	return ret;
}

static __always_inline long stub_syscall6(long syscall, long arg1, long arg2,
					  long arg3, long arg4, long arg5,
					  long arg6)
{
	long ret;

	__asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; movq %7,%%r9 ; "
		__syscall
		: "=a" (ret)
		: "0" (syscall), "D" (arg1), "S" (arg2), "d" (arg3),
		  "g" (arg4), "g" (arg5), "g" (arg6)
		: __syscall_clobber, "r10", "r8", "r9");

	return ret;
}

static __always_inline void trap_myself(void)
{
	__asm("int3");