SuccessChanges

Summary

  1. QEMU: various fixes regarding Thumb disassembly Quirk: if CPU is in ARM mode, the disassembler looks at the Thumb bit of the requested address. If CPU is in Thumb mode, the disassembler ignores the Thumb bit from the address, and always disassembles as Thumb. This inconsistency is also present in latest QEMU from git. Why? IDC scripts: comments containing disassembled Thumb code were updated (DIGIC 6/7/8 and 1300D).
  2. GDB scripts: removed NULL_STR definition from 5D4 (was breaking the tests; not required on this camera anyway)
  3. QEMU logging: in icount mode, print instruction count for every single function call Instruction count is printed when returning from the function. Instructions executed by other tasks/interrupts (i.e. outside the tested function) are not included in the printed value. This feature is very useful for optimizing code. Example: -d debugmsg,calls -icount 5
  4. QEMU logging: updated DryOS and VxWorks task switch handling It was quite hard to pass the test suite, as there were lots of edge cases: - context switch may happen either in a timer interrupt, or in a regular task (e.g. msleep, sempahores and so on) - context switch is not atomic - it happens a few instructions (or function calls!) afterh updating the current task pointer - until the registers are swapped for the new task, we are still on the stack of the previous task - there may be dummy task switches (i.e. from one task to the same task) - an interrupt can occur in the middle of a (non-atomic) context switch (!) - VxWorks models do not even use a unique task ID (!) Result: QEMU no longer crashes during logging tests! Issue: these cameras do not appear to use an unique task ID. Workaround: assign our own task IDs.
  5. QEMU test suite: only use 2/3 of available CPU cores. It appears to improve the repeatability of results in some CPU- and IO-intensive tests. In other words, don't believe the Hyper-Threading hype :)
  6. QEMU logging: removed magic stack ID values for interrupt and invalid task
  7. QEMU: refactored with eos_get_mem_w Before: uint32_t x; cpu_physical_memory_read(addr, &x, 4) After: uint32_t x = eos_get_mem_w(s, addr); Also, minor cleanups to eos_get_current_task_* (not expected to make a difference)
Changeset 17996:e1c6fd64d735 by alex@thinkpad:
QEMU: various fixes regarding Thumb disassembly<br><br>Quirk: if CPU is in ARM mode, the disassembler looks at the Thumb bit of the requested address.<br>If CPU is in Thumb mode, the disassembler ignores the Thumb bit from the address, and always disassembles as Thumb.<br>This inconsistency is also present in latest QEMU from git. Why?<br><br>IDC scripts: comments containing disassembled Thumb code were updated (DIGIC 6/7/8 and 1300D).
The file was modifiedcontrib/qemu/eos/dbi/logging.c (diff)
The file was modifiedcontrib/qemu/eos/eos_ml_helpers.c (diff)
The file was modifiedcontrib/qemu/tests/1300D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/200D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D3eeko/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D4/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D4AE/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/6D2/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/750D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/760D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/77D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/7D2/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/7D2S/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/800D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/80D/calls-main.md5 (diff)
Changeset 14013:ae4c89791395 by alex@thinkpad:
GDB scripts: removed NULL_STR definition from 5D4<br>(was breaking the tests; not required on this camera anyway)
The file was modifiedcontrib/qemu/scripts/5D4/debugmsg.gdb (diff)
Changeset 14012:a4af6594437f by alex@thinkpad:
QEMU logging: in icount mode, print instruction count for every single function call<br><br>Instruction count is printed when returning from the function.<br>Instructions executed by other tasks/interrupts (i.e. outside the tested function) are not included in the printed value.<br>This feature is very useful for optimizing code.<br>Example: -d debugmsg,calls -icount 5
The file was modifiedcontrib/qemu/eos/dbi/logging.c (diff)
The file was modifiedcontrib/qemu/tests/run_tests.sh (diff)
Changeset 14011:9049426c8cce by alex@thinkpad:
QEMU logging: updated DryOS and VxWorks task switch handling<br><br>It was quite hard to pass the test suite, as there were lots of edge cases:<br><br>- context switch may happen either in a timer interrupt, or in a regular task (e.g. msleep, sempahores and so on)<br>- context switch is not atomic - it happens a few instructions (or function calls!) afterh updating the current task pointer<br>- until the registers are swapped for the new task, we are still on the stack of the previous task<br>- there may be dummy task switches (i.e. from one task to the same task)<br>- an interrupt can occur in the middle of a (non-atomic) context switch (!)<br>- VxWorks models do not even use a unique task ID (!)<br><br>Result: QEMU no longer crashes during logging tests!<br><br>Issue: these cameras do not appear to use an unique task ID. Workaround: assign our own task IDs.
The file was modifiedcontrib/qemu/eos/dbi/logging.c (diff)
The file was modifiedcontrib/qemu/eos/eos.c (diff)
The file was modifiedcontrib/qemu/tests/1000D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/100D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/1100D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/1200D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/1300D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/200D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/400D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/40D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/450D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/500D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/50D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/550D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D2/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D3/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D3eeko/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D4/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/5D4AE/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/600D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/60D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/650D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/6D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/6D2/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/700D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/70D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/750D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/760D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/77D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/7D2/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/7D2S/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/800D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/80D/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/EOSM/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/EOSM2/calls-main.md5 (diff)
The file was modifiedcontrib/qemu/tests/run_tests.sh (diff)
The file was modifiedcontrib/qemu/tests/test_callstack.py (diff)
Changeset 14010:2db600ab6a08 by alex@thinkpad:
QEMU test suite: only use 2/3 of available CPU cores. It appears to improve the repeatability of results in some CPU- and IO-intensive tests.<br><br>In other words, don&#039;t believe the Hyper-Threading hype :)
The file was modifiedcontrib/qemu/tests/run_tests.sh (diff)
Changeset 14009:44e7c4f52331 by alex@thinkpad:
QEMU logging: removed magic stack ID values for interrupt and invalid task
The file was modifiedcontrib/qemu/eos/dbi/logging.c (diff)
Changeset 14008:5619c64e5e66 by alex@thinkpad:
QEMU: refactored with eos_get_mem_w<br><br>Before: uint32_t x; cpu_physical_memory_read(addr, &amp;x, 4)<br>After: uint32_t x = eos_get_mem_w(s, addr);<br><br>Also, minor cleanups to eos_get_current_task_* (not expected to make a difference)
The file was modifiedcontrib/qemu/eos/dbi/logging.c (diff)
The file was modifiedcontrib/qemu/eos/dbi/memcheck.c (diff)
The file was modifiedcontrib/qemu/eos/eos.c (diff)