From: "Yordan Karadzhov (VMware)" <y.karadz@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>, linux-trace-devel@vger.kernel.org
Subject: Re: [PATCH v2 2/4] libtracefs: Implement tracefs_kprobe_raw()
Date: Wed, 30 Jun 2021 22:46:19 +0300 [thread overview]
Message-ID: <83cee0b8-b9c6-849b-291e-b750815de69e@gmail.com> (raw)
In-Reply-To: <20210630154729.129873-3-rostedt@goodmis.org>
On 30.06.21 г. 18:47, Steven Rostedt wrote:
> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
>
> Add a function to facilitate creating a kprobe event. It has the "raw" in
> its name because it still requires knowing the format of the kprobe. But
> does handle the kprobe naming better and writing to the kprobe_event file.
>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
> include/tracefs.h | 4 +++
> src/Makefile | 1 +
> src/tracefs-kprobes.c | 70 +++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 75 insertions(+)
> create mode 100644 src/tracefs-kprobes.c
>
> diff --git a/include/tracefs.h b/include/tracefs.h
> index a21d2d2f22a6..bc504bcb0188 100644
> --- a/include/tracefs.h
> +++ b/include/tracefs.h
> @@ -214,4 +214,8 @@ int tracefs_tracer_clear(struct tracefs_instance *instance);
> ssize_t tracefs_trace_pipe_stream(int fd, struct tracefs_instance *instance, int flags);
> ssize_t tracefs_trace_pipe_print(struct tracefs_instance *instance, int flags);
> void tracefs_trace_pipe_stop(struct tracefs_instance *instance);
> +
> +int tracefs_kprobe_raw(const char *system, const char *event,
> + const char *addr, const char *format);
> +
> #endif /* _TRACE_FS_H */
> diff --git a/src/Makefile b/src/Makefile
> index b4cff07efc50..0697a047f4bc 100644
> --- a/src/Makefile
> +++ b/src/Makefile
> @@ -8,6 +8,7 @@ OBJS += tracefs-instance.o
> OBJS += tracefs-events.o
> OBJS += tracefs-tools.o
> OBJS += tracefs-marker.o
> +OBJS += tracefs-kprobes.o
>
> OBJS := $(OBJS:%.o=$(bdir)/%.o)
> DEPS := $(OBJS:$(bdir)/%.o=$(bdir)/.%.d)
> diff --git a/src/tracefs-kprobes.c b/src/tracefs-kprobes.c
> new file mode 100644
> index 000000000000..e4b28cff9f08
> --- /dev/null
> +++ b/src/tracefs-kprobes.c
> @@ -0,0 +1,70 @@
> +// SPDX-License-Identifier: LGPL-2.1
> +/*
> + * Copyright (C) 2021 VMware Inc, Steven Rostedt <rostedt@goodmis.org>
> + *
> + * Updates:
> + * Copyright (C) 2021, VMware, Tzvetomir Stoyanov <tz.stoyanov@gmail.com>
> + *
> + */
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <dirent.h>
> +#include <unistd.h>
> +#include <errno.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +#include <limits.h>
> +
> +#include "tracefs.h"
> +#include "tracefs-local.h"
> +
> +#define KPROBE_EVENTS "kprobe_events"
> +
> +/**
> + * tracefs_kprobe_raw - Create a kprobe using raw format
> + * @system: The system name (NULL for the default kprobes)
> + * @event: The event to create (NULL to use @addr for the event)
> + * @addr: The function and offset (or address) to insert the probe
> + * @format: The raw format string to define the probe.
> + *
> + * Create a kprobe that will be in the @system group (or kprobes if
> + * @system is NULL). Have the name of @event (or @addr if @event is
> + * NULL). Will be inserted to @addr (function name, with or without
> + * offset, or a address). And the @format will define the raw format
> + * of the kprobe. See the Linux documentation file under:
> + * Documentation/trace/kprobetrace.rst
> + *
> + * Return 0 on success, or -1 on error.
> + * If the syntex of @format was incorrect, running
> + * tracefs_error_last(NULL) may show what went wrong.
> + *
> + * errno will be set to EBADMSG if addr or format is NULL.
> + */
> +int tracefs_kprobe_raw(const char *system, const char *event,
> + const char *addr, const char *format)
> +{
> + char *str;
> + int ret;
> +
> + errno = EBADMSG;
> + if (!addr || !format)
> + return -1;
> +
> + if (!event)
> + event = addr;
> +
> + if (system)
> + ret = asprintf(&str, "p:%s/%s %s %s\n",
> + system, event, addr, format);
> + else
> + ret = asprintf(&str, "p:%s %s %s\n",
> + event, addr, format);
I wonder what will be the way to register a "return value" ("r:")
kprobe. Do you consider having a separate API for them?
Thanks!
Yordan
> +
> + if (ret < 0)
> + return -1;
> +
> + ret = tracefs_instance_file_append(NULL, KPROBE_EVENTS, str);
> + free(str);
> +
> + return ret < 0 ? ret : 0;
> +}
>
next prev parent reply other threads:[~2021-06-30 19:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-30 15:47 [PATCH v2 0/4] libtracefs: Facilitate adding and removing kprobes Steven Rostedt
2021-06-30 15:47 ` [PATCH v2 1/4] libtracefs: Implement tracefs_instances() Steven Rostedt
2021-06-30 15:47 ` [PATCH v2 2/4] libtracefs: Implement tracefs_kprobe_raw() Steven Rostedt
2021-06-30 19:46 ` Yordan Karadzhov (VMware) [this message]
2021-06-30 19:53 ` Steven Rostedt
2021-06-30 20:05 ` Yordan Karadzhov (VMware)
2021-06-30 15:47 ` [PATCH v2 3/4] libtracefs: Implement tracefs_kprobe_clear() to remove all kprobes Steven Rostedt
2021-06-30 15:47 ` [PATCH v2 4/4] libtracefs: Implement tracefs_kprobe_clear_probe() Steven Rostedt
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=83cee0b8-b9c6-849b-291e-b750815de69e@gmail.com \
--to=y.karadz@gmail.com \
--cc=linux-trace-devel@vger.kernel.org \
--cc=rostedt@goodmis.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).