Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Lightweight Crash Log Framework (aka iclg)

CI

Download BinariesDocumentationGetting Started

Experienced a crash on an Intel SoC? The hardware may have captured a Crash Log.

Modern Intel SoCs automatically record hardware state during fatal crashes (MCE, triple faults, unexpected resets) into on-die memory. iclg extracts and decodes that binary data into human-readable JSON.

Check if your system has crash log data:

$ iclg extract

What can be done with the Crash Log?

Once extracted, you have several options depending on your needs:

  • Use the iclg decoder provided in this repository to convert crash log records into structured JSON format for initial triage and automated processing.

    $ iclg triage three_strike_timeout_with_xq.crashlogCORE_TIMEOUT.SINGLE_STUCK_TRANSACTION.13014002340HMCA.BANK3.INTERNAL_TIMER_ERROR.MSCOD_E184HRESET_CAUSE.GLOBAL_RESET.PMC_FW
    $ iclg decode three_strike_timeout_with_xq.crashlog |
    > jq '.crashlog_data.pcore.core0.thread0.thread.arch_state.mca.bank3'{ "addr": "0xfffff80252753e75", "ctl": "0x7f", "misc": "0xfffff80252753e75", "status": "0xbe000000e1840400"}
  • Send the Crash Log to your Intel representative for further support.

  • For advanced analysis, the Intel System Debugger provides additional debugging capabilities (requires NDA).

How does it work?

Intel® Crash Log Technology is a mechanism for collecting debug information from the System-on-Chip (SoC), such as status/error registers and state machines, and storing it in on-die memory. Data collection is triggered by unrecoverable system errors, like fatal machine check exceptions or unexpected resets.

When valid records are present in the SoC during boot, the BIOS copies them into the ACPI Boot Error Record Table (BERT) to expose them to the OS. The data stored in the BERT can then be accessed via Windows Event Logs, Linux sysfs, or the EFI shell.

The Lightweight Crash Log Framework is a reference implementation designed for decoding and extracting data using Intel® Crash Log Technology. It can function as a standalone application or be integrated into other applications.

Features Overview

  • Extract Intel Crash Log records from Windows Event Logs, Linux sysfs, and the EFI shell.
  • Store and convert the Intel Crash Log records in the UEFI CPER format (as described in the UEFI Specification Appendix N).
  • Decode Intel Crash Log records and export the content as JSON.

Note

This tool supports a limited number of platforms utilizing Crash Log technology. However, it can decode the common Crash Log header structure on unsupported platforms. We are actively working to expand platform support. Additionally, the set of registers collected may vary between projects and the register layout may be updated in future releases.

Repository Structure

  • Library: A library for extracting and decoding Crash Log records.
  • Collateral Tree: A collection of product-specific collateral needed for decoding Crash Log records.
  • Command Line Tool: A standalone application for extracting and decoding Crash Log records.
  • EFI Tool: An EFI tool for reading Crash Log records stored in ACPI tables from the EFI shell.

Getting Started

Installation

  1. Install the Rust Toolchain

    Before building the project, install the Rust toolchain using rustup.

  2. Install the CLI Application

Run the following command to install the CLI application:

$ cargo install --path app/
  1. Uninstall the CLI Application

To uninstall the CLI application, use:

$ cargo uninstall -p intel_crashlog_app

Note

  • For building and using the EFI application, refer to this document.
  • To use this reference code in your own application, refer to this document.

Usage

  • Extract the Crash Log from the platform, it can be from the Windows Event Log or Linux sysfs:
$ iclg extract sample.crashlog

By default the iclg tool will extract all the available sources, but the user can specify which sources can be extracted:

$ iclg extract -s acpi,pmt:crashlog0
  • List all available Crash Log sources in the platform. Each source supports different capabilities like extract, trigger, enable/disable, or rearm.
$ iclg listSource Description Capabilities------------- ---------------------- ---------------------------------------acpi ACPI BERT extractpmt:crashlog0 PMT endpoint crashlog0 extract, trigger, enable/disable, rearm
  • Trigger a Crash Log collection on-demand. Like the extract command, you can specify individual sources or trigger all sources by default. This command is only supported on Linux.
$ iclg trigger
  • Rearm a Crash Log trigger. A source can trigger a Crash Log collection only once per reset cycle; after a collection has been captured, the source must be reset and rearmed before it will trigger again. Like the trigger command, you can specify individual sources or rearm all sources by default. This command is only supported on Linux.
$ iclg rearm
  • Enable or Disable the Crash Log collection in the platform. Individual sources can be specified in the CLI as well. These commands are only supported on Linux.
$ iclg enable
$ iclg disable
  • List all the collected records, in the extracted sample:
$ iclg info sample.crashlog # Record Type Product Size Skt Die----- ---------------- -------- ------- ---- --------- 0-0 MCA XYZ/all 832 0 1-0 CRASHLOG_AGENT XYZ/all 40 0 io0
  • Export the Crash Log content into JSON:
$ iclg decode sample.crashlog{ "crashlog_data": { ... }}
  • List available commands using the --help option:
$ iclg --helpExtract and decode Intel Crash Log records.Usage: iclg [OPTIONS] <COMMAND>Commands: enable Enable Crash Log collection in the platform extract Extract the Crash Log records from the platform decode Decode Crash Log records into JSON disable Disable Crash Log collection in the platform info List the Crash Log records stored in the input file list List the Crash Log sources that are available in the platform rearm Rearm a Crash Log trigger in the platform trigger Trigger an on-demand Crash Log collection in the platform unpack Unpack the Crash Log records stored in the input file triage Triage the Crash Log records stored in the input files help Print this message or the help of the given subcommand(s)Options: -c, --collateral-tree <dir> Path to the collateral tree. If not specified, the builtin collateral tree will be used -v, --verbose... Sets the verbosity of the logging messages. -v: Warning, -vv: Info, -vvv: Debug, -vvvv: Trace -h, --help Print help

Development

Instructions for building, testing, and submitting changes are documented in the following sections:

About

Reference implementation for decoding and extracting Intel® Crash Log Technology records.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages