annotate gsm-fw/lldbg/README @ 1017:759b3cbf46aa

doc/TCH-special-feature: document written
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Mon, 21 Mar 2016 06:05:57 +0000
parents f5affe83ba2d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
865
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
1 The hack implemented in this directory is a poor girl's substitute for JTAG,
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
2 concocted for the purpose of debugging hard crashes in the firmware. The
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
3 intended usage is that the developer seeking to troubleshoot perplexing
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
4 misbehavior in the firmware inserts a call to lldbg_entry() as a form of
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
5 breakpoint at the earliest place in the main fw where it is seen that something
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
6 has gone astray, and when the thread of code execution hits this lldbg_entry()
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
7 function, the regular Nucleus environment gets completely frozen. Lldbg entry
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
8 code saves all registers and the return address (LR) on whatever stack it is
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
9 was called on, then disables all interrupts and switches to its own stack which
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
10 is not used by any other part of the fw.
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
11
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
12 This lldbg code is linked together with the main fw when feature lldbg is
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
13 enabled in build.conf, but it stands as its own separate body. All functions
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
14 and variables within lldbg are prefixed with lldbg_ to avoid any clashes, and
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
15 once this lldbg code gains control, it does everything on its own without making
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
16 use of *any* part of the regular fw. The code that forms lldbg is based on
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
17 FreeCalypso target-utils (loadagent) and is fully independent of the regular fw.
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
18
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
19 Lldbg uses its own UART input and output code as well: the entry code waits for
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
20 any previous output (presumably RVTMUX) to go out, then sends out an STX-wrapped
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
21 message to make the lldbg entry visible in rvtdump/rvinterf, preceded by 3 STX
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
22 characters to terminate any RVTMUX packet in progress. From this point onward
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
23 all further communication is done in an ASCII terminal fashion: upon seeing the
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
24 lldbg entry message, the user needs to kill rvtdump/rvinterf and switch to
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
25 fc-serterm. All lldbg code runs with interrupts disabled, thus UART input and
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
26 output are polled.
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
27
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
28 Once in lldbg mode, the user (developer) can execute various memory dump
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
29 commands to see the frozen state of the fw upon lldbg entry, and hopefully
f5affe83ba2d lldbg hack (poor girl's substitute for JTAG) implemented
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
30 figure out what went wrong earlier.