From 66f7eb91e90fbc6db51aad1e25e72c66f998af06 Mon Sep 17 00:00:00 2001 From: Shubhangi Ingle Date: Wed, 3 Jan 2024 19:22:15 +0530 Subject: [PATCH] Pseudo Random number generation update Issue: #236 --- .vscode/settings.json | 2 +- src/arch/riscv/32/i/terravisor/arch.c | 11 +++++++++++ src/arch/riscv/32/i/terravisor/include/arch.h | 1 + src/arch/riscv/32/i/terravisor/init.c | 3 ++- src/platform/sifive/common_fe310/platform/platform.c | 6 ++++-- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index afd7a788..a87eceea 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,7 +20,7 @@ "editor.trimAutoWhitespace": true, "editor.autoClosingQuotes": "always", "editor.autoClosingBrackets": "always", - "editor.wordBasedSuggestions": true, + "editor.wordBasedSuggestions": "matchingDocuments", "editor.insertSpaces": false, "editor.autoIndent": "advanced", "editor.detectIndentation": true, diff --git a/src/arch/riscv/32/i/terravisor/arch.c b/src/arch/riscv/32/i/terravisor/arch.c index e5196892..45f41db4 100644 --- a/src/arch/riscv/32/i/terravisor/arch.c +++ b/src/arch/riscv/32/i/terravisor/arch.c @@ -16,6 +16,7 @@ #include #include #include +#include static void arch_vcall_handler() { @@ -160,3 +161,13 @@ _WEAK void arch_unhandled_irq() while(1) arch_wfi(); } +/** + * arch_rseed_capture + * + * @brief This function is intended to capture unique seed value + */ +void arch_rseed_capture() +{ + extern uintptr_t *_bss_start; + srand(*_bss_start); +} diff --git a/src/arch/riscv/32/i/terravisor/include/arch.h b/src/arch/riscv/32/i/terravisor/include/arch.h index c60066f7..58751f2e 100644 --- a/src/arch/riscv/32/i/terravisor/include/arch.h +++ b/src/arch/riscv/32/i/terravisor/include/arch.h @@ -181,3 +181,4 @@ static inline void arch_dmb() bool arch_suspended_state_was(cpu_sleep_t); void arch_signal_suspend(cpu_sleep_t); void arch_signal_resume(void); +void arch_rseed_capture(); diff --git a/src/arch/riscv/32/i/terravisor/init.c b/src/arch/riscv/32/i/terravisor/init.c index bda25383..f6b780bb 100644 --- a/src/arch/riscv/32/i/terravisor/init.c +++ b/src/arch/riscv/32/i/terravisor/init.c @@ -24,8 +24,9 @@ void _NAKED init() { arch_di(); asm volatile("la tp, _tls_start"); + /* Capture unique seed value before memory initialization */ + arch_rseed_capture(); /* Boot framework */ - #if CCSMP == 0 engine(); #else diff --git a/src/platform/sifive/common_fe310/platform/platform.c b/src/platform/sifive/common_fe310/platform/platform.c index db5f52b6..a1ac700d 100644 --- a/src/platform/sifive/common_fe310/platform/platform.c +++ b/src/platform/sifive/common_fe310/platform/platform.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -20,15 +21,17 @@ #include #include + void platform_early_setup() { status_t ret = success; - + unsigned int temp_randomnumber = rand(); ret |= platform_copy_data(); ret |= platform_copy_itim(); ret |= platform_bss_clear(); ret |= platform_init_heap(); ret |= platform_resources_setup(); + srand(temp_randomnumber); syslog_stdout_disable(); driver_setup("mslog"); @@ -110,4 +113,3 @@ void platform_cpu_setup() arch_ei(); return; } -