# ppc[64]_newuname ________________________________________
#
# asmlinkage int ppc64_newuname(struct new_utsname __user * name)
# long ppc_newuname(struct new_utsname __user * name)
#

@define _SYSCALL_PPC64_NEWUNAME_NAME
%(
	name = "uname"
%)

@define _SYSCALL_PPC64_NEWUNAME_ARGSTR
%(
	argstr = sprintf("%p", name_uaddr)
%)

probe syscall.ppc64_newuname = dw_syscall.ppc64_newuname !,
                               nd_syscall.ppc64_newuname ? {}
probe syscall.ppc64_newuname.return = dw_syscall.ppc64_newuname.return !,
                                      nd_syscall.ppc64_newuname.return ? {}

# dw_ppc64_newuname _____________________________________________________

probe dw_syscall.ppc64_newuname = kernel.function("ppc64_newuname") ?,
	kernel.function("ppc_newuname") ?
{
	@_SYSCALL_PPC64_NEWUNAME_NAME
	name_uaddr = $name
	@_SYSCALL_PPC64_NEWUNAME_ARGSTR
}
probe dw_syscall.ppc64_newuname.return =
	kernel.function("ppc64_newuname").return ?,
	kernel.function("ppc_newuname").return ?
{
	@_SYSCALL_PPC64_NEWUNAME_NAME
	@SYSC_RETVALSTR($return)
}

# nd_ppc64_newuname _____________________________________________________

probe nd_syscall.ppc64_newuname = __nd_syscall.ppc64_newuname ?,
	kprobe.function("ppc_newuname") ?
{
	@_SYSCALL_PPC64_NEWUNAME_NAME
	name_uaddr = pointer_arg(1)
	@_SYSCALL_PPC64_NEWUNAME_ARGSTR
}
probe __nd_syscall.ppc64_newuname = kprobe.function("ppc64_newuname") ?
{
	asmlinkage()
}
probe nd_syscall.ppc64_newuname.return =
	kprobe.function("ppc64_newuname").return ?,
	kprobe.function("ppc_newuname").return ?
{
	@_SYSCALL_PPC64_NEWUNAME_NAME
	@SYSC_RETVALSTR(returnval())
}
