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)。