--- mcelog-0.9-pre1/mcelog.h.record-length 2009-02-20 15:56:08.000000000 -0700 +++ mcelog-0.9-pre1/mcelog.h 2009-10-05 09:01:24.308477671 -0600 @@ -11,26 +11,29 @@ /* kernel structure: */ -/* Fields are zero when not available */ struct mce { - __u64 status; - __u64 misc; - __u64 addr; - __u64 mcgstatus; - __u64 rip; - __u64 tsc; /* cpu time stamp counter */ - __u64 time; /* wall time_t when error was detected */ - __u8 cpuvendor; /* cpu vendor as encoded in system.h */ - __u8 pad1; - __u16 pad2; - __u32 cpuid; /* CPUID 1 EAX */ - __u8 cs; /* code segment */ - __u8 bank; /* machine check bank */ - __u8 cpu; /* cpu that raised the error */ - __u8 finished; /* entry is valid */ - __u32 extcpu; /* extended CPU number */ + __u64 status; + __u64 misc; + __u64 addr; + __u64 mcgstatus; + __u64 ip; + __u64 tsc; /* cpu time stamp counter */ + __u64 time; /* wall time_t when error was detected */ + __u8 cpuvendor; /* cpu vendor as encoded in system.h */ + __u8 pad1; + __u16 pad2; + __u32 cpuid; /* CPUID 1 EAX */ + __u8 cs; /* code segment */ + __u8 bank; /* machine check bank */ + __u8 cpu; /* cpu number; obsolete; use extcpu now */ + __u8 finished; /* entry is valid */ + __u32 extcpu; /* linux cpu number that detected the error */ + __u32 socketid; /* CPU socket ID */ + __u32 apicid; /* CPU initial apic ID */ + __u64 mcgcap; /* MCGCAP MSR: machine check capabilities of CPU */ }; + #define X86_VENDOR_INTEL 0 #define X86_VENDOR_CYRIX 1 #define X86_VENDOR_AMD 2 --- mcelog-0.9-pre1/mcelog.c.record-length 2009-02-20 15:56:08.000000000 -0700 +++ mcelog-0.9-pre1/mcelog.c 2009-10-05 09:01:24.307479137 -0600 @@ -341,15 +341,15 @@ Wprintf(" (upper bound, found by polled driver)"); Wprintf("\n"); } - if (m->rip) - Wprintf("RIP%s %02x:%Lx ", + if (m->ip) + Wprintf("RIP%s %02x:%llx ", !(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "", - m->cs, m->rip); + m->cs, m->ip); if (m->misc) Wprintf("MISC %Lx ", m->misc); if (m->addr) Wprintf("ADDR %Lx ", m->addr); - if (m->rip | m->misc | m->addr) + if (m->ip | m->misc | m->addr) Wprintf("\n"); switch (cputype) { case CPU_K8: @@ -387,7 +387,7 @@ Wprintf("CPU %u\n", m->extcpu ? m->extcpu : m->cpu); Wprintf("BANK %d\n", m->bank); Wprintf("TSC 0x%Lx\n", m->tsc); - Wprintf("RIP 0x%02x:0x%Lx\n", m->cs, m->rip); + Wprintf("RIP 0x%02x:0x%llx\n", m->cs, m->ip); Wprintf("MISC 0x%Lx\n", m->misc); Wprintf("ADDR 0x%Lx\n", m->addr); Wprintf("STATUS 0x%Lx\n", m->status); @@ -543,7 +543,7 @@ n = sscanf(s, "%02x:<%016Lx> {%100s}%n", &cs, - &m.rip, + &m.ip, symbol, &next); m.cs = cs; if (n < 2)