quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

syms.sh (2058B)


      1 #!/bin/sh
      2 #
      3 # Copyright The Mbed TLS Contributors
      4 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
      5 #
      6 # Purpose
      7 #
      8 # Show external links in built libraries (X509 or TLS) or modules. This is
      9 # usually done to list Crypto dependencies or to check modules'
     10 # interdependencies.
     11 #
     12 # Usage:
     13 # - build the library with debug symbols and the config you're interested in
     14 #   (default, full minus MBEDTLS_USE_PSA_CRYPTO, full, etc.)
     15 # - launch this script with 1 or more arguments depending on the analysis' goal:
     16 #     - if only 1 argument is used (which is the name of the used config,
     17 #       ex: full), then the analysis is done on libmbedx509 and libmbedtls
     18 #       libraries by default
     19 #     - if multiple arguments are provided, then modules' names (ex: pk,
     20 #       pkparse, pkwrite, etc) are expected after the 1st one and the analysis
     21 #       will be done on those modules instead of the libraries.
     22 
     23 set -eu
     24 
     25 # list mbedtls_ symbols of a given type in a static library
     26 syms() {
     27     TYPE="$1"
     28     FILE="$2"
     29 
     30     nm "$FILE" | sed -n "s/[0-9a-f ]*${TYPE} \(mbedtls_.*\)/\1/p" | sort -u
     31 }
     32 
     33 # Check if the provided name refers to a module or library and return the
     34 # same path with proper extension
     35 get_file_with_extension() {
     36     BASE=$1
     37     if [ -f $BASE.o ]; then
     38         echo $BASE.o
     39     elif [ -f $BASE.a ]; then
     40         echo $BASE.a
     41     fi
     42 }
     43 
     44 # create listings for the given library
     45 list() {
     46     NAME="$1"
     47     FILE=$(get_file_with_extension "library/${NAME}")
     48     PREF="${CONFIG}-$NAME"
     49 
     50     syms '[TRrD]' $FILE > ${PREF}-defined
     51     syms U $FILE > ${PREF}-unresolved
     52 
     53     diff ${PREF}-defined ${PREF}-unresolved \
     54         | sed -n 's/^> //p' > ${PREF}-external
     55     sed 's/mbedtls_\([^_]*\).*/\1/' ${PREF}-external \
     56         | uniq -c | sort -rn > ${PREF}-modules
     57 
     58     rm ${PREF}-defined ${PREF}-unresolved
     59 }
     60 
     61 CONFIG="${1:-unknown}"
     62 
     63 # List of modules to check is provided as parameters
     64 if [ $# -gt 1 ]; then
     65     shift 1
     66     ITEMS_TO_CHECK="$@"
     67 else
     68     ITEMS_TO_CHECK="libmbedx509 libmbedtls"
     69 fi
     70 
     71 for ITEM in $ITEMS_TO_CHECK; do
     72     list $ITEM
     73 done