mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-03 04:01:43 +08:00
70 lines
1.7 KiB
Bash
Executable File
70 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
# Script to validate NaCl binaries after linking.
|
|
|
|
# Copyright (C) 2015-2016 Free Software Foundation, Inc.
|
|
# This file is part of the GNU C Library.
|
|
|
|
# The GNU C Library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
|
# The GNU C Library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with the GNU C Library; if not, see
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
# See sysdeps/nacl/Makefile for how this script is invoked.
|
|
READELF="$1"
|
|
binary="$2"
|
|
|
|
if [ -z "$NACL_SDK_ROOT" ]; then
|
|
echo >&2 "$0: NACL_SDK_ROOT must be set in the environment"
|
|
exit 77
|
|
fi
|
|
|
|
ncval="${NACL_SDK_ROOT}/tools/ncval"
|
|
|
|
if [ ! -x "$ncval" ]; then
|
|
echo >&2 "$0: No ncval binary in $ncval"
|
|
exit 77
|
|
fi
|
|
|
|
"${READELF}" -Wl "$binary" | awk '
|
|
BEGIN { saw_load = saw_text = 0 }
|
|
$1 == "LOAD" {
|
|
saw_load = 1;
|
|
if (/ R.E /) saw_code = 1;
|
|
}
|
|
END {
|
|
exit (saw_code ? 11 : saw_load ? 22 : 1);
|
|
}
|
|
'
|
|
case $? in
|
|
11)
|
|
# We saw a code segment, so we can try ncval.
|
|
;;
|
|
22)
|
|
# We saw LOAD segments but none of them were code.
|
|
echo >&2 "+++ No code: $binary"
|
|
exit 0
|
|
;;
|
|
*)
|
|
# Something funny going on.
|
|
echo >&2 "*** Failed to analyze: $binary"
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
if "$ncval" "$binary"; then
|
|
echo >&2 "+++ Validated: $binary"
|
|
exit 0
|
|
else
|
|
echo >&2 "*** Validation failed: $binary"
|
|
exit 2
|
|
fi
|