Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/riscv/sys/__vdso_gettc.c
- This file was added.
/*- | |||||
* Copyright (c) 2021 Jessica Clarke | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
*/ | |||||
#include <sys/cdefs.h> | |||||
__FBSDID("$FreeBSD$"); | |||||
mhorne: Nit: not required for new files | |||||
impUnsubmitted Not Done Inline Actionsfor new files that won't be MFC'd to stable/12..... I don't think this will be, given the riscv support in 12 isn't so good (IIRC, I might be wrong), but thought I'd mention in case I am wrong. imp: for new files that won't be MFC'd to stable/12..... I don't think this will be, given the riscv… | |||||
mhorneUnsubmitted Not Done Inline ActionsThat's right, there's no point bringing this past stable/13, but the precision is helpful. mhorne: That's right, there's no point bringing this past stable/13, but the precision is helpful. | |||||
#include <sys/types.h> | |||||
#include <sys/elf.h> | |||||
#include <sys/time.h> | |||||
#include <sys/vdso.h> | |||||
#include <machine/riscvreg.h> | |||||
#include <errno.h> | |||||
#include "libc_private.h" | |||||
#pragma weak __vdso_gettc | |||||
int | |||||
__vdso_gettc(const struct vdso_timehands *th, u_int *tc) | |||||
{ | |||||
if (th->th_algo != VDSO_TH_ALGO_RISCV_RDTIME) | |||||
return (ENOSYS); | |||||
*tc = csr_read(time); | |||||
return (0); | |||||
Done Inline ActionsHm, plain csr_read might be more appropriate given the result is put in a u_int, though it's a bit academic given we don't support RV32. The two are the same on RV64 but on RV32 it'll loop until it reads a consistent time and timeh to get a 64-bit value from two 32-bit CSRs and then throw away the upper half. jrtc27: Hm, plain csr_read might be more appropriate given the result is put in a u_int, though it's a… | |||||
} | |||||
#pragma weak __vdso_gettimekeep | |||||
int | |||||
__vdso_gettimekeep(struct vdso_timekeep **tk) | |||||
{ | |||||
return (_elf_aux_info(AT_TIMEKEEP, tk, sizeof(*tk))); | |||||
} |
Nit: not required for new files