1# Check that the libc.so for all platforms, and all architectures
2# Does not export 'atexit' and '__dso_handle' symbols.
3#
4export ANDROID_NDK_ROOT=$NDK
5
6NDK_BUILDTOOLS_PATH=$NDK/build/tools
7. $NDK/build/tools/prebuilt-common.sh
8echo DEFAULT_ARCHS=$DEFAULT_ARCHS
9
10LIBRARIES=
11for ARCH in $DEFAULT_ARCHS; do
12  LIB=$(cd $NDK && find platforms -name "libc.so" | sed -e 's!^!'$NDK'/!' | grep arch-$ARCH)
13  LIBRARIES=$LIBRARIES" $LIB"
14done
15
16FAILURE=
17COUNT=0
18for LIB in $LIBRARIES; do
19  COUNT=$(( $COUNT + 1 ))
20  echo "Checking: $LIB"
21  readelf -s $LIB | grep -q -F " atexit"
22  if [ $? = 0 ]; then
23    echo "ERROR: $NDK/$LIB exposes 'atexit'!" >&2
24    FAILURE=true
25  fi
26  readelf -s $LIB | grep -q -F " __dso_handle"
27  if [ $? = 0 ]; then
28    echo "ERROR: $NDK/$LIB exposes '__dso_handle'!" >&2
29    FAILURE=true
30  fi
31done
32
33if [ "$COUNT" = 0 ]; then
34  echo "ERROR: Did not find any libc.so in $NDK/platforms!"
35  exit 1
36fi
37
38if [ "$FAILURE" ]; then
39  exit 1
40else
41  echo "All $COUNT libc.so are ok!"
42  exit 0
43fi
44