Home | History | Annotate | Download | only in mac
      1 #!/bin/bash
      2 
      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.
      6 
      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.
     12 #
     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.
     15 
     16 if [ ${#} -ne 2 ] ; then
     17   echo "usage: ${0} LAST_SYMBOL MACH_O_FILE" >& 2
     18   exit 1
     19 fi
     20 
     21 LAST_SYMBOL=${1}
     22 MACH_O_FILE=${2}
     23 
     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
     27   exit 1
     28 fi
     29 
     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
     33   exit 1
     34 fi
     35 
     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
     40   exit 1
     41 fi
     42 
     43 exit 0
     44