vvar.hで新しい変数を宣言する方法Linuxでvdsoを作成する

vvar.hで新しい変数を宣言する方法Linuxでvdsoを作成する

vvar.h近くに新しいVDSO関数を宣言して定義しようとしています。これにより、vdso関数でこの変数を使用できます。

VVarについて質問があります。の説明によると、arch/x86/include/asm/vvar.hここで新しい変数を宣言するときは、この変数を他の場所で定義する必要がDECLARE_VVAR(0, int, count)あります。DEFINE_VVAR(type, name)

問題は、この変数を別の場所で定義した後にDEFINE_VVAR(int, count)この変数に整数値を割り当てようとするとcount失敗することです。これは、バージョン5.2以降にカーネルが#define DEFINE_VVAR(type, name)変更されたためです。この変数は整数型ではなく整数配列です。したがって、整数値を割り当てることはできません。問題を解決する方法を知っていますか?#define DEFINE_VVAR(type, name) type name#define DEFINE_VVAR(type, name) type name[CS_BASES]count

VVAR.h:https://elixir.bootlin.com/linux/v5.12/source/arch/x86/include/asm/vvar.h#L43

答え1

DECLARE_VVARアーキテクチャ固有のvDSO実装の詳細なので、DEFINE_VVAR新しいvDSOデータを追加するために使用しないでください。

vDSO変数を追加するには変更する必要があります。struct vdso_data include/vdso/datapage.h(ここでは配列構成の依存関係を見ることができます。これはクロックソースに関連しているため参照CS_BASES)、またはアーキテクチャに関連する場合は関連include/asm/vdso/data.hファイル(現在s390は、これらのファイルにアーキテクチャ固有のvDSOデータを含む唯一のアーキテクチャです。;他のアーキテクチャには異なるアプローチがあります。1つのPowerPC)。

関連情報