3 # Copyright (c) 2009 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
7 # Verifies that no global text symbols are present in a Mach-O file
8 # (MACH_O_FILE) at an address higher than the address of a specific symbol
9 # (LAST_SYMBOL). If LAST_SYMBOL is not found in MACH_O_FILE or if symbols
10 # are present with addresses higher than LAST_SYMBOL's address, an error
11 # message is printed to stderr, and the script will exit nonzero.
13 # This script can be used to verify that all of the global text symbols in
14 # a Mach-O file are accounted for in an order file.
16 if [ ${#} -ne 2 ] ; then
17 echo "usage: ${0} LAST_SYMBOL MACH_O_FILE" >& 2
24 SYMBOLS
=$
(nm
-fgjn -s __TEXT __text
"${MACH_O_FILE}")
25 if [ ${?} -ne 0 ] ||
[ -z "${SYMBOLS}" ] ; then
26 echo "${0}: no symbols in ${MACH_O_FILE}" >& 2
30 LAST_SYMBOLS
=$
(grep -A 100 -Fx "${LAST_SYMBOL}" <<< "${SYMBOLS}")
31 if [ ${?} -ne 0 ] ||
[ -z "${LAST_SYMBOLS}" ] ; then
32 echo "${0}: symbol ${LAST_SYMBOL} not found in ${MACH_O_FILE}" >& 2
36 UNORDERED_SYMBOLS
=$
(grep -Fvx "${LAST_SYMBOL}" <<< "${LAST_SYMBOLS}")
37 if [ ${?} -eq 0 ] ||
[ -n "${UNORDERED_SYMBOLS}" ] ; then
38 echo "${0}: unordered symbols in ${MACH_O_FILE}:" >& 2
39 echo "${UNORDERED_SYMBOLS}" >& 2