tracefile: opening file relative to file descriptor of openat.
This commit is contained in:
parent
c3abe9e996
commit
ba8eee5953
|
@ -19,3 +19,6 @@ mkdir -p t/1/2/3
|
||||||
parallel -vj1 doit \
|
parallel -vj1 doit \
|
||||||
::: '' -l -u \
|
::: '' -l -u \
|
||||||
::: tt/tt/../tt/test.img `pwd`/tt/tt/../tt/test.img t/1/../1/2/3/test.img `pwd`/t/1/../1/2/3/test.img | grep test.img
|
::: tt/tt/../tt/test.img `pwd`/tt/tt/../tt/test.img t/1/../1/2/3/test.img `pwd`/t/1/../1/2/3/test.img | grep test.img
|
||||||
|
|
||||||
|
# opening file relative to file descriptor of openat
|
||||||
|
tracefile lscpu | grep /sys/devices/system/cpu/cpu0/cache/index0/level
|
||||||
|
|
|
@ -266,17 +266,36 @@ while(<IN>) {
|
||||||
# [pid 30817] stat("t/tar.gz", {st_mode=S_IFREG|0644, st_size=140853248, ...}) = 0
|
# [pid 30817] stat("t/tar.gz", {st_mode=S_IFREG|0644, st_size=140853248, ...}) = 0
|
||||||
# openat(AT_FDCWD, "/tmp/a", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
|
# openat(AT_FDCWD, "/tmp/a", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
|
||||||
if(/^(\[[^]]+\])? # Match pid
|
if(/^(\[[^]]+\])? # Match pid
|
||||||
\s*([^\" ]+) # function
|
\s*([^\" ]+) # function e.g. openat
|
||||||
[(] # (
|
[(] # (
|
||||||
[^"]* # E.g. AT_FDCWD
|
([^",]*) # E.g. AT_FDCWD or 4
|
||||||
|
[^"]* # E.g. ,
|
||||||
" # "
|
" # "
|
||||||
(([^\\"]|\\[\\"nt])*) # content of string with \n \" \t \\
|
(([^\\"]|\\[\\"nt])*) # content of string with \n \" \t \\
|
||||||
"(.*)/x) # Rest
|
"(.*)/x) # Rest
|
||||||
{
|
{
|
||||||
# Matches the strace structure for a file
|
# Matches the strace structure for a file
|
||||||
my $function = $2;
|
my $function = $2;
|
||||||
my $file = shell_unquote($3);
|
my $first_arg = $3;
|
||||||
my $addinfo = $5;
|
my $file = shell_unquote($4);
|
||||||
|
my $addinfo = $6;
|
||||||
|
if($function eq "openat"
|
||||||
|
or
|
||||||
|
$function eq "faccessat") {
|
||||||
|
# openat(AT_FDCWD, "/sys/devices/system/cpu", O_RDONLY|O_CLOEXEC) = 4
|
||||||
|
# openat(4, "kernel_max", O_RDONLY|O_CLOEXEC) = 5
|
||||||
|
# faccessat(4, "cpu0/cache/index4", F_OK) = -1 ENOENT
|
||||||
|
# openat can open a file descriptor
|
||||||
|
# openat/faccessat can open relative to a file descriptor
|
||||||
|
$addinfo =~ /= (-?\d+)(\s[^=]*)?$/ || die $addinfo,$_;
|
||||||
|
my $fd = $1;
|
||||||
|
if($first_arg eq "AT_FDCWD") {
|
||||||
|
$fd{$fd} = $file;
|
||||||
|
} elsif($first_arg =~ /^\d+$/) {
|
||||||
|
$file = $fd{$first_arg}."/".$file;
|
||||||
|
} else { die $first_arg,$_; }
|
||||||
|
$fd{$fd} = $file;
|
||||||
|
}
|
||||||
# Relative to $dir
|
# Relative to $dir
|
||||||
$file =~ s:^([^/]):$dir/$1:;
|
$file =~ s:^([^/]):$dir/$1:;
|
||||||
$file =~ s:/\./:/:g; # /./ => /
|
$file =~ s:/\./:/:g; # /./ => /
|
||||||
|
|
Loading…
Reference in a new issue