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