/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Kernel { KResultOr Process::sys$dump_backtrace() { dump_backtrace(); return 0; } KResultOr Process::sys$dbgputch(u8 ch) { IO::out8(IO::BOCHS_DEBUG_PORT, ch); return 0; } KResultOr Process::sys$dbgputstr(Userspace characters, size_t size) { if (size <= 0) return 0; if (size > NumericLimits::max()) return EINVAL; auto buffer = UserOrKernelBuffer::for_user_buffer(characters, size); if (!buffer.has_value()) return EFAULT; return buffer.value().read_buffered<1024>(size, [&](u8 const* buffer, size_t buffer_size) { for (size_t i = 0; i < buffer_size; ++i) IO::out8(IO::BOCHS_DEBUG_PORT, buffer[i]); return buffer_size; }); } }