Boot framework rework (#45)
[lunaix-os.git] / lunaix-os / scripts / gather-lga
1 #!/usr/bin/env bash
2
3 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
4
5 declare -A nm_lookup
6
7 kbin="$1"
8
9 nm_out=($(nm -l "${kbin}" | awk '$3 ~ /^__lga*/ {print $3 "," $4}'))
10
11 for line in "${nm_out[@]}"
12 do
13     parts=(${line//,/ })
14     if [ "${parts[1]}" != "" ]; then
15         path=(${parts[1]//:/ })
16         relative=$(realpath -s --relative-to="${SCRIPT_DIR}/.." "${path[0]}")
17         nm_lookup["${parts[0]}"]="${relative}"
18     fi
19 done
20
21 objdump_out=($(objdump -t -j .lga "${kbin}" | grep .lga | awk '!($NF ~ /_start$|_end$|_ldorder$/) {print $NF}'))
22
23 list=()
24 dev_list=()
25 init_list=()
26 sysmap_list=()
27 init_prefix="lunainit_"
28 sysmap_prefix="twiplugin_inits_"
29 devdefs_prefix="devdefs_"
30 fs_prefix="fs_"
31
32 for line in "${objdump_out[@]}"
33 do
34     loc=${nm_lookup["$line"]}
35     if [ "$loc" == "" ]; then
36         continue
37     fi
38     
39     type="unknown"
40     line=$(echo "$line" | awk '{ sub(/^__lga_/, ""); print }')
41
42     if [[ $line == $init_prefix* ]]; then
43         line=$(echo "$line" | awk "{ sub(/^${init_prefix}/, \"\"); print }")
44         init_list+=("$line $loc")
45         type="lunainit"
46     fi
47     
48     if [[ $line == $sysmap_prefix* ]]; then
49         line=$(echo "$line" | awk "{ sub(/^${sysmap_prefix}/, \"\"); print }")
50         sysmap_list+=("$line $loc")
51         type="twiplugin"
52     fi
53
54     if [[ $line == $fs_prefix* ]]; then
55         line=$(echo "$line" | awk "{ sub(/^${fs_prefix}/, \"\"); print }")
56         sysmap_list+=("$line $loc")
57         type="fs"
58     fi
59
60     if [[ $line == $devdefs_prefix* ]]; then
61         line=$(echo "$line" | awk "{ sub(/^${devdefs_prefix}/, \"\"); print }")
62         type="devdefs"
63     fi
64
65     line=$(echo "$line" | awk "{ sub(/_on_[a-z]+$/, \"\"); print }")
66     list+=("$line $loc")
67
68     echo "| $type | \`$line\` | $loc |"
69 done
70