aboutsummaryrefslogtreecommitdiff
path: root/scripts/undefsym.sh
blob: b9ec332e958db776e3d92fed23b82b3ebe2eca54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /usr/bin/env bash

# Before a shared module's DSO is produced, a static library is built for it
# and passed to this script.  The script generates -Wl,-u options to force
# the inclusion of symbol from libqemuutil.a if the shared modules need them,
# This is necessary because the modules may use functions not needed by the
# executable itself, which would cause the function to not be linked in.
# Then the DSO loading would fail because of the missing symbol.

if test $# -le 2; then
  exit 0
fi

NM=$1
staticlib=$2
shift 2
# Find symbols defined in static libraries and undefined in shared modules
comm -12 \
  <( $NM -P -g $staticlib | awk '$2!="U"{print "-Wl,-u," $1}' | sort -u) \
  <( $NM -P -g "$@" | awk '$2=="U"{print "-Wl,-u," $1}' | sort -u)