mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-06 05:45:29 +02:00
powerpc/vdso: Merge vdso64 and vdso32 into a single directory
merge vdso64 into vdso32 and rename it vdso. Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/4dbe05cc130f6a0858d09ac72e436c373cb08b70.1642782130.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
d88378d8d2
commit
fd1feade75
|
@ -421,9 +421,9 @@ ifeq ($(KBUILD_EXTMOD),)
|
||||||
prepare: vdso_prepare
|
prepare: vdso_prepare
|
||||||
vdso_prepare: prepare0
|
vdso_prepare: prepare0
|
||||||
$(if $(CONFIG_VDSO32),$(Q)$(MAKE) \
|
$(if $(CONFIG_VDSO32),$(Q)$(MAKE) \
|
||||||
$(build)=arch/powerpc/kernel/vdso32 include/generated/vdso32-offsets.h)
|
$(build)=arch/powerpc/kernel/vdso include/generated/vdso32-offsets.h)
|
||||||
$(if $(CONFIG_PPC64),$(Q)$(MAKE) \
|
$(if $(CONFIG_PPC64),$(Q)$(MAKE) \
|
||||||
$(build)=arch/powerpc/kernel/vdso64 include/generated/vdso64-offsets.h)
|
$(build)=arch/powerpc/kernel/vdso include/generated/vdso64-offsets.h)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
archprepare: checkbin
|
archprepare: checkbin
|
||||||
|
|
|
@ -194,8 +194,8 @@ targets += prom_init_check
|
||||||
clean-files := vmlinux.lds
|
clean-files := vmlinux.lds
|
||||||
|
|
||||||
# Force dependency (incbin is bad)
|
# Force dependency (incbin is bad)
|
||||||
$(obj)/vdso32_wrapper.o : $(obj)/vdso32/vdso32.so.dbg
|
$(obj)/vdso32_wrapper.o : $(obj)/vdso/vdso32.so.dbg
|
||||||
$(obj)/vdso64_wrapper.o : $(obj)/vdso64/vdso64.so.dbg
|
$(obj)/vdso64_wrapper.o : $(obj)/vdso/vdso64.so.dbg
|
||||||
|
|
||||||
# for cleaning
|
# for cleaning
|
||||||
subdir- += vdso32 vdso64
|
subdir- += vdso
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
vdso32.lds
|
vdso32.lds
|
||||||
vdso32.so.dbg
|
vdso32.so.dbg
|
||||||
|
vdso64.lds
|
||||||
|
vdso64.so.dbg
|
|
@ -6,6 +6,7 @@ ARCH_REL_TYPE_ABS := R_PPC_JUMP_SLOT|R_PPC_GLOB_DAT|R_PPC_ADDR32|R_PPC_ADDR24|R_
|
||||||
include $(srctree)/lib/vdso/Makefile
|
include $(srctree)/lib/vdso/Makefile
|
||||||
|
|
||||||
obj-vdso32 = sigtramp32-32.o gettimeofday-32.o datapage-32.o cacheflush-32.o note-32.o getcpu-32.o
|
obj-vdso32 = sigtramp32-32.o gettimeofday-32.o datapage-32.o cacheflush-32.o note-32.o getcpu-32.o
|
||||||
|
obj-vdso64 = sigtramp64-64.o gettimeofday-64.o datapage-64.o cacheflush-64.o note-64.o getcpu-64.o
|
||||||
|
|
||||||
ifneq ($(c-gettimeofday-y),)
|
ifneq ($(c-gettimeofday-y),)
|
||||||
CFLAGS_vgettimeofday-32.o += -include $(c-gettimeofday-y)
|
CFLAGS_vgettimeofday-32.o += -include $(c-gettimeofday-y)
|
||||||
|
@ -15,6 +16,17 @@ ifneq ($(c-gettimeofday-y),)
|
||||||
CFLAGS_vgettimeofday-32.o += -ffreestanding -fasynchronous-unwind-tables
|
CFLAGS_vgettimeofday-32.o += -ffreestanding -fasynchronous-unwind-tables
|
||||||
CFLAGS_REMOVE_vgettimeofday-32.o = $(CC_FLAGS_FTRACE)
|
CFLAGS_REMOVE_vgettimeofday-32.o = $(CC_FLAGS_FTRACE)
|
||||||
CFLAGS_REMOVE_vgettimeofday-32.o += -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc
|
CFLAGS_REMOVE_vgettimeofday-32.o += -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc
|
||||||
|
CFLAGS_vgettimeofday-64.o += -include $(c-gettimeofday-y)
|
||||||
|
CFLAGS_vgettimeofday-64.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)
|
||||||
|
CFLAGS_vgettimeofday-64.o += $(call cc-option, -fno-stack-protector)
|
||||||
|
CFLAGS_vgettimeofday-64.o += -DDISABLE_BRANCH_PROFILING
|
||||||
|
CFLAGS_vgettimeofday-64.o += -ffreestanding -fasynchronous-unwind-tables
|
||||||
|
CFLAGS_REMOVE_vgettimeofday-64.o = $(CC_FLAGS_FTRACE)
|
||||||
|
# Go prior to 1.16.x assumes r30 is not clobbered by any VDSO code. That used to be true
|
||||||
|
# by accident when the VDSO was hand-written asm code, but may not be now that the VDSO is
|
||||||
|
# compiler generated. To avoid breaking Go tell GCC not to use r30. Impact on code
|
||||||
|
# generation is minimal, it will just use r29 instead.
|
||||||
|
CFLAGS_vgettimeofday-64.o += $(call cc-option, -ffixed-r30)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Build rules
|
# Build rules
|
||||||
|
@ -27,6 +39,8 @@ endif
|
||||||
|
|
||||||
targets := $(obj-vdso32) vdso32.so.dbg vgettimeofday-32.o
|
targets := $(obj-vdso32) vdso32.so.dbg vgettimeofday-32.o
|
||||||
obj-vdso32 := $(addprefix $(obj)/, $(obj-vdso32))
|
obj-vdso32 := $(addprefix $(obj)/, $(obj-vdso32))
|
||||||
|
targets += $(obj-vdso64) vdso64.so.dbg vgettimeofday-64.o
|
||||||
|
obj-vdso64 := $(addprefix $(obj)/, $(obj-vdso64))
|
||||||
|
|
||||||
GCOV_PROFILE := n
|
GCOV_PROFILE := n
|
||||||
KCOV_INSTRUMENT := n
|
KCOV_INSTRUMENT := n
|
||||||
|
@ -38,26 +52,42 @@ ccflags-y := -shared -fno-common -fno-builtin -nostdlib -Wl,--hash-style=both
|
||||||
CC32FLAGS := -Wl,-soname=linux-vdso32.so.1 -m32
|
CC32FLAGS := -Wl,-soname=linux-vdso32.so.1 -m32
|
||||||
AS32FLAGS := -D__VDSO32__ -s
|
AS32FLAGS := -D__VDSO32__ -s
|
||||||
|
|
||||||
|
CC64FLAGS := -Wl,-soname=linux-vdso64.so.1
|
||||||
|
AS64FLAGS := -D__VDSO64__ -s
|
||||||
|
|
||||||
targets += vdso32.lds
|
targets += vdso32.lds
|
||||||
CPPFLAGS_vdso32.lds += -P -C -Upowerpc
|
CPPFLAGS_vdso32.lds += -P -C -Upowerpc
|
||||||
|
targets += vdso64.lds
|
||||||
|
CPPFLAGS_vdso64.lds += -P -C -U$(ARCH)
|
||||||
|
|
||||||
# link rule for the .so file, .lds has to be first
|
# link rule for the .so file, .lds has to be first
|
||||||
$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) $(obj)/vgettimeofday-32.o FORCE
|
$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) $(obj)/vgettimeofday-32.o FORCE
|
||||||
$(call if_changed,vdso32ld_and_check)
|
$(call if_changed,vdso32ld_and_check)
|
||||||
|
$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday-64.o FORCE
|
||||||
|
$(call if_changed,vdso64ld_and_check)
|
||||||
|
|
||||||
# assembly rules for the .S files
|
# assembly rules for the .S files
|
||||||
$(obj-vdso32): %-32.o: %.S FORCE
|
$(obj-vdso32): %-32.o: %.S FORCE
|
||||||
$(call if_changed_dep,vdso32as)
|
$(call if_changed_dep,vdso32as)
|
||||||
$(obj)/vgettimeofday-32.o: %-32.o: %.c FORCE
|
$(obj)/vgettimeofday-32.o: %-32.o: %.c FORCE
|
||||||
$(call if_changed_dep,vdso32cc)
|
$(call if_changed_dep,vdso32cc)
|
||||||
|
$(obj-vdso64): %-64.o: %.S FORCE
|
||||||
|
$(call if_changed_dep,vdso64as)
|
||||||
|
$(obj)/vgettimeofday-64.o: %-64.o: %.c FORCE
|
||||||
|
$(call if_changed_dep,cc_o_c)
|
||||||
|
|
||||||
# Generate VDSO offsets using helper script
|
# Generate VDSO offsets using helper script
|
||||||
gen-vdso32sym := $(srctree)/$(src)/gen_vdso32_offsets.sh
|
gen-vdso32sym := $(srctree)/$(src)/gen_vdso32_offsets.sh
|
||||||
quiet_cmd_vdso32sym = VDSO32SYM $@
|
quiet_cmd_vdso32sym = VDSO32SYM $@
|
||||||
cmd_vdso32sym = $(NM) $< | $(gen-vdso32sym) | LC_ALL=C sort > $@
|
cmd_vdso32sym = $(NM) $< | $(gen-vdso32sym) | LC_ALL=C sort > $@
|
||||||
|
gen-vdso64sym := $(srctree)/$(src)/gen_vdso64_offsets.sh
|
||||||
|
quiet_cmd_vdso64sym = VDSO64SYM $@
|
||||||
|
cmd_vdso64sym = $(NM) $< | $(gen-vdso64sym) | LC_ALL=C sort > $@
|
||||||
|
|
||||||
include/generated/vdso32-offsets.h: $(obj)/vdso32.so.dbg FORCE
|
include/generated/vdso32-offsets.h: $(obj)/vdso32.so.dbg FORCE
|
||||||
$(call if_changed,vdso32sym)
|
$(call if_changed,vdso32sym)
|
||||||
|
include/generated/vdso64-offsets.h: $(obj)/vdso64.so.dbg FORCE
|
||||||
|
$(call if_changed,vdso64sym)
|
||||||
|
|
||||||
# actual build commands
|
# actual build commands
|
||||||
quiet_cmd_vdso32ld_and_check = VDSO32L $@
|
quiet_cmd_vdso32ld_and_check = VDSO32L $@
|
||||||
|
@ -66,3 +96,8 @@ quiet_cmd_vdso32as = VDSO32A $@
|
||||||
cmd_vdso32as = $(VDSOCC) $(a_flags) $(CC32FLAGS) $(AS32FLAGS) -c -o $@ $<
|
cmd_vdso32as = $(VDSOCC) $(a_flags) $(CC32FLAGS) $(AS32FLAGS) -c -o $@ $<
|
||||||
quiet_cmd_vdso32cc = VDSO32C $@
|
quiet_cmd_vdso32cc = VDSO32C $@
|
||||||
cmd_vdso32cc = $(VDSOCC) $(c_flags) $(CC32FLAGS) -c -o $@ $<
|
cmd_vdso32cc = $(VDSOCC) $(c_flags) $(CC32FLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
quiet_cmd_vdso64ld_and_check = VDSO64L $@
|
||||||
|
cmd_vdso64ld_and_check = $(VDSOCC) $(c_flags) $(CC64FLAGS) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) ; $(cmd_vdso_check)
|
||||||
|
quiet_cmd_vdso64as = VDSO64A $@
|
||||||
|
cmd_vdso64as = $(VDSOCC) $(a_flags) $(CC64FLAGS) $(AS64FLAGS) -c -o $@ $<
|
|
@ -7,7 +7,7 @@
|
||||||
.globl vdso32_start, vdso32_end
|
.globl vdso32_start, vdso32_end
|
||||||
.balign PAGE_SIZE
|
.balign PAGE_SIZE
|
||||||
vdso32_start:
|
vdso32_start:
|
||||||
.incbin "arch/powerpc/kernel/vdso32/vdso32.so.dbg"
|
.incbin "arch/powerpc/kernel/vdso/vdso32.so.dbg"
|
||||||
.balign PAGE_SIZE
|
.balign PAGE_SIZE
|
||||||
vdso32_end:
|
vdso32_end:
|
||||||
|
|
||||||
|
|
3
arch/powerpc/kernel/vdso64/.gitignore
vendored
3
arch/powerpc/kernel/vdso64/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
vdso64.lds
|
|
||||||
vdso64.so.dbg
|
|
|
@ -1,56 +0,0 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
|
||||||
# List of files in the vdso, has to be asm only for now
|
|
||||||
|
|
||||||
ARCH_REL_TYPE_ABS := R_PPC_JUMP_SLOT|R_PPC_GLOB_DAT|R_PPC_ADDR32|R_PPC_ADDR24|R_PPC_ADDR16|R_PPC_ADDR16_LO|R_PPC_ADDR16_HI|R_PPC_ADDR16_HA|R_PPC_ADDR14|R_PPC_ADDR14_BRTAKEN|R_PPC_ADDR14_BRNTAKEN|R_PPC_REL24
|
|
||||||
include $(srctree)/lib/vdso/Makefile
|
|
||||||
|
|
||||||
obj-vdso64 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o getcpu.o
|
|
||||||
|
|
||||||
ifneq ($(c-gettimeofday-y),)
|
|
||||||
CFLAGS_vgettimeofday.o += -include $(c-gettimeofday-y)
|
|
||||||
CFLAGS_vgettimeofday.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)
|
|
||||||
CFLAGS_vgettimeofday.o += $(call cc-option, -fno-stack-protector)
|
|
||||||
CFLAGS_vgettimeofday.o += -DDISABLE_BRANCH_PROFILING
|
|
||||||
CFLAGS_vgettimeofday.o += -ffreestanding -fasynchronous-unwind-tables
|
|
||||||
CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Build rules
|
|
||||||
|
|
||||||
targets := $(obj-vdso64) vdso64.so.dbg vgettimeofday.o
|
|
||||||
obj-vdso64 := $(addprefix $(obj)/, $(obj-vdso64))
|
|
||||||
|
|
||||||
GCOV_PROFILE := n
|
|
||||||
KCOV_INSTRUMENT := n
|
|
||||||
UBSAN_SANITIZE := n
|
|
||||||
KASAN_SANITIZE := n
|
|
||||||
|
|
||||||
ccflags-y := -shared -fno-common -fno-builtin -nostdlib \
|
|
||||||
-Wl,-soname=linux-vdso64.so.1 -Wl,--hash-style=both
|
|
||||||
|
|
||||||
# Go prior to 1.16.x assumes r30 is not clobbered by any VDSO code. That used to be true
|
|
||||||
# by accident when the VDSO was hand-written asm code, but may not be now that the VDSO is
|
|
||||||
# compiler generated. To avoid breaking Go tell GCC not to use r30. Impact on code
|
|
||||||
# generation is minimal, it will just use r29 instead.
|
|
||||||
ccflags-y += $(call cc-option, -ffixed-r30)
|
|
||||||
|
|
||||||
asflags-y := -D__VDSO64__ -s
|
|
||||||
|
|
||||||
targets += vdso64.lds
|
|
||||||
CPPFLAGS_vdso64.lds += -P -C -U$(ARCH)
|
|
||||||
|
|
||||||
# link rule for the .so file, .lds has to be first
|
|
||||||
$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday.o FORCE
|
|
||||||
$(call if_changed,vdso64ld_and_check)
|
|
||||||
|
|
||||||
# Generate VDSO offsets using helper script
|
|
||||||
gen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh
|
|
||||||
quiet_cmd_vdsosym = VDSOSYM $@
|
|
||||||
cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@
|
|
||||||
|
|
||||||
include/generated/vdso64-offsets.h: $(obj)/vdso64.so.dbg FORCE
|
|
||||||
$(call if_changed,vdsosym)
|
|
||||||
|
|
||||||
# actual build commands
|
|
||||||
quiet_cmd_vdso64ld_and_check = VDSO64L $@
|
|
||||||
cmd_vdso64ld_and_check = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^); $(cmd_vdso_check)
|
|
|
@ -1,75 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
||||||
/*
|
|
||||||
* vDSO provided cache flush routines
|
|
||||||
*
|
|
||||||
* Copyright (C) 2004 Benjamin Herrenschmuidt (benh@kernel.crashing.org),
|
|
||||||
* IBM Corp.
|
|
||||||
*/
|
|
||||||
#include <asm/processor.h>
|
|
||||||
#include <asm/ppc_asm.h>
|
|
||||||
#include <asm/vdso.h>
|
|
||||||
#include <asm/vdso_datapage.h>
|
|
||||||
#include <asm/asm-offsets.h>
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Default "generic" version of __kernel_sync_dicache.
|
|
||||||
*
|
|
||||||
* void __kernel_sync_dicache(unsigned long start, unsigned long end)
|
|
||||||
*
|
|
||||||
* Flushes the data cache & invalidate the instruction cache for the
|
|
||||||
* provided range [start, end[
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_sync_dicache)
|
|
||||||
.cfi_startproc
|
|
||||||
BEGIN_FTR_SECTION
|
|
||||||
b 3f
|
|
||||||
END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
|
|
||||||
mflr r12
|
|
||||||
.cfi_register lr,r12
|
|
||||||
get_datapage r10
|
|
||||||
mtlr r12
|
|
||||||
.cfi_restore lr
|
|
||||||
|
|
||||||
lwz r7,CFG_DCACHE_BLOCKSZ(r10)
|
|
||||||
addi r5,r7,-1
|
|
||||||
andc r6,r3,r5 /* round low to line bdy */
|
|
||||||
subf r8,r6,r4 /* compute length */
|
|
||||||
add r8,r8,r5 /* ensure we get enough */
|
|
||||||
lwz r9,CFG_DCACHE_LOGBLOCKSZ(r10)
|
|
||||||
srd. r8,r8,r9 /* compute line count */
|
|
||||||
crclr cr0*4+so
|
|
||||||
beqlr /* nothing to do? */
|
|
||||||
mtctr r8
|
|
||||||
1: dcbst 0,r6
|
|
||||||
add r6,r6,r7
|
|
||||||
bdnz 1b
|
|
||||||
sync
|
|
||||||
|
|
||||||
/* Now invalidate the instruction cache */
|
|
||||||
|
|
||||||
lwz r7,CFG_ICACHE_BLOCKSZ(r10)
|
|
||||||
addi r5,r7,-1
|
|
||||||
andc r6,r3,r5 /* round low to line bdy */
|
|
||||||
subf r8,r6,r4 /* compute length */
|
|
||||||
add r8,r8,r5
|
|
||||||
lwz r9,CFG_ICACHE_LOGBLOCKSZ(r10)
|
|
||||||
srd. r8,r8,r9 /* compute line count */
|
|
||||||
crclr cr0*4+so
|
|
||||||
beqlr /* nothing to do? */
|
|
||||||
mtctr r8
|
|
||||||
2: icbi 0,r6
|
|
||||||
add r6,r6,r7
|
|
||||||
bdnz 2b
|
|
||||||
isync
|
|
||||||
li r3,0
|
|
||||||
blr
|
|
||||||
3:
|
|
||||||
crclr cr0*4+so
|
|
||||||
sync
|
|
||||||
isync
|
|
||||||
li r3,0
|
|
||||||
blr
|
|
||||||
.cfi_endproc
|
|
||||||
V_FUNCTION_END(__kernel_sync_dicache)
|
|
|
@ -1,59 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
||||||
/*
|
|
||||||
* Access to the shared data page by the vDSO & syscall map
|
|
||||||
*
|
|
||||||
* Copyright (C) 2004 Benjamin Herrenschmuidt (benh@kernel.crashing.org), IBM Corp.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/processor.h>
|
|
||||||
#include <asm/ppc_asm.h>
|
|
||||||
#include <asm/asm-offsets.h>
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <asm/vdso.h>
|
|
||||||
#include <asm/vdso_datapage.h>
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
/*
|
|
||||||
* void *__kernel_get_syscall_map(unsigned int *syscall_count) ;
|
|
||||||
*
|
|
||||||
* returns a pointer to the syscall map. the map is agnostic to the
|
|
||||||
* size of "long", unlike kernel bitops, it stores bits from top to
|
|
||||||
* bottom so that memory actually contains a linear bitmap
|
|
||||||
* check for syscall N by testing bit (0x80000000 >> (N & 0x1f)) of
|
|
||||||
* 32 bits int at N >> 5.
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_get_syscall_map)
|
|
||||||
.cfi_startproc
|
|
||||||
mflr r12
|
|
||||||
.cfi_register lr,r12
|
|
||||||
mr r4,r3
|
|
||||||
get_datapage r3
|
|
||||||
mtlr r12
|
|
||||||
addi r3,r3,CFG_SYSCALL_MAP64
|
|
||||||
cmpldi cr0,r4,0
|
|
||||||
crclr cr0*4+so
|
|
||||||
beqlr
|
|
||||||
li r0,NR_syscalls
|
|
||||||
stw r0,0(r4)
|
|
||||||
blr
|
|
||||||
.cfi_endproc
|
|
||||||
V_FUNCTION_END(__kernel_get_syscall_map)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* void unsigned long __kernel_get_tbfreq(void);
|
|
||||||
*
|
|
||||||
* returns the timebase frequency in HZ
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_get_tbfreq)
|
|
||||||
.cfi_startproc
|
|
||||||
mflr r12
|
|
||||||
.cfi_register lr,r12
|
|
||||||
get_datapage r3
|
|
||||||
ld r3,CFG_TB_TICKS_PER_SEC(r3)
|
|
||||||
mtlr r12
|
|
||||||
crclr cr0*4+so
|
|
||||||
blr
|
|
||||||
.cfi_endproc
|
|
||||||
V_FUNCTION_END(__kernel_get_tbfreq)
|
|
|
@ -1,33 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Copyright (C) IBM Corporation, 2012
|
|
||||||
*
|
|
||||||
* Author: Anton Blanchard <anton@au.ibm.com>
|
|
||||||
*/
|
|
||||||
#include <asm/ppc_asm.h>
|
|
||||||
#include <asm/vdso.h>
|
|
||||||
|
|
||||||
.text
|
|
||||||
/*
|
|
||||||
* Exact prototype of getcpu
|
|
||||||
*
|
|
||||||
* int __kernel_getcpu(unsigned *cpu, unsigned *node);
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_getcpu)
|
|
||||||
.cfi_startproc
|
|
||||||
mfspr r5,SPRN_SPRG_VDSO_READ
|
|
||||||
cmpdi cr0,r3,0
|
|
||||||
cmpdi cr1,r4,0
|
|
||||||
clrlwi r6,r5,16
|
|
||||||
rlwinm r7,r5,16,31-15,31-0
|
|
||||||
beq cr0,1f
|
|
||||||
stw r6,0(r3)
|
|
||||||
1: beq cr1,2f
|
|
||||||
stw r7,0(r4)
|
|
||||||
2: crclr cr0*4+so
|
|
||||||
li r3,0 /* always success */
|
|
||||||
blr
|
|
||||||
.cfi_endproc
|
|
||||||
V_FUNCTION_END(__kernel_getcpu)
|
|
|
@ -1,58 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
||||||
/*
|
|
||||||
* Userland implementation of gettimeofday() for 64 bits processes in a
|
|
||||||
* ppc64 kernel for use in the vDSO
|
|
||||||
*
|
|
||||||
* Copyright (C) 2004 Benjamin Herrenschmuidt (benh@kernel.crashing.org),
|
|
||||||
* IBM Corp.
|
|
||||||
*/
|
|
||||||
#include <asm/processor.h>
|
|
||||||
#include <asm/ppc_asm.h>
|
|
||||||
#include <asm/vdso.h>
|
|
||||||
#include <asm/vdso_datapage.h>
|
|
||||||
#include <asm/asm-offsets.h>
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <asm/vdso/gettimeofday.h>
|
|
||||||
|
|
||||||
.text
|
|
||||||
/*
|
|
||||||
* Exact prototype of gettimeofday
|
|
||||||
*
|
|
||||||
* int __kernel_gettimeofday(struct timeval *tv, struct timezone *tz);
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_gettimeofday)
|
|
||||||
cvdso_call __c_kernel_gettimeofday
|
|
||||||
V_FUNCTION_END(__kernel_gettimeofday)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Exact prototype of clock_gettime()
|
|
||||||
*
|
|
||||||
* int __kernel_clock_gettime(clockid_t clock_id, struct timespec *tp);
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_clock_gettime)
|
|
||||||
cvdso_call __c_kernel_clock_gettime
|
|
||||||
V_FUNCTION_END(__kernel_clock_gettime)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Exact prototype of clock_getres()
|
|
||||||
*
|
|
||||||
* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res);
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_clock_getres)
|
|
||||||
cvdso_call __c_kernel_clock_getres
|
|
||||||
V_FUNCTION_END(__kernel_clock_getres)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Exact prototype of time()
|
|
||||||
*
|
|
||||||
* time_t time(time *t);
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
V_FUNCTION_BEGIN(__kernel_time)
|
|
||||||
cvdso_call_time __c_kernel_time
|
|
||||||
V_FUNCTION_END(__kernel_time)
|
|
|
@ -1 +0,0 @@
|
||||||
#include "../vdso32/note.S"
|
|
|
@ -1,29 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0
|
|
||||||
/*
|
|
||||||
* Powerpc userspace implementations of gettimeofday() and similar.
|
|
||||||
*/
|
|
||||||
#include <linux/time.h>
|
|
||||||
#include <linux/types.h>
|
|
||||||
|
|
||||||
int __c_kernel_clock_gettime(clockid_t clock, struct __kernel_timespec *ts,
|
|
||||||
const struct vdso_data *vd)
|
|
||||||
{
|
|
||||||
return __cvdso_clock_gettime_data(vd, clock, ts);
|
|
||||||
}
|
|
||||||
|
|
||||||
int __c_kernel_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz,
|
|
||||||
const struct vdso_data *vd)
|
|
||||||
{
|
|
||||||
return __cvdso_gettimeofday_data(vd, tv, tz);
|
|
||||||
}
|
|
||||||
|
|
||||||
int __c_kernel_clock_getres(clockid_t clock_id, struct __kernel_timespec *res,
|
|
||||||
const struct vdso_data *vd)
|
|
||||||
{
|
|
||||||
return __cvdso_clock_getres_data(vd, clock_id, res);
|
|
||||||
}
|
|
||||||
|
|
||||||
__kernel_old_time_t __c_kernel_time(__kernel_old_time_t *time, const struct vdso_data *vd)
|
|
||||||
{
|
|
||||||
return __cvdso_time_data(vd, time);
|
|
||||||
}
|
|
|
@ -7,7 +7,7 @@
|
||||||
.globl vdso64_start, vdso64_end
|
.globl vdso64_start, vdso64_end
|
||||||
.balign PAGE_SIZE
|
.balign PAGE_SIZE
|
||||||
vdso64_start:
|
vdso64_start:
|
||||||
.incbin "arch/powerpc/kernel/vdso64/vdso64.so.dbg"
|
.incbin "arch/powerpc/kernel/vdso/vdso64.so.dbg"
|
||||||
.balign PAGE_SIZE
|
.balign PAGE_SIZE
|
||||||
vdso64_end:
|
vdso64_end:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user