Skip to content

Commit

Permalink
Added chapter on profiling (via sampling). Added a profiler utility.
Browse files Browse the repository at this point in the history
Fixed stylistic and minor issues found by CppCheck.
  • Loading branch information
compuphase committed Sep 22, 2022
1 parent 622ad6b commit c978151
Show file tree
Hide file tree
Showing 34 changed files with 2,037 additions and 281 deletions.
Binary file modified BlackMagicProbe.pdf
Binary file not shown.
Binary file added doc/bmprofile-top.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 24 additions & 10 deletions source/Makefile.linux
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ else
LFLAGS += -g
endif


# -------------------------------------------------------------
# Inference rules
# -------------------------------------------------------------
Expand All @@ -78,23 +77,32 @@ OBJLIST_BMDEBUG = bmdebug.o armdisasm.o bmcommon.o bmp-scan.o bmp-script.o \
nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
nuklear_tooltip.o rs232.o serialmon.o specialfolder.o svd-support.o \
swotrace.o tcpip.o xmltractor.o decodectf.o parsetsdl.o \
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o \
findfont.o lodepng.o
findfont.o lodepng.o \
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o

OBJLIST_BMFLASH = bmflash.o bmcommon.o bmp-scan.o bmp-script.o bmp-support.o \
cksum.o crc32.o elf.o gdb-rsp.o guidriver.o ident.o minIni.o \
nuklear_mousepointer.o nuklear_style.o nuklear_tooltip.o \
picoro.o rs232.o specialfolder.o tcpip.o xmltractor.o \
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o \
findfont.o lodepng.o
findfont.o lodepng.o \
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o

OBJLIST_BMPROFILE = bmprofile.o bmcommon.o bmp-scan.o bmp-script.o \
bmp-support.o crc32.o decodectf.o demangle.o dwarf.o \
elf.o gdb-rsp.o guidriver.o mcu-info.o minIni.o \
parsetsdl.o picoro.o rs232.o specialfolder.o swotrace.o \
tcpip.o xmltractor.o nuklear_mousepointer.o \
nuklear_splitter.o nuklear_style.o nuklear_tooltip.o \
findfont.o lodepng.o \
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o

OBJLIST_BMTRACE = bmtrace.o bmcommon.o bmp-scan.o bmp-script.o bmp-support.o \
crc32.o demangle.o dwarf.o elf.o gdb-rsp.o guidriver.o mcu-info.o \
minIni.o nuklear_splitter.o nuklear_style.o nuklear_mousepointer.o \
minIni.o nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
nuklear_tooltip.o picoro.o rs232.o specialfolder.o swotrace.o \
tcpip.o xmltractor.o decodectf.o parsetsdl.o \
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o \
findfont.o lodepng.o
findfont.o lodepng.o \
nuklear.o nuklear_glfw_gl2.o noc_file_dialog.o

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

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


project: bmdebug bmflash bmtrace bmscan elf-postlink tracegen
project: bmdebug bmflash bmprofile bmtrace bmscan elf-postlink tracegen

