From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Howard Chu <howardchu95@gmail.com>
Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org,
kan.liang@linux.intel.com, namhyung@kernel.org,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 07/10] perf trace: Pretty print buffer data
Date: Fri, 23 Aug 2024 11:17:42 -0300 [thread overview]
Message-ID: <ZsiaBnd5KrkGbZ9w@x1> (raw)
In-Reply-To: <20240815013626.935097-8-howardchu95@gmail.com>
On Thu, Aug 15, 2024 at 09:36:23AM +0800, Howard Chu wrote:
> +#define MAX_CONTROL_CHAR 31
> +#define MAX_ASCII 127
> +
> +static size_t syscall_arg__scnprintf_buf(char *bf, size_t size, struct syscall_arg *arg)
> +{
> + char result[TRACE_AUG_MAX_BUF * 4], tens[4];
> + struct augmented_arg *augmented_arg = arg->augmented.args;
> + unsigned char *orig;
> + int i = 0, n, consumed, digits;
> +
> + if (augmented_arg == NULL)
> + return 0;
> +
> + orig = (unsigned char *)augmented_arg->value;
> + n = augmented_arg->size;
> +
> + memset(result, 0, sizeof(result));
> +
> + for (int j = 0; j < n && i < (int)sizeof(result) - 1; ++j) {
> + /* print control characters (0~31 and 127), and non-ascii characters in \(digits) */
> + if (orig[j] <= MAX_CONTROL_CHAR || orig[j] >= MAX_ASCII) {
> + result[i++] = '\\';
> +
> + /* convert to digits */
> + digits = scnprintf(tens, sizeof(result) - i, "%d", (int)orig[j]);
> + if (digits + i <= (int)sizeof(result) - 1) {
> + strncpy(result + i, tens, digits);
> + i += digits;
> + }
> + } else {
> + result[i++] = orig[j];
> + }
> + }
> +
> + consumed = sizeof(*augmented_arg) + augmented_arg->size;
> + arg->augmented.args = ((void *)arg->augmented.args) + consumed;
> + arg->augmented.size -= consumed;
> +
> + return scnprintf(bf, size, "\"%s\"", result);
> +}
Simplified the above to the one below to avoid using multiple buffers
and copying around, now testing:
+#define MAX_CONTROL_CHAR 31
+#define MAX_ASCII 127
+
+static size_t syscall_arg__scnprintf_buf(char *bf, size_t size, struct syscall_arg *arg)
+{
+ struct augmented_arg *augmented_arg = arg->augmented.args;
+ unsigned char *orig = (unsigned char *)augmented_arg->value;
+ size_t printed = 0;
+ int consumed;
+
+ if (augmented_arg == NULL)
+ return 0;
+
+ for (int j = 0; j < augmented_arg->size; ++j) {
+ bool control_char = orig[j] <= MAX_CONTROL_CHAR || orig[j] >= MAX_ASCII;
+ /* print control characters (0~31 and 127), and non-ascii characters in \(digits) */
+ printed += scnprintf(bf + printed, size - printed, control_char ? "\\%d" : "%c", (int)orig[j]);
+ }
+
+ consumed = sizeof(*augmented_arg) + augmented_arg->size;
+ arg->augmented.args = ((void *)arg->augmented.args) + consumed;
+ arg->augmented.size -= consumed;
+
+ return printed;
+}
next prev parent reply other threads:[~2024-08-23 14:17 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-15 1:36 [PATCH v2 00/10] perf trace: Enhanced augmentation for pointer arguments Howard Chu
2024-08-15 1:36 ` [PATCH v2 01/10] perf trace: Fix perf trace -p <PID> Howard Chu
2024-08-15 18:28 ` Ian Rogers
2024-08-16 14:52 ` Arnaldo Carvalho de Melo
2024-08-16 17:25 ` Howard Chu
2024-08-15 1:36 ` [PATCH v2 02/10] perf trace: Change some comments Howard Chu
2024-08-16 14:58 ` Arnaldo Carvalho de Melo
2024-08-15 1:36 ` [PATCH v2 03/10] perf trace: Add trace__bpf_sys_enter_beauty_map() to prepare for fetching data in BPF Howard Chu
2024-08-22 17:49 ` Arnaldo Carvalho de Melo
2024-08-22 17:53 ` Arnaldo Carvalho de Melo
2024-08-22 21:09 ` Arnaldo Carvalho de Melo
2024-08-23 4:09 ` Howard Chu
2024-08-15 1:36 ` [PATCH v2 04/10] perf trace: Add some string arguments' name in syscall_arg_fmt__init_array() Howard Chu
2024-08-22 22:14 ` Arnaldo Carvalho de Melo
2024-08-23 4:37 ` Howard Chu
2024-08-23 13:17 ` Arnaldo Carvalho de Melo
2024-08-15 1:36 ` [PATCH v2 05/10] perf trace: Add a new argument to trace__btf_scnprintf() Howard Chu
2024-08-22 18:00 ` Arnaldo Carvalho de Melo
2024-08-22 18:13 ` Arnaldo Carvalho de Melo
2024-08-23 4:05 ` Howard Chu
2024-08-15 1:36 ` [PATCH v2 06/10] perf trace: Pretty print struct data Howard Chu
2024-08-23 12:41 ` Arnaldo Carvalho de Melo
2024-08-23 13:15 ` Arnaldo Carvalho de Melo
2024-08-15 1:36 ` [PATCH v2 07/10] perf trace: Pretty print buffer data Howard Chu
2024-08-23 14:17 ` Arnaldo Carvalho de Melo [this message]
2024-08-15 1:36 ` [PATCH v2 08/10] perf trace: Add pids_allowed and rename pids_filtered Howard Chu
2024-08-15 1:36 ` [PATCH v2 09/10] perf trace: Collect augmented data using BPF Howard Chu
2024-08-23 13:24 ` Arnaldo Carvalho de Melo
2024-08-23 13:38 ` Arnaldo Carvalho de Melo
2024-08-23 13:42 ` Arnaldo Carvalho de Melo
2024-08-23 14:23 ` Arnaldo Carvalho de Melo
2024-08-15 1:36 ` [PATCH v2 10/10] perf trace: Add general tests for augmented syscalls Howard Chu
2024-08-16 3:15 ` Ian Rogers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZsiaBnd5KrkGbZ9w@x1 \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=howardchu95@gmail.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=namhyung@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).