-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgen_syms.sh
executable file
·34 lines (30 loc) · 964 Bytes
/
gen_syms.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
syms= files=
if [ "${#}" -gt 0 ]; then
# B, D, R, T but not a, r, or t
syms=$(nm ${@} \
| grep "\<[BDRT]\>" \
| grep -v "sym_table_lookup" \
| awk '{if(NF==3){print $1":"$3}}')
files=$(nm ${@} \
| grep "_mem_fs_.*_start" \
| awk '{if(NF==3){print $1":"$3}}' \
| sed 's/:_mem_fs_\(.*\)_start$/:\1/' \
| sed 's/_DOT_/./g' \
| sed 's/_SLASH_/\//g')
fsizes=$(nm ${@} \
| grep "_mem_fs_.*_size" \
| awk '{if(NF==3){print $1":"$3}}' \
| sed 's/:_mem_fs_\(.*\)_size$/:\1/' \
| sed 's/_DOT_/./g' \
| sed 's/_SLASH_/\//g')
fi
cat << EOF
#include "sym_table.h"
struct sym_table_t sym_table[] = {
$(for s in $syms; do echo " {\"${s#*:}\", (void*)0x${s%%:*}},"; done)
$(for s in $files; do echo " {\"${s#*:}\", (void*)0x${s%%:*}},"; done)
$(for s in $fsizes; do echo " {\"${s#*:}_size\", (void*)0x${s%%:*}},"; done)
{NULL,NULL}
};
EOF