如何在 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_VVARDEFINE_VVAR是特定于架构的 vDSO 实现细节,您不应使用它们来添加新的 vDSO 数据。

要添加 vDSO 变量,您应该修改struct vdso_data include/vdso/datapage.h(您将在那里看到数组构造的相关性;它与时钟源相关,因此引用CS_BASES),或者如果它是特定于架构的,则相关include/asm/vdso/data.h文件(当前,s390 是唯一在此类文件中包含架构特定 vDSO 数据的架构;其他架构有不同的方法,请参阅PowerPC 一台)。

相关内容