user: implement mlibc as the libc, finally.
It's finally done.. Signed-off-by: kaguya <vpshinomiya@protonmail.com>
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
#ifndef MLIBC_ARCH_DEFS_HPP
|
||||
#define MLIBC_ARCH_DEFS_HPP
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
namespace mlibc {
|
||||
|
||||
inline constexpr size_t page_size = 0x1000;
|
||||
|
||||
} // namespace mlibc
|
||||
|
||||
#endif // MLIBC_ARCH_DEFS_HPP
|
||||
@@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <mlibc/tcb.hpp>
|
||||
#include <bits/ensure.h>
|
||||
|
||||
namespace mlibc {
|
||||
|
||||
inline Tcb *get_current_tcb() {
|
||||
// On RISC-V, the TCB is below the thread pointer.
|
||||
uintptr_t tp = (uintptr_t)__builtin_thread_pointer();
|
||||
auto tcb = reinterpret_cast<Tcb *>(tp - sizeof(Tcb));
|
||||
__ensure(tcb == tcb->selfPointer);
|
||||
return tcb;
|
||||
}
|
||||
|
||||
inline uintptr_t get_sp() {
|
||||
uintptr_t sp;
|
||||
asm volatile ("mv %0, sp" : "=r"(sp));
|
||||
return sp;
|
||||
}
|
||||
|
||||
} // namespace mlibc
|
||||
@@ -0,0 +1,22 @@
|
||||
#ifndef _MLIBC_SYS_HWPROBE_H
|
||||
#define _MLIBC_SYS_HWPROBE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <abi-bits/riscv-hwprobe.h>
|
||||
#include <bits/cpu_set.h>
|
||||
#include <bits/size_t.h>
|
||||
|
||||
int __riscv_hwprobe(struct riscv_hwprobe *pairs, size_t pair_count, size_t cpusetsize, cpu_set_t *cpus,
|
||||
unsigned int flags);
|
||||
|
||||
typedef int (*__riscv_hwprobe_t)(struct riscv_hwprobe *pairs, size_t pair_count,
|
||||
size_t cpusetsize, cpu_set_t *cpus, unsigned int flags);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _MLIBC_SYS_HWPROBE_H */
|
||||
Reference in New Issue
Block a user