1*00cc2934SRichard Henderson/* 2*00cc2934SRichard Henderson * Loongarch64 linux replacement vdso. 3*00cc2934SRichard Henderson * 4*00cc2934SRichard Henderson * Copyright 2023 Linaro, Ltd. 5*00cc2934SRichard Henderson * 6*00cc2934SRichard Henderson * SPDX-License-Identifier: GPL-2.0-or-later 7*00cc2934SRichard Henderson */ 8*00cc2934SRichard Henderson 9*00cc2934SRichard Henderson#include <asm/unistd.h> 10*00cc2934SRichard Henderson#include <asm/errno.h> 11*00cc2934SRichard Henderson#include "vdso-asmoffset.h" 12*00cc2934SRichard Henderson 13*00cc2934SRichard Henderson 14*00cc2934SRichard Henderson .text 15*00cc2934SRichard Henderson 16*00cc2934SRichard Henderson.macro endf name 17*00cc2934SRichard Henderson .globl \name 18*00cc2934SRichard Henderson .type \name, @function 19*00cc2934SRichard Henderson .size \name, . - \name 20*00cc2934SRichard Henderson.endm 21*00cc2934SRichard Henderson 22*00cc2934SRichard Henderson.macro vdso_syscall name, nr 23*00cc2934SRichard Henderson\name: 24*00cc2934SRichard Henderson li.w $a7, \nr 25*00cc2934SRichard Henderson syscall 0 26*00cc2934SRichard Henderson jr $ra 27*00cc2934SRichard Hendersonendf \name 28*00cc2934SRichard Henderson.endm 29*00cc2934SRichard Henderson 30*00cc2934SRichard Henderson .cfi_startproc 31*00cc2934SRichard Henderson 32*00cc2934SRichard Hendersonvdso_syscall __vdso_gettimeofday, __NR_gettimeofday 33*00cc2934SRichard Hendersonvdso_syscall __vdso_clock_gettime, __NR_clock_gettime 34*00cc2934SRichard Hendersonvdso_syscall __vdso_clock_getres, __NR_clock_getres 35*00cc2934SRichard Hendersonvdso_syscall __vdso_getcpu, __NR_getcpu 36*00cc2934SRichard Henderson 37*00cc2934SRichard Henderson .cfi_endproc 38*00cc2934SRichard Henderson 39*00cc2934SRichard Henderson/* 40*00cc2934SRichard Henderson * Start the unwind info at least one instruction before the signal 41*00cc2934SRichard Henderson * trampoline, because the unwinder will assume we are returning 42*00cc2934SRichard Henderson * after a call site. 43*00cc2934SRichard Henderson */ 44*00cc2934SRichard Henderson 45*00cc2934SRichard Henderson .cfi_startproc simple 46*00cc2934SRichard Henderson .cfi_signal_frame 47*00cc2934SRichard Henderson 48*00cc2934SRichard Henderson#define B_GR offsetof_sigcontext_gr 49*00cc2934SRichard Henderson#define B_FR sizeof_sigcontext + sizeof_sctx_info + offsetof_fpucontext_fr 50*00cc2934SRichard Henderson 51*00cc2934SRichard Henderson .cfi_def_cfa 2, offsetof_sigcontext 52*00cc2934SRichard Henderson 53*00cc2934SRichard Henderson /* Return address */ 54*00cc2934SRichard Henderson .cfi_return_column 64 55*00cc2934SRichard Henderson .cfi_offset 64, offsetof_sigcontext_pc /* pc */ 56*00cc2934SRichard Henderson 57*00cc2934SRichard Henderson /* Integer registers */ 58*00cc2934SRichard Henderson .cfi_offset 1, B_GR + 1 * 8 59*00cc2934SRichard Henderson .cfi_offset 2, B_GR + 2 * 8 60*00cc2934SRichard Henderson .cfi_offset 3, B_GR + 3 * 8 61*00cc2934SRichard Henderson .cfi_offset 4, B_GR + 4 * 8 62*00cc2934SRichard Henderson .cfi_offset 5, B_GR + 5 * 8 63*00cc2934SRichard Henderson .cfi_offset 6, B_GR + 6 * 8 64*00cc2934SRichard Henderson .cfi_offset 7, B_GR + 7 * 8 65*00cc2934SRichard Henderson .cfi_offset 8, B_GR + 8 * 8 66*00cc2934SRichard Henderson .cfi_offset 9, B_GR + 9 * 8 67*00cc2934SRichard Henderson .cfi_offset 10, B_GR + 10 * 8 68*00cc2934SRichard Henderson .cfi_offset 11, B_GR + 11 * 8 69*00cc2934SRichard Henderson .cfi_offset 12, B_GR + 12 * 8 70*00cc2934SRichard Henderson .cfi_offset 13, B_GR + 13 * 8 71*00cc2934SRichard Henderson .cfi_offset 14, B_GR + 14 * 8 72*00cc2934SRichard Henderson .cfi_offset 15, B_GR + 15 * 8 73*00cc2934SRichard Henderson .cfi_offset 16, B_GR + 16 * 8 74*00cc2934SRichard Henderson .cfi_offset 17, B_GR + 17 * 8 75*00cc2934SRichard Henderson .cfi_offset 18, B_GR + 18 * 8 76*00cc2934SRichard Henderson .cfi_offset 19, B_GR + 19 * 8 77*00cc2934SRichard Henderson .cfi_offset 20, B_GR + 20 * 8 78*00cc2934SRichard Henderson .cfi_offset 21, B_GR + 21 * 8 79*00cc2934SRichard Henderson .cfi_offset 22, B_GR + 22 * 8 80*00cc2934SRichard Henderson .cfi_offset 23, B_GR + 23 * 8 81*00cc2934SRichard Henderson .cfi_offset 24, B_GR + 24 * 8 82*00cc2934SRichard Henderson .cfi_offset 25, B_GR + 25 * 8 83*00cc2934SRichard Henderson .cfi_offset 26, B_GR + 26 * 8 84*00cc2934SRichard Henderson .cfi_offset 27, B_GR + 27 * 8 85*00cc2934SRichard Henderson .cfi_offset 28, B_GR + 28 * 8 86*00cc2934SRichard Henderson .cfi_offset 29, B_GR + 29 * 8 87*00cc2934SRichard Henderson .cfi_offset 30, B_GR + 30 * 8 88*00cc2934SRichard Henderson .cfi_offset 31, B_GR + 31 * 8 89*00cc2934SRichard Henderson 90*00cc2934SRichard Henderson /* Floating point registers */ 91*00cc2934SRichard Henderson .cfi_offset 32, B_FR + 0 92*00cc2934SRichard Henderson .cfi_offset 33, B_FR + 1 * 8 93*00cc2934SRichard Henderson .cfi_offset 34, B_FR + 2 * 8 94*00cc2934SRichard Henderson .cfi_offset 35, B_FR + 3 * 8 95*00cc2934SRichard Henderson .cfi_offset 36, B_FR + 4 * 8 96*00cc2934SRichard Henderson .cfi_offset 37, B_FR + 5 * 8 97*00cc2934SRichard Henderson .cfi_offset 38, B_FR + 6 * 8 98*00cc2934SRichard Henderson .cfi_offset 39, B_FR + 7 * 8 99*00cc2934SRichard Henderson .cfi_offset 40, B_FR + 8 * 8 100*00cc2934SRichard Henderson .cfi_offset 41, B_FR + 9 * 8 101*00cc2934SRichard Henderson .cfi_offset 42, B_FR + 10 * 8 102*00cc2934SRichard Henderson .cfi_offset 43, B_FR + 11 * 8 103*00cc2934SRichard Henderson .cfi_offset 44, B_FR + 12 * 8 104*00cc2934SRichard Henderson .cfi_offset 45, B_FR + 13 * 8 105*00cc2934SRichard Henderson .cfi_offset 46, B_FR + 14 * 8 106*00cc2934SRichard Henderson .cfi_offset 47, B_FR + 15 * 8 107*00cc2934SRichard Henderson .cfi_offset 48, B_FR + 16 * 8 108*00cc2934SRichard Henderson .cfi_offset 49, B_FR + 17 * 8 109*00cc2934SRichard Henderson .cfi_offset 50, B_FR + 18 * 8 110*00cc2934SRichard Henderson .cfi_offset 51, B_FR + 19 * 8 111*00cc2934SRichard Henderson .cfi_offset 52, B_FR + 20 * 8 112*00cc2934SRichard Henderson .cfi_offset 53, B_FR + 21 * 8 113*00cc2934SRichard Henderson .cfi_offset 54, B_FR + 22 * 8 114*00cc2934SRichard Henderson .cfi_offset 55, B_FR + 23 * 8 115*00cc2934SRichard Henderson .cfi_offset 56, B_FR + 24 * 8 116*00cc2934SRichard Henderson .cfi_offset 57, B_FR + 25 * 8 117*00cc2934SRichard Henderson .cfi_offset 58, B_FR + 26 * 8 118*00cc2934SRichard Henderson .cfi_offset 59, B_FR + 27 * 8 119*00cc2934SRichard Henderson .cfi_offset 60, B_FR + 28 * 8 120*00cc2934SRichard Henderson .cfi_offset 61, B_FR + 29 * 8 121*00cc2934SRichard Henderson .cfi_offset 62, B_FR + 30 * 8 122*00cc2934SRichard Henderson .cfi_offset 63, B_FR + 31 * 8 123*00cc2934SRichard Henderson 124*00cc2934SRichard Henderson nop 125*00cc2934SRichard Henderson 126*00cc2934SRichard Henderson__vdso_rt_sigreturn: 127*00cc2934SRichard Henderson li.w $a7, __NR_rt_sigreturn 128*00cc2934SRichard Henderson syscall 0 129*00cc2934SRichard Henderson .cfi_endproc 130*00cc2934SRichard Hendersonendf __vdso_rt_sigreturn 131