У меня есть следующая программа SystemTap:
#!/usr/bin/stap
function proc:string() {
return sprintf("[%s] %s(%s)::%s() (pid %d, uid %d, cwd %s)",
execname(), cmdline_arg(0), cmdline_args(1,-1,", "), caller(), pid(), uid(),
fullpath_struct_path(task_cwd_path(task_current()))
);
}
probe syscall.open.return, syscall.stat.return,
syscall.open64.return ?, syscall.stat64.return ? {
filename = user_string($filename);
if ($return < 0) {
eno = -$return;
printf("%s => %s '%s' by %s\n", pn(), errno_str(eno), filename, proc());
}
}
при запуске она получает следующую ошибку:
семантическая ошибка: неразрешенная функция (аналогично: d_path, inode_path, task_cpu,task_current, task_dentry_path): идентификатор 'task_cwd_path' в / tmp / stap-test: 5: 30
, что, как я считаю, связано с тем, что Red Hat не добавляла функцию task_cwd_path()
до RHEL7.Есть ли альтернативный способ вернуть текущий каталог, который будет работать с RHEL6?