--- /dev/null
+#!/usr/bin/env bash
+
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+
+declare -A nm_lookup
+
+kbin="$1"
+
+nm_out=($(nm -l "${kbin}" | awk '$3 ~ /^__lga*/ {print $3 "," $4}'))
+
+for line in "${nm_out[@]}"
+do
+ parts=(${line//,/ })
+ if [ "${parts[1]}" != "" ]; then
+ path=(${parts[1]//:/ })
+ relative=$(realpath -s --relative-to="${SCRIPT_DIR}/.." "${path[0]}")
+ nm_lookup["${parts[0]}"]="${relative}"
+ fi
+done
+
+objdump_out=($(objdump -t -j .lga "${kbin}" | grep .lga | awk '!($NF ~ /_start$|_end$|_ldorder$/) {print $NF}'))
+
+list=()
+dev_list=()
+init_list=()
+sysmap_list=()
+init_prefix="lunainit_"
+sysmap_prefix="twiplugin_inits_"
+devdefs_prefix="devdefs_"
+fs_prefix="fs_"
+
+for line in "${objdump_out[@]}"
+do
+ loc=${nm_lookup["$line"]}
+ if [ "$loc" == "" ]; then
+ continue
+ fi
+
+ type="unknown"
+ line=$(echo "$line" | awk '{ sub(/^__lga_/, ""); print }')
+
+ if [[ $line == $init_prefix* ]]; then
+ line=$(echo "$line" | awk "{ sub(/^${init_prefix}/, \"\"); print }")
+ init_list+=("$line $loc")
+ type="lunainit"
+ fi
+
+ if [[ $line == $sysmap_prefix* ]]; then
+ line=$(echo "$line" | awk "{ sub(/^${sysmap_prefix}/, \"\"); print }")
+ sysmap_list+=("$line $loc")
+ type="twiplugin"
+ fi
+
+ if [[ $line == $fs_prefix* ]]; then
+ line=$(echo "$line" | awk "{ sub(/^${fs_prefix}/, \"\"); print }")
+ sysmap_list+=("$line $loc")
+ type="fs"
+ fi
+
+ if [[ $line == $devdefs_prefix* ]]; then
+ line=$(echo "$line" | awk "{ sub(/^${devdefs_prefix}/, \"\"); print }")
+ type="devdefs"
+ fi
+
+ line=$(echo "$line" | awk "{ sub(/_on_[a-z]+$/, \"\"); print }")
+ list+=("$line $loc")
+
+ echo "| $type | \`$line\` | $loc |"
+done
+