9template<di::concepts::ImplicitLifetime T>
21 explicit UserspacePtr(T* pointer) : m_pointer(pointer) {}
28 return UserspacePtr<T>(pointer);
34 reinterpret_cast<byte*
>(&value.value)));
35 return di::move(value.value);
39 return copy_to_user({
reinterpret_cast<byte const*
>(&value),
sizeof(Value) },
40 reinterpret_cast<byte*
>(m_pointer));
46 T* m_pointer {
nullptr };
Definition unexpected.h:14
Definition userspace_ptr.h:10
auto read() const -> Expected< Value >
Definition userspace_ptr.h:31
auto raw_userspace_pointer() const -> T *
Definition userspace_ptr.h:43
auto write(Value const &value) const -> Expected< void >
Definition userspace_ptr.h:38
static auto create(T *pointer) -> Expected< UserspacePtr< T > >
Definition userspace_ptr.h:24
#define TRY
Definition monad_try.h:23
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto to_uintptr
Definition to_uintptr.h:13
Definition object_pool.h:14
di::StrongInt< VirtualAddressTag > VirtualAddress
Definition virtual_address.h:25
Definition cxx_init.cpp:12
@ BadAddress
Definition error.h:12
auto copy_to_user(di::Span< byte const > kernel_data, byte *userspace_ptr) -> Expected< void >
Definition userspace_access.cpp:33
auto copy_from_user(di::Span< byte const > userspace_data, byte *kernel_ptr) -> Expected< void >
Definition userspace_access.cpp:42
auto tag_invoke(di::Tag< read_file >, DebugFile &, UserspaceBuffer< byte > buffer) -> di::AnySenderOf< usize >
Definition debug_file.cpp:7
auto validate_user_region(mm::VirtualAddress userspace_address, usize count, usize size) -> Expected< void >
Definition userspace_access.cpp:70
di::vocab::Expected< T, di::platform::GenericCode > Expected
Definition error.h:324
Definition in_place_template.h:5