_stp_lookup_or_str(_stp_mfd_flags_list, flags, STAP_RETVALUE, MAXSTRINGLEN);
%}
+%{
+#include <linux/mman.h>
+static const _stp_val_array const _stp_mlock2_flags_list[] = {
+#ifdef MLOCK_ONFAULT
+ V(MLOCK_ONFAULT),
+#endif
+ {0, NULL}
+};
+%}
+/* `man mlock2` for more information */
+function _stp_mlock2_str:string(flags:long)
+%{
+ uint32_t flags = (uint32_t)STAP_ARG_flags;
+ _stp_lookup_or_str(_stp_mlock2_flags_list, flags, STAP_RETVALUE,
+ MAXSTRINGLEN);
+%}
+
%{
#include <linux/mman.h>
static const _stp_val_array const _stp_mlockall_flags_list[] = {
V(MCL_CURRENT),
V(MCL_FUTURE),
+#ifdef MCL_ONFAULT
+ V(MCL_ONFAULT),
+#endif
{0, NULL}
};
%}
-
/* `man mlockall` for more information */
function _mlockall_flags_str:string(flags:long)
%{ /* pure */
retstr = returnstr(1)
}
+# mlock2 _____________________________________________________
+#
+# long sys_mlock2(unsigned long start, size_t len, int flags)
+#
+probe nd_syscall.mlock2 = kprobe.function("sys_mlock2") ?
+{
+ name = "mlock2"
+ asmlinkage()
+ addr = __ulong(1)
+ len = __ulong(2)
+ flags = __int32(3)
+ flags_str = _stp_mlock2_str(__int32(3))
+ argstr = sprintf("%p, %u %s", addr, len, flags_str)
+}
+probe nd_syscall.mlock2.return = kprobe.function("sys_mlock2").return ?
+{
+ name = "mlock2"
+ retstr = returnstr(1)
+}
+
# mlockall ___________________________________________________
#
# long sys_mlockall(int flags)
retstr = return_str(1, $return)
}
+# mlock2 _____________________________________________________
+#
+# long sys_mlock2(unsigned long start, size_t len, int flags)
+#
+probe syscall.mlock2 = kernel.function("sys_mlock2").call ?
+{
+ name = "mlock2"
+ addr = __ulong($start)
+ len = __ulong($len)
+ flags = __int32($flags)
+ flags_str = _stp_mlock2_str(__int32(flags))
+ argstr = sprintf("%p, %u %s", addr, len, flags_str)
+}
+probe syscall.mlock2.return = kernel.function("sys_mlock2").return ?
+{
+ name = "mlock2"
+ retstr = return_str(1, $return)
+}
+
# mlockall ___________________________________________________
#
# long sys_mlockall(int flags)