depend :
makedepend -b -fmakefile.dep $(OBJLIST_BMDEBUG:.o=.c) $(OBJLIST_BMFLASH:.o=.c) \
$(OBJLIST_BMTRACE:.o=.c) $(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
$(OBJLIST_BMPROFILE:.o=.c) $(OBJLIST_BMTRACE:.o=.c) \
$(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
$(OBJLIST_TRACEGEN:.o=.c)


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

bmflash.o : bmflash.c

bmprofile.o : bmprofile.c

bmscan.o : bmscan.c

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

bmprofile : $(OBJLIST_BMPROFILE)
$(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

bmtrace : $(OBJLIST_BMTRACE)
$(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

Expand Down
46 changes: 31 additions & 15 deletions source/Makefile.mingw
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ LNK := $(CDIR_BIN)gcc
LFLAGS :=
LFLAGS_GUI:= -Wl,-subsystem,windows


ifdef NDEBUG
# retail version
CFLAGS += -DNDEBUG
Expand All @@ -70,24 +69,35 @@ endif
# -------------------------------------------------------------

OBJLIST_BMDEBUG = bmdebug.o armdisasm.o bmcommon.o bmp-scan.o bmp-script.o \
demangle.o dwarf.o elf.o guidriver.o mcu-info.o memdump.o minIni.o \
nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
nuklear_tooltip.o rs232.o serialmon.o specialfolder.o strlcpy.o \
svd-support.o swotrace.o tcpip.o usb-support.o xmltractor.o \
decodectf.o parsetsdl.o \
demangle.o dwarf.o elf.o guidriver.o mcu-info.o memdump.o \
minIni.o nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
nuklear_tooltip.o rs232.o serialmon.o specialfolder.o svd-support.o \
swotrace.o tcpip.o xmltractor.o decodectf.o parsetsdl.o \
strlcpy.o usb-support.o \
nuklear.o nuklear_gdip.o noc_file_dialog.o

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

OBJLIST_BMPROFILE = bmprofile.o bmcommon.o bmp-scan.o bmp-script.o \
bmp-support.o crc32.o decodectf.o demangle.o dwarf.o \
elf.o gdb-rsp.o guidriver.o mcu-info.o minIni.o \
parsetsdl.o picoro.o rs232.o specialfolder.o swotrace.o \
tcpip.o xmltractor.o nuklear_mousepointer.o \
nuklear_splitter.o nuklear_style.o nuklear_tooltip.o \
strlcpy.o usb-support.o \
nuklear.o nuklear_gdip.o noc_file_dialog.o

OBJLIST_BMTRACE = bmtrace.o bmcommon.o bmp-scan.o bmp-script.o bmp-support.o \
crc32.o demangle.o dwarf.o elf.o gdb-rsp.o guidriver.o mcu-info.o \
minIni.o nuklear_mousepointer.o nuklear_splitter.o nuklear_style.o \
nuklear_tooltip.o picoro.o rs232.o specialfolder.o swotrace.o \
strlcpy.o tcpip.o usb-support.o xmltractor.o decodectf.o parsetsdl.o \
tcpip.o xmltractor.o decodectf.o parsetsdl.o \
strlcpy.o usb-support.o \
nuklear.o nuklear_gdip.o noc_file_dialog.o

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


project : bmdebug.exe bmflash.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe
project : bmdebug.exe bmflash.exe bmprofile.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe

depend :
makedepend -b -fmakefile.dep $(OBJLIST_BMDEBUG:.o=.c) $(OBJLIST_BMFLASH:.o=.c) \
$(OBJLIST_BMTRACE:.o=.c) $(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
$(OBJLIST_TRACEGEN:.o=.c)
$(OBJLIST_BMPROFILE:.o=.c) $(OBJLIST_BMTRACE:.o=.c) \
$(OBJLIST_BMSCAN:.o=.c) $(OBJLIST_POSTLINK:.o=.c) \
$(OBJLIST_TRACEGEN:.o=.c)


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

bmflash.o : bmflash.c

bmprofile.o : bmprofile.c

bmscan.o : bmscan.c

bmtrace.o : bmtrace.c
Expand Down Expand Up @@ -164,7 +177,7 @@ nuklear_tooltip.o : nuklear_tooltip.c

parsetsdl.o : parsetsdl.c

picoro.o: picoro.c
picoro.o : picoro.c

rs232.o : rs232.c

Expand Down Expand Up @@ -202,13 +215,16 @@ bmtrace.res : bmtrace.rc

##### Executables #####

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

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

bmtrace.exe : $(OBJLIST_BMTRACE)
bmprofile.exe : $(OBJLIST_BMPROFILE)
$(LNK) $(LFLAGS) $(LFLAGS_GUI) -o$@ $^ -lm -lcomdlg32 -lgdi32 -lgdiplus -lsetupapi -lshlwapi -lws2_32

bmtrace.exe : $(OBJLIST_BMTRACE) bmtrace.res
$(LNK) $(LFLAGS) $(LFLAGS_GUI) -o$@ $^ -lm -lcomdlg32 -lgdi32 -lgdiplus -lsetupapi -lshlwapi -lws2_32

bmscan.exe : $(OBJLIST_BMSCAN)
Expand Down
47 changes: 31 additions & 16 deletions source/Makefile.msvc
Original file line number Diff line number Diff line change
Expand Up @@ -64,26 +64,35 @@ LFLAGS_C = $(L_DEBUG) /NOLOGO /SUBSYSTEM:console
# -------------------------------------------------------------

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

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

OBJLIST_BMPROFILE = bmprofile.obj bmcommon.obj bmp-scan.obj bmp-script.obj \
bmp-support.obj crc32.obj decodectf.obj demangle.obj dwarf.obj \
elf.obj gdb-rsp.obj guidriver.obj mcu-info.obj minIni.obj \
parsetsdl.obj picoro.obj rs232.obj specialfolder.obj swotrace.obj \
tcpip.obj xmltractor.obj nuklear_mousepointer.obj \
nuklear_splitter.obj nuklear_style.obj nuklear_tooltip.obj \
strlcpy.obj usb-support.obj \
nuklear.obj nuklear_gdip.obj noc_file_dialog.obj

OBJLIST_BMTRACE = bmtrace.obj bmcommon.obj bmp-scan.obj bmp-script.obj bmp-support.obj \
crc32.obj demangle.obj dwarf.obj elf.obj gdb-rsp.obj guidriver.obj \
mcu-info.obj minIni.obj nuklear_mousepointer.obj nuklear_splitter.obj \
nuklear_style.obj nuklear_tooltip.obj picoro.obj rs232.obj \
specialfolder.obj swotrace.obj strlcpy.obj tcpip.obj usb-support.obj \
xmltractor.obj decodectf.obj parsetsdl.obj \
crc32.obj demangle.obj dwarf.obj elf.obj gdb-rsp.obj guidriver.obj mcu-info.obj \
minIni.obj nuklear_mousepointer.obj nuklear_splitter.obj nuklear_style.obj \
nuklear_tooltip.obj picoro.obj rs232.obj specialfolder.obj swotrace.obj \
tcpip.obj xmltractor.obj decodectf.obj parsetsdl.obj \
strlcpy.obj usb-support.obj \
nuklear.obj nuklear_gdip.obj noc_file_dialog.obj

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


project : bmdebug.exe bmflash.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe
project : bmdebug.exe bmflash.exe bmprofile.exe bmtrace.exe bmscan.exe elf-postlink.exe tracegen.exe

depend :
makedepend -b -e -o.obj -fmakefile.dep $(OBJLIST_BMDEBUG:.obj=.c) $(OBJLIST_BMFLASH:.obj=.c) \
$(OBJLIST_BMTRACE:.obj=.c) $(OBJLIST_BMSCAN:.obj=.c) $(OBJLIST_POSTLINK:.obj=.c) \
$(OBJLIST_BMPROFILE:.obj=.c) $(OBJLIST_BMTRACE:.obj=.c) \
$(OBJLIST_BMSCAN:.obj=.c) $(OBJLIST_POSTLINK:.obj=.c) \
$(OBJLIST_TRACEGEN:.obj=.c)


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

bmflash.obj : bmflash.c

bmprofile.obj : bmprofile.c

bmscan.obj : bmscan.c

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

bmprofile.exe : $(OBJLIST_BMPROFILE) bmtrace.res
$(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

bmtrace.exe : $(OBJLIST_BMTRACE) bmtrace.res
$(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

Expand Down
4 changes: 2 additions & 2 deletions source/armdisasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1489,7 +1489,7 @@ static bool thumb2_imm_br_misc(ARMSTATE *state, uint32_t instr)
int32_t address = state->address + 4;
if (opc == 4)
address = ALIGN4(state->address + 4); /* BLX target is aligned to 32-bit address */
address += offset;
address += offset;
sprintf(tail(state->text), "%07x", address);
append_comment_symbol(state, address);
mark_address_type(state, address, POOL_CODE);
Expand Down Expand Up @@ -1575,7 +1575,7 @@ static bool thumb2_imm_br_misc(ARMSTATE *state, uint32_t instr)
strcpy(state->text, "subs");
add_it_cond(state, 0);
padinstr(state->text);
sprintf(tail(state->text), "pc, lr, #%d", FIELD(instr, 0, 8));
sprintf(tail(state->text), "pc, lr, #%u", FIELD(instr, 0, 8));
} else {
strcpy(state->text, "bxj");
add_it_cond(state, 0);
Expand Down
Loading

0 comments on commit c978151

Please sign in to comment.