From 2dd5c7d2cc3e5788eb7194a969520f18c6d13e4b Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Wed, 24 Nov 2021 19:52:34 +0100 Subject: [PATCH] strace: Implement dbgputstr syscall --- Userland/Utilities/strace.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Userland/Utilities/strace.cpp b/Userland/Utilities/strace.cpp index 8b300af937..7a48d44dbd 100644 --- a/Userland/Utilities/strace.cpp +++ b/Userland/Utilities/strace.cpp @@ -355,13 +355,16 @@ public: add_argument("{}", forward(arg)); } - void add_string_argument(Syscall::StringArgument const& string_argument) + void add_string_argument(Syscall::StringArgument const& string_argument, StringView trim_by = {}) { if (string_argument.characters == nullptr) add_argument("null"); else { - auto string = copy_from_process(string_argument.characters, string_argument.length); - add_argument("\"{}\"", StringView(string.data(), string.size())); + auto string_buffer = copy_from_process(string_argument.characters, string_argument.length); + auto view = StringView(string_buffer); + if (!trim_by.is_empty()) + view = view.trim(trim_by); + add_argument("\"{}\"", view); } } @@ -659,6 +662,11 @@ static void format_clock_gettime(FormattedSyscallBuilder& builder, clockid_t clo builder.add_arguments(clockid_name(clockid), copy_from_process(time)); } +static void format_dbgputstr(FormattedSyscallBuilder& builder, char* characters, size_t size) +{ + builder.add_string_argument({ characters, size }, "\0\n"sv); +} + static void format_syscall(FormattedSyscallBuilder& builder, Syscall::Function syscall_function, syscall_arg_t arg1, syscall_arg_t arg2, syscall_arg_t arg3, syscall_arg_t res) { enum ResultType { @@ -736,6 +744,9 @@ static void format_syscall(FormattedSyscallBuilder& builder, Syscall::Function s case SC_clock_gettime: format_clock_gettime(builder, (clockid_t)arg1, (struct timespec*)arg2); break; + case SC_dbgputstr: + format_dbgputstr(builder, (char*)arg1, (size_t)arg2); + break; case SC_getuid: case SC_geteuid: case SC_getgid: