スナップショット

スナップショット機能は、実行中のCPUの状態やメモリの状態をファイル等に保存し、それを 別環境で再現し、デバッグを行うための機能です。

API

スナップショット機能のAPIを使用するには、solid_snapshot.h をインクルードしてください。

#include "solid_snapshot.h"

スナップショット保存属性

SOLID_SNAPSHOT_ATTR_DEBUG
SOLID_SNAPSHOT_ATTR_REGISTER
SOLID_SNAPSHOT_ATTR_CODE
SOLID_SNAPSHOT_ATTR_RODATA
SOLID_SNAPSHOT_ATTR_DATA
SOLID_SNAPSHOT_ATTR_MMU
SOLID_SNAPSHOT_ATTR_STACK
SOLID_SNAPSHOT_ATTR_HEAP
SOLID_SNAPSHOT_ATTR_OSSTACK
SOLID_SNAPSHOT_ATTR_LDR_CODE
SOLID_SNAPSHOT_ATTR_LDR_RODATA
SOLID_SNAPSHOT_ATTR_LDR_DATA
SOLID_SNAPSHOT_ATTR_USER_AREA

定数

名前

説明

SOLID_SNAPSHOT_ATTR_DEBUG

スナップショットデバッグ用設定

SOLID_SNAPSHOT_ATTR_REGISTER

CPUのレジスタ情報をスナップショットに含める

SOLID_SNAPSHOT_ATTR_CODE

コード領域をスナップショットに含める

SOLID_SNAPSHOT_ATTR_RODATA

ReadOnlyデータ領域をスナップショットに含める

SOLID_SNAPSHOT_ATTR_DATA

データ領域(bss含む)をスナップショットに含める

SOLID_SNAPSHOT_ATTR_MMU

MMU設定をスナップショットに含める

SOLID_SNAPSHOT_ATTR_STACK

SOLIDのスタックをスナップショットに含める

SOLID_SNAPSHOT_ATTR_HEAP

SOLID_HEAP領域をスナップショットに含める

SOLID_SNAPSHOT_ATTR_OSSTACK

OSSTACK領域をスナップショットに含める

SOLID_SNAPSHOT_ATTR_LDR_CODE

ローダブルモジュールのコード領域をスナップショットに含める

SOLID_SNAPSHOT_ATTR_LDR_RODATA

ローダブルモジュールのReadOnlyデータ領域をスナップショットに含める

SOLID_SNAPSHOT_ATTR_LDR_DATA

ローダブルモジュールのデータ領域(bss含む)をスナップショットに含める

SOLID_SNAPSHOT_ATTR_USER_AREA

ユーザー指定エリアをスナップショットに含める

SOLID_SNAPSHOT_Create

int SOLID_SNAPSHOT_Create(uint32_t attr, SOLID_CPU_CONTEXT *pContext)

スナップショットの作成

スナップショットの作成を通知します。pContextがNULLでない場合、CPUのレジスタ情報は pContextのものが使用されます。これにより、例外発生場所のコンテキストでのスナップショットが生成されます。 NULL を指定した場合には、SOLID_SNAPSHOT_Create を呼び出したコンテキストのスナップショットが生成されます。

SMPの場合、他CPUのコンテキストはSGIを発行し、割り込みが実行された位置を保存します。

パラメータ
戻り値

SOLID_SNAPSHOT_AddUserArea

int SOLID_SNAPSHOT_AddUserArea(SOLID_ADDRESS addr, size_t size)

スナップショットのユーザーエリアの登録

スナップショット機能にて保存される、ユーザーが指定可能な領域を登録します。 最大10領域まで指定可能です。

パラメータ
  • addr -- ユーザー領域の先頭アドレス

  • size -- ユーザー領域のサイズ(byte)

戻り値

要実装関数

スナップショット機能の要実装関数の定義は、impl_snapshot.h にあります。

#include "impl_snapshot.h"

スナップショット機能は、割り込み禁止状態で処理を行います。このため、要実装関数の中では 割り込みを使用した操作は行えないことに注意してください。

IMPL_SNAPSHOT_Open

int IMPL_SNAPSHOT_Open()

スナップショット作成の開始

スナップショット機能の最初に、この関数が呼び出されます。 ここで、スナップショット用ファイルを生成するための初期化を行ってください

戻り値

IMPL_SNAPSHOT_Write

int IMPL_SNAPSHOT_Write(const void *pData, size_t size)

スナップショットデータの書き込み

スナップショットの内容が通知されます。このAPIは1回のスナップショット動作で複数回呼び出されます。 呼び出された順に、ファイルの先頭からこのデータを書き込んでください。

パラメータ
  • pData -- スナップショットデータへのポインタ

  • size -- スナップショットデータのサイズ(byte)

戻り値

IMPL_SNAPSHOT_Close

int IMPL_SNAPSHOT_Close()

スナップショット作成の終了

スナップショット機能の最後に、この関数が呼び出されます。 ここで、スナップショット用ファイルの終了処理を行ってください。

戻り値