1#!/bin/bash 2 3# Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without modification, 6# are permitted provided that the following conditions are met: 7# 8# 1. Redistributions of source code must retain the above copyright notice, this list of 9# conditions and the following disclaimer. 10# 11# 2. Redistributions in binary form must reproduce the above copyright notice, this list 12# of conditions and the following disclaimer in the documentation and/or other materials 13# provided with the distribution. 14# 15# 3. Neither the name of the copyright holder nor the names of its contributors may be used 16# to endorse or promote products derived from this software without specific prior written 17# permission. 18# 19# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31# Description: The script is used to calculate the memory size that the specified shared library 32# will occupy when loading to the RAM. 33 34READELF=readelf 35RM=rm 36SIZE=0x0 37SIZE_ALL=0x0 38SIZE_MAX=0 39TMP_FILE=tmp.txt 40 41if [ $# -lt 1 ]; then 42 echo "Usage: ./so_parse lib.so" 43 exit 1 44fi 45 46parse_line() 47{ 48 MEM_SIZE=$(echo $1 | awk '{print $6}') 49 echo ${MEM_SIZE} 50} 51 52${READELF} -l $1 | while read line; do 53 HEAD_STRING=$(echo ${line} | awk '{print $1}') 54 if [[ "${HEAD_STRING}" == *"LOAD"* ]]; then 55 SIZE=`parse_line "${line}"` 56 SIZE=`echo ${SIZE}` 57 SIZE_ALL=$((SIZE_ALL+SIZE)) 58 fi 59 echo ${SIZE_ALL} >> ${TMP_FILE} 60done 61 62NEED_SIZE=`tail -n 1 ${TMP_FILE}` 63echo "${NEED_SIZE} bytes memory to reserve for $1!" 64${RM} -f ${TMP_FILE} 65 66