#!/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 # . # 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