summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/check-opcodes82
1 files changed, 24 insertions, 58 deletions
diff --git a/bin/check-opcodes b/bin/check-opcodes
index 9ed2837..c7ab4a9 100755
--- a/bin/check-opcodes
+++ b/bin/check-opcodes
@@ -1,5 +1,8 @@
#!/bin/sh
+# shellcheck disable=SC2086
+
+# shellcheck source=conf/default.conf
. "${0%/*}/../conf/default.conf"
usage( ) {
@@ -8,9 +11,8 @@ usage( ) {
check_opcodes: [ -a <arch> ] <package>
possible optons:
- -h|--help: show this help page
- -v|--verbose: verbose output
- -d|--debug: enable debug output
+ -h|--help: Show this help page
+ -v|--verbose: Verbose output
-a|--architecture: architecture family to check against, one of
i486, i686, pentium4
@@ -19,31 +21,24 @@ EOF
}
VERBOSE=0
+EXIT_CODE=0
log( ) {
if test $VERBOSE = 1; then
- echo $*
- fi
-}
-
-DEBUG=0
-debug( ) {
- if test $DEBUG = 1; then
- echo $*
+ echo "$@"
fi
}
-EXIT_CODE=0
err( ) {
echo "ERROR: $*"
EXIT_CODE=1
}
tmp_dir=$(mktemp -d "${work_dir}/tmp.check-opcodes.XXXXXX")
-trap "rm -rf --one-file-system '${tmp_dir:?}'" EXIT
+trap 'rm -rf --one-file-system "${tmp_dir:?}"' EXIT
ARCH=i686
-while getopts ":va:d-h-:" opt; do
+while getopts ":va:h-:" opt; do
case $opt in
-)
case "$OPTARG" in
@@ -53,9 +48,6 @@ while getopts ":va:d-h-:" opt; do
verbose)
VERBOSE=1
;;
- debug)
- DEBUG=1
- ;;
*)
echo "ERROR: Invalid option: --$OPTARG" >&2
usage
@@ -68,9 +60,6 @@ while getopts ":va:d-h-:" opt; do
v)
VERBOSE=1
;;
- d)
- DEBUG=1
- ;;
a)
ARCH=$OPTARG
;;
@@ -96,52 +85,30 @@ case $ARCH in
i486)
OPCODE_ARGS='-r -a 486 -v'
;;
- i686)
+ i686)
OPCODE_ARGS='-s MMX -s SSE -s SSE2'
;;
pentium4)
OPCODE_ARGS='-s SSE3 -s SSSE3 -s AVX'
;;
- *)
+ *)
echo "ERROR: architecture must currently be one of i486 and i686" >&2
usage
exit 1
esac
-log "Checking package $PACKAGE"
-log "Checking for architecture constraint: $ARCH ($OPCODE_ARGS)"
+log "Checking for architecture: $ARCH ($OPCODE_ARGS)"
bsdtar --no-fflags -x -C $tmp_dir -f $PACKAGE
-for absfile in `find $tmp_dir -type f`; do
- file=`basename $absfile`
- ext=`echo $absfile | rev | cut -f 1 -d . | rev`
-
- case "$file" in
- .PKGINFO|.BUILDINFO|.MTREE)
- debug "Skipping $file (internal Archlinux file)"
- continue
- ;;
- *.hpp|*.h|*.c|*.cpp|*.html|*.mo|*.po|*.svg|*.png|*.pl|*.pod|*.vim|*.js|*.cmake|*.xml|*.txt|*.rst|*.in|*.conf|*.[0123456789])
- debug "Skipping $file (extension is .$ext)"
- continue
- ;;
- *)
- # we cannot really ignore the file by extension
- esac
-
- mimetype=`file -i $absfile | cut -f 2- -d : | cut -f 1 -d ';' | tr -d ' '`
- case "$mimetype" in
- application/x-sharedlib)
- debug "Checking library/binary: $file"
- ;;
- *)
- debug "Skipping $file (MIME type is $mimetype)"
- continue
- ;;
- esac
-
+# shellcheck disable=SC2044
+for absfile in $(find $tmp_dir -name '*.so*' -type f); do
+ file=$(basename $absfile)
+ log "Checking shared library: $file"
+ readelf -a $absfile > $tmp_dir/$file.elf
objdump -f $absfile > $tmp_dir/$file.objdump
- arch=`grep ^architecture $tmp_dir/$file.objdump | sed 's/^architecture: //g' | cut -f 1 -d ,`
+ file $absfile > $tmp_dir/$file.file
+
+ arch=$(grep ^architecture $tmp_dir/$file.objdump | sed 's/^architecture: //g' | cut -f 1 -d ,)
case $arch in
i386:x86-64)
arch='x86_64'
@@ -153,10 +120,9 @@ for absfile in `find $tmp_dir -type f`; do
arch='unknown'
;;
esac
- debug " Objdump architecture: $arch"
+ log " Objdump architecture: $arch"
- readelf -a $absfile > $tmp_dir/$file.elf 2> $tmp_dir/$file.elferr
- archelf=`grep '^ \+Class' $tmp_dir/$file.elf | cut -f 2 -d : | tr -d ' '`
+ archelf=$(grep '^ \+Class' $tmp_dir/$file.elf | cut -f 2 -d : | tr -d ' ')
case $archelf in
ELF64)
archelf='x86_64'
@@ -168,7 +134,7 @@ for absfile in `find $tmp_dir -type f`; do
archelf='unknown'
;;
esac
- debug " Readelf architecture: $archelf"
+ log " Readelf architecture: $archelf"
if test $arch != $archelf; then
err "$file ambigous architecture information (objdump: $arch, ELF: $archelf)"
@@ -180,7 +146,7 @@ for absfile in `find $tmp_dir -type f`; do
fi
objdump -M intel -d $absfile > $tmp_dir/$file.asm
- bad_opcodes=`cat $tmp_dir/$file.asm | ${base_dir}/bin/opcode $OPCODE_ARGS -m 1 | wc -l`
+ bad_opcodes=$(${base_dir}/bin/opcode $OPCODE_ARGS -m 1 < $tmp_dir/$file.asm | wc -l)
if test $bad_opcodes != 0; then
case $ARCH in
i486)