Add half-hearted support for Clang, because its `blocks' are deficient.
[finally] / examine-binary
CommitLineData
d58b8198
MW
1#! /bin/sh -e
2
3echo "1..1"
4env | sort | sed 's/^/# /'
5
6check_exe () {
7 tid=$1 exe=$2
8 if ! [ -f $exe ]; then
9 echo "ok $tid # skip executable not found"; return; fi
10 objty=$(objdump -f $exe | sed -n '/^.*: *file format \(.*\)/s//\1/p')
11 echo "# $exe object type $objty"
12 case $objty in
13 elf32-* | elf64-*)
14 if f=$(objdump -p $exe |
15 sed -n '/^ *STACK / { n; s/^.*flags *\([-rwx]*\).*/\1/p; }')
16 then
17 echo "# STACK segment flags $f"
18 case $f in
19 rw-) echo "ok $tid stack not executable" ;;
20 rwx) echo "not ok $tid executable stack" ;;
21 *) echo "not ok $tid unexpected stack-segment flags" ;;
22 esac
23 else
24 echo "not ok $tid failed to find stack-segment flags"
25 fi
26 ;;
27 pei-x86-64)
28 if nm $exe | grep __enable_execute_stack; then
29 echo "not ok $tid # found call to __enable_execute_stack"
30 else
31 echo "ok $tid # stack maybe not executable"
32 fi
33 ;;
34 esac
35}
36
37check_exe 1 finally-test