1*cf84ac9aSAndroid Build Coastguard Worker#!/bin/sh 2*cf84ac9aSAndroid Build Coastguard Worker 3*cf84ac9aSAndroid Build Coastguard Worker# Check how strace -e abbrev=set, -e raw=set, -e trace=set, 4*cf84ac9aSAndroid Build Coastguard Worker# and -e verbose=set work. 5*cf84ac9aSAndroid Build Coastguard Worker 6*cf84ac9aSAndroid Build Coastguard Worker. "${srcdir=.}/init.sh" 7*cf84ac9aSAndroid Build Coastguard Worker 8*cf84ac9aSAndroid Build Coastguard Workerrun_prog ../umovestr 9*cf84ac9aSAndroid Build Coastguard Workerpattern_abbrev_verbose='execve("\.\./umovestr", \["\.\./umovestr"\], 0x[[:xdigit:]]* /\* [[:digit:]]* vars \*/) = 0' 10*cf84ac9aSAndroid Build Coastguard Workerpattern_nonabbrev_verbose='execve("\.\./umovestr", \["\.\./umovestr"\], \[".*\"\(\.\.\.\)\?\]) = 0' 11*cf84ac9aSAndroid Build Coastguard Workerpattern_nonverbose='execve("\.\./umovestr", 0x[[:xdigit:]]*, 0x[[:xdigit:]]*) = 0' 12*cf84ac9aSAndroid Build Coastguard Workerpattern_raw='execve(0x[[:xdigit:]]*, 0x[[:xdigit:]]*, 0x[[:xdigit:]]*) = 0' 13*cf84ac9aSAndroid Build Coastguard Worker 14*cf84ac9aSAndroid Build Coastguard Workercheck_output_mismatch() 15*cf84ac9aSAndroid Build Coastguard Worker{ 16*cf84ac9aSAndroid Build Coastguard Worker local pattern 17*cf84ac9aSAndroid Build Coastguard Worker pattern="$1"; shift 18*cf84ac9aSAndroid Build Coastguard Worker run_strace "$@" ../umovestr 19*cf84ac9aSAndroid Build Coastguard Worker LC_ALL=C grep -x "$pattern" "$LOG" > /dev/null || { 20*cf84ac9aSAndroid Build Coastguard Worker printf '%s\n%s\n' \ 21*cf84ac9aSAndroid Build Coastguard Worker 'Failed patterns of expected output:' "$pattern" 22*cf84ac9aSAndroid Build Coastguard Worker dump_log_and_fail_with "$STRACE $args output mismatch" 23*cf84ac9aSAndroid Build Coastguard Worker } 24*cf84ac9aSAndroid Build Coastguard Worker} 25*cf84ac9aSAndroid Build Coastguard Worker 26*cf84ac9aSAndroid Build Coastguard Workercheck_output_mismatch "$pattern_abbrev_verbose" -e execve 27*cf84ac9aSAndroid Build Coastguard WorkerLC_ALL=C grep -v -x "$pattern_abbrev_verbose" "$LOG" | 28*cf84ac9aSAndroid Build Coastguard WorkerLC_ALL=C grep '^[[:alnum:]_]*(' > /dev/null && 29*cf84ac9aSAndroid Build Coastguard Worker dump_log_and_fail_with "$STRACE $args unexpected output" 30*cf84ac9aSAndroid Build Coastguard Worker 31*cf84ac9aSAndroid Build Coastguard Workercheck_output_mismatch "$pattern_abbrev_verbose" -e trace=%process 32*cf84ac9aSAndroid Build Coastguard WorkerLC_ALL=C grep '^chdir' "$LOG" > /dev/null && 33*cf84ac9aSAndroid Build Coastguard Worker dump_log_and_fail_with "$STRACE $args unexpected output" 34*cf84ac9aSAndroid Build Coastguard Worker 35*cf84ac9aSAndroid Build Coastguard Workerrun_strace -e 42 ../umovestr 36*cf84ac9aSAndroid Build Coastguard WorkerLC_ALL=C grep '^[[:alnum:]_]*(' "$LOG" > /dev/null && 37*cf84ac9aSAndroid Build Coastguard Worker dump_log_and_fail_with "$STRACE $args unexpected output" 38*cf84ac9aSAndroid Build Coastguard Worker 39*cf84ac9aSAndroid Build Coastguard Workerrun_strace -e/ -e42 ../umovestr 40*cf84ac9aSAndroid Build Coastguard WorkerLC_ALL=C grep '^[[:alnum:]_]*(' "$LOG" > /dev/null && 41*cf84ac9aSAndroid Build Coastguard Worker dump_log_and_fail_with "$STRACE $args unexpected output" 42*cf84ac9aSAndroid Build Coastguard Worker 43*cf84ac9aSAndroid Build Coastguard Workerfor a in execve \!chdir /. all \!none \ 44*cf84ac9aSAndroid Build Coastguard Worker file process \!desc \!ipc \!memory \!network \!signal; do 45*cf84ac9aSAndroid Build Coastguard Worker check_output_mismatch \ 46*cf84ac9aSAndroid Build Coastguard Worker "$pattern_abbrev_verbose" -e abbrev="$a" -e execve 47*cf84ac9aSAndroid Build Coastguard Worker check_output_mismatch \ 48*cf84ac9aSAndroid Build Coastguard Worker "$pattern_raw" -a22 -e raw="$a" -e execve 49*cf84ac9aSAndroid Build Coastguard Worker check_output_mismatch \ 50*cf84ac9aSAndroid Build Coastguard Worker "$pattern_abbrev_verbose" -e verbose="$a" -e execve 51*cf84ac9aSAndroid Build Coastguard Workerdone 52*cf84ac9aSAndroid Build Coastguard Worker 53*cf84ac9aSAndroid Build Coastguard Workerfor a in \!execve chdir 42 \!all none \ 54*cf84ac9aSAndroid Build Coastguard Worker \!file \!process desc ipc memory network signal; do 55*cf84ac9aSAndroid Build Coastguard Worker check_output_mismatch \ 56*cf84ac9aSAndroid Build Coastguard Worker "$pattern_nonabbrev_verbose" -e abbrev="$a" -e execve 57*cf84ac9aSAndroid Build Coastguard Worker check_output_mismatch \ 58*cf84ac9aSAndroid Build Coastguard Worker "$pattern_abbrev_verbose" -e raw="$a" -e execve 59*cf84ac9aSAndroid Build Coastguard Worker check_output_mismatch \ 60*cf84ac9aSAndroid Build Coastguard Worker "$pattern_nonverbose" -a31 -e verbose="$a" -e execve 61*cf84ac9aSAndroid Build Coastguard Workerdone 62*cf84ac9aSAndroid Build Coastguard Worker 63*cf84ac9aSAndroid Build Coastguard Workerexit 0 64