AMPI: update nm_globals.sh script 36/4936/5
authorMatthias Diener <mdiener@illinois.edu>
Fri, 1 Feb 2019 23:29:00 +0000 (17:29 -0600)
committerEvan Ramos <evan@hpccharm.com>
Thu, 14 Feb 2019 21:22:36 +0000 (15:22 -0600)
- Support GNU nm and LLVM nm (darwin)
- Only show global, writable symbols
- Point to manual when such symbols are found

Change-Id: I9658a6b152da2579f89410ddb6908896abfa4f50

src/libs/ck-libs/ampi/nm_globals.sh

index 1b7a6feea96f5b92154e48f12abf0519b014fd92..51d477292105f5f759a651c2bfd35fc46dd12f83 100755 (executable)
@@ -3,6 +3,41 @@
 # binary) to produce a list of symbols representing global variables
 # potentially of concern for AMPI from a privatization stand-point
 
-PROG=$1
+if [[ $# -lt 1 ]]; then
+    echo "$(basename $0): Display global writable variables in object files, libraries, and executables"
+    echo "Usage: $0 <file>"
+    exit 2
+fi
 
-nm -C $PROG | egrep ' [BbCDdGgSs] ' | grep -v __ioinit
+symlist=$(nm --format posix --print-file-name --demangle $* | egrep ' [BDGS] ')
+
+if [[ -z $symlist ]]; then
+    echo "No global writable variables in '$*' found."
+    exit 0
+else
+    echo "The following global writable variables in '$*' were found:"
+    echo
+    out="File Type Name\n"
+
+    while read -r loc name type; do
+        loc=$(echo $loc | sed s,:$,,  ) # Remove trailing ':'
+        type=$(echo $type | awk '{print $1}') # Remove addresses
+        out+="$loc $type $name\n"
+    done <<< "$symlist"
+
+    # Print table with variables
+    printf "$out" | column -t -s ' '
+
+    echo
+    echo "Legend:"
+    echo "  B - The symbol is in the uninitialized data section (BSS)."
+    echo "  D - The symbol is in the initialized data section."
+    echo "  G - The symbol is in the initialized data section for small objects."
+    echo "  S - The symbol is in the uninitialized data section for small objects."
+
+    echo
+    echo "To support virtualization and migration, AMPI requires that an application"
+    echo "uses no global variables, or that they are read-only. Please see the section on"
+    echo "\"Global Variable Privatization\" in the AMPI manual for further information."
+    exit 1
+fi