@@ -35,27 +35,30 @@ warn() {
35
35
printf ' warning: %s\n' " $* " >&2
36
36
}
37
37
38
- if [ " $( stat -c %s " $symbols " || echo 0) " -gt 0 ]; then
39
- warn " Existing symbols for ${dir} would be overwritten! Quitting."
40
- exit 1
41
- fi
42
-
43
38
# Ensure the disassembled file exists
44
39
make " $assembly "
45
40
46
41
# Add ARM interleaved instruction/immediate data marker
47
42
if test " $ARCH " = " arm" ; then
48
- grep -m1 ' text$' " $sections " | sed ' s/text/$a/' > " $symbols "
43
+ grep -m1 ' text$' " $sections " | sed ' s/text/$a/' >> " $symbols "
49
44
fi
50
45
46
+ # Merge the symbols
47
+ sort -go " $symbols " -u " $symbols "
48
+
51
49
# Add all normally-called functions
52
50
grep " ${CALL_INSN} \s[[:xdigit:]]" " $assembly " |
53
51
sed " s/^.*${CALL_INSN} \s//" |
54
52
sort -gu |
55
- while read -r addr; do
53
+ while read -r addr dummy; do
54
+ { printf " $addr " | grep -q " ^0x" ; } || addr=0x${addr}
55
+ grep -q " $( printf ' ^0x%08x' " $addr " ) " " $symbols " && continue
56
56
printf ' 0x%08x func_%08x\n' " $addr " " $addr "
57
57
done >> " $symbols "
58
58
59
+ # Merge the symbols
60
+ sort -go " $symbols " -u " $symbols "
61
+
59
62
# Update the disassembly
60
63
make " $assembly "
61
64
@@ -65,7 +68,9 @@ if test -n "$TAIL_INSN"; then
65
68
grep " ${TAIL_INSN} \s[[:xdigit:]]" |
66
69
sed " s/^.*${TAIL_INSN} \s\([[:xdigit:]]\+\)\s.*$/0x\1/" |
67
70
sort -gu |
68
- while read -r addr; do
71
+ while read -r addr dummy; do
72
+ { printf " $addr " | grep -q " ^0x" ; } || addr=0x${addr}
73
+ grep -q " $( printf ' ^0x%08x' " $addr " ) " " $symbols " && continue
69
74
printf ' 0x%08x func_%08x\n' " $addr " " $addr "
70
75
done >> " $symbols "
71
76
fi
0 commit comments