終了クラス変数

システム・コールまたはユーザー関数の終了ロケーション・ポイントにあるプローブ・ポイントに関連した節は、そのシステム・コールまたはユーザー関数の戻り値にアクセスできます。

Vue 言語によって定義される出口クラス変数は 1 つだけです。 これは関数またはシステム・コールからの戻り値で、この戻り値にアクセスするには特別な組み込み変数名 __rv を使用します。

終了ロケーション・ポイントのプローブは、システム・コールのプローブ・マネージャーでサポートされます。 例えば、読み取りシステム・コールは、読み取られた実際のバイト数またはエラー戻りコード -1 を戻します。 この戻り値には、@@syscall:*:read:exit プローブ・ポイントでアクセスできます。このプローブ・ポイントは、読み取りシステム・コールからのすべての終了ポイントを識別します。

入り口クラス変数と同様に、 Vue 節での出口クラス変数の使用は、この節に関連付けられたプローブ指定が固有のプローブ・ポイントを識別する場合にのみ有効です。 したがって、 __rv は、プローブ指定に複数のプローブ・ポイントが指定されている Vue 節では使用できません。 また、プローブされる関数の C 形式の宣言、特に戻り値のデータ型は、Vue スクリプト内で明示的に指定する必要があります。 実際、戻りの型を指定しないで関数宣言を指定するとエラーになります。

終了クラス変数は、節の述部セクションで使用できます。

以下のスクリプトは正しくないスクリプトであり、 read 関数の戻りの型が指定されていないため、 ProbeVue コンパイラーは構文エラーで失敗します。

/* Bad example.  */

	int read(int fd, char *buf, unsigned long size);

	@@syscall:*:read:exit
		when (__rv > 0)
	{
		/* Entered on read success: return value = # of bytes read */
		printf("Number of bytes read = %d\n", __rv);
	}

次のように変更されたスクリプトは機能します。

/* Good example.  */

	int read(int fd, char *buf, unsigned long size);

	@@syscall:*:read:exit
		when (__rv > 0)
	{
		/* Entered on read success: return value = # of bytes read */
		printf("Number of bytes read = %d\n", __rv);
	}