xref: /netbsd-src/external/gpl3/binutils.old/dist/gprofng/libcollector/CHK_LIBC_OBJ (revision c42dbd0ed2e61fe6eda8590caa852ccf34719964)
1#!/bin/sh
2#
3#   Copyright (C) 2021 Free Software Foundation, Inc.
4#
5# This file is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; see the file COPYING3.  If not see
17# <http://www.gnu.org/licenses/>.
18
19#
20# CHK_LIBC_OBJ  -- a script to scan the .o's in an output directory,
21#	which is one of ../{intel-S2,sparc-S2,intel-Linux,sparc-Linux}
22#
23#	usage: cd to the output directory, and invoke ../src/CHK_LIBC_OBJ
24
25
26check_obj() {
27    logF="nm.`basename $1`.log"
28    if [ `uname` = 'Linux' ]; then
29        nm $1 | grep -v GLIBC_ > ${logF}
30    else
31        nm $1 > ${logF}
32    fi
33
34    FUNC_LIST="strcpy strlcpy strncpy strcat strlcat strncat strncmp strlen \
35               strerror strchr strrchr strpbrk strstr strtok strtok_r \
36               printf fprintf sprintf snprintf asprintf  wsprintf \
37               vprintf vfprintf vsprintf vsnprintf vasprintf \
38               memset memcmp memcpy strtol strtoll strtoul strtoull \
39               getcpuid calloc malloc free strdup"
40    res=0
41    echo " -- Checking Object file '$1' for functions from libc"
42    for j in `echo ${FUNC_LIST}` ; do
43        grep -w ${j} ${logF} | grep UNDEF> grep.log 2>&1
44        if [ $? -eq 0 ]; then
45            grep -w ${j} ${logF}
46            res=1
47        fi
48    done
49    return ${res}
50}
51
52STATUS=0
53
54for i in *.o ; do
55    echo ""
56    check_obj ${i}
57    res=$?
58    if [ ${res} -eq 0 ]; then
59	echo "Object file ${i} does not reference functions in libc"
60    else
61	echo "======Object file: ${i} DOES reference functions in libc"
62    fi
63    if [ ${STATUS} -eq 0 ]; then
64	STATUS=${res}
65    fi
66done
67
68for i in *.so ; do
69    echo ""
70    check_obj ${i}
71    res=$?
72    if [ ${res} -eq 0 ]; then
73	echo "Object file ${i} does not reference functions in libc"
74    else
75	echo "======Object file: ${i} DOES reference functions in libc"
76    fi
77    if [ ${STATUS} -eq 0 ]; then
78	STATUS=${res}
79    fi
80done
81
82exit $STATUS
83