Commit 2bb79470 authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Thomas Gleixner
Browse files

ARM: vdso: Remove assembly for datapage access



vdso/datapage.h provides a hidden declaration for _vdso_data.
When using it the compiler will automatically generate PC-relative
accesses which avoids the need for a custom assembly-based accessor.

Signed-off-by: default avatarThomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20241010-vdso-generic-base-v1-7-b64f0842d512@linutronix.de
parent d34b6075
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -15,8 +15,6 @@

#define VDSO_HAS_CLOCK_GETRES		1

extern struct vdso_data *__get_datapage(void);

static __always_inline int gettimeofday_fallback(
				struct __kernel_old_timeval *_tv,
				struct timezone *_tz)
@@ -139,7 +137,7 @@ static __always_inline u64 __arch_get_hw_counter(int clock_mode,

static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
{
	return __get_datapage();
	return _vdso_data;
}

#endif /* !__ASSEMBLY__ */
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ include $(srctree)/lib/vdso/Makefile

hostprogs := vdsomunge

obj-vdso := vgettimeofday.o datapage.o note.o
obj-vdso := vgettimeofday.o note.o

# Build rules
targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds

arch/arm/vdso/datapage.S

deleted100644 → 0
+0 −16
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#include <linux/linkage.h>
#include <asm/asm-offsets.h>

	.align 2
.L_vdso_data_ptr:
	.long	_start - . - VDSO_DATA_SIZE

ENTRY(__get_datapage)
	.fnstart
	adr	r0, .L_vdso_data_ptr
	ldr	r1, [r0]
	add	r0, r0, r1
	bx	lr
	.fnend
ENDPROC(__get_datapage)
+2 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
 */

#include <linux/const.h>
#include <asm/asm-offsets.h>
#include <asm/page.h>
#include <asm/vdso.h>

@@ -19,7 +20,7 @@ OUTPUT_ARCH(arm)

SECTIONS
{
	PROVIDE(_start = .);
	PROVIDE(_vdso_data = . - VDSO_DATA_SIZE);

	. = SIZEOF_HEADERS;