Kyösti Mälkki (kyosti.malkki@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2511
-gerrit
commit 3a7357a106fd94b1ae14271c349dcf20a36995c0 Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Mon Feb 25 19:33:44 2013 +0200
Unify output line format
Serialice log had obscure format with characters like "#!*" appearing at different positions, this patch makes the output lines more readable.
First number pair is a running index that could be used to group and indent the lines to improve readability. Doesn't work flawlessly yet.
Second string is combination of flags telling how action got processed:
I Info -- informational line only R Raw -- raw IO/MEMORY/CPU operation H Hardware -- action was sent to target Q Qemu -- action was sent to qemu U Undefined -- action hit the fallback filter D Dropped -- filter prevented sending action to target or qemu F Faked -- filter modified the action on-the-fly
Third field is the instruction pointer [CS:EIP]. At the moment EIP is not reported accurately at all.
Remaining of the line describes the action.
A few examples:
Memory access, Raw + Qemu. Following is read of vector stored in the BIOS image file.
0000.0001 RQ.. [ffff000:fff0] MEM,ROM_HI: readb fffffff0 => ea 0000.0002 RQ.. [ffff000:fff0] MEM,ROM_HI: readw fffffff1 => e05b 0000.0003 RQ.. [ffff000:fff0] MEM,ROM_HI: readw fffffff3 => f000
PCI config read, Hardware. This is composed from either IO accesses to 0xcf8-0xcff or memory access to a specific PCI-e MM config region. Thus it is not Raw but a composed action.
0044.0046 .H.. [f000:f764] PCI: 0:1e.0 [004] => 00
CPUID, Raw + Hard + Faked. CPUID was executed on the target, but the returned value was modified. In this case, it fakes CPU has a single core.
000d.000e RH.F [f000:e814] CPUID: eax: 00000001; ecx: 00000000 => 00000f4a.00010800.0000649d.bfebfbff
RDMSR Raw + Hard and WRMSR Raw + Dropped. In this case, requst to do microcode update in target CPU is dropped as our serialice.rom image doesn't contain that binary.
0019.001a RH.. [f000:e869] CPU MSR: [00000017] => 00120000.00000000 001c.001d R..D [f000:e88e] CPU MSR: [00000079] <= 00000000.fffdfc10
Change-Id: I99308636c6a997ac82740c7d715617a1564aba81 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- SerialICE/simba/core_io.lua | 12 ++++-------- SerialICE/simba/output.lua | 44 ++++++++++++++++++++++++++++++++------------ SerialICE/simba/replay.lua | 5 +++-- 3 files changed, 39 insertions(+), 22 deletions(-)
diff --git a/SerialICE/simba/core_io.lua b/SerialICE/simba/core_io.lua index 5781b5a..37db0ea 100644 --- a/SerialICE/simba/core_io.lua +++ b/SerialICE/simba/core_io.lua @@ -54,21 +54,17 @@ function mem_post(f, action) local size = size_data(action.size, action.data) if not f.decode or f.decode == F_FIXED then if (action.write) then - printk(f, action, "write%s %08x <= %s", size_suffix(action.size), action.addr, size) + printk(f, action, "write%s %08x <= %s\n", size_suffix(action.size), action.addr, size) else - printk(f, action, " read%s %08x => %s", size_suffix(action.size), action.addr, size) + printk(f, action, " read%s %08x => %s\n", size_suffix(action.size), action.addr, size) end elseif f.decode == F_RANGE then if (action.write) then - printk(f, action, "[%08x] <= %s", bit32.band(action.addr, (f.size - 1)), size) + printk(f, action, "[%08x] <= %s\n", bit32.band(action.addr, (f.size - 1)), size) else - printk(f, action, "[%08x] => %s", bit32.band(action.addr, (f.size - 1)), size) + printk(f, action, "[%08x] => %s\n", bit32.band(action.addr, (f.size - 1)), size) end end - if action.to_hw then - printf(" *") - end - printf("\n") return true end
diff --git a/SerialICE/simba/output.lua b/SerialICE/simba/output.lua index 41210da..c006248 100644 --- a/SerialICE/simba/output.lua +++ b/SerialICE/simba/output.lua @@ -17,31 +17,51 @@ function printf(s,...) return io.write(s:format(...)) end
-function printk(f, action, fmt, ...) - printf("[%04x:%04x] ", action.cs, action.eip) - printf("%04x.%04x ", action.parent_id, action.my_id) +function print_address(pid, id, flags, cs, eip) + printf("%04x.%04x %s [%04x:%04x] ",pid,id,flags,cs,eip) +end
- local str = " " - if action.dropped or action.faked then - str = "!" +function printk(f, action, fmt, ...) + local str = "" + if action.undefined or action.f or action == cpu_action then + str = str .. "R" + else + str = str .. "." + end + if action.to_hw then + str = str .. "H" + elseif action.to_qemu then + str = str .. "Q" + else + str = str .. "." end if action.undefined then - str = "#" + str = str .. "U" + else + str = str .. "." end + if action.dropped then + str = str .. "D" + elseif action.faked then + str = str .. "F" + else + str = str .. "." + end + + print_address(action.parent_id, action.my_id, str, action.cs, action.eip)
if action.f then - printf("%s %s,%s: ", str, f.name, action.f.name) + printf("%s,%s: ", f.name, action.f.name) printf(fmt, ...) else - printf("%s %s: ", str, f.name) + printf("%s: ", f.name) printf(fmt, ...) end end
function printks(f, fmt, ...) - printf("[%04x:%04x] ", 0, 0) - printf("%04x.%04x ", 0, 0) - printf(" %s: ", f.name) + print_address(0,0,"I...",0,0) + printf("%s: ", f.name) printf(fmt, ...) end
diff --git a/SerialICE/simba/replay.lua b/SerialICE/simba/replay.lua index f3ba17f..ec98149 100644 --- a/SerialICE/simba/replay.lua +++ b/SerialICE/simba/replay.lua @@ -35,8 +35,9 @@ function replay_unknown(str) local dummy = {} pre_action(dummy, false, 0, 0, 0) post_action(dummy, 0) - io.write(string.format("[%04x:%04x] %04x.%04x %s\n", - regs.cs, regs.eip, ids.parent, ids.this, str)) + print_address(ids.parent, ids.this, "...", regs.cs, regs.eip) + printf(str) + printf("\n") end
function parse_cpu(line)