Skip to content

Commit 851eac0

Browse files
committed
Add support for riscv64 blobs
1 parent cb5e7de commit 851eac0

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

Makefile

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33
# See LICENSE in the project directory for license terms.
44
#
55

6+
ARCH_arisc = or1k
7+
ARCH_nbrom = arm
8+
ARCH_rvbrom = riscv64
9+
ARCH_sbrom = arm
10+
611
CROSS_aarch64 = aarch64-linux-musl-
712
CROSS_arm = arm-linux-musleabi-
813
CROSS_or1k = or1k-linux-musl-
14+
CROSS_riscv64 = riscv64-linux-musl-
915

1016
BLOB ?= */*
1117
BLOBS = $(sort $(wildcard $(BLOB)/blob.hex))
@@ -16,7 +22,7 @@ OUTPUT = $(foreach d,$(DIRS),$(d)annotated.s $(d)blob.s $(d)callgraph.svg)
1622
SECTIONS = $(addsuffix sections,$(DIRS))
1723
SYMBOLS = $(addsuffix symbols,$(DIRS))
1824

19-
arch = $(if $(findstring arisc,$(lastword $(1:/= ))),or1k,arm)
25+
arch = $(ARCH_$(firstword $(subst _, ,$(notdir $1))))
2026
cross_compile = $(CROSS_$(call arch,$(1)))
2127
env = env ARCH=$(call arch,$(1)) CROSS_COMPILE=$(call cross_compile,$(1))
2228

scripts/bin2elf

+5-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ case "$ARCH" in
2121
*) WORDSIZE=32 ;;
2222
esac
2323
case "$ARCH" in
24-
arm) BFDNAME=elf${WORDSIZE}-${ENDIANNESS}${ARCH} ;;
24+
riscv*) ARCH=riscv ;;
25+
esac
26+
case "$ARCH" in
27+
arm|riscv)
28+
BFDNAME=elf${WORDSIZE}-${ENDIANNESS}${ARCH} ;;
2529
*) BFDNAME=elf${WORDSIZE}-${ARCH} ;;
2630
esac
2731

scripts/callgraph

+12-9
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@ CROSS_COMPILE=${CROSS_COMPILE:-${ARCH}-linux-musl-}
1313
# Generated, but might need adjustment
1414
case "$ARCH" in
1515
arm)
16-
CALL_INSN=bl
17-
TAIL_INSN=b
16+
CALL_INSN="bl "
17+
TAIL_INSN="b "
1818
;;
1919
or1k)
20-
CALL_INSN=l.jal
21-
TAIL_INSN=l.j
20+
CALL_INSN="l.jal "
21+
TAIL_INSN="l.j "
2222
;;
23+
riscv*)
24+
CALL_INSN="jal ra,"
25+
TAIL_INSN="j "
2326
esac
2427

2528
# Command-line parameters
@@ -39,17 +42,17 @@ strict digraph calls {
3942
EOF
4043
grep -F -e '>:' -e "$CALL_INSN" -e "$TAIL_INSN" "$input_file" |
4144
while read -r line; do
42-
if [[ $line =~ ^[[:xdigit:]]{8}\ \<([[:alnum:]_]+)\>:$ ]]; then
45+
if [[ $line =~ ^[[:xdigit:]]{8,16}\ \<([[:alnum:]_]+)\>:$ ]]; then
4346
caller=${BASH_REMATCH[1]}
4447
[[ $caller =~ ^__.+si3$ || $caller =~ ^nop_ ]] && continue
4548
printf ' %s\n' "$caller" >> "$output_file"
46-
elif [[ $line =~ ^.*\ ${CALL_INSN}\ +[[:xdigit:]]+\ \<([[:alnum:]_]+)\>$ ]]; then
49+
elif [[ $line =~ ^.*\ ${CALL_INSN}+[[:xdigit:]]+\ \<([[:alnum:]_]+)\>$ ]]; then
4750
callee=${BASH_REMATCH[1]}
48-
[[ $callee =~ ^__.+si3$ || $callee =~ printf$ ]] && continue
51+
[[ $callee =~ ^__.+si3$ || $callee =~ printf$ || $callee =~ pwrstate$ ]] && continue
4952
printf ' %s -> %s\n' "$caller" "$callee" >> "$output_file"
50-
elif [[ $line =~ ^.*\ ${TAIL_INSN}\ +[[:xdigit:]]+\ \<([[:alnum:]_]+)\>$ ]]; then
53+
elif [[ $line =~ ^.*\ ${TAIL_INSN}+[[:xdigit:]]+\ \<([[:alnum:]_]+)\>$ ]]; then
5154
callee=${BASH_REMATCH[1]}
52-
[[ $callee =~ ^__.+si3$ || $callee =~ printf$ ]] && continue
55+
[[ $callee =~ ^__.+si3$ || $callee =~ printf$ || $callee =~ pwrstate$ ]] && continue
5356
printf ' %s -> %s [style = dashed]\n' "$caller" "$callee" >> "$output_file"
5457
fi
5558
done

0 commit comments

Comments
 (0)