Stack trace (aka backtrace) in crash logs
Cherry-picked from the qemu branch. Some unit tests are available there.
To test:
extern void * _AllocateMemory(int);
static void run_test()
{
/* this will fail with ERR70 => should trigger a crash log */
void * ptr = _AllocateMemory(5 * 1024 * 1024);
/* do something with "ptr" to prevent a tail call */
printf("%x\n", ptr);
}
More info: http://www.magiclantern.fm/forum/index.php?topic=19933
Memory usage: 1536 bytes = 0x7f9f4 - 0x7f3f4 (MemSiz 500D); 1280 without BKT_BRUTE_FORCE_STACK. From those, 256 bytes are from the increased buffer size in assert_msg.
Update: enabled the fault emulations in the selftest module, so there are two ways to test this directly from menu:
- Debug -> Fault emulation -> Allocate 1MB of system RAM (click a few times)
- Debug -> Fault emulation -> Allocate 10MB of RAM, then develop a CR2 from the playback menu (will show the example from the forum thread).
Or, of course, reproduce some ML bug that triggers an assertion - that would also show a stack trace.
TODO:
- script for creating a human-readable trace (example on the forum)
- address to name mapping for modules (how?)
- include this in QEMU (if only to start a test suite for nightly builds)
Who's going to help with that? :D