Skip to content

Commit c978151

Browse files
committed
Added chapter on profiling (via sampling). Added a profiler utility.
Fixed stylistic and minor issues found by CppCheck.
1 parent 622ad6b commit c978151

34 files changed

+2037
-281
lines changed

‎BlackMagicProbe.pdf‎

-169 KB
Binary file not shown.

‎doc/bmprofile-top.png‎

18.2 KB
Loading

‎source/Makefile.linux‎

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ else
6060
LFLAGS += -g
6161
endif
6262

63-
6463
# -------------------------------------------------------------
6564
# Inference rules
6665
# -------------------------------------------------------------
@@ -78,23 +77,32 @@ OBJLIST_BMDEBUG = bmdebug.o armdisasm.o bmcommon.o bmp-scan.o bmp-script.o \
7877
nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
7978
nuklear_tooltip.o rs232.o serialmon.o specialfolder.o svd-support.o \
8079
swotrace.o tcpip.o xmltractor.o decodectf.o parsetsdl.o \
81-
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o \
82-
findfont.o lodepng.o
80+
findfont.o lodepng.o \
81+
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o
8382

8483
OBJLIST_BMFLASH = bmflash.o bmcommon.o bmp-scan.o bmp-script.o bmp-support.o \
8584
cksum.o crc32.o elf.o gdb-rsp.o guidriver.o ident.o minIni.o \
8685
nuklear_mousepointer.o nuklear_style.o nuklear_tooltip.o \
8786
picoro.o rs232.o specialfolder.o tcpip.o xmltractor.o \
88-
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o \
89-
findfont.o lodepng.o
87+
findfont.o lodepng.o \
88+
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o
89+
90+
OBJLIST_BMPROFILE = bmprofile.o bmcommon.o bmp-scan.o bmp-script.o \
91+
bmp-support.o crc32.o decodectf.o demangle.o dwarf.o \
92+
elf.o gdb-rsp.o guidriver.o mcu-info.o minIni.o \
93+
parsetsdl.o picoro.o rs232.o specialfolder.o swotrace.o \
94+
tcpip.o xmltractor.o nuklear_mousepointer.o \
95+
nuklear_splitter.o nuklear_style.o nuklear_tooltip.o \
96+
findfont.o lodepng.o \
97+
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o
9098

9199
OBJLIST_BMTRACE = bmtrace.o bmcommon.o bmp-scan.o bmp-script.o bmp-support.o \
92100
crc32.o demangle.o dwarf.o elf.o gdb-rsp.o guidriver.o mcu-info.o \
93-
minIni.o nuklear_splitter.o nuklear_style.o nuklear_mousepointer.o \
101+
minIni.o nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
94102
nuklear_tooltip.o picoro.o rs232.o specialfolder.o swotrace.o \
95103
tcpip.o xmltractor.o decodectf.o parsetsdl.o \
96-
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o \
97-
findfont.o lodepng.o
104+
findfont.o lodepng.o \
105+
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o
98106

99107
OBJLIST_BMSCAN = bmscan.o bmp-scan.o tcpip.o
100108

@@ -103,11 +111,12 @@ OBJLIST_POSTLINK = elf-postlink.o elf.o
103111
OBJLIST_TRACEGEN = tracegen.o parsetsdl.o
104112

105113

106-
project: bmdebug bmflash bmtrace bmscan elf-postlink tracegen
114+
project: bmdebug bmflash bmprofile bmtrace bmscan elf-postlink tracegen
107115

