This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Sun, Dec 19, 2010 at 06:08:36PM +0000, Richard W.M. Jones wrote: > Can systemtap be used to find the source (ie. file/line in the kernel) > where an error is "raised"? I have a system call (utimensat) which > returns -EINVAL, but I have no idea where the error comes from. I don't think there is really a generic way to do that with SystemTap. Actually, looking at the utimensat case specifically, it appears EINVAL is the default error code: 129 long do_utimes(int dfd, const char __user *filename, struct timespec *times, 130 int flags) 131 { 132 int error = -EINVAL; 133 134 if (times && (!nsec_valid(times[0].tv_nsec) || 135 !nsec_valid(times[1].tv_nsec))) { 136 goto out; 137 } 138 139 if (flags & ~AT_SYMLINK_NOFOLLOW) 140 goto out; 141 142 if (filename == NULL && dfd != AT_FDCWD) { [...] If you have a reliable reproducer, I would suggest divide and conquering with something like this: global testnr = 1 probe kernel.function("do_utimes@*.c:139"), kernel.function("do_utimes@*.c:142"), [add more checkpoints here as you dig deeper] { printf("passed test %d, now at %s\n", testnr++, pp()) }
Attachment:
signature.asc
Description: Digital signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |