• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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