66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/bin/bash
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Redistribution and use in source and binary forms, with or without modification,
							 | 
						||
| 
								 | 
							
								# are permitted provided that the following conditions are met:
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# 1. Redistributions of source code must retain the above copyright notice, this list of
							 | 
						||
| 
								 | 
							
								#    conditions and the following disclaimer.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# 2. Redistributions in binary form must reproduce the above copyright notice, this list
							 | 
						||
| 
								 | 
							
								#    of conditions and the following disclaimer in the documentation and/or other materials
							 | 
						||
| 
								 | 
							
								#    provided with the distribution.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# 3. Neither the name of the copyright holder nor the names of its contributors may be used
							 | 
						||
| 
								 | 
							
								#    to endorse or promote products derived from this software without specific prior written
							 | 
						||
| 
								 | 
							
								#    permission.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
							 | 
						||
| 
								 | 
							
								# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
							 | 
						||
| 
								 | 
							
								# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
							 | 
						||
| 
								 | 
							
								# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
							 | 
						||
| 
								 | 
							
								# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
							 | 
						||
| 
								 | 
							
								# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
							 | 
						||
| 
								 | 
							
								# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
							 | 
						||
| 
								 | 
							
								# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
							 | 
						||
| 
								 | 
							
								# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
							 | 
						||
| 
								 | 
							
								# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
							 | 
						||
| 
								 | 
							
								# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Description: The script is used to calculate the memory size that the specified shared library
							 | 
						||
| 
								 | 
							
								# will occupy when loading to the RAM.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								READELF=readelf
							 | 
						||
| 
								 | 
							
								RM=rm
							 | 
						||
| 
								 | 
							
								SIZE=0x0
							 | 
						||
| 
								 | 
							
								SIZE_ALL=0x0
							 | 
						||
| 
								 | 
							
								SIZE_MAX=0
							 | 
						||
| 
								 | 
							
								TMP_FILE=tmp.txt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ $# -lt 1 ]; then
							 | 
						||
| 
								 | 
							
								    echo "Usage: ./so_parse lib.so"
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								parse_line()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    MEM_SIZE=$(echo $1 | awk '{print $6}')
							 | 
						||
| 
								 | 
							
								    echo ${MEM_SIZE}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								${READELF} -l $1 | while read line; do
							 | 
						||
| 
								 | 
							
								    HEAD_STRING=$(echo ${line} | awk '{print $1}')
							 | 
						||
| 
								 | 
							
								    if [[ "${HEAD_STRING}" == *"LOAD"* ]]; then
							 | 
						||
| 
								 | 
							
								        SIZE=`parse_line "${line}"`
							 | 
						||
| 
								 | 
							
								        SIZE=`echo ${SIZE}`
							 | 
						||
| 
								 | 
							
								        SIZE_ALL=$((SIZE_ALL+SIZE))
							 | 
						||
| 
								 | 
							
								    fi
							 | 
						||
| 
								 | 
							
								    echo ${SIZE_ALL} >> ${TMP_FILE}
							 | 
						||
| 
								 | 
							
								done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NEED_SIZE=`tail -n 1 ${TMP_FILE}`
							 | 
						||
| 
								 | 
							
								echo "${NEED_SIZE} bytes memory to reserve for $1!"
							 | 
						||
| 
								 | 
							
								${RM} -f ${TMP_FILE}
							 | 
						||
| 
								 | 
							
								
							 |