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 16if [ ${#} -ne 2 ] ; then 17 echo "usage: ${0} LAST_SYMBOL MACH_O_FILE" >& 2 18 exit 1 19fi 20 21LAST_SYMBOL=${1} 22MACH_O_FILE=${2} 23 24SYMBOLS=$(nm -fgjn -s __TEXT __text "${MACH_O_FILE}") 25if [ ${?} -ne 0 ] || [ -z "${SYMBOLS}" ] ; then 26 echo "${0}: no symbols in ${MACH_O_FILE}" >& 2 27 exit 1 28fi 29 30LAST_SYMBOLS=$(grep -A 100 -Fx "${LAST_SYMBOL}" <<< "${SYMBOLS}") 31if [ ${?} -ne 0 ] || [ -z "${LAST_SYMBOLS}" ] ; then 32 echo "${0}: symbol ${LAST_SYMBOL} not found in ${MACH_O_FILE}" >& 2 33 exit 1 34fi 35 36UNORDERED_SYMBOLS=$(grep -Fvx "${LAST_SYMBOL}" <<< "${LAST_SYMBOLS}") 37if [ ${?} -eq 0 ] || [ -n "${UNORDERED_SYMBOLS}" ] ; then 38 echo "${0}: unordered symbols in ${MACH_O_FILE}:" >& 2 39 echo "${UNORDERED_SYMBOLS}" >& 2 40 exit 1 41fi 42 43exit 0 44