Added hal_cpu_read_timestamp() to the HAL CPU API with x86
implementation using rdtsc and a fallback stub for other arches.
kernel/kaslr.c no longer contains x86 inline assembly — it calls
the generic HAL function for timestamp-based PRNG seeding.
void hal_cpu_disable_interrupts(void);
void hal_cpu_idle(void);
+uint64_t hal_cpu_read_timestamp(void);
+
#endif
__asm__ volatile("hlt");
}
+uint64_t hal_cpu_read_timestamp(void) {
+ uint32_t lo, hi;
+ __asm__ volatile("rdtsc" : "=a"(lo), "=d"(hi));
+ return ((uint64_t)hi << 32) | lo;
+}
+
#else
uintptr_t hal_cpu_get_stack_pointer(void) {
void hal_cpu_idle(void) {
}
+uint64_t hal_cpu_read_timestamp(void) {
+ return 0;
+}
+
#endif
#include "kaslr.h"
+#include "hal/cpu.h"
#include "uart_console.h"
static uint32_t prng_state;
-static inline uint64_t rdtsc(void) {
- uint32_t lo, hi;
- __asm__ volatile("rdtsc" : "=a"(lo), "=d"(hi));
- return ((uint64_t)hi << 32) | lo;
-}
-
void kaslr_init(void) {
- uint64_t tsc = rdtsc();
+ uint64_t tsc = hal_cpu_read_timestamp();
prng_state = (uint32_t)(tsc ^ (tsc >> 32));
if (prng_state == 0) prng_state = 0xDEADBEEF;
uart_print("[KASLR] PRNG seeded from TSC\n");