| #!/bin/sh |
| # |
| # Copyright (C) 2021 Free Software Foundation, Inc. |
| # |
| # This file is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; see the file COPYING3. If not see |
| # <http://www.gnu.org/licenses/>. |
| |
| # |
| # CHK_LIBC_OBJ -- a script to scan the .o's in an output directory, |
| # which is one of ../{intel-S2,sparc-S2,intel-Linux,sparc-Linux} |
| # |
| # usage: cd to the output directory, and invoke ../src/CHK_LIBC_OBJ |
| |
| |
| check_obj() { |
| logF="nm.`basename $1`.log" |
| if [ `uname` = 'Linux' ]; then |
| nm $1 | grep -v GLIBC_ > ${logF} |
| else |
| nm $1 > ${logF} |
| fi |
| |
| FUNC_LIST="strcpy strlcpy strncpy strcat strlcat strncat strncmp strlen \ |
| strerror strchr strrchr strpbrk strstr strtok strtok_r \ |
| printf fprintf sprintf snprintf asprintf wsprintf \ |
| vprintf vfprintf vsprintf vsnprintf vasprintf \ |
| memset memcmp memcpy strtol strtoll strtoul strtoull \ |
| getcpuid calloc malloc free strdup" |
| res=0 |
| echo " -- Checking Object file '$1' for functions from libc" |
| for j in `echo ${FUNC_LIST}` ; do |
| grep -w ${j} ${logF} | grep UNDEF> grep.log 2>&1 |
| if [ $? -eq 0 ]; then |
| grep -w ${j} ${logF} |
| res=1 |
| fi |
| done |
| return ${res} |
| } |
| |
| STATUS=0 |
| |
| for i in *.o ; do |
| echo "" |
| check_obj ${i} |
| res=$? |
| if [ ${res} -eq 0 ]; then |
| echo "Object file ${i} does not reference functions in libc" |
| else |
| echo "======Object file: ${i} DOES reference functions in libc" |
| fi |
| if [ ${STATUS} -eq 0 ]; then |
| STATUS=${res} |
| fi |
| done |
| |
| for i in *.so ; do |
| echo "" |
| check_obj ${i} |
| res=$? |
| if [ ${res} -eq 0 ]; then |
| echo "Object file ${i} does not reference functions in libc" |
| else |
| echo "======Object file: ${i} DOES reference functions in libc" |
| fi |
| if [ ${STATUS} -eq 0 ]; then |
| STATUS=${res} |
| fi |
| done |
| |
| exit $STATUS |