From f1f452b3cf30baba2dfb14fa6fb2f270e2cab5b9 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Mon, 1 Jul 2019 14:10:32 -0500 Subject: [PATCH] libroot/os: Fix missing time funcs on riscv64 Change-Id: I291ebc949d63860e20eb609e4d3d2f600309d4e9 Reviewed-on: https://review.haiku-os.org/c/1553 Reviewed-by: Alex von Gluck IV Reviewed-by: Adrien Destugues --- src/system/libroot/os/arch/riscv64/Jamfile | 4 +++ .../libroot/os/arch/riscv64/stack_frame.c | 25 ++++++++++++++ .../libroot/os/arch/riscv64/system_time.c | 33 +++++++++++++++++++ src/system/libroot/os/arch/riscv64/time.c | 32 ++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 src/system/libroot/os/arch/riscv64/stack_frame.c create mode 100644 src/system/libroot/os/arch/riscv64/system_time.c create mode 100644 src/system/libroot/os/arch/riscv64/time.c diff --git a/src/system/libroot/os/arch/riscv64/Jamfile b/src/system/libroot/os/arch/riscv64/Jamfile index 330af393f7..64aa1a8422 100644 --- a/src/system/libroot/os/arch/riscv64/Jamfile +++ b/src/system/libroot/os/arch/riscv64/Jamfile @@ -13,7 +13,11 @@ for architectureObject in [ MultiArchSubDirSetup riscv64 ] { SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) generic ] ; MergeObject <$(architecture)>os_arch_$(TARGET_ARCH).o : + stack_frame.c + system_time.c + tls.c + time.c thread.c generic_atomic.cpp diff --git a/src/system/libroot/os/arch/riscv64/stack_frame.c b/src/system/libroot/os/arch/riscv64/stack_frame.c new file mode 100644 index 0000000000..d5db3c3f4d --- /dev/null +++ b/src/system/libroot/os/arch/riscv64/stack_frame.c @@ -0,0 +1,25 @@ +/* + * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. +*/ + +#include + +#include + + +void* +get_stack_frame(void) +{ + // TODO: Implement! + return NULL; +} + + +void* +__arch_get_caller(void) +{ + // TODO: Implement! + return NULL; +} + diff --git a/src/system/libroot/os/arch/riscv64/system_time.c b/src/system/libroot/os/arch/riscv64/system_time.c new file mode 100644 index 0000000000..fda8bd75e8 --- /dev/null +++ b/src/system/libroot/os/arch/riscv64/system_time.c @@ -0,0 +1,33 @@ +/* + * Copyright 2012, Haiku, Inc. + * Distributed under the terms of the MIT License. + * + * Authors: + * François Revol + */ + +#include + +#include +#include +#include + +static vint32 *sConversionFactor; + +//XXX: this is a hack +// remove me when platform code works +static int64 +__riscv64_get_time_base(void) +{ + static uint64 time_dilation_field = 0; + return time_dilation_field++; +} + +bigtime_t +system_time(void) +{ + uint64 timeBase = __riscv64_get_time_base(); + + uint32 cv = sConversionFactor ? *sConversionFactor : 0; + return (timeBase >> 32) * cv + (((timeBase & 0xffffffff) * cv) >> 32); +} diff --git a/src/system/libroot/os/arch/riscv64/time.c b/src/system/libroot/os/arch/riscv64/time.c new file mode 100644 index 0000000000..f365904c03 --- /dev/null +++ b/src/system/libroot/os/arch/riscv64/time.c @@ -0,0 +1,32 @@ +/* + * Copyright 2006, Ingo Weinhold . + * Distributed under the terms of the MIT License. + */ + +#include + +#include +#include +#include + + +static struct arch_real_time_data *sRealTimeData; + +void +__arch_init_time(struct real_time_data *data, bool setDefaults) +{ + sRealTimeData = &data->arch_data; + + if (setDefaults) { + sRealTimeData->system_time_conversion_factor = 1000000000LL; + } + + // __riscv64_setup_system_time(&sRealTimeData->system_time_conversion_factor); +} + + +bigtime_t +__arch_get_system_time_offset(struct real_time_data *data) +{ + return 0; +}