Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | # Check how ftruncate, lseek and stat family syscalls are traced. |
| 4 | |
| 5 | . "${srcdir=.}/init.sh" |
| 6 | |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 7 | check_prog dd |
| 8 | check_prog find |
| 9 | check_prog grep |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 10 | |
Dmitry V. Levin | 655633e | 2015-01-08 00:32:35 +0000 | [diff] [blame] | 11 | OUT="$LOG.out" |
| 12 | size=46118400000 |
| 13 | sample=stat_sample |
| 14 | |
| 15 | rm -f $sample |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 16 | umask 022 |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 17 | |
Dmitry V. Levin | ed7ada2 | 2015-01-13 00:06:09 +0000 | [diff] [blame] | 18 | truncate_cmd="dd seek=$size bs=1 count=0 if=/dev/null of=$sample" |
Dmitry V. Levin | 655633e | 2015-01-08 00:32:35 +0000 | [diff] [blame] | 19 | $truncate_cmd > "$OUT" 2>&1 || { |
| 20 | cat "$OUT" |
| 21 | framework_skip_ 'failed to create a large sparse file' |
| 22 | } |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 23 | |
Dmitry V. Levin | 655633e | 2015-01-08 00:32:35 +0000 | [diff] [blame] | 24 | find_cmd="find $sample -quit" |
| 25 | $find_cmd || framework_skip_ "$find_cmd failed" |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 26 | |
Dmitry V. Levin | 655633e | 2015-01-08 00:32:35 +0000 | [diff] [blame] | 27 | find_L_cmd="find -L $sample -quit" |
| 28 | $find_L_cmd || framework_skip_ "$find_L_cmd failed" |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 29 | |
Dmitry V. Levin | 655633e | 2015-01-08 00:32:35 +0000 | [diff] [blame] | 30 | rm -f $sample |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 31 | |
Dmitry V. Levin | 655633e | 2015-01-08 00:32:35 +0000 | [diff] [blame] | 32 | $STRACE -o "$LOG" -edesc $truncate_cmd 2>&1 > "$OUT" 2>&1 || { |
| 33 | cat "$LOG" "$OUT" |
| 34 | fail_ "$STRACE -edesc $truncate_cmd failed" |
| 35 | } |
| 36 | |
| 37 | rm -f "$OUT" |
| 38 | |
| 39 | r_ftruncate="ftruncate(64)?\\(1, $size\\) += 0" |
| 40 | LC_ALL=C grep -E -x "$r_ftruncate" "$LOG" > /dev/null || { |
| 41 | cat "$LOG" |
| 42 | fail_ 'strace -edesc failed to trace ftruncate/ftruncate64 properly' |
| 43 | } |
| 44 | |
| 45 | r_lseek="lseek\\(1, $size, SEEK_CUR\\) += $size" |
| 46 | r_llseek="_llseek\\(1, $size, \\[$size\\], SEEK_CUR\\) += 0" |
| 47 | LC_ALL=C grep -E -x "$r_lseek|$r_llseek" "$LOG" > /dev/null || { |
| 48 | cat "$LOG" |
| 49 | fail_ 'strace -edesc failed to trace lseek/_llseek properly' |
| 50 | } |
| 51 | |
| 52 | $STRACE -o "$LOG" -efile $find_L_cmd || { |
| 53 | cat "$LOG" |
| 54 | fail_ "$STRACE -efile $find_L_cmd failed" |
| 55 | } |
| 56 | |
| 57 | stat="\\{st_mode=S_IFREG\\|0644, st_size=$size, \\.\\.\\.\\}" |
| 58 | r_stat="stat(64)?\\(\"$sample\", $stat\\) += 0" |
| 59 | r_fstatat="(new)?fstatat(64)?\\(AT_FDCWD, \"$sample\", $stat, 0\\) += 0" |
| 60 | LC_ALL=C grep -E -x "$r_stat|$r_fstatat" "$LOG" > /dev/null || { |
| 61 | cat "$LOG" |
| 62 | fail_ 'strace -efile failed to trace stat/stat64 properly' |
| 63 | } |
| 64 | |
| 65 | $STRACE -o "$LOG" -efile $find_cmd || { |
| 66 | cat "$LOG" |
| 67 | fail_ "$STRACE -efile $find_cmd failed" |
| 68 | } |
| 69 | |
| 70 | r_lstat="lstat(64)?\\(\"$sample\", $stat\\) += 0" |
| 71 | r_lfstatat="(new)?fstatat(64)?\\(AT_FDCWD, \"$sample\", $stat, AT_SYMLINK_NOFOLLOW\\) += 0" |
| 72 | LC_ALL=C grep -E -x "$r_lstat|$r_lfstatat" "$LOG" > /dev/null || { |
| 73 | cat "$LOG" |
| 74 | fail_ 'strace -efile failed to trace fstatat/fstatat64 properly' |
| 75 | } |
| 76 | |
| 77 | rm -f $sample |
Mike Frysinger | 1970da0 | 2013-05-02 15:35:40 -0400 | [diff] [blame] | 78 | |
Dmitry V. Levin | 318b0dd | 2013-05-02 00:44:57 +0000 | [diff] [blame] | 79 | exit 0 |