108116
depend :
109117
makedepend -b -fmakefile.dep $(OBJLIST_BMDEBUG:.o=.c) $(OBJLIST_BMFLASH:.o=.c) \
110-
$(OBJLIST_BMTRACE:.o=.c) $(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
118+
$(OBJLIST_BMPROFILE:.o=.c) $(OBJLIST_BMTRACE:.o=.c) \
119+
$(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
111120
$(OBJLIST_TRACEGEN:.o=.c)
112121

113122

@@ -121,6 +130,8 @@ bmdebug.o : bmdebug.c
121130

122131
bmflash.o : bmflash.c
123132

133+
bmprofile.o : bmprofile.c
134+
124135
bmscan.o : bmscan.c
125136

126137
bmtrace.o : bmtrace.c
@@ -206,6 +217,9 @@ bmdebug : $(OBJLIST_BMDEBUG)
206217
bmflash : $(OBJLIST_BMFLASH)
207218
$(LNK) $(LFLAGS) -o$@ $^ -lfontconfig -l$(GLFW_LIBNAME) -lGL -lm -lbsd -ldl -lpthread -lX11 -lxcb -lXau -lXdmcp `pkg-config --libs gtk+-3.0`
208219

220+
bmprofile : $(OBJLIST_BMPROFILE)
221+
$(LNK) $(LFLAGS) -o$@ $^ -lfontconfig -l$(GLFW_LIBNAME) -lGL -lm -lbsd -ldl -lpthread -lX11 -lxcb -lXau -lXdmcp `pkg-config --libs gtk+-3.0` -lusb-1.0
222+
209223
bmtrace : $(OBJLIST_BMTRACE)
210224
$(LNK) $(LFLAGS) -o$@ $^ -lfontconfig -l$(GLFW_LIBNAME) -lGL -lm -lbsd -ldl -lpthread -lX11 -lxcb -lXau -lXdmcp `pkg-config --libs gtk+-3.0` -lusb-1.0
211225

‎source/Makefile.mingw‎

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ LNK := $(CDIR_BIN)gcc
4646
LFLAGS :=
4747
LFLAGS_GUI:= -Wl,-subsystem,windows
4848

49-
5049
ifdef NDEBUG
5150
# retail version
5251
CFLAGS += -DNDEBUG
@@ -70,24 +69,35 @@ endif
7069
# -------------------------------------------------------------
7170

7271
OBJLIST_BMDEBUG = bmdebug.o armdisasm.o bmcommon.o bmp-scan.o bmp-script.o \
73-
demangle.o dwarf.o elf.o guidriver.o mcu-info.o memdump.o minIni.o \
74-
nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
75-
nuklear_tooltip.o rs232.o serialmon.o specialfolder.o strlcpy.o \
76-
svd-support.o swotrace.o tcpip.o usb-support.o xmltractor.o \
77-
decodectf.o parsetsdl.o \
72+
demangle.o dwarf.o elf.o guidriver.o mcu-info.o memdump.o \
73+
minIni.o nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
74+
nuklear_tooltip.o rs232.o serialmon.o specialfolder.o svd-support.o \
75+
swotrace.o tcpip.o xmltractor.o decodectf.o parsetsdl.o \
76+
strlcpy.o usb-support.o \
7877
nuklear.o nuklear_gdip.o noc_file_dialog.o
7978

8079
OBJLIST_BMFLASH = bmflash.o bmcommon.o bmp-scan.o bmp-script.o bmp-support.o \
8180
cksum.o crc32.o elf.o gdb-rsp.o guidriver.o ident.o minIni.o \
8281
nuklear_mousepointer.o nuklear_style.o nuklear_tooltip.o \
83-
picoro.o rs232.o specialfolder.o strlcpy.o tcpip.o xmltractor.o \
82+
picoro.o rs232.o specialfolder.o tcpip.o xmltractor.o \
83+
strlcpy.o \
8484
nuklear.o nuklear_gdip.o noc_file_dialog.o
8585

86+
OBJLIST_BMPROFILE = bmprofile.o bmcommon.o bmp-scan.o bmp-script.o \
87+
bmp-support.o crc32.o decodectf.o demangle.o dwarf.o \
88+
elf.o gdb-rsp.o guidriver.o mcu-info.o minIni.o \
89+
parsetsdl.o picoro.o rs232.o specialfolder.o swotrace.o \
90+
tcpip.o xmltractor.o nuklear_mousepointer.o \
91+
nuklear_splitter.o nuklear_style.o nuklear_tooltip.o \
92+
strlcpy.o usb-support.o \
93+
nuklear.o nuklear_gdip.o noc_file_dialog.o
94+
8695
OBJLIST_BMTRACE = bmtrace.o bmcommon.o bmp-scan.o bmp-script.o bmp-support.o \
8796
crc32.o demangle.o dwarf.o elf.o gdb-rsp.o guidriver.o mcu-info.o \
8897
minIni.o nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
8998
nuklear_tooltip.o picoro.o rs232.o specialfolder.o swotrace.o \
90-
strlcpy.o tcpip.o usb-support.o xmltractor.o decodectf.o parsetsdl.o \
99+
tcpip.o xmltractor.o decodectf.o parsetsdl.o \
100+
strlcpy.o usb-support.o \
91101
nuklear.o nuklear_gdip.o noc_file_dialog.o
92102

93103
OBJLIST_BMSCAN = bmscan.o bmp-scan.o tcpip.o
@@ -97,12 +107,13 @@ OBJLIST_POSTLINK = elf-postlink.o elf.o strlcpy.o
97107
OBJLIST_TRACEGEN = tracegen.o parsetsdl.o strlcpy.o
98108

99109

100-
project : bmdebug.exe bmflash.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe
110+
project : bmdebug.exe bmflash.exe bmprofile.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe
101111

102112
depend :
103113
makedepend -b -fmakefile.dep $(OBJLIST_BMDEBUG:.o=.c) $(OBJLIST_BMFLASH:.o=.c) \
104-
$(OBJLIST_BMTRACE:.o=.c) $(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
105-
$(OBJLIST_TRACEGEN:.o=.c)
114+
$(OBJLIST_BMPROFILE:.o=.c) $(OBJLIST_BMTRACE:.o=.c) \
115+
$(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
116+
$(OBJLIST_TRACEGEN:.o=.c)
106117

107118

108119
##### C files #####
@@ -115,6 +126,8 @@ bmdebug.o : bmdebug.c
115126

116127
bmflash.o : bmflash.c
117128

129+
bmprofile.o : bmprofile.c
130+
118131
bmscan.o : bmscan.c
119132

120133
bmtrace.o : bmtrace.c
@@ -164,7 +177,7 @@ nuklear_tooltip.o : nuklear_tooltip.c
164177

165178
parsetsdl.o : parsetsdl.c
166179

167-
picoro.o: picoro.c
180+
picoro.o : picoro.c
168181

169182
rs232.o : rs232.c
170183

@@ -202,13 +215,16 @@ bmtrace.res : bmtrace.rc
202215

203216
##### Executables #####
204217

205-
bmdebug.exe : $(OBJLIST_BMDEBUG)
218+
bmdebug.exe : $(OBJLIST_BMDEBUG) bmdebug.res
206219
$(LNK) $(LFLAGS) $(LFLAGS_GUI) -o$@ $^ -lm -lcomdlg32 -lgdi32 -lgdiplus -lsetupapi -lshlwapi -lws2_32
207220

208-
bmflash.exe : $(OBJLIST_BMFLASH)
221+
bmflash.exe : $(OBJLIST_BMFLASH) bmflash.res
209222
$(LNK) $(LFLAGS) $(LFLAGS_GUI) -o$@ $^ -lm -lcomdlg32 -lgdi32 -lgdiplus -lshlwapi -lws2_32
210223

211-
bmtrace.exe : $(OBJLIST_BMTRACE)
224+
bmprofile.exe : $(OBJLIST_BMPROFILE)
225+
$(LNK) $(LFLAGS) $(LFLAGS_GUI) -o$@ $^ -lm -lcomdlg32 -lgdi32 -lgdiplus -lsetupapi -lshlwapi -lws2_32
226+
227+
bmtrace.exe : $(OBJLIST_BMTRACE) bmtrace.res
212228
$(LNK) $(LFLAGS) $(LFLAGS_GUI) -o$@ $^ -lm -lcomdlg32 -lgdi32 -lgdiplus -lsetupapi -lshlwapi -lws2_32
213229

214230
bmscan.exe : $(OBJLIST_BMSCAN)

‎source/Makefile.msvc‎

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,26 +64,35 @@ LFLAGS_C = $(L_DEBUG) /NOLOGO /SUBSYSTEM:console
6464
# -------------------------------------------------------------
6565

6666
OBJLIST_BMDEBUG = bmdebug.obj armdisasm.obj bmcommon.obj bmp-scan.obj bmp-script.obj \
67-
demangle.obj dirent.obj dwarf.obj elf.obj guidriver.obj mcu-info.obj \
68-
memdump.obj minIni.obj nuklear_mousepointer.obj nuklear_splitter.obj \
69-
nuklear_style.obj nuklear_tooltip.obj rs232.obj serialmon.obj \
70-
specialfolder.obj strlcpy.obj svd-support.obj swotrace.obj tcpip.obj \
71-
usb-support.obj xmltractor.obj decodectf.obj parsetsdl.obj \
67+
demangle.obj dirent.obj dwarf.obj elf.obj guidriver.obj mcu-info.obj memdump.obj \
68+
minIni.obj nuklear_mousepointer.obj nuklear_splitter.obj nuklear_style.obj \
69+
nuklear_tooltip.obj rs232.obj serialmon.obj specialfolder.obj svd-support.obj \
70+
swotrace.obj tcpip.obj xmltractor.obj decodectf.obj parsetsdl.obj \
71+
strlcpy.obj usb-support.obj \
7272
nuklear.obj nuklear_gdip.obj noc_file_dialog.obj
7373

7474
OBJLIST_BMFLASH = bmflash.obj bmcommon.obj bmp-scan.obj bmp-script.obj bmp-support.obj \
75-
cksum.obj crc32.obj elf.obj gdb-rsp.obj guidriver.obj ident.obj \
76-
minIni.obj nuklear_mousepointer.obj nuklear_style.obj nuklear_tooltip.obj \
77-
picoro.obj rs232.obj specialfolder.obj strlcpy.obj tcpip.obj \
78-
xmltractor.obj \
75+
cksum.obj crc32.obj elf.obj gdb-rsp.obj guidriver.obj ident.obj minIni.obj \
76+
nuklear_mousepointer.obj nuklear_style.obj nuklear_tooltip.obj \
77+
picoro.obj rs232.obj specialfolder.obj tcpip.obj xmltractor.obj \
78+
strlcpy.obj \
7979
nuklear.obj nuklear_gdip.obj noc_file_dialog.obj
8080

81+
OBJLIST_BMPROFILE = bmprofile.obj bmcommon.obj bmp-scan.obj bmp-script.obj \
82+
bmp-support.obj crc32.obj decodectf.obj demangle.obj dwarf.obj \
83+
elf.obj gdb-rsp.obj guidriver.obj mcu-info.obj minIni.obj \
84+
parsetsdl.obj picoro.obj rs232.obj specialfolder.obj swotrace.obj \
85+
tcpip.obj xmltractor.obj nuklear_mousepointer.obj \
86+
nuklear_splitter.obj nuklear_style.obj nuklear_tooltip.obj \
87+
strlcpy.obj usb-support.obj \
88+
nuklear.obj nuklear_gdip.obj noc_file_dialog.obj
89+
8190
OBJLIST_BMTRACE = bmtrace.obj bmcommon.obj bmp-scan.obj bmp-script.obj bmp-support.obj \
82-
crc32.obj demangle.obj dwarf.obj elf.obj gdb-rsp.obj guidriver.obj \
83-
mcu-info.obj minIni.obj nuklear_mousepointer.obj nuklear_splitter.obj \
84-
nuklear_style.obj nuklear_tooltip.obj picoro.obj rs232.obj \
85-
specialfolder.obj swotrace.obj strlcpy.obj tcpip.obj usb-support.obj \
86-
xmltractor.obj decodectf.obj parsetsdl.obj \
91+
crc32.obj demangle.obj dwarf.obj elf.obj gdb-rsp.obj guidriver.obj mcu-info.obj \
92+
minIni.obj nuklear_mousepointer.obj nuklear_splitter.obj nuklear_style.obj \
93+
nuklear_tooltip.obj picoro.obj rs232.obj specialfolder.obj swotrace.obj \
94+
tcpip.obj xmltractor.obj decodectf.obj parsetsdl.obj \
95+
strlcpy.obj usb-support.obj \
8796
nuklear.obj nuklear_gdip.obj noc_file_dialog.obj
8897

8998
OBJLIST_BMSCAN = bmscan.obj bmp-scan.obj tcpip.obj
@@ -93,11 +102,12 @@ OBJLIST_POSTLINK = elf-postlink.obj elf.obj strlcpy.obj
93102
OBJLIST_TRACEGEN = tracegen.obj parsetsdl.obj strlcpy.obj
94103

95104

96-
project : bmdebug.exe bmflash.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe
105+
project : bmdebug.exe bmflash.exe bmprofile.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe
97106

98107
depend :
99108
makedepend -b -e -o.obj -fmakefile.dep $(OBJLIST_BMDEBUG:.obj=.c) $(OBJLIST_BMFLASH:.obj=.c) \
100-
$(OBJLIST_BMTRACE:.obj=.c) $(OBJLIST_BMSCAN:.obj=.c) $(OBJLIST_POSTLINK:.obj=.c) \
109+
$(OBJLIST_BMPROFILE:.obj=.c) $(OBJLIST_BMTRACE:.obj=.c) \
110+
$(OBJLIST_BMSCAN:.obj=.c) $(OBJLIST_POSTLINK:.obj=.c) \
101111
$(OBJLIST_TRACEGEN:.obj=.c)
102112

103113

@@ -111,6 +121,8 @@ bmdebug.obj : bmdebug.c
111121

112122
bmflash.obj : bmflash.c
113123

124+
bmprofile.obj : bmprofile.c
125+
114126
bmscan.obj : bmscan.c
115127

116128
bmtrace.obj : bmtrace.c
@@ -203,6 +215,9 @@ bmdebug.exe : $(OBJLIST_BMDEBUG) bmdebug.res
203215
bmflash.exe : $(OBJLIST_BMFLASH) bmflash.res
204216
$(LNK) $(LFLAGS_W) /ENTRY:mainCRTStartup /OUT:$@ $** advapi32.lib comdlg32.lib gdi32.lib gdiplus.lib user32.lib winmm.lib wsock32.lib shell32.lib shlwapi.lib
205217

218+
bmprofile.exe : $(OBJLIST_BMPROFILE) bmtrace.res
219+
$(LNK) $(LFLAGS_W) /ENTRY:mainCRTStartup /OUT:$@ $** advapi32.lib comdlg32.lib gdi32.lib gdiplus.lib user32.lib winmm.lib wsock32.lib shell32.lib shlwapi.lib setupapi.lib
220+
206221
bmtrace.exe : $(OBJLIST_BMTRACE) bmtrace.res
207222
$(LNK) $(LFLAGS_W) /ENTRY:mainCRTStartup /OUT:$@ $** advapi32.lib comdlg32.lib gdi32.lib gdiplus.lib user32.lib winmm.lib wsock32.lib shell32.lib shlwapi.lib setupapi.lib
208223

‎source/armdisasm.c‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1489,7 +1489,7 @@ static bool thumb2_imm_br_misc(ARMSTATE *state, uint32_t instr)
14891489
int32_t address = state->address + 4;
14901490
if (opc == 4)
14911491
address = ALIGN4(state->address + 4); /* BLX target is aligned to 32-bit address */
1492-
address += offset;
1492+
address += offset;
14931493
sprintf(tail(state->text), "%07x", address);
14941494
append_comment_symbol(state, address);
14951495
mark_address_type(state, address, POOL_CODE);
@@ -1575,7 +1575,7 @@ static bool thumb2_imm_br_misc(ARMSTATE *state, uint32_t instr)
15751575
strcpy(state->text, "subs");
15761576
add_it_cond(state, 0);
15771577
padinstr(state->text);
1578-
sprintf(tail(state->text), "pc, lr, #%d", FIELD(instr, 0, 8));
1578+
sprintf(tail(state->text), "pc, lr, #%u", FIELD(instr, 0, 8));
15791579
} else {
15801580
strcpy(state->text, "bxj");
15811581
add_it_cond(state, 0);

0 commit comments

Comments
 (0)