mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 18:44:01 +00:00
让syscall日志仅支持串口输出
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
#include <clks/kelf.h>
|
#include <clks/kelf.h>
|
||||||
#include <clks/keyboard.h>
|
#include <clks/keyboard.h>
|
||||||
#include <clks/log.h>
|
#include <clks/log.h>
|
||||||
|
#include <clks/serial.h>
|
||||||
#include <clks/scheduler.h>
|
#include <clks/scheduler.h>
|
||||||
#include <clks/service.h>
|
#include <clks/service.h>
|
||||||
#include <clks/string.h>
|
#include <clks/string.h>
|
||||||
@@ -378,6 +379,16 @@ static u64 clks_syscall_log_journal_read(u64 arg0, u64 arg1, u64 arg2) {
|
|||||||
return 1ULL;
|
return 1ULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void clks_syscall_serial_write_hex64(u64 value) {
|
||||||
|
i32 nibble;
|
||||||
|
|
||||||
|
for (nibble = 15; nibble >= 0; nibble--) {
|
||||||
|
u64 current = (value >> (u64)(nibble * 4)) & 0x0FULL;
|
||||||
|
char ch = (current < 10ULL) ? (char)('0' + current) : (char)('A' + (current - 10ULL));
|
||||||
|
clks_serial_write_char(ch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void clks_syscall_trace_user_program(u64 id) {
|
static void clks_syscall_trace_user_program(u64 id) {
|
||||||
clks_bool user_program_running =
|
clks_bool user_program_running =
|
||||||
(clks_exec_is_running() == CLKS_TRUE && clks_exec_current_path_is_user() == CLKS_TRUE)
|
(clks_exec_is_running() == CLKS_TRUE && clks_exec_current_path_is_user() == CLKS_TRUE)
|
||||||
@@ -386,7 +397,7 @@ static void clks_syscall_trace_user_program(u64 id) {
|
|||||||
|
|
||||||
if (user_program_running == CLKS_FALSE) {
|
if (user_program_running == CLKS_FALSE) {
|
||||||
if (clks_syscall_user_trace_active == CLKS_TRUE) {
|
if (clks_syscall_user_trace_active == CLKS_TRUE) {
|
||||||
clks_log(CLKS_LOG_DEBUG, "SYSCALL", "USER_TRACE_END");
|
clks_serial_write("[DEBUG][SYSCALL] USER_TRACE_END\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
clks_syscall_user_trace_active = CLKS_FALSE;
|
clks_syscall_user_trace_active = CLKS_FALSE;
|
||||||
@@ -397,16 +408,20 @@ static void clks_syscall_trace_user_program(u64 id) {
|
|||||||
if (clks_syscall_user_trace_active == CLKS_FALSE) {
|
if (clks_syscall_user_trace_active == CLKS_FALSE) {
|
||||||
clks_syscall_user_trace_active = CLKS_TRUE;
|
clks_syscall_user_trace_active = CLKS_TRUE;
|
||||||
clks_syscall_user_trace_budget = CLKS_SYSCALL_USER_TRACE_BUDGET;
|
clks_syscall_user_trace_budget = CLKS_SYSCALL_USER_TRACE_BUDGET;
|
||||||
clks_log(CLKS_LOG_DEBUG, "SYSCALL", "USER_TRACE_BEGIN");
|
clks_serial_write("[DEBUG][SYSCALL] USER_TRACE_BEGIN\n");
|
||||||
clks_log_hex(CLKS_LOG_DEBUG, "SYSCALL", "PID", clks_exec_current_pid());
|
clks_serial_write("[DEBUG][SYSCALL] PID: 0X");
|
||||||
|
clks_syscall_serial_write_hex64(clks_exec_current_pid());
|
||||||
|
clks_serial_write("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clks_syscall_user_trace_budget > 0ULL) {
|
if (clks_syscall_user_trace_budget > 0ULL) {
|
||||||
clks_log_hex(CLKS_LOG_DEBUG, "SYSCALL", "USER_ID", id);
|
clks_serial_write("[DEBUG][SYSCALL] USER_ID: 0X");
|
||||||
|
clks_syscall_serial_write_hex64(id);
|
||||||
|
clks_serial_write("\n");
|
||||||
clks_syscall_user_trace_budget--;
|
clks_syscall_user_trace_budget--;
|
||||||
|
|
||||||
if (clks_syscall_user_trace_budget == 0ULL) {
|
if (clks_syscall_user_trace_budget == 0ULL) {
|
||||||
clks_log(CLKS_LOG_DEBUG, "SYSCALL", "USER_TRACE_BUDGET_EXHAUSTED");
|
clks_serial_write("[DEBUG][SYSCALL] USER_TRACE_BUDGET_EXHAUSTED\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user