diff options
Diffstat (limited to 'tools/lib')
36 files changed, 2598 insertions, 1980 deletions
diff --git a/tools/lib/api/fs/tracing_path.c b/tools/lib/api/fs/tracing_path.c index 120037496f77..5afb11b30fca 100644 --- a/tools/lib/api/fs/tracing_path.c +++ b/tools/lib/api/fs/tracing_path.c @@ -36,7 +36,7 @@ static const char *tracing_path_tracefs_mount(void)  	__tracing_path_set("", mnt); -	return mnt; +	return tracing_path;  }  static const char *tracing_path_debugfs_mount(void) @@ -49,7 +49,7 @@ static const char *tracing_path_debugfs_mount(void)  	__tracing_path_set("tracing/", mnt); -	return mnt; +	return tracing_path;  }  const char *tracing_path_mount(void) diff --git a/tools/lib/bpf/Build b/tools/lib/bpf/Build index 13a861135127..7bc31c905018 100644 --- a/tools/lib/bpf/Build +++ b/tools/lib/bpf/Build @@ -1 +1 @@ -libbpf-y := libbpf.o bpf.o nlattr.o btf.o libbpf_errno.o +libbpf-y := libbpf.o bpf.o nlattr.o btf.o libbpf_errno.o str_error.o netlink.o diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile index d49902e818b5..425b480bda75 100644 --- a/tools/lib/bpf/Makefile +++ b/tools/lib/bpf/Makefile @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: GPL-2.0 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)  # Most of this file is copied from tools/lib/traceevent/Makefile  BPF_VERSION = 0 @@ -69,7 +69,7 @@ FEATURE_USER = .libbpf  FEATURE_TESTS = libelf libelf-mmap bpf reallocarray  FEATURE_DISPLAY = libelf bpf -INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi -I$(srctree)/tools/perf +INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi  FEATURE_CHECK_CFLAGS-bpf = $(INCLUDES)  check_feat := 1 @@ -125,6 +125,7 @@ override CFLAGS += $(EXTRA_WARNINGS)  override CFLAGS += -Werror -Wall  override CFLAGS += -fPIC  override CFLAGS += $(INCLUDES) +override CFLAGS += -fvisibility=hidden  ifeq ($(VERBOSE),1)    Q = diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 60aa4ca8b2c5..03f9bcc4ef50 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1 +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)  /*   * common eBPF ELF operations. @@ -28,16 +28,8 @@  #include <linux/bpf.h>  #include "bpf.h"  #include "libbpf.h" -#include "nlattr.h" -#include <linux/rtnetlink.h> -#include <linux/if_link.h> -#include <sys/socket.h>  #include <errno.h> -#ifndef SOL_NETLINK -#define SOL_NETLINK 270 -#endif -  /*   * When building perf, unistd.h is overridden. __NR_bpf is   * required to be defined explicitly. @@ -286,6 +278,18 @@ int bpf_map_lookup_elem(int fd, const void *key, void *value)  	return sys_bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));  } +int bpf_map_lookup_and_delete_elem(int fd, const void *key, void *value) +{ +	union bpf_attr attr; + +	bzero(&attr, sizeof(attr)); +	attr.map_fd = fd; +	attr.key = ptr_to_u64(key); +	attr.value = ptr_to_u64(value); + +	return sys_bpf(BPF_MAP_LOOKUP_AND_DELETE_ELEM, &attr, sizeof(attr)); +} +  int bpf_map_delete_elem(int fd, const void *key)  {  	union bpf_attr attr; @@ -499,127 +503,6 @@ int bpf_raw_tracepoint_open(const char *name, int prog_fd)  	return sys_bpf(BPF_RAW_TRACEPOINT_OPEN, &attr, sizeof(attr));  } -int bpf_set_link_xdp_fd(int ifindex, int fd, __u32 flags) -{ -	struct sockaddr_nl sa; -	int sock, seq = 0, len, ret = -1; -	char buf[4096]; -	struct nlattr *nla, *nla_xdp; -	struct { -		struct nlmsghdr  nh; -		struct ifinfomsg ifinfo; -		char             attrbuf[64]; -	} req; -	struct nlmsghdr *nh; -	struct nlmsgerr *err; -	socklen_t addrlen; -	int one = 1; - -	memset(&sa, 0, sizeof(sa)); -	sa.nl_family = AF_NETLINK; - -	sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); -	if (sock < 0) { -		return -errno; -	} - -	if (setsockopt(sock, SOL_NETLINK, NETLINK_EXT_ACK, -		       &one, sizeof(one)) < 0) { -		fprintf(stderr, "Netlink error reporting not supported\n"); -	} - -	if (bind(sock, (struct sockaddr *)&sa, sizeof(sa)) < 0) { -		ret = -errno; -		goto cleanup; -	} - -	addrlen = sizeof(sa); -	if (getsockname(sock, (struct sockaddr *)&sa, &addrlen) < 0) { -		ret = -errno; -		goto cleanup; -	} - -	if (addrlen != sizeof(sa)) { -		ret = -LIBBPF_ERRNO__INTERNAL; -		goto cleanup; -	} - -	memset(&req, 0, sizeof(req)); -	req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)); -	req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; -	req.nh.nlmsg_type = RTM_SETLINK; -	req.nh.nlmsg_pid = 0; -	req.nh.nlmsg_seq = ++seq; -	req.ifinfo.ifi_family = AF_UNSPEC; -	req.ifinfo.ifi_index = ifindex; - -	/* started nested attribute for XDP */ -	nla = (struct nlattr *)(((char *)&req) -				+ NLMSG_ALIGN(req.nh.nlmsg_len)); -	nla->nla_type = NLA_F_NESTED | IFLA_XDP; -	nla->nla_len = NLA_HDRLEN; - -	/* add XDP fd */ -	nla_xdp = (struct nlattr *)((char *)nla + nla->nla_len); -	nla_xdp->nla_type = IFLA_XDP_FD; -	nla_xdp->nla_len = NLA_HDRLEN + sizeof(int); -	memcpy((char *)nla_xdp + NLA_HDRLEN, &fd, sizeof(fd)); -	nla->nla_len += nla_xdp->nla_len; - -	/* if user passed in any flags, add those too */ -	if (flags) { -		nla_xdp = (struct nlattr *)((char *)nla + nla->nla_len); -		nla_xdp->nla_type = IFLA_XDP_FLAGS; -		nla_xdp->nla_len = NLA_HDRLEN + sizeof(flags); -		memcpy((char *)nla_xdp + NLA_HDRLEN, &flags, sizeof(flags)); -		nla->nla_len += nla_xdp->nla_len; -	} - -	req.nh.nlmsg_len += NLA_ALIGN(nla->nla_len); - -	if (send(sock, &req, req.nh.nlmsg_len, 0) < 0) { -		ret = -errno; -		goto cleanup; -	} - -	len = recv(sock, buf, sizeof(buf), 0); -	if (len < 0) { -		ret = -errno; -		goto cleanup; -	} - -	for (nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, len); -	     nh = NLMSG_NEXT(nh, len)) { -		if (nh->nlmsg_pid != sa.nl_pid) { -			ret = -LIBBPF_ERRNO__WRNGPID; -			goto cleanup; -		} -		if (nh->nlmsg_seq != seq) { -			ret = -LIBBPF_ERRNO__INVSEQ; -			goto cleanup; -		} -		switch (nh->nlmsg_type) { -		case NLMSG_ERROR: -			err = (struct nlmsgerr *)NLMSG_DATA(nh); -			if (!err->error) -				continue; -			ret = err->error; -			nla_dump_errormsg(nh); -			goto cleanup; -		case NLMSG_DONE: -			break; -		default: -			break; -		} -	} - -	ret = 0; - -cleanup: -	close(sock); -	return ret; -} -  int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf, __u32 log_buf_size,  		 bool do_log)  { diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h index 6f38164b2618..26a51538213c 100644 --- a/tools/lib/bpf/bpf.h +++ b/tools/lib/bpf/bpf.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: LGPL-2.1 */ +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */  /*   * common eBPF ELF operations. @@ -20,13 +20,17 @@   * You should have received a copy of the GNU Lesser General Public   * License along with this program; if not,  see <http://www.gnu.org/licenses>   */ -#ifndef __BPF_BPF_H -#define __BPF_BPF_H +#ifndef __LIBBPF_BPF_H +#define __LIBBPF_BPF_H  #include <linux/bpf.h>  #include <stdbool.h>  #include <stddef.h> +#ifndef LIBBPF_API +#define LIBBPF_API __attribute__((visibility("default"))) +#endif +  struct bpf_create_map_attr {  	const char *name;  	enum bpf_map_type map_type; @@ -42,21 +46,24 @@ struct bpf_create_map_attr {  	__u32 inner_map_fd;  }; -int bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr); -int bpf_create_map_node(enum bpf_map_type map_type, const char *name, -			int key_size, int value_size, int max_entries, -			__u32 map_flags, int node); -int bpf_create_map_name(enum bpf_map_type map_type, const char *name, -			int key_size, int value_size, int max_entries, -			__u32 map_flags); -int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size, -		   int max_entries, __u32 map_flags); -int bpf_create_map_in_map_node(enum bpf_map_type map_type, const char *name, -			       int key_size, int inner_map_fd, int max_entries, -			       __u32 map_flags, int node); -int bpf_create_map_in_map(enum bpf_map_type map_type, const char *name, -			  int key_size, int inner_map_fd, int max_entries, -			  __u32 map_flags); +LIBBPF_API int +bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr); +LIBBPF_API int bpf_create_map_node(enum bpf_map_type map_type, const char *name, +				   int key_size, int value_size, +				   int max_entries, __u32 map_flags, int node); +LIBBPF_API int bpf_create_map_name(enum bpf_map_type map_type, const char *name, +				   int key_size, int value_size, +				   int max_entries, __u32 map_flags); +LIBBPF_API int bpf_create_map(enum bpf_map_type map_type, int key_size, +			      int value_size, int max_entries, __u32 map_flags); +LIBBPF_API int bpf_create_map_in_map_node(enum bpf_map_type map_type, +					  const char *name, int key_size, +					  int inner_map_fd, int max_entries, +					  __u32 map_flags, int node); +LIBBPF_API int bpf_create_map_in_map(enum bpf_map_type map_type, +				     const char *name, int key_size, +				     int inner_map_fd, int max_entries, +				     __u32 map_flags);  struct bpf_load_program_attr {  	enum bpf_prog_type prog_type; @@ -69,46 +76,56 @@ struct bpf_load_program_attr {  	__u32 prog_ifindex;  }; +/* Flags to direct loading requirements */ +#define MAPS_RELAX_COMPAT	0x01 +  /* Recommend log buffer size */  #define BPF_LOG_BUF_SIZE (256 * 1024) -int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr, -			   char *log_buf, size_t log_buf_sz); -int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns, -		     size_t insns_cnt, const char *license, -		     __u32 kern_version, char *log_buf, -		     size_t log_buf_sz); -int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns, -		       size_t insns_cnt, int strict_alignment, -		       const char *license, __u32 kern_version, -		       char *log_buf, size_t log_buf_sz, int log_level); +LIBBPF_API int +bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr, +		       char *log_buf, size_t log_buf_sz); +LIBBPF_API int bpf_load_program(enum bpf_prog_type type, +				const struct bpf_insn *insns, size_t insns_cnt, +				const char *license, __u32 kern_version, +				char *log_buf, size_t log_buf_sz); +LIBBPF_API int bpf_verify_program(enum bpf_prog_type type, +				  const struct bpf_insn *insns, +				  size_t insns_cnt, int strict_alignment, +				  const char *license, __u32 kern_version, +				  char *log_buf, size_t log_buf_sz, +				  int log_level); -int bpf_map_update_elem(int fd, const void *key, const void *value, -			__u64 flags); +LIBBPF_API int bpf_map_update_elem(int fd, const void *key, const void *value, +				   __u64 flags); -int bpf_map_lookup_elem(int fd, const void *key, void *value); -int bpf_map_delete_elem(int fd, const void *key); -int bpf_map_get_next_key(int fd, const void *key, void *next_key); -int bpf_obj_pin(int fd, const char *pathname); -int bpf_obj_get(const char *pathname); -int bpf_prog_attach(int prog_fd, int attachable_fd, enum bpf_attach_type type, -		    unsigned int flags); -int bpf_prog_detach(int attachable_fd, enum bpf_attach_type type); -int bpf_prog_detach2(int prog_fd, int attachable_fd, enum bpf_attach_type type); -int bpf_prog_test_run(int prog_fd, int repeat, void *data, __u32 size, -		      void *data_out, __u32 *size_out, __u32 *retval, -		      __u32 *duration); -int bpf_prog_get_next_id(__u32 start_id, __u32 *next_id); -int bpf_map_get_next_id(__u32 start_id, __u32 *next_id); -int bpf_prog_get_fd_by_id(__u32 id); -int bpf_map_get_fd_by_id(__u32 id); -int bpf_btf_get_fd_by_id(__u32 id); -int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len); -int bpf_prog_query(int target_fd, enum bpf_attach_type type, __u32 query_flags, -		   __u32 *attach_flags, __u32 *prog_ids, __u32 *prog_cnt); -int bpf_raw_tracepoint_open(const char *name, int prog_fd); -int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf, __u32 log_buf_size, -		 bool do_log); -int bpf_task_fd_query(int pid, int fd, __u32 flags, char *buf, __u32 *buf_len, -		      __u32 *prog_id, __u32 *fd_type, __u64 *probe_offset, -		      __u64 *probe_addr); -#endif +LIBBPF_API int bpf_map_lookup_elem(int fd, const void *key, void *value); +LIBBPF_API int bpf_map_lookup_and_delete_elem(int fd, const void *key, +					      void *value); +LIBBPF_API int bpf_map_delete_elem(int fd, const void *key); +LIBBPF_API int bpf_map_get_next_key(int fd, const void *key, void *next_key); +LIBBPF_API int bpf_obj_pin(int fd, const char *pathname); +LIBBPF_API int bpf_obj_get(const char *pathname); +LIBBPF_API int bpf_prog_attach(int prog_fd, int attachable_fd, +			       enum bpf_attach_type type, unsigned int flags); +LIBBPF_API int bpf_prog_detach(int attachable_fd, enum bpf_attach_type type); +LIBBPF_API int bpf_prog_detach2(int prog_fd, int attachable_fd, +				enum bpf_attach_type type); +LIBBPF_API int bpf_prog_test_run(int prog_fd, int repeat, void *data, +				 __u32 size, void *data_out, __u32 *size_out, +				 __u32 *retval, __u32 *duration); +LIBBPF_API int bpf_prog_get_next_id(__u32 start_id, __u32 *next_id); +LIBBPF_API int bpf_map_get_next_id(__u32 start_id, __u32 *next_id); +LIBBPF_API int bpf_prog_get_fd_by_id(__u32 id); +LIBBPF_API int bpf_map_get_fd_by_id(__u32 id); +LIBBPF_API int bpf_btf_get_fd_by_id(__u32 id); +LIBBPF_API int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len); +LIBBPF_API int bpf_prog_query(int target_fd, enum bpf_attach_type type, +			      __u32 query_flags, __u32 *attach_flags, +			      __u32 *prog_ids, __u32 *prog_cnt); +LIBBPF_API int bpf_raw_tracepoint_open(const char *name, int prog_fd); +LIBBPF_API int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf, +			    __u32 log_buf_size, bool do_log); +LIBBPF_API int bpf_task_fd_query(int pid, int fd, __u32 flags, char *buf, +				 __u32 *buf_len, __u32 *prog_id, __u32 *fd_type, +				 __u64 *probe_offset, __u64 *probe_addr); +#endif /* __LIBBPF_BPF_H */ diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c index cf94b0770522..449591aa9900 100644 --- a/tools/lib/bpf/btf.c +++ b/tools/lib/bpf/btf.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1 +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)  /* Copyright (c) 2018 Facebook */  #include <stdlib.h> diff --git a/tools/lib/bpf/btf.h b/tools/lib/bpf/btf.h index 4897e0724d4e..b77e7080f7e7 100644 --- a/tools/lib/bpf/btf.h +++ b/tools/lib/bpf/btf.h @@ -1,11 +1,15 @@ -/* SPDX-License-Identifier: LGPL-2.1 */ +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */  /* Copyright (c) 2018 Facebook */ -#ifndef __BPF_BTF_H -#define __BPF_BTF_H +#ifndef __LIBBPF_BTF_H +#define __LIBBPF_BTF_H  #include <linux/types.h> +#ifndef LIBBPF_API +#define LIBBPF_API __attribute__((visibility("default"))) +#endif +  #define BTF_ELF_SEC ".BTF"  struct btf; @@ -14,13 +18,15 @@ struct btf_type;  typedef int (*btf_print_fn_t)(const char *, ...)  	__attribute__((format(printf, 1, 2))); -void btf__free(struct btf *btf); -struct btf *btf__new(__u8 *data, __u32 size, btf_print_fn_t err_log); -__s32 btf__find_by_name(const struct btf *btf, const char *type_name); -const struct btf_type *btf__type_by_id(const struct btf *btf, __u32 id); -__s64 btf__resolve_size(const struct btf *btf, __u32 type_id); -int btf__resolve_type(const struct btf *btf, __u32 type_id); -int btf__fd(const struct btf *btf); -const char *btf__name_by_offset(const struct btf *btf, __u32 offset); +LIBBPF_API void btf__free(struct btf *btf); +LIBBPF_API struct btf *btf__new(__u8 *data, __u32 size, btf_print_fn_t err_log); +LIBBPF_API __s32 btf__find_by_name(const struct btf *btf, +				   const char *type_name); +LIBBPF_API const struct btf_type *btf__type_by_id(const struct btf *btf, +						  __u32 id); +LIBBPF_API __s64 btf__resolve_size(const struct btf *btf, __u32 type_id); +LIBBPF_API int btf__resolve_type(const struct btf *btf, __u32 type_id); +LIBBPF_API int btf__fd(const struct btf *btf); +LIBBPF_API const char *btf__name_by_offset(const struct btf *btf, __u32 offset); -#endif +#endif /* __LIBBPF_BTF_H */ diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 2abd0f112627..b607be7236d3 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1 +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)  /*   * Common eBPF ELF object loading operations. @@ -7,19 +7,6 @@   * Copyright (C) 2015 Wang Nan <wangnan0@huawei.com>   * Copyright (C) 2015 Huawei Inc.   * Copyright (C) 2017 Nicira, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License (not later!) - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not,  see <http://www.gnu.org/licenses>   */  #define _GNU_SOURCE @@ -32,7 +19,6 @@  #include <unistd.h>  #include <fcntl.h>  #include <errno.h> -#include <perf-sys.h>  #include <asm/unistd.h>  #include <linux/err.h>  #include <linux/kernel.h> @@ -40,6 +26,8 @@  #include <linux/btf.h>  #include <linux/list.h>  #include <linux/limits.h> +#include <linux/perf_event.h> +#include <linux/ring_buffer.h>  #include <sys/stat.h>  #include <sys/types.h>  #include <sys/vfs.h> @@ -50,6 +38,7 @@  #include "libbpf.h"  #include "bpf.h"  #include "btf.h" +#include "str_error.h"  #ifndef EM_BPF  #define EM_BPF 247 @@ -181,7 +170,7 @@ static LIST_HEAD(bpf_objects_list);  struct bpf_object {  	char license[64]; -	u32 kern_version; +	__u32 kern_version;  	struct bpf_program *programs;  	size_t nr_programs; @@ -227,7 +216,7 @@ struct bpf_object {  };  #define obj_elf_valid(o)	((o)->efile.elf) -static void bpf_program__unload(struct bpf_program *prog) +void bpf_program__unload(struct bpf_program *prog)  {  	int i; @@ -469,7 +458,8 @@ static int bpf_object__elf_init(struct bpf_object *obj)  		obj->efile.fd = open(obj->path, O_RDONLY);  		if (obj->efile.fd < 0) {  			char errmsg[STRERR_BUFSIZE]; -			char *cp = strerror_r(errno, errmsg, sizeof(errmsg)); +			char *cp = libbpf_strerror_r(errno, errmsg, +						     sizeof(errmsg));  			pr_warning("failed to open %s: %s\n", obj->path, cp);  			return -errno; @@ -551,7 +541,7 @@ static int  bpf_object__init_kversion(struct bpf_object *obj,  			  void *data, size_t size)  { -	u32 kver; +	__u32 kver;  	if (size != sizeof(kver)) {  		pr_warning("invalid kver section in %s\n", obj->path); @@ -573,8 +563,9 @@ static int compare_bpf_map(const void *_a, const void *_b)  }  static int -bpf_object__init_maps(struct bpf_object *obj) +bpf_object__init_maps(struct bpf_object *obj, int flags)  { +	bool strict = !(flags & MAPS_RELAX_COMPAT);  	int i, map_idx, map_def_sz, nr_maps = 0;  	Elf_Scn *scn;  	Elf_Data *data; @@ -696,7 +687,8 @@ bpf_object__init_maps(struct bpf_object *obj)  						   "has unrecognized, non-zero "  						   "options\n",  						   obj->path, map_name); -					return -EINVAL; +					if (strict) +						return -EINVAL;  				}  			}  			memcpy(&obj->maps[map_idx].def, def, @@ -727,7 +719,7 @@ static bool section_have_execinstr(struct bpf_object *obj, int idx)  	return false;  } -static int bpf_object__elf_collect(struct bpf_object *obj) +static int bpf_object__elf_collect(struct bpf_object *obj, int flags)  {  	Elf *elf = obj->efile.elf;  	GElf_Ehdr *ep = &obj->efile.ehdr; @@ -810,8 +802,8 @@ static int bpf_object__elf_collect(struct bpf_object *obj)  						      data->d_size, name, idx);  			if (err) {  				char errmsg[STRERR_BUFSIZE]; -				char *cp = strerror_r(-err, errmsg, -						      sizeof(errmsg)); +				char *cp = libbpf_strerror_r(-err, errmsg, +							     sizeof(errmsg));  				pr_warning("failed to alloc program %s (%s): %s",  					   name, obj->path, cp); @@ -854,7 +846,7 @@ static int bpf_object__elf_collect(struct bpf_object *obj)  		return LIBBPF_ERRNO__FORMAT;  	}  	if (obj->efile.maps_shndx >= 0) { -		err = bpf_object__init_maps(obj); +		err = bpf_object__init_maps(obj, flags);  		if (err)  			goto out;  	} @@ -1140,7 +1132,7 @@ bpf_object__create_maps(struct bpf_object *obj)  		*pfd = bpf_create_map_xattr(&create_attr);  		if (*pfd < 0 && create_attr.btf_key_type_id) { -			cp = strerror_r(errno, errmsg, sizeof(errmsg)); +			cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));  			pr_warning("Error in bpf_create_map_xattr(%s):%s(%d). Retrying without BTF.\n",  				   map->name, cp, errno);  			create_attr.btf_fd = 0; @@ -1155,7 +1147,7 @@ bpf_object__create_maps(struct bpf_object *obj)  			size_t j;  			err = *pfd; -			cp = strerror_r(errno, errmsg, sizeof(errmsg)); +			cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));  			pr_warning("failed to create map (name: '%s'): %s\n",  				   map->name, cp);  			for (j = 0; j < i; j++) @@ -1306,7 +1298,7 @@ static int bpf_object__collect_reloc(struct bpf_object *obj)  static int  load_program(enum bpf_prog_type type, enum bpf_attach_type expected_attach_type,  	     const char *name, struct bpf_insn *insns, int insns_cnt, -	     char *license, u32 kern_version, int *pfd, int prog_ifindex) +	     char *license, __u32 kern_version, int *pfd, int prog_ifindex)  {  	struct bpf_load_program_attr load_attr;  	char *cp, errmsg[STRERR_BUFSIZE]; @@ -1339,7 +1331,7 @@ load_program(enum bpf_prog_type type, enum bpf_attach_type expected_attach_type,  	}  	ret = -LIBBPF_ERRNO__LOAD; -	cp = strerror_r(errno, errmsg, sizeof(errmsg)); +	cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));  	pr_warning("load bpf program failed: %s\n", cp);  	if (log_buf && log_buf[0] != '\0') { @@ -1375,9 +1367,9 @@ out:  	return ret;  } -static int +int  bpf_program__load(struct bpf_program *prog, -		  char *license, u32 kern_version) +		  char *license, __u32 kern_version)  {  	int err = 0, fd, i; @@ -1502,6 +1494,7 @@ static bool bpf_prog_type__needs_kver(enum bpf_prog_type type)  	case BPF_PROG_TYPE_CGROUP_SOCK_ADDR:  	case BPF_PROG_TYPE_LIRC_MODE2:  	case BPF_PROG_TYPE_SK_REUSEPORT: +	case BPF_PROG_TYPE_FLOW_DISSECTOR:  		return false;  	case BPF_PROG_TYPE_UNSPEC:  	case BPF_PROG_TYPE_KPROBE: @@ -1525,7 +1518,7 @@ static int bpf_object__validate(struct bpf_object *obj, bool needs_kver)  static struct bpf_object *  __bpf_object__open(const char *path, void *obj_buf, size_t obj_buf_sz, -		   bool needs_kver) +		   bool needs_kver, int flags)  {  	struct bpf_object *obj;  	int err; @@ -1541,7 +1534,7 @@ __bpf_object__open(const char *path, void *obj_buf, size_t obj_buf_sz,  	CHECK_ERR(bpf_object__elf_init(obj), err, out);  	CHECK_ERR(bpf_object__check_endianness(obj), err, out); -	CHECK_ERR(bpf_object__elf_collect(obj), err, out); +	CHECK_ERR(bpf_object__elf_collect(obj, flags), err, out);  	CHECK_ERR(bpf_object__collect_reloc(obj), err, out);  	CHECK_ERR(bpf_object__validate(obj, needs_kver), err, out); @@ -1552,7 +1545,8 @@ out:  	return ERR_PTR(err);  } -struct bpf_object *bpf_object__open_xattr(struct bpf_object_open_attr *attr) +struct bpf_object *__bpf_object__open_xattr(struct bpf_object_open_attr *attr, +					    int flags)  {  	/* param validation */  	if (!attr->file) @@ -1561,7 +1555,13 @@ struct bpf_object *bpf_object__open_xattr(struct bpf_object_open_attr *attr)  	pr_debug("loading %s\n", attr->file);  	return __bpf_object__open(attr->file, NULL, 0, -				  bpf_prog_type__needs_kver(attr->prog_type)); +				  bpf_prog_type__needs_kver(attr->prog_type), +				  flags); +} + +struct bpf_object *bpf_object__open_xattr(struct bpf_object_open_attr *attr) +{ +	return __bpf_object__open_xattr(attr, 0);  }  struct bpf_object *bpf_object__open(const char *path) @@ -1594,7 +1594,7 @@ struct bpf_object *bpf_object__open_buffer(void *obj_buf,  	pr_debug("loading object '%s' from buffer\n",  		 name); -	return __bpf_object__open(name, obj_buf, obj_buf_sz, true); +	return __bpf_object__open(name, obj_buf, obj_buf_sz, true, true);  }  int bpf_object__unload(struct bpf_object *obj) @@ -1654,7 +1654,7 @@ static int check_path(const char *path)  	dir = dirname(dname);  	if (statfs(dir, &st_fs)) { -		cp = strerror_r(errno, errmsg, sizeof(errmsg)); +		cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));  		pr_warning("failed to statfs %s: %s\n", dir, cp);  		err = -errno;  	} @@ -1690,7 +1690,7 @@ int bpf_program__pin_instance(struct bpf_program *prog, const char *path,  	}  	if (bpf_obj_pin(prog->instances.fds[instance], path)) { -		cp = strerror_r(errno, errmsg, sizeof(errmsg)); +		cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));  		pr_warning("failed to pin program: %s\n", cp);  		return -errno;  	} @@ -1708,7 +1708,7 @@ static int make_dir(const char *path)  		err = -errno;  	if (err) { -		cp = strerror_r(-err, errmsg, sizeof(errmsg)); +		cp = libbpf_strerror_r(-err, errmsg, sizeof(errmsg));  		pr_warning("failed to mkdir %s: %s\n", path, cp);  	}  	return err; @@ -1770,7 +1770,7 @@ int bpf_map__pin(struct bpf_map *map, const char *path)  	}  	if (bpf_obj_pin(map->fd, path)) { -		cp = strerror_r(errno, errmsg, sizeof(errmsg)); +		cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));  		pr_warning("failed to pin map: %s\n", cp);  		return -errno;  	} @@ -2084,57 +2084,90 @@ void bpf_program__set_expected_attach_type(struct bpf_program *prog,  	prog->expected_attach_type = type;  } -#define BPF_PROG_SEC_FULL(string, ptype, atype) \ -	{ string, sizeof(string) - 1, ptype, atype } +#define BPF_PROG_SEC_IMPL(string, ptype, eatype, atype) \ +	{ string, sizeof(string) - 1, ptype, eatype, atype } -#define BPF_PROG_SEC(string, ptype) BPF_PROG_SEC_FULL(string, ptype, 0) +/* Programs that can NOT be attached. */ +#define BPF_PROG_SEC(string, ptype) BPF_PROG_SEC_IMPL(string, ptype, 0, -EINVAL) -#define BPF_S_PROG_SEC(string, ptype) \ -	BPF_PROG_SEC_FULL(string, BPF_PROG_TYPE_CGROUP_SOCK, ptype) +/* Programs that can be attached. */ +#define BPF_APROG_SEC(string, ptype, atype) \ +	BPF_PROG_SEC_IMPL(string, ptype, 0, atype) -#define BPF_SA_PROG_SEC(string, ptype) \ -	BPF_PROG_SEC_FULL(string, BPF_PROG_TYPE_CGROUP_SOCK_ADDR, ptype) +/* Programs that must specify expected attach type at load time. */ +#define BPF_EAPROG_SEC(string, ptype, eatype) \ +	BPF_PROG_SEC_IMPL(string, ptype, eatype, eatype) + +/* Programs that can be attached but attach type can't be identified by section + * name. Kept for backward compatibility. + */ +#define BPF_APROG_COMPAT(string, ptype) BPF_PROG_SEC(string, ptype)  static const struct {  	const char *sec;  	size_t len;  	enum bpf_prog_type prog_type;  	enum bpf_attach_type expected_attach_type; +	enum bpf_attach_type attach_type;  } section_names[] = { -	BPF_PROG_SEC("socket",		BPF_PROG_TYPE_SOCKET_FILTER), -	BPF_PROG_SEC("kprobe/",		BPF_PROG_TYPE_KPROBE), -	BPF_PROG_SEC("kretprobe/",	BPF_PROG_TYPE_KPROBE), -	BPF_PROG_SEC("classifier",	BPF_PROG_TYPE_SCHED_CLS), -	BPF_PROG_SEC("action",		BPF_PROG_TYPE_SCHED_ACT), -	BPF_PROG_SEC("tracepoint/",	BPF_PROG_TYPE_TRACEPOINT), -	BPF_PROG_SEC("raw_tracepoint/",	BPF_PROG_TYPE_RAW_TRACEPOINT), -	BPF_PROG_SEC("xdp",		BPF_PROG_TYPE_XDP), -	BPF_PROG_SEC("perf_event",	BPF_PROG_TYPE_PERF_EVENT), -	BPF_PROG_SEC("cgroup/skb",	BPF_PROG_TYPE_CGROUP_SKB), -	BPF_PROG_SEC("cgroup/sock",	BPF_PROG_TYPE_CGROUP_SOCK), -	BPF_PROG_SEC("cgroup/dev",	BPF_PROG_TYPE_CGROUP_DEVICE), -	BPF_PROG_SEC("lwt_in",		BPF_PROG_TYPE_LWT_IN), -	BPF_PROG_SEC("lwt_out",		BPF_PROG_TYPE_LWT_OUT), -	BPF_PROG_SEC("lwt_xmit",	BPF_PROG_TYPE_LWT_XMIT), -	BPF_PROG_SEC("lwt_seg6local",	BPF_PROG_TYPE_LWT_SEG6LOCAL), -	BPF_PROG_SEC("sockops",		BPF_PROG_TYPE_SOCK_OPS), -	BPF_PROG_SEC("sk_skb",		BPF_PROG_TYPE_SK_SKB), -	BPF_PROG_SEC("sk_msg",		BPF_PROG_TYPE_SK_MSG), -	BPF_PROG_SEC("lirc_mode2",	BPF_PROG_TYPE_LIRC_MODE2), -	BPF_SA_PROG_SEC("cgroup/bind4",	BPF_CGROUP_INET4_BIND), -	BPF_SA_PROG_SEC("cgroup/bind6",	BPF_CGROUP_INET6_BIND), -	BPF_SA_PROG_SEC("cgroup/connect4", BPF_CGROUP_INET4_CONNECT), -	BPF_SA_PROG_SEC("cgroup/connect6", BPF_CGROUP_INET6_CONNECT), -	BPF_SA_PROG_SEC("cgroup/sendmsg4", BPF_CGROUP_UDP4_SENDMSG), -	BPF_SA_PROG_SEC("cgroup/sendmsg6", BPF_CGROUP_UDP6_SENDMSG), -	BPF_S_PROG_SEC("cgroup/post_bind4", BPF_CGROUP_INET4_POST_BIND), -	BPF_S_PROG_SEC("cgroup/post_bind6", BPF_CGROUP_INET6_POST_BIND), +	BPF_PROG_SEC("socket",			BPF_PROG_TYPE_SOCKET_FILTER), +	BPF_PROG_SEC("kprobe/",			BPF_PROG_TYPE_KPROBE), +	BPF_PROG_SEC("kretprobe/",		BPF_PROG_TYPE_KPROBE), +	BPF_PROG_SEC("classifier",		BPF_PROG_TYPE_SCHED_CLS), +	BPF_PROG_SEC("action",			BPF_PROG_TYPE_SCHED_ACT), +	BPF_PROG_SEC("tracepoint/",		BPF_PROG_TYPE_TRACEPOINT), +	BPF_PROG_SEC("raw_tracepoint/",		BPF_PROG_TYPE_RAW_TRACEPOINT), +	BPF_PROG_SEC("xdp",			BPF_PROG_TYPE_XDP), +	BPF_PROG_SEC("perf_event",		BPF_PROG_TYPE_PERF_EVENT), +	BPF_PROG_SEC("lwt_in",			BPF_PROG_TYPE_LWT_IN), +	BPF_PROG_SEC("lwt_out",			BPF_PROG_TYPE_LWT_OUT), +	BPF_PROG_SEC("lwt_xmit",		BPF_PROG_TYPE_LWT_XMIT), +	BPF_PROG_SEC("lwt_seg6local",		BPF_PROG_TYPE_LWT_SEG6LOCAL), +	BPF_APROG_SEC("cgroup_skb/ingress",	BPF_PROG_TYPE_CGROUP_SKB, +						BPF_CGROUP_INET_INGRESS), +	BPF_APROG_SEC("cgroup_skb/egress",	BPF_PROG_TYPE_CGROUP_SKB, +						BPF_CGROUP_INET_EGRESS), +	BPF_APROG_COMPAT("cgroup/skb",		BPF_PROG_TYPE_CGROUP_SKB), +	BPF_APROG_SEC("cgroup/sock",		BPF_PROG_TYPE_CGROUP_SOCK, +						BPF_CGROUP_INET_SOCK_CREATE), +	BPF_EAPROG_SEC("cgroup/post_bind4",	BPF_PROG_TYPE_CGROUP_SOCK, +						BPF_CGROUP_INET4_POST_BIND), +	BPF_EAPROG_SEC("cgroup/post_bind6",	BPF_PROG_TYPE_CGROUP_SOCK, +						BPF_CGROUP_INET6_POST_BIND), +	BPF_APROG_SEC("cgroup/dev",		BPF_PROG_TYPE_CGROUP_DEVICE, +						BPF_CGROUP_DEVICE), +	BPF_APROG_SEC("sockops",		BPF_PROG_TYPE_SOCK_OPS, +						BPF_CGROUP_SOCK_OPS), +	BPF_APROG_SEC("sk_skb/stream_parser",	BPF_PROG_TYPE_SK_SKB, +						BPF_SK_SKB_STREAM_PARSER), +	BPF_APROG_SEC("sk_skb/stream_verdict",	BPF_PROG_TYPE_SK_SKB, +						BPF_SK_SKB_STREAM_VERDICT), +	BPF_APROG_COMPAT("sk_skb",		BPF_PROG_TYPE_SK_SKB), +	BPF_APROG_SEC("sk_msg",			BPF_PROG_TYPE_SK_MSG, +						BPF_SK_MSG_VERDICT), +	BPF_APROG_SEC("lirc_mode2",		BPF_PROG_TYPE_LIRC_MODE2, +						BPF_LIRC_MODE2), +	BPF_APROG_SEC("flow_dissector",		BPF_PROG_TYPE_FLOW_DISSECTOR, +						BPF_FLOW_DISSECTOR), +	BPF_EAPROG_SEC("cgroup/bind4",		BPF_PROG_TYPE_CGROUP_SOCK_ADDR, +						BPF_CGROUP_INET4_BIND), +	BPF_EAPROG_SEC("cgroup/bind6",		BPF_PROG_TYPE_CGROUP_SOCK_ADDR, +						BPF_CGROUP_INET6_BIND), +	BPF_EAPROG_SEC("cgroup/connect4",	BPF_PROG_TYPE_CGROUP_SOCK_ADDR, +						BPF_CGROUP_INET4_CONNECT), +	BPF_EAPROG_SEC("cgroup/connect6",	BPF_PROG_TYPE_CGROUP_SOCK_ADDR, +						BPF_CGROUP_INET6_CONNECT), +	BPF_EAPROG_SEC("cgroup/sendmsg4",	BPF_PROG_TYPE_CGROUP_SOCK_ADDR, +						BPF_CGROUP_UDP4_SENDMSG), +	BPF_EAPROG_SEC("cgroup/sendmsg6",	BPF_PROG_TYPE_CGROUP_SOCK_ADDR, +						BPF_CGROUP_UDP6_SENDMSG),  }; +#undef BPF_PROG_SEC_IMPL  #undef BPF_PROG_SEC -#undef BPF_PROG_SEC_FULL -#undef BPF_S_PROG_SEC -#undef BPF_SA_PROG_SEC +#undef BPF_APROG_SEC +#undef BPF_EAPROG_SEC +#undef BPF_APROG_COMPAT  int libbpf_prog_type_by_name(const char *name, enum bpf_prog_type *prog_type,  			     enum bpf_attach_type *expected_attach_type) @@ -2154,6 +2187,25 @@ int libbpf_prog_type_by_name(const char *name, enum bpf_prog_type *prog_type,  	return -EINVAL;  } +int libbpf_attach_type_by_name(const char *name, +			       enum bpf_attach_type *attach_type) +{ +	int i; + +	if (!name) +		return -EINVAL; + +	for (i = 0; i < ARRAY_SIZE(section_names); i++) { +		if (strncmp(name, section_names[i].sec, section_names[i].len)) +			continue; +		if (section_names[i].attach_type == -EINVAL) +			return -EINVAL; +		*attach_type = section_names[i].attach_type; +		return 0; +	} +	return -EINVAL; +} +  static int  bpf_program__identify_section(struct bpf_program *prog,  			      enum bpf_prog_type *prog_type, @@ -2336,7 +2388,7 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,  		bpf_program__set_expected_attach_type(prog,  						      expected_attach_type); -		if (!bpf_program__is_function_storage(prog, obj) && !first_prog) +		if (!first_prog)  			first_prog = prog;  	} @@ -2363,61 +2415,49 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,  }  enum bpf_perf_event_ret -bpf_perf_event_read_simple(void *mem, unsigned long size, -			   unsigned long page_size, void **buf, size_t *buf_len, -			   bpf_perf_event_print_t fn, void *priv) +bpf_perf_event_read_simple(void *mmap_mem, size_t mmap_size, size_t page_size, +			   void **copy_mem, size_t *copy_size, +			   bpf_perf_event_print_t fn, void *private_data)  { -	volatile struct perf_event_mmap_page *header = mem; +	struct perf_event_mmap_page *header = mmap_mem; +	__u64 data_head = ring_buffer_read_head(header);  	__u64 data_tail = header->data_tail; -	__u64 data_head = header->data_head; -	int ret = LIBBPF_PERF_EVENT_ERROR; -	void *base, *begin, *end; - -	asm volatile("" ::: "memory"); /* in real code it should be smp_rmb() */ -	if (data_head == data_tail) -		return LIBBPF_PERF_EVENT_CONT; - -	base = ((char *)header) + page_size; - -	begin = base + data_tail % size; -	end = base + data_head % size; - -	while (begin != end) { -		struct perf_event_header *ehdr; - -		ehdr = begin; -		if (begin + ehdr->size > base + size) { -			long len = base + size - begin; - -			if (*buf_len < ehdr->size) { -				free(*buf); -				*buf = malloc(ehdr->size); -				if (!*buf) { +	void *base = ((__u8 *)header) + page_size; +	int ret = LIBBPF_PERF_EVENT_CONT; +	struct perf_event_header *ehdr; +	size_t ehdr_size; + +	while (data_head != data_tail) { +		ehdr = base + (data_tail & (mmap_size - 1)); +		ehdr_size = ehdr->size; + +		if (((void *)ehdr) + ehdr_size > base + mmap_size) { +			void *copy_start = ehdr; +			size_t len_first = base + mmap_size - copy_start; +			size_t len_secnd = ehdr_size - len_first; + +			if (*copy_size < ehdr_size) { +				free(*copy_mem); +				*copy_mem = malloc(ehdr_size); +				if (!*copy_mem) { +					*copy_size = 0;  					ret = LIBBPF_PERF_EVENT_ERROR;  					break;  				} -				*buf_len = ehdr->size; +				*copy_size = ehdr_size;  			} -			memcpy(*buf, begin, len); -			memcpy(*buf + len, base, ehdr->size - len); -			ehdr = (void *)*buf; -			begin = base + ehdr->size - len; -		} else if (begin + ehdr->size == base + size) { -			begin = base; -		} else { -			begin += ehdr->size; +			memcpy(*copy_mem, copy_start, len_first); +			memcpy(*copy_mem + len_first, base, len_secnd); +			ehdr = *copy_mem;  		} -		ret = fn(ehdr, priv); +		ret = fn(ehdr, private_data); +		data_tail += ehdr_size;  		if (ret != LIBBPF_PERF_EVENT_CONT)  			break; - -		data_tail += ehdr->size;  	} -	__sync_synchronize(); /* smp_mb() */ -	header->data_tail = data_tail; - +	ring_buffer_write_tail(header, data_tail);  	return ret;  } diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 96c55fac54c3..1f3468dad8b2 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: LGPL-2.1 */ +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */  /*   * Common eBPF ELF object loading operations. @@ -6,22 +6,9 @@   * Copyright (C) 2013-2015 Alexei Starovoitov <ast@kernel.org>   * Copyright (C) 2015 Wang Nan <wangnan0@huawei.com>   * Copyright (C) 2015 Huawei Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License (not later!) - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not,  see <http://www.gnu.org/licenses>   */ -#ifndef __BPF_LIBBPF_H -#define __BPF_LIBBPF_H +#ifndef __LIBBPF_LIBBPF_H +#define __LIBBPF_LIBBPF_H  #include <stdio.h>  #include <stdint.h> @@ -29,6 +16,10 @@  #include <sys/types.h>  // for size_t  #include <linux/bpf.h> +#ifndef LIBBPF_API +#define LIBBPF_API __attribute__((visibility("default"))) +#endif +  enum libbpf_errno {  	__LIBBPF_ERRNO__START = 4000, @@ -46,10 +37,11 @@ enum libbpf_errno {  	LIBBPF_ERRNO__PROGTYPE,	/* Kernel doesn't support this program type */  	LIBBPF_ERRNO__WRNGPID,	/* Wrong pid in netlink message */  	LIBBPF_ERRNO__INVSEQ,	/* Invalid netlink sequence */ +	LIBBPF_ERRNO__NLPARSE,	/* netlink parsing error */  	__LIBBPF_ERRNO__END,  }; -int libbpf_strerror(int err, char *buf, size_t size); +LIBBPF_API int libbpf_strerror(int err, char *buf, size_t size);  /*   * __printf is defined in include/linux/compiler-gcc.h. However, @@ -59,9 +51,9 @@ int libbpf_strerror(int err, char *buf, size_t size);  typedef int (*libbpf_print_fn_t)(const char *, ...)  	__attribute__((format(printf, 1, 2))); -void libbpf_set_print(libbpf_print_fn_t warn, -		      libbpf_print_fn_t info, -		      libbpf_print_fn_t debug); +LIBBPF_API void libbpf_set_print(libbpf_print_fn_t warn, +				 libbpf_print_fn_t info, +				 libbpf_print_fn_t debug);  /* Hide internal to user */  struct bpf_object; @@ -71,25 +63,28 @@ struct bpf_object_open_attr {  	enum bpf_prog_type prog_type;  }; -struct bpf_object *bpf_object__open(const char *path); -struct bpf_object *bpf_object__open_xattr(struct bpf_object_open_attr *attr); -struct bpf_object *bpf_object__open_buffer(void *obj_buf, -					   size_t obj_buf_sz, -					   const char *name); -int bpf_object__pin(struct bpf_object *object, const char *path); -void bpf_object__close(struct bpf_object *object); +LIBBPF_API struct bpf_object *bpf_object__open(const char *path); +LIBBPF_API struct bpf_object * +bpf_object__open_xattr(struct bpf_object_open_attr *attr); +struct bpf_object *__bpf_object__open_xattr(struct bpf_object_open_attr *attr, +					    int flags); +LIBBPF_API struct bpf_object *bpf_object__open_buffer(void *obj_buf, +						      size_t obj_buf_sz, +						      const char *name); +LIBBPF_API int bpf_object__pin(struct bpf_object *object, const char *path); +LIBBPF_API void bpf_object__close(struct bpf_object *object);  /* Load/unload object into/from kernel */ -int bpf_object__load(struct bpf_object *obj); -int bpf_object__unload(struct bpf_object *obj); -const char *bpf_object__name(struct bpf_object *obj); -unsigned int bpf_object__kversion(struct bpf_object *obj); -int bpf_object__btf_fd(const struct bpf_object *obj); +LIBBPF_API int bpf_object__load(struct bpf_object *obj); +LIBBPF_API int bpf_object__unload(struct bpf_object *obj); +LIBBPF_API const char *bpf_object__name(struct bpf_object *obj); +LIBBPF_API unsigned int bpf_object__kversion(struct bpf_object *obj); +LIBBPF_API int bpf_object__btf_fd(const struct bpf_object *obj); -struct bpf_program * +LIBBPF_API struct bpf_program *  bpf_object__find_program_by_title(struct bpf_object *obj, const char *title); -struct bpf_object *bpf_object__next(struct bpf_object *prev); +LIBBPF_API struct bpf_object *bpf_object__next(struct bpf_object *prev);  #define bpf_object__for_each_safe(pos, tmp)			\  	for ((pos) = bpf_object__next(NULL),		\  		(tmp) = bpf_object__next(pos);		\ @@ -97,17 +92,20 @@ struct bpf_object *bpf_object__next(struct bpf_object *prev);  	     (pos) = (tmp), (tmp) = bpf_object__next(tmp))  typedef void (*bpf_object_clear_priv_t)(struct bpf_object *, void *); -int bpf_object__set_priv(struct bpf_object *obj, void *priv, -			 bpf_object_clear_priv_t clear_priv); -void *bpf_object__priv(struct bpf_object *prog); +LIBBPF_API int bpf_object__set_priv(struct bpf_object *obj, void *priv, +				    bpf_object_clear_priv_t clear_priv); +LIBBPF_API void *bpf_object__priv(struct bpf_object *prog); -int libbpf_prog_type_by_name(const char *name, enum bpf_prog_type *prog_type, -			     enum bpf_attach_type *expected_attach_type); +LIBBPF_API int +libbpf_prog_type_by_name(const char *name, enum bpf_prog_type *prog_type, +			 enum bpf_attach_type *expected_attach_type); +LIBBPF_API int libbpf_attach_type_by_name(const char *name, +					  enum bpf_attach_type *attach_type);  /* Accessors of bpf_program */  struct bpf_program; -struct bpf_program *bpf_program__next(struct bpf_program *prog, -				      struct bpf_object *obj); +LIBBPF_API struct bpf_program *bpf_program__next(struct bpf_program *prog, +						 struct bpf_object *obj);  #define bpf_object__for_each_program(pos, obj)		\  	for ((pos) = bpf_program__next(NULL, (obj));	\ @@ -117,18 +115,24 @@ struct bpf_program *bpf_program__next(struct bpf_program *prog,  typedef void (*bpf_program_clear_priv_t)(struct bpf_program *,  					 void *); -int bpf_program__set_priv(struct bpf_program *prog, void *priv, -			  bpf_program_clear_priv_t clear_priv); +LIBBPF_API int bpf_program__set_priv(struct bpf_program *prog, void *priv, +				     bpf_program_clear_priv_t clear_priv); -void *bpf_program__priv(struct bpf_program *prog); -void bpf_program__set_ifindex(struct bpf_program *prog, __u32 ifindex); +LIBBPF_API void *bpf_program__priv(struct bpf_program *prog); +LIBBPF_API void bpf_program__set_ifindex(struct bpf_program *prog, +					 __u32 ifindex); -const char *bpf_program__title(struct bpf_program *prog, bool needs_copy); +LIBBPF_API const char *bpf_program__title(struct bpf_program *prog, +					  bool needs_copy); -int bpf_program__fd(struct bpf_program *prog); -int bpf_program__pin_instance(struct bpf_program *prog, const char *path, -			      int instance); -int bpf_program__pin(struct bpf_program *prog, const char *path); +LIBBPF_API int bpf_program__load(struct bpf_program *prog, char *license, +				 __u32 kern_version); +LIBBPF_API int bpf_program__fd(struct bpf_program *prog); +LIBBPF_API int bpf_program__pin_instance(struct bpf_program *prog, +					 const char *path, +					 int instance); +LIBBPF_API int bpf_program__pin(struct bpf_program *prog, const char *path); +LIBBPF_API void bpf_program__unload(struct bpf_program *prog);  struct bpf_insn; @@ -189,34 +193,36 @@ typedef int (*bpf_program_prep_t)(struct bpf_program *prog, int n,  				  struct bpf_insn *insns, int insns_cnt,  				  struct bpf_prog_prep_result *res); -int bpf_program__set_prep(struct bpf_program *prog, int nr_instance, -			  bpf_program_prep_t prep); +LIBBPF_API int bpf_program__set_prep(struct bpf_program *prog, int nr_instance, +				     bpf_program_prep_t prep); -int bpf_program__nth_fd(struct bpf_program *prog, int n); +LIBBPF_API int bpf_program__nth_fd(struct bpf_program *prog, int n);  /*   * Adjust type of BPF program. Default is kprobe.   */ -int bpf_program__set_socket_filter(struct bpf_program *prog); -int bpf_program__set_tracepoint(struct bpf_program *prog); -int bpf_program__set_raw_tracepoint(struct bpf_program *prog); -int bpf_program__set_kprobe(struct bpf_program *prog); -int bpf_program__set_sched_cls(struct bpf_program *prog); -int bpf_program__set_sched_act(struct bpf_program *prog); -int bpf_program__set_xdp(struct bpf_program *prog); -int bpf_program__set_perf_event(struct bpf_program *prog); -void bpf_program__set_type(struct bpf_program *prog, enum bpf_prog_type type); -void bpf_program__set_expected_attach_type(struct bpf_program *prog, -					   enum bpf_attach_type type); - -bool bpf_program__is_socket_filter(struct bpf_program *prog); -bool bpf_program__is_tracepoint(struct bpf_program *prog); -bool bpf_program__is_raw_tracepoint(struct bpf_program *prog); -bool bpf_program__is_kprobe(struct bpf_program *prog); -bool bpf_program__is_sched_cls(struct bpf_program *prog); -bool bpf_program__is_sched_act(struct bpf_program *prog); -bool bpf_program__is_xdp(struct bpf_program *prog); -bool bpf_program__is_perf_event(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_socket_filter(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_tracepoint(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_raw_tracepoint(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_kprobe(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_sched_cls(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_sched_act(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_xdp(struct bpf_program *prog); +LIBBPF_API int bpf_program__set_perf_event(struct bpf_program *prog); +LIBBPF_API void bpf_program__set_type(struct bpf_program *prog, +				      enum bpf_prog_type type); +LIBBPF_API void +bpf_program__set_expected_attach_type(struct bpf_program *prog, +				      enum bpf_attach_type type); + +LIBBPF_API bool bpf_program__is_socket_filter(struct bpf_program *prog); +LIBBPF_API bool bpf_program__is_tracepoint(struct bpf_program *prog); +LIBBPF_API bool bpf_program__is_raw_tracepoint(struct bpf_program *prog); +LIBBPF_API bool bpf_program__is_kprobe(struct bpf_program *prog); +LIBBPF_API bool bpf_program__is_sched_cls(struct bpf_program *prog); +LIBBPF_API bool bpf_program__is_sched_act(struct bpf_program *prog); +LIBBPF_API bool bpf_program__is_xdp(struct bpf_program *prog); +LIBBPF_API bool bpf_program__is_perf_event(struct bpf_program *prog);  /*   * No need for __attribute__((packed)), all members of 'bpf_map_def' @@ -237,39 +243,39 @@ struct bpf_map_def {   * so no need to worry about a name clash.   */  struct bpf_map; -struct bpf_map * +LIBBPF_API struct bpf_map *  bpf_object__find_map_by_name(struct bpf_object *obj, const char *name);  /*   * Get bpf_map through the offset of corresponding struct bpf_map_def   * in the BPF object file.   */ -struct bpf_map * +LIBBPF_API struct bpf_map *  bpf_object__find_map_by_offset(struct bpf_object *obj, size_t offset); -struct bpf_map * +LIBBPF_API struct bpf_map *  bpf_map__next(struct bpf_map *map, struct bpf_object *obj);  #define bpf_map__for_each(pos, obj)		\  	for ((pos) = bpf_map__next(NULL, (obj));	\  	     (pos) != NULL;				\  	     (pos) = bpf_map__next((pos), (obj))) -int bpf_map__fd(struct bpf_map *map); -const struct bpf_map_def *bpf_map__def(struct bpf_map *map); -const char *bpf_map__name(struct bpf_map *map); -__u32 bpf_map__btf_key_type_id(const struct bpf_map *map); -__u32 bpf_map__btf_value_type_id(const struct bpf_map *map); +LIBBPF_API int bpf_map__fd(struct bpf_map *map); +LIBBPF_API const struct bpf_map_def *bpf_map__def(struct bpf_map *map); +LIBBPF_API const char *bpf_map__name(struct bpf_map *map); +LIBBPF_API __u32 bpf_map__btf_key_type_id(const struct bpf_map *map); +LIBBPF_API __u32 bpf_map__btf_value_type_id(const struct bpf_map *map);  typedef void (*bpf_map_clear_priv_t)(struct bpf_map *, void *); -int bpf_map__set_priv(struct bpf_map *map, void *priv, -		      bpf_map_clear_priv_t clear_priv); -void *bpf_map__priv(struct bpf_map *map); -int bpf_map__reuse_fd(struct bpf_map *map, int fd); -bool bpf_map__is_offload_neutral(struct bpf_map *map); -void bpf_map__set_ifindex(struct bpf_map *map, __u32 ifindex); -int bpf_map__pin(struct bpf_map *map, const char *path); +LIBBPF_API int bpf_map__set_priv(struct bpf_map *map, void *priv, +				 bpf_map_clear_priv_t clear_priv); +LIBBPF_API void *bpf_map__priv(struct bpf_map *map); +LIBBPF_API int bpf_map__reuse_fd(struct bpf_map *map, int fd); +LIBBPF_API bool bpf_map__is_offload_neutral(struct bpf_map *map); +LIBBPF_API void bpf_map__set_ifindex(struct bpf_map *map, __u32 ifindex); +LIBBPF_API int bpf_map__pin(struct bpf_map *map, const char *path); -long libbpf_get_error(const void *ptr); +LIBBPF_API long libbpf_get_error(const void *ptr);  struct bpf_prog_load_attr {  	const char *file; @@ -278,12 +284,12 @@ struct bpf_prog_load_attr {  	int ifindex;  }; -int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr, -			struct bpf_object **pobj, int *prog_fd); -int bpf_prog_load(const char *file, enum bpf_prog_type type, -		  struct bpf_object **pobj, int *prog_fd); +LIBBPF_API int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr, +				   struct bpf_object **pobj, int *prog_fd); +LIBBPF_API int bpf_prog_load(const char *file, enum bpf_prog_type type, +			     struct bpf_object **pobj, int *prog_fd); -int bpf_set_link_xdp_fd(int ifindex, int fd, __u32 flags); +LIBBPF_API int bpf_set_link_xdp_fd(int ifindex, int fd, __u32 flags);  enum bpf_perf_event_ret {  	LIBBPF_PERF_EVENT_DONE	= 0, @@ -291,10 +297,24 @@ enum bpf_perf_event_ret {  	LIBBPF_PERF_EVENT_CONT	= -2,  }; -typedef enum bpf_perf_event_ret (*bpf_perf_event_print_t)(void *event, -							  void *priv); -int bpf_perf_event_read_simple(void *mem, unsigned long size, -			       unsigned long page_size, -			       void **buf, size_t *buf_len, -			       bpf_perf_event_print_t fn, void *priv); -#endif +struct perf_event_header; +typedef enum bpf_perf_event_ret +	(*bpf_perf_event_print_t)(struct perf_event_header *hdr, +				  void *private_data); +LIBBPF_API enum bpf_perf_event_ret +bpf_perf_event_read_simple(void *mmap_mem, size_t mmap_size, size_t page_size, +			   void **copy_mem, size_t *copy_size, +			   bpf_perf_event_print_t fn, void *private_data); + +struct nlattr; +typedef int (*libbpf_dump_nlmsg_t)(void *cookie, void *msg, struct nlattr **tb); +int libbpf_netlink_open(unsigned int *nl_pid); +int libbpf_nl_get_link(int sock, unsigned int nl_pid, +		       libbpf_dump_nlmsg_t dump_link_nlmsg, void *cookie); +int libbpf_nl_get_class(int sock, unsigned int nl_pid, int ifindex, +			libbpf_dump_nlmsg_t dump_class_nlmsg, void *cookie); +int libbpf_nl_get_qdisc(int sock, unsigned int nl_pid, int ifindex, +			libbpf_dump_nlmsg_t dump_qdisc_nlmsg, void *cookie); +int libbpf_nl_get_filter(int sock, unsigned int nl_pid, int ifindex, int handle, +			 libbpf_dump_nlmsg_t dump_filter_nlmsg, void *cookie); +#endif /* __LIBBPF_LIBBPF_H */ diff --git a/tools/lib/bpf/libbpf_errno.c b/tools/lib/bpf/libbpf_errno.c index d9ba851bd7f9..d83b17f8435c 100644 --- a/tools/lib/bpf/libbpf_errno.c +++ b/tools/lib/bpf/libbpf_errno.c @@ -1,23 +1,10 @@ -// SPDX-License-Identifier: LGPL-2.1 +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)  /*   * Copyright (C) 2013-2015 Alexei Starovoitov <ast@kernel.org>   * Copyright (C) 2015 Wang Nan <wangnan0@huawei.com>   * Copyright (C) 2015 Huawei Inc.   * Copyright (C) 2017 Nicira, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License (not later!) - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not,  see <http://www.gnu.org/licenses>   */  #include <stdio.h> @@ -42,6 +29,7 @@ static const char *libbpf_strerror_table[NR_ERRNO] = {  	[ERRCODE_OFFSET(PROGTYPE)]	= "Kernel doesn't support this program type",  	[ERRCODE_OFFSET(WRNGPID)]	= "Wrong pid in netlink message",  	[ERRCODE_OFFSET(INVSEQ)]	= "Invalid netlink sequence", +	[ERRCODE_OFFSET(NLPARSE)]	= "Incorrect netlink message parsing",  };  int libbpf_strerror(int err, char *buf, size_t size) diff --git a/tools/lib/bpf/netlink.c b/tools/lib/bpf/netlink.c new file mode 100644 index 000000000000..0ce67aea8f3b --- /dev/null +++ b/tools/lib/bpf/netlink.c @@ -0,0 +1,337 @@ +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +/* Copyright (c) 2018 Facebook */ + +#include <stdlib.h> +#include <memory.h> +#include <unistd.h> +#include <linux/bpf.h> +#include <linux/rtnetlink.h> +#include <sys/socket.h> +#include <errno.h> +#include <time.h> + +#include "bpf.h" +#include "libbpf.h" +#include "nlattr.h" + +#ifndef SOL_NETLINK +#define SOL_NETLINK 270 +#endif + +typedef int (*__dump_nlmsg_t)(struct nlmsghdr *nlmsg, libbpf_dump_nlmsg_t, +			      void *cookie); + +int libbpf_netlink_open(__u32 *nl_pid) +{ +	struct sockaddr_nl sa; +	socklen_t addrlen; +	int one = 1, ret; +	int sock; + +	memset(&sa, 0, sizeof(sa)); +	sa.nl_family = AF_NETLINK; + +	sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); +	if (sock < 0) +		return -errno; + +	if (setsockopt(sock, SOL_NETLINK, NETLINK_EXT_ACK, +		       &one, sizeof(one)) < 0) { +		fprintf(stderr, "Netlink error reporting not supported\n"); +	} + +	if (bind(sock, (struct sockaddr *)&sa, sizeof(sa)) < 0) { +		ret = -errno; +		goto cleanup; +	} + +	addrlen = sizeof(sa); +	if (getsockname(sock, (struct sockaddr *)&sa, &addrlen) < 0) { +		ret = -errno; +		goto cleanup; +	} + +	if (addrlen != sizeof(sa)) { +		ret = -LIBBPF_ERRNO__INTERNAL; +		goto cleanup; +	} + +	*nl_pid = sa.nl_pid; +	return sock; + +cleanup: +	close(sock); +	return ret; +} + +static int bpf_netlink_recv(int sock, __u32 nl_pid, int seq, +			    __dump_nlmsg_t _fn, libbpf_dump_nlmsg_t fn, +			    void *cookie) +{ +	bool multipart = true; +	struct nlmsgerr *err; +	struct nlmsghdr *nh; +	char buf[4096]; +	int len, ret; + +	while (multipart) { +		multipart = false; +		len = recv(sock, buf, sizeof(buf), 0); +		if (len < 0) { +			ret = -errno; +			goto done; +		} + +		if (len == 0) +			break; + +		for (nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, len); +		     nh = NLMSG_NEXT(nh, len)) { +			if (nh->nlmsg_pid != nl_pid) { +				ret = -LIBBPF_ERRNO__WRNGPID; +				goto done; +			} +			if (nh->nlmsg_seq != seq) { +				ret = -LIBBPF_ERRNO__INVSEQ; +				goto done; +			} +			if (nh->nlmsg_flags & NLM_F_MULTI) +				multipart = true; +			switch (nh->nlmsg_type) { +			case NLMSG_ERROR: +				err = (struct nlmsgerr *)NLMSG_DATA(nh); +				if (!err->error) +					continue; +				ret = err->error; +				libbpf_nla_dump_errormsg(nh); +				goto done; +			case NLMSG_DONE: +				return 0; +			default: +				break; +			} +			if (_fn) { +				ret = _fn(nh, fn, cookie); +				if (ret) +					return ret; +			} +		} +	} +	ret = 0; +done: +	return ret; +} + +int bpf_set_link_xdp_fd(int ifindex, int fd, __u32 flags) +{ +	int sock, seq = 0, ret; +	struct nlattr *nla, *nla_xdp; +	struct { +		struct nlmsghdr  nh; +		struct ifinfomsg ifinfo; +		char             attrbuf[64]; +	} req; +	__u32 nl_pid; + +	sock = libbpf_netlink_open(&nl_pid); +	if (sock < 0) +		return sock; + +	memset(&req, 0, sizeof(req)); +	req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)); +	req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; +	req.nh.nlmsg_type = RTM_SETLINK; +	req.nh.nlmsg_pid = 0; +	req.nh.nlmsg_seq = ++seq; +	req.ifinfo.ifi_family = AF_UNSPEC; +	req.ifinfo.ifi_index = ifindex; + +	/* started nested attribute for XDP */ +	nla = (struct nlattr *)(((char *)&req) +				+ NLMSG_ALIGN(req.nh.nlmsg_len)); +	nla->nla_type = NLA_F_NESTED | IFLA_XDP; +	nla->nla_len = NLA_HDRLEN; + +	/* add XDP fd */ +	nla_xdp = (struct nlattr *)((char *)nla + nla->nla_len); +	nla_xdp->nla_type = IFLA_XDP_FD; +	nla_xdp->nla_len = NLA_HDRLEN + sizeof(int); +	memcpy((char *)nla_xdp + NLA_HDRLEN, &fd, sizeof(fd)); +	nla->nla_len += nla_xdp->nla_len; + +	/* if user passed in any flags, add those too */ +	if (flags) { +		nla_xdp = (struct nlattr *)((char *)nla + nla->nla_len); +		nla_xdp->nla_type = IFLA_XDP_FLAGS; +		nla_xdp->nla_len = NLA_HDRLEN + sizeof(flags); +		memcpy((char *)nla_xdp + NLA_HDRLEN, &flags, sizeof(flags)); +		nla->nla_len += nla_xdp->nla_len; +	} + +	req.nh.nlmsg_len += NLA_ALIGN(nla->nla_len); + +	if (send(sock, &req, req.nh.nlmsg_len, 0) < 0) { +		ret = -errno; +		goto cleanup; +	} +	ret = bpf_netlink_recv(sock, nl_pid, seq, NULL, NULL, NULL); + +cleanup: +	close(sock); +	return ret; +} + +static int __dump_link_nlmsg(struct nlmsghdr *nlh, +			     libbpf_dump_nlmsg_t dump_link_nlmsg, void *cookie) +{ +	struct nlattr *tb[IFLA_MAX + 1], *attr; +	struct ifinfomsg *ifi = NLMSG_DATA(nlh); +	int len; + +	len = nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*ifi)); +	attr = (struct nlattr *) ((void *) ifi + NLMSG_ALIGN(sizeof(*ifi))); +	if (libbpf_nla_parse(tb, IFLA_MAX, attr, len, NULL) != 0) +		return -LIBBPF_ERRNO__NLPARSE; + +	return dump_link_nlmsg(cookie, ifi, tb); +} + +int libbpf_nl_get_link(int sock, unsigned int nl_pid, +		       libbpf_dump_nlmsg_t dump_link_nlmsg, void *cookie) +{ +	struct { +		struct nlmsghdr nlh; +		struct ifinfomsg ifm; +	} req = { +		.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)), +		.nlh.nlmsg_type = RTM_GETLINK, +		.nlh.nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST, +		.ifm.ifi_family = AF_PACKET, +	}; +	int seq = time(NULL); + +	req.nlh.nlmsg_seq = seq; +	if (send(sock, &req, req.nlh.nlmsg_len, 0) < 0) +		return -errno; + +	return bpf_netlink_recv(sock, nl_pid, seq, __dump_link_nlmsg, +				dump_link_nlmsg, cookie); +} + +static int __dump_class_nlmsg(struct nlmsghdr *nlh, +			      libbpf_dump_nlmsg_t dump_class_nlmsg, +			      void *cookie) +{ +	struct nlattr *tb[TCA_MAX + 1], *attr; +	struct tcmsg *t = NLMSG_DATA(nlh); +	int len; + +	len = nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*t)); +	attr = (struct nlattr *) ((void *) t + NLMSG_ALIGN(sizeof(*t))); +	if (libbpf_nla_parse(tb, TCA_MAX, attr, len, NULL) != 0) +		return -LIBBPF_ERRNO__NLPARSE; + +	return dump_class_nlmsg(cookie, t, tb); +} + +int libbpf_nl_get_class(int sock, unsigned int nl_pid, int ifindex, +			libbpf_dump_nlmsg_t dump_class_nlmsg, void *cookie) +{ +	struct { +		struct nlmsghdr nlh; +		struct tcmsg t; +	} req = { +		.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct tcmsg)), +		.nlh.nlmsg_type = RTM_GETTCLASS, +		.nlh.nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST, +		.t.tcm_family = AF_UNSPEC, +		.t.tcm_ifindex = ifindex, +	}; +	int seq = time(NULL); + +	req.nlh.nlmsg_seq = seq; +	if (send(sock, &req, req.nlh.nlmsg_len, 0) < 0) +		return -errno; + +	return bpf_netlink_recv(sock, nl_pid, seq, __dump_class_nlmsg, +				dump_class_nlmsg, cookie); +} + +static int __dump_qdisc_nlmsg(struct nlmsghdr *nlh, +			      libbpf_dump_nlmsg_t dump_qdisc_nlmsg, +			      void *cookie) +{ +	struct nlattr *tb[TCA_MAX + 1], *attr; +	struct tcmsg *t = NLMSG_DATA(nlh); +	int len; + +	len = nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*t)); +	attr = (struct nlattr *) ((void *) t + NLMSG_ALIGN(sizeof(*t))); +	if (libbpf_nla_parse(tb, TCA_MAX, attr, len, NULL) != 0) +		return -LIBBPF_ERRNO__NLPARSE; + +	return dump_qdisc_nlmsg(cookie, t, tb); +} + +int libbpf_nl_get_qdisc(int sock, unsigned int nl_pid, int ifindex, +			libbpf_dump_nlmsg_t dump_qdisc_nlmsg, void *cookie) +{ +	struct { +		struct nlmsghdr nlh; +		struct tcmsg t; +	} req = { +		.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct tcmsg)), +		.nlh.nlmsg_type = RTM_GETQDISC, +		.nlh.nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST, +		.t.tcm_family = AF_UNSPEC, +		.t.tcm_ifindex = ifindex, +	}; +	int seq = time(NULL); + +	req.nlh.nlmsg_seq = seq; +	if (send(sock, &req, req.nlh.nlmsg_len, 0) < 0) +		return -errno; + +	return bpf_netlink_recv(sock, nl_pid, seq, __dump_qdisc_nlmsg, +				dump_qdisc_nlmsg, cookie); +} + +static int __dump_filter_nlmsg(struct nlmsghdr *nlh, +			       libbpf_dump_nlmsg_t dump_filter_nlmsg, +			       void *cookie) +{ +	struct nlattr *tb[TCA_MAX + 1], *attr; +	struct tcmsg *t = NLMSG_DATA(nlh); +	int len; + +	len = nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*t)); +	attr = (struct nlattr *) ((void *) t + NLMSG_ALIGN(sizeof(*t))); +	if (libbpf_nla_parse(tb, TCA_MAX, attr, len, NULL) != 0) +		return -LIBBPF_ERRNO__NLPARSE; + +	return dump_filter_nlmsg(cookie, t, tb); +} + +int libbpf_nl_get_filter(int sock, unsigned int nl_pid, int ifindex, int handle, +			 libbpf_dump_nlmsg_t dump_filter_nlmsg, void *cookie) +{ +	struct { +		struct nlmsghdr nlh; +		struct tcmsg t; +	} req = { +		.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct tcmsg)), +		.nlh.nlmsg_type = RTM_GETTFILTER, +		.nlh.nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST, +		.t.tcm_family = AF_UNSPEC, +		.t.tcm_ifindex = ifindex, +		.t.tcm_parent = handle, +	}; +	int seq = time(NULL); + +	req.nlh.nlmsg_seq = seq; +	if (send(sock, &req, req.nlh.nlmsg_len, 0) < 0) +		return -errno; + +	return bpf_netlink_recv(sock, nl_pid, seq, __dump_filter_nlmsg, +				dump_filter_nlmsg, cookie); +} diff --git a/tools/lib/bpf/nlattr.c b/tools/lib/bpf/nlattr.c index 4719434278b2..1e69c0c8d413 100644 --- a/tools/lib/bpf/nlattr.c +++ b/tools/lib/bpf/nlattr.c @@ -1,13 +1,8 @@ -// SPDX-License-Identifier: LGPL-2.1 +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)  /*   * NETLINK      Netlink attributes   * - *	This library is free software; you can redistribute it and/or - *	modify it under the terms of the GNU Lesser General Public - *	License as published by the Free Software Foundation version 2.1 - *	of the License. - *   * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch>   */ @@ -17,20 +12,15 @@  #include <string.h>  #include <stdio.h> -static uint16_t nla_attr_minlen[NLA_TYPE_MAX+1] = { -	[NLA_U8]	= sizeof(uint8_t), -	[NLA_U16]	= sizeof(uint16_t), -	[NLA_U32]	= sizeof(uint32_t), -	[NLA_U64]	= sizeof(uint64_t), -	[NLA_STRING]	= 1, -	[NLA_FLAG]	= 0, +static uint16_t nla_attr_minlen[LIBBPF_NLA_TYPE_MAX+1] = { +	[LIBBPF_NLA_U8]		= sizeof(uint8_t), +	[LIBBPF_NLA_U16]	= sizeof(uint16_t), +	[LIBBPF_NLA_U32]	= sizeof(uint32_t), +	[LIBBPF_NLA_U64]	= sizeof(uint64_t), +	[LIBBPF_NLA_STRING]	= 1, +	[LIBBPF_NLA_FLAG]	= 0,  }; -static int nla_len(const struct nlattr *nla) -{ -	return nla->nla_len - NLA_HDRLEN; -} -  static struct nlattr *nla_next(const struct nlattr *nla, int *remaining)  {  	int totlen = NLA_ALIGN(nla->nla_len); @@ -46,20 +36,15 @@ static int nla_ok(const struct nlattr *nla, int remaining)  	       nla->nla_len <= remaining;  } -static void *nla_data(const struct nlattr *nla) -{ -	return (char *) nla + NLA_HDRLEN; -} -  static int nla_type(const struct nlattr *nla)  {  	return nla->nla_type & NLA_TYPE_MASK;  }  static int validate_nla(struct nlattr *nla, int maxtype, -			struct nla_policy *policy) +			struct libbpf_nla_policy *policy)  { -	struct nla_policy *pt; +	struct libbpf_nla_policy *pt;  	unsigned int minlen = 0;  	int type = nla_type(nla); @@ -68,23 +53,24 @@ static int validate_nla(struct nlattr *nla, int maxtype,  	pt = &policy[type]; -	if (pt->type > NLA_TYPE_MAX) +	if (pt->type > LIBBPF_NLA_TYPE_MAX)  		return 0;  	if (pt->minlen)  		minlen = pt->minlen; -	else if (pt->type != NLA_UNSPEC) +	else if (pt->type != LIBBPF_NLA_UNSPEC)  		minlen = nla_attr_minlen[pt->type]; -	if (nla_len(nla) < minlen) +	if (libbpf_nla_len(nla) < minlen)  		return -1; -	if (pt->maxlen && nla_len(nla) > pt->maxlen) +	if (pt->maxlen && libbpf_nla_len(nla) > pt->maxlen)  		return -1; -	if (pt->type == NLA_STRING) { -		char *data = nla_data(nla); -		if (data[nla_len(nla) - 1] != '\0') +	if (pt->type == LIBBPF_NLA_STRING) { +		char *data = libbpf_nla_data(nla); + +		if (data[libbpf_nla_len(nla) - 1] != '\0')  			return -1;  	} @@ -114,15 +100,15 @@ static inline int nlmsg_len(const struct nlmsghdr *nlh)   * @see nla_validate   * @return 0 on success or a negative error code.   */ -static int nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, int len, -		     struct nla_policy *policy) +int libbpf_nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, +		     int len, struct libbpf_nla_policy *policy)  {  	struct nlattr *nla;  	int rem, err;  	memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); -	nla_for_each_attr(nla, head, len, rem) { +	libbpf_nla_for_each_attr(nla, head, len, rem) {  		int type = nla_type(nla);  		if (type > maxtype) @@ -146,12 +132,33 @@ errout:  	return err;  } +/** + * Create attribute index based on nested attribute + * @arg tb              Index array to be filled (maxtype+1 elements). + * @arg maxtype         Maximum attribute type expected and accepted. + * @arg nla             Nested Attribute. + * @arg policy          Attribute validation policy. + * + * Feeds the stream of attributes nested into the specified attribute + * to libbpf_nla_parse(). + * + * @see libbpf_nla_parse + * @return 0 on success or a negative error code. + */ +int libbpf_nla_parse_nested(struct nlattr *tb[], int maxtype, +			    struct nlattr *nla, +			    struct libbpf_nla_policy *policy) +{ +	return libbpf_nla_parse(tb, maxtype, libbpf_nla_data(nla), +				libbpf_nla_len(nla), policy); +} +  /* dump netlink extended ack error message */ -int nla_dump_errormsg(struct nlmsghdr *nlh) +int libbpf_nla_dump_errormsg(struct nlmsghdr *nlh)  { -	struct nla_policy extack_policy[NLMSGERR_ATTR_MAX + 1] = { -		[NLMSGERR_ATTR_MSG]	= { .type = NLA_STRING }, -		[NLMSGERR_ATTR_OFFS]	= { .type = NLA_U32 }, +	struct libbpf_nla_policy extack_policy[NLMSGERR_ATTR_MAX + 1] = { +		[NLMSGERR_ATTR_MSG]	= { .type = LIBBPF_NLA_STRING }, +		[NLMSGERR_ATTR_OFFS]	= { .type = LIBBPF_NLA_U32 },  	};  	struct nlattr *tb[NLMSGERR_ATTR_MAX + 1], *attr;  	struct nlmsgerr *err; @@ -172,14 +179,15 @@ int nla_dump_errormsg(struct nlmsghdr *nlh)  	attr = (struct nlattr *) ((void *) err + hlen);  	alen = nlh->nlmsg_len - hlen; -	if (nla_parse(tb, NLMSGERR_ATTR_MAX, attr, alen, extack_policy) != 0) { +	if (libbpf_nla_parse(tb, NLMSGERR_ATTR_MAX, attr, alen, +			     extack_policy) != 0) {  		fprintf(stderr,  			"Failed to parse extended error attributes\n");  		return 0;  	}  	if (tb[NLMSGERR_ATTR_MSG]) -		errmsg = (char *) nla_data(tb[NLMSGERR_ATTR_MSG]); +		errmsg = (char *) libbpf_nla_data(tb[NLMSGERR_ATTR_MSG]);  	fprintf(stderr, "Kernel error message: %s\n", errmsg); diff --git a/tools/lib/bpf/nlattr.h b/tools/lib/bpf/nlattr.h index 931a71f68f93..6cc3ac91690f 100644 --- a/tools/lib/bpf/nlattr.h +++ b/tools/lib/bpf/nlattr.h @@ -1,18 +1,13 @@ -/* SPDX-License-Identifier: LGPL-2.1 */ +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */  /*   * NETLINK      Netlink attributes   * - *	This library is free software; you can redistribute it and/or - *	modify it under the terms of the GNU Lesser General Public - *	License as published by the Free Software Foundation version 2.1 - *	of the License. - *   * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch>   */ -#ifndef __NLATTR_H -#define __NLATTR_H +#ifndef __LIBBPF_NLATTR_H +#define __LIBBPF_NLATTR_H  #include <stdint.h>  #include <linux/netlink.h> @@ -23,19 +18,19 @@   * Standard attribute types to specify validation policy   */  enum { -	NLA_UNSPEC,	/**< Unspecified type, binary data chunk */ -	NLA_U8,		/**< 8 bit integer */ -	NLA_U16,	/**< 16 bit integer */ -	NLA_U32,	/**< 32 bit integer */ -	NLA_U64,	/**< 64 bit integer */ -	NLA_STRING,	/**< NUL terminated character string */ -	NLA_FLAG,	/**< Flag */ -	NLA_MSECS,	/**< Micro seconds (64bit) */ -	NLA_NESTED,	/**< Nested attributes */ -	__NLA_TYPE_MAX, +	LIBBPF_NLA_UNSPEC,	/**< Unspecified type, binary data chunk */ +	LIBBPF_NLA_U8,		/**< 8 bit integer */ +	LIBBPF_NLA_U16,		/**< 16 bit integer */ +	LIBBPF_NLA_U32,		/**< 32 bit integer */ +	LIBBPF_NLA_U64,		/**< 64 bit integer */ +	LIBBPF_NLA_STRING,	/**< NUL terminated character string */ +	LIBBPF_NLA_FLAG,	/**< Flag */ +	LIBBPF_NLA_MSECS,	/**< Micro seconds (64bit) */ +	LIBBPF_NLA_NESTED,	/**< Nested attributes */ +	__LIBBPF_NLA_TYPE_MAX,  }; -#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) +#define LIBBPF_NLA_TYPE_MAX (__LIBBPF_NLA_TYPE_MAX - 1)  /**   * @ingroup attr @@ -43,8 +38,8 @@ enum {   *   * See section @core_doc{core_attr_parse,Attribute Parsing} for more details.   */ -struct nla_policy { -	/** Type of attribute or NLA_UNSPEC */ +struct libbpf_nla_policy { +	/** Type of attribute or LIBBPF_NLA_UNSPEC */  	uint16_t	type;  	/** Minimal length of payload required */ @@ -62,11 +57,50 @@ struct nla_policy {   * @arg len	length of attribute stream   * @arg rem	initialized to len, holds bytes currently remaining in stream   */ -#define nla_for_each_attr(pos, head, len, rem) \ +#define libbpf_nla_for_each_attr(pos, head, len, rem) \  	for (pos = head, rem = len; \  	     nla_ok(pos, rem); \  	     pos = nla_next(pos, &(rem))) -int nla_dump_errormsg(struct nlmsghdr *nlh); +/** + * libbpf_nla_data - head of payload + * @nla: netlink attribute + */ +static inline void *libbpf_nla_data(const struct nlattr *nla) +{ +	return (char *) nla + NLA_HDRLEN; +} + +static inline uint8_t libbpf_nla_getattr_u8(const struct nlattr *nla) +{ +	return *(uint8_t *)libbpf_nla_data(nla); +} + +static inline uint32_t libbpf_nla_getattr_u32(const struct nlattr *nla) +{ +	return *(uint32_t *)libbpf_nla_data(nla); +} + +static inline const char *libbpf_nla_getattr_str(const struct nlattr *nla) +{ +	return (const char *)libbpf_nla_data(nla); +} + +/** + * libbpf_nla_len - length of payload + * @nla: netlink attribute + */ +static inline int libbpf_nla_len(const struct nlattr *nla) +{ +	return nla->nla_len - NLA_HDRLEN; +} + +int libbpf_nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, +		     int len, struct libbpf_nla_policy *policy); +int libbpf_nla_parse_nested(struct nlattr *tb[], int maxtype, +			    struct nlattr *nla, +			    struct libbpf_nla_policy *policy); + +int libbpf_nla_dump_errormsg(struct nlmsghdr *nlh); -#endif /* __NLATTR_H */ +#endif /* __LIBBPF_NLATTR_H */ diff --git a/tools/lib/bpf/str_error.c b/tools/lib/bpf/str_error.c new file mode 100644 index 000000000000..00e48ac5b806 --- /dev/null +++ b/tools/lib/bpf/str_error.c @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +#undef _GNU_SOURCE +#include <string.h> +#include <stdio.h> +#include "str_error.h" + +/* + * Wrapper to allow for building in non-GNU systems such as Alpine Linux's musl + * libc, while checking strerror_r() return to avoid having to check this in + * all places calling it. + */ +char *libbpf_strerror_r(int err, char *dst, int len) +{ +	int ret = strerror_r(err, dst, len); +	if (ret) +		snprintf(dst, len, "ERROR: strerror_r(%d)=%d", err, ret); +	return dst; +} diff --git a/tools/lib/bpf/str_error.h b/tools/lib/bpf/str_error.h new file mode 100644 index 000000000000..a139334d57b6 --- /dev/null +++ b/tools/lib/bpf/str_error.h @@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ +#ifndef __LIBBPF_STR_ERROR_H +#define __LIBBPF_STR_ERROR_H + +char *libbpf_strerror_r(int err, char *dst, int len); +#endif /* __LIBBPF_STR_ERROR_H */ diff --git a/tools/lib/subcmd/pager.c b/tools/lib/subcmd/pager.c index 9997a8805a82..e3d47b59b14d 100644 --- a/tools/lib/subcmd/pager.c +++ b/tools/lib/subcmd/pager.c @@ -23,6 +23,13 @@ void pager_init(const char *pager_env)  	subcmd_config.pager_env = pager_env;  } +static const char *forced_pager; + +void force_pager(const char *pager) +{ +	forced_pager = pager; +} +  static void pager_preexec(void)  {  	/* @@ -66,7 +73,9 @@ void setup_pager(void)  	const char *pager = getenv(subcmd_config.pager_env);  	struct winsize sz; -	if (!isatty(1)) +	if (forced_pager) +		pager = forced_pager; +	if (!isatty(1) && !forced_pager)  		return;  	if (ioctl(1, TIOCGWINSZ, &sz) == 0)  		pager_columns = sz.ws_col; diff --git a/tools/lib/subcmd/pager.h b/tools/lib/subcmd/pager.h index f1a53cf29880..a818964693ab 100644 --- a/tools/lib/subcmd/pager.h +++ b/tools/lib/subcmd/pager.h @@ -7,5 +7,6 @@ extern void pager_init(const char *pager_env);  extern void setup_pager(void);  extern int pager_in_use(void);  extern int pager_get_columns(void); +extern void force_pager(const char *);  #endif /* __SUBCMD_PAGER_H */ diff --git a/tools/lib/traceevent/Build b/tools/lib/traceevent/Build index c681d0575d16..ba54bfce0b0b 100644 --- a/tools/lib/traceevent/Build +++ b/tools/lib/traceevent/Build @@ -4,6 +4,8 @@ libtraceevent-y += trace-seq.o  libtraceevent-y += parse-filter.o  libtraceevent-y += parse-utils.o  libtraceevent-y += kbuffer-parse.o +libtraceevent-y += tep_strerror.o +libtraceevent-y += event-parse-api.o  plugin_jbd2-y         += plugin_jbd2.o  plugin_hrtimer-y      += plugin_hrtimer.o diff --git a/tools/lib/traceevent/event-parse-api.c b/tools/lib/traceevent/event-parse-api.c new file mode 100644 index 000000000000..61f7149085ee --- /dev/null +++ b/tools/lib/traceevent/event-parse-api.c @@ -0,0 +1,275 @@ +// SPDX-License-Identifier: LGPL-2.1 +/* + * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> + * + */ + +#include "event-parse.h" +#include "event-parse-local.h" +#include "event-utils.h" + +/** + * tep_get_first_event - returns the first event in the events array + * @tep: a handle to the tep_handle + * + * This returns pointer to the first element of the events array + * If @tep is NULL, NULL is returned. + */ +struct tep_event_format *tep_get_first_event(struct tep_handle *tep) +{ +	if (tep && tep->events) +		return tep->events[0]; + +	return NULL; +} + +/** + * tep_get_events_count - get the number of defined events + * @tep: a handle to the tep_handle + * + * This returns number of elements in event array + * If @tep is NULL, 0 is returned. + */ +int tep_get_events_count(struct tep_handle *tep) +{ +	if(tep) +		return tep->nr_events; +	return 0; +} + +/** + * tep_set_flag - set event parser flag + * @tep: a handle to the tep_handle + * @flag: flag, or combination of flags to be set + * can be any combination from enum tep_flag + * + * This sets a flag or mbination of flags  from enum tep_flag +  */ +void tep_set_flag(struct tep_handle *tep, int flag) +{ +	if(tep) +		tep->flags |= flag; +} + +unsigned short __tep_data2host2(struct tep_handle *pevent, unsigned short data) +{ +	unsigned short swap; + +	if (!pevent || pevent->host_bigendian == pevent->file_bigendian) +		return data; + +	swap = ((data & 0xffULL) << 8) | +		((data & (0xffULL << 8)) >> 8); + +	return swap; +} + +unsigned int __tep_data2host4(struct tep_handle *pevent, unsigned int data) +{ +	unsigned int swap; + +	if (!pevent || pevent->host_bigendian == pevent->file_bigendian) +		return data; + +	swap = ((data & 0xffULL) << 24) | +		((data & (0xffULL << 8)) << 8) | +		((data & (0xffULL << 16)) >> 8) | +		((data & (0xffULL << 24)) >> 24); + +	return swap; +} + +unsigned long long +__tep_data2host8(struct tep_handle *pevent, unsigned long long data) +{ +	unsigned long long swap; + +	if (!pevent || pevent->host_bigendian == pevent->file_bigendian) +		return data; + +	swap = ((data & 0xffULL) << 56) | +		((data & (0xffULL << 8)) << 40) | +		((data & (0xffULL << 16)) << 24) | +		((data & (0xffULL << 24)) << 8) | +		((data & (0xffULL << 32)) >> 8) | +		((data & (0xffULL << 40)) >> 24) | +		((data & (0xffULL << 48)) >> 40) | +		((data & (0xffULL << 56)) >> 56); + +	return swap; +} + +/** + * tep_get_header_page_size - get size of the header page + * @pevent: a handle to the tep_handle + * + * This returns size of the header page + * If @pevent is NULL, 0 is returned. + */ +int tep_get_header_page_size(struct tep_handle *pevent) +{ +	if(pevent) +		return pevent->header_page_size_size; +	return 0; +} + +/** + * tep_get_cpus - get the number of CPUs + * @pevent: a handle to the tep_handle + * + * This returns the number of CPUs + * If @pevent is NULL, 0 is returned. + */ +int tep_get_cpus(struct tep_handle *pevent) +{ +	if(pevent) +		return pevent->cpus; +	return 0; +} + +/** + * tep_set_cpus - set the number of CPUs + * @pevent: a handle to the tep_handle + * + * This sets the number of CPUs + */ +void tep_set_cpus(struct tep_handle *pevent, int cpus) +{ +	if(pevent) +		pevent->cpus = cpus; +} + +/** + * tep_get_long_size - get the size of a long integer on the current machine + * @pevent: a handle to the tep_handle + * + * This returns the size of a long integer on the current machine + * If @pevent is NULL, 0 is returned. + */ +int tep_get_long_size(struct tep_handle *pevent) +{ +	if(pevent) +		return pevent->long_size; +	return 0; +} + +/** + * tep_set_long_size - set the size of a long integer on the current machine + * @pevent: a handle to the tep_handle + * @size: size, in bytes, of a long integer + * + * This sets the size of a long integer on the current machine + */ +void tep_set_long_size(struct tep_handle *pevent, int long_size) +{ +	if(pevent) +		pevent->long_size = long_size; +} + +/** + * tep_get_page_size - get the size of a memory page on the current machine + * @pevent: a handle to the tep_handle + * + * This returns the size of a memory page on the current machine + * If @pevent is NULL, 0 is returned. + */ +int tep_get_page_size(struct tep_handle *pevent) +{ +	if(pevent) +		return pevent->page_size; +	return 0; +} + +/** + * tep_set_page_size - set the size of a memory page on the current machine + * @pevent: a handle to the tep_handle + * @_page_size: size of a memory page, in bytes + * + * This sets the size of a memory page on the current machine + */ +void tep_set_page_size(struct tep_handle *pevent, int _page_size) +{ +	if(pevent) +		pevent->page_size = _page_size; +} + +/** + * tep_is_file_bigendian - get if the file is in big endian order + * @pevent: a handle to the tep_handle + * + * This returns if the file is in big endian order + * If @pevent is NULL, 0 is returned. + */ +int tep_is_file_bigendian(struct tep_handle *pevent) +{ +	if(pevent) +		return pevent->file_bigendian; +	return 0; +} + +/** + * tep_set_file_bigendian - set if the file is in big endian order + * @pevent: a handle to the tep_handle + * @endian: non zero, if the file is in big endian order + * + * This sets if the file is in big endian order + */ +void tep_set_file_bigendian(struct tep_handle *pevent, enum tep_endian endian) +{ +	if(pevent) +		pevent->file_bigendian = endian; +} + +/** + * tep_is_host_bigendian - get if the order of the current host is big endian + * @pevent: a handle to the tep_handle + * + * This gets if the order of the current host is big endian + * If @pevent is NULL, 0 is returned. + */ +int tep_is_host_bigendian(struct tep_handle *pevent) +{ +	if(pevent) +		return pevent->host_bigendian; +	return 0; +} + +/** + * tep_set_host_bigendian - set the order of the local host + * @pevent: a handle to the tep_handle + * @endian: non zero, if the local host has big endian order + * + * This sets the order of the local host + */ +void tep_set_host_bigendian(struct tep_handle *pevent, enum tep_endian endian) +{ +	if(pevent) +		pevent->host_bigendian = endian; +} + +/** + * tep_is_latency_format - get if the latency output format is configured + * @pevent: a handle to the tep_handle + * + * This gets if the latency output format is configured + * If @pevent is NULL, 0 is returned. + */ +int tep_is_latency_format(struct tep_handle *pevent) +{ +	if(pevent) +		return pevent->latency_format; +	return 0; +} + +/** + * tep_set_latency_format - set the latency output format + * @pevent: a handle to the tep_handle + * @lat: non zero for latency output format + * + * This sets the latency output format +  */ +void tep_set_latency_format(struct tep_handle *pevent, int lat) +{ +	if(pevent) +		pevent->latency_format = lat; +} diff --git a/tools/lib/traceevent/event-parse-local.h b/tools/lib/traceevent/event-parse-local.h new file mode 100644 index 000000000000..b9bddde577f8 --- /dev/null +++ b/tools/lib/traceevent/event-parse-local.h @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: LGPL-2.1 +/* + * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> + * + */ + +#ifndef _PARSE_EVENTS_INT_H +#define _PARSE_EVENTS_INT_H + +struct cmdline; +struct cmdline_list; +struct func_map; +struct func_list; +struct event_handler; +struct func_resolver; + +struct tep_handle { +	int ref_count; + +	int header_page_ts_offset; +	int header_page_ts_size; +	int header_page_size_offset; +	int header_page_size_size; +	int header_page_data_offset; +	int header_page_data_size; +	int header_page_overwrite; + +	enum tep_endian file_bigendian; +	enum tep_endian host_bigendian; + +	int latency_format; + +	int old_format; + +	int cpus; +	int long_size; +	int page_size; + +	struct cmdline *cmdlines; +	struct cmdline_list *cmdlist; +	int cmdline_count; + +	struct func_map *func_map; +	struct func_resolver *func_resolver; +	struct func_list *funclist; +	unsigned int func_count; + +	struct printk_map *printk_map; +	struct printk_list *printklist; +	unsigned int printk_count; + + +	struct tep_event_format **events; +	int nr_events; +	struct tep_event_format **sort_events; +	enum tep_event_sort_type last_type; + +	int type_offset; +	int type_size; + +	int pid_offset; +	int pid_size; + +	int pc_offset; +	int pc_size; + +	int flags_offset; +	int flags_size; + +	int ld_offset; +	int ld_size; + +	int print_raw; + +	int test_filters; + +	int flags; + +	struct tep_format_field *bprint_ip_field; +	struct tep_format_field *bprint_fmt_field; +	struct tep_format_field *bprint_buf_field; + +	struct event_handler *handlers; +	struct tep_function_handler *func_handlers; + +	/* cache */ +	struct tep_event_format *last_event; + +	char *trace_clock; +}; + +#endif /* _PARSE_EVENTS_INT_H */ diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index ce1e20227c64..3692f29fee46 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c @@ -18,12 +18,14 @@  #include <errno.h>  #include <stdint.h>  #include <limits.h> -#include <linux/string.h>  #include <linux/time64.h>  #include <netinet/in.h>  #include "event-parse.h" + +#include "event-parse-local.h"  #include "event-utils.h" +#include "trace-seq.h"  static const char *input_buf;  static unsigned long long input_buf_ptr; @@ -94,7 +96,7 @@ struct tep_function_handler {  static unsigned long long  process_defined_func(struct trace_seq *s, void *data, int size, -		     struct event_format *event, struct print_arg *arg); +		     struct tep_event_format *event, struct tep_print_arg *arg);  static void free_func_handle(struct tep_function_handler *func); @@ -117,9 +119,9 @@ void breakpoint(void)  	x++;  } -struct print_arg *alloc_arg(void) +struct tep_print_arg *alloc_arg(void)  { -	return calloc(1, sizeof(struct print_arg)); +	return calloc(1, sizeof(struct tep_print_arg));  }  struct cmdline { @@ -737,16 +739,16 @@ void tep_print_printk(struct tep_handle *pevent)  	}  } -static struct event_format *alloc_event(void) +static struct tep_event_format *alloc_event(void)  { -	return calloc(1, sizeof(struct event_format)); +	return calloc(1, sizeof(struct tep_event_format));  } -static int add_event(struct tep_handle *pevent, struct event_format *event) +static int add_event(struct tep_handle *pevent, struct tep_event_format *event)  {  	int i; -	struct event_format **events = realloc(pevent->events, sizeof(event) * -					       (pevent->nr_events + 1)); +	struct tep_event_format **events = realloc(pevent->events, sizeof(event) * +						  (pevent->nr_events + 1));  	if (!events)  		return -1; @@ -769,20 +771,20 @@ static int add_event(struct tep_handle *pevent, struct event_format *event)  	return 0;  } -static int event_item_type(enum event_type type) +static int event_item_type(enum tep_event_type type)  {  	switch (type) { -	case EVENT_ITEM ... EVENT_SQUOTE: +	case TEP_EVENT_ITEM ... TEP_EVENT_SQUOTE:  		return 1; -	case EVENT_ERROR ... EVENT_DELIM: +	case TEP_EVENT_ERROR ... TEP_EVENT_DELIM:  	default:  		return 0;  	}  } -static void free_flag_sym(struct print_flag_sym *fsym) +static void free_flag_sym(struct tep_print_flag_sym *fsym)  { -	struct print_flag_sym *next; +	struct tep_print_flag_sym *next;  	while (fsym) {  		next = fsym->next; @@ -793,60 +795,60 @@ static void free_flag_sym(struct print_flag_sym *fsym)  	}  } -static void free_arg(struct print_arg *arg) +static void free_arg(struct tep_print_arg *arg)  { -	struct print_arg *farg; +	struct tep_print_arg *farg;  	if (!arg)  		return;  	switch (arg->type) { -	case PRINT_ATOM: +	case TEP_PRINT_ATOM:  		free(arg->atom.atom);  		break; -	case PRINT_FIELD: +	case TEP_PRINT_FIELD:  		free(arg->field.name);  		break; -	case PRINT_FLAGS: +	case TEP_PRINT_FLAGS:  		free_arg(arg->flags.field);  		free(arg->flags.delim);  		free_flag_sym(arg->flags.flags);  		break; -	case PRINT_SYMBOL: +	case TEP_PRINT_SYMBOL:  		free_arg(arg->symbol.field);  		free_flag_sym(arg->symbol.symbols);  		break; -	case PRINT_HEX: -	case PRINT_HEX_STR: +	case TEP_PRINT_HEX: +	case TEP_PRINT_HEX_STR:  		free_arg(arg->hex.field);  		free_arg(arg->hex.size);  		break; -	case PRINT_INT_ARRAY: +	case TEP_PRINT_INT_ARRAY:  		free_arg(arg->int_array.field);  		free_arg(arg->int_array.count);  		free_arg(arg->int_array.el_size);  		break; -	case PRINT_TYPE: +	case TEP_PRINT_TYPE:  		free(arg->typecast.type);  		free_arg(arg->typecast.item);  		break; -	case PRINT_STRING: -	case PRINT_BSTRING: +	case TEP_PRINT_STRING: +	case TEP_PRINT_BSTRING:  		free(arg->string.string);  		break; -	case PRINT_BITMASK: +	case TEP_PRINT_BITMASK:  		free(arg->bitmask.bitmask);  		break; -	case PRINT_DYNAMIC_ARRAY: -	case PRINT_DYNAMIC_ARRAY_LEN: +	case TEP_PRINT_DYNAMIC_ARRAY: +	case TEP_PRINT_DYNAMIC_ARRAY_LEN:  		free(arg->dynarray.index);  		break; -	case PRINT_OP: +	case TEP_PRINT_OP:  		free(arg->op.op);  		free_arg(arg->op.left);  		free_arg(arg->op.right);  		break; -	case PRINT_FUNC: +	case TEP_PRINT_FUNC:  		while (arg->func.args) {  			farg = arg->func.args;  			arg->func.args = farg->next; @@ -854,7 +856,7 @@ static void free_arg(struct print_arg *arg)  		}  		break; -	case PRINT_NULL: +	case TEP_PRINT_NULL:  	default:  		break;  	} @@ -862,24 +864,24 @@ static void free_arg(struct print_arg *arg)  	free(arg);  } -static enum event_type get_type(int ch) +static enum tep_event_type get_type(int ch)  {  	if (ch == '\n') -		return EVENT_NEWLINE; +		return TEP_EVENT_NEWLINE;  	if (isspace(ch)) -		return EVENT_SPACE; +		return TEP_EVENT_SPACE;  	if (isalnum(ch) || ch == '_') -		return EVENT_ITEM; +		return TEP_EVENT_ITEM;  	if (ch == '\'') -		return EVENT_SQUOTE; +		return TEP_EVENT_SQUOTE;  	if (ch == '"') -		return EVENT_DQUOTE; +		return TEP_EVENT_DQUOTE;  	if (!isprint(ch)) -		return EVENT_NONE; +		return TEP_EVENT_NONE;  	if (ch == '(' || ch == ')' || ch == ',') -		return EVENT_DELIM; +		return TEP_EVENT_DELIM; -	return EVENT_OP; +	return TEP_EVENT_OP;  }  static int __read_char(void) @@ -927,38 +929,38 @@ static int extend_token(char **tok, char *buf, int size)  	return 0;  } -static enum event_type force_token(const char *str, char **tok); +static enum tep_event_type force_token(const char *str, char **tok); -static enum event_type __read_token(char **tok) +static enum tep_event_type __read_token(char **tok)  {  	char buf[BUFSIZ];  	int ch, last_ch, quote_ch, next_ch;  	int i = 0;  	int tok_size = 0; -	enum event_type type; +	enum tep_event_type type;  	*tok = NULL;  	ch = __read_char();  	if (ch < 0) -		return EVENT_NONE; +		return TEP_EVENT_NONE;  	type = get_type(ch); -	if (type == EVENT_NONE) +	if (type == TEP_EVENT_NONE)  		return type;  	buf[i++] = ch;  	switch (type) { -	case EVENT_NEWLINE: -	case EVENT_DELIM: +	case TEP_EVENT_NEWLINE: +	case TEP_EVENT_DELIM:  		if (asprintf(tok, "%c", ch) < 0) -			return EVENT_ERROR; +			return TEP_EVENT_ERROR;  		return type; -	case EVENT_OP: +	case TEP_EVENT_OP:  		switch (ch) {  		case '-':  			next_ch = __peek_char(); @@ -1001,8 +1003,8 @@ static enum event_type __read_token(char **tok)  			buf[i++] = __read_char();  		goto out; -	case EVENT_DQUOTE: -	case EVENT_SQUOTE: +	case TEP_EVENT_DQUOTE: +	case TEP_EVENT_SQUOTE:  		/* don't keep quotes */  		i--;  		quote_ch = ch; @@ -1014,7 +1016,7 @@ static enum event_type __read_token(char **tok)  				tok_size += BUFSIZ;  				if (extend_token(tok, buf, tok_size) < 0) -					return EVENT_NONE; +					return TEP_EVENT_NONE;  				i = 0;  			}  			last_ch = ch; @@ -1031,7 +1033,7 @@ static enum event_type __read_token(char **tok)  		 * For strings (double quotes) check the next token.  		 * If it is another string, concatinate the two.  		 */ -		if (type == EVENT_DQUOTE) { +		if (type == TEP_EVENT_DQUOTE) {  			unsigned long long save_input_buf_ptr = input_buf_ptr;  			do { @@ -1044,8 +1046,8 @@ static enum event_type __read_token(char **tok)  		goto out; -	case EVENT_ERROR ... EVENT_SPACE: -	case EVENT_ITEM: +	case TEP_EVENT_ERROR ... TEP_EVENT_SPACE: +	case TEP_EVENT_ITEM:  	default:  		break;  	} @@ -1056,7 +1058,7 @@ static enum event_type __read_token(char **tok)  			tok_size += BUFSIZ;  			if (extend_token(tok, buf, tok_size) < 0) -				return EVENT_NONE; +				return TEP_EVENT_NONE;  			i = 0;  		}  		ch = __read_char(); @@ -1066,9 +1068,9 @@ static enum event_type __read_token(char **tok)   out:  	buf[i] = 0;  	if (extend_token(tok, buf, tok_size + i + 1) < 0) -		return EVENT_NONE; +		return TEP_EVENT_NONE; -	if (type == EVENT_ITEM) { +	if (type == TEP_EVENT_ITEM) {  		/*  		 * Older versions of the kernel has a bug that  		 * creates invalid symbols and will break the mac80211 @@ -1095,12 +1097,12 @@ static enum event_type __read_token(char **tok)  	return type;  } -static enum event_type force_token(const char *str, char **tok) +static enum tep_event_type force_token(const char *str, char **tok)  {  	const char *save_input_buf;  	unsigned long long save_input_buf_ptr;  	unsigned long long save_input_buf_siz; -	enum event_type type; +	enum tep_event_type type;  	/* save off the current input pointers */  	save_input_buf = input_buf; @@ -1125,13 +1127,13 @@ static void free_token(char *tok)  		free(tok);  } -static enum event_type read_token(char **tok) +static enum tep_event_type read_token(char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	for (;;) {  		type = __read_token(tok); -		if (type != EVENT_SPACE) +		if (type != TEP_EVENT_SPACE)  			return type;  		free_token(*tok); @@ -1139,7 +1141,7 @@ static enum event_type read_token(char **tok)  	/* not reached */  	*tok = NULL; -	return EVENT_NONE; +	return TEP_EVENT_NONE;  }  /** @@ -1151,7 +1153,7 @@ static enum event_type read_token(char **tok)   *   * Returns the token type.   */ -enum event_type tep_read_token(char **tok) +enum tep_event_type tep_read_token(char **tok)  {  	return read_token(tok);  } @@ -1166,13 +1168,13 @@ void tep_free_token(char *token)  }  /* no newline */ -static enum event_type read_token_item(char **tok) +static enum tep_event_type read_token_item(char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	for (;;) {  		type = __read_token(tok); -		if (type != EVENT_SPACE && type != EVENT_NEWLINE) +		if (type != TEP_EVENT_SPACE && type != TEP_EVENT_NEWLINE)  			return type;  		free_token(*tok);  		*tok = NULL; @@ -1180,10 +1182,10 @@ static enum event_type read_token_item(char **tok)  	/* not reached */  	*tok = NULL; -	return EVENT_NONE; +	return TEP_EVENT_NONE;  } -static int test_type(enum event_type type, enum event_type expect) +static int test_type(enum tep_event_type type, enum tep_event_type expect)  {  	if (type != expect) {  		do_warning("Error: expected type %d but read %d", @@ -1193,8 +1195,8 @@ static int test_type(enum event_type type, enum event_type expect)  	return 0;  } -static int test_type_token(enum event_type type, const char *token, -		    enum event_type expect, const char *expect_tok) +static int test_type_token(enum tep_event_type type, const char *token, +		    enum tep_event_type expect, const char *expect_tok)  {  	if (type != expect) {  		do_warning("Error: expected type %d but read %d", @@ -1210,9 +1212,9 @@ static int test_type_token(enum event_type type, const char *token,  	return 0;  } -static int __read_expect_type(enum event_type expect, char **tok, int newline_ok) +static int __read_expect_type(enum tep_event_type expect, char **tok, int newline_ok)  { -	enum event_type type; +	enum tep_event_type type;  	if (newline_ok)  		type = read_token(tok); @@ -1221,15 +1223,15 @@ static int __read_expect_type(enum event_type expect, char **tok, int newline_ok  	return test_type(type, expect);  } -static int read_expect_type(enum event_type expect, char **tok) +static int read_expect_type(enum tep_event_type expect, char **tok)  {  	return __read_expect_type(expect, tok, 1);  } -static int __read_expected(enum event_type expect, const char *str, +static int __read_expected(enum tep_event_type expect, const char *str,  			   int newline_ok)  { -	enum event_type type; +	enum tep_event_type type;  	char *token;  	int ret; @@ -1245,12 +1247,12 @@ static int __read_expected(enum event_type expect, const char *str,  	return ret;  } -static int read_expected(enum event_type expect, const char *str) +static int read_expected(enum tep_event_type expect, const char *str)  {  	return __read_expected(expect, str, 1);  } -static int read_expected_item(enum event_type expect, const char *str) +static int read_expected_item(enum tep_event_type expect, const char *str)  {  	return __read_expected(expect, str, 0);  } @@ -1259,13 +1261,13 @@ static char *event_read_name(void)  {  	char *token; -	if (read_expected(EVENT_ITEM, "name") < 0) +	if (read_expected(TEP_EVENT_ITEM, "name") < 0)  		return NULL; -	if (read_expected(EVENT_OP, ":") < 0) +	if (read_expected(TEP_EVENT_OP, ":") < 0)  		return NULL; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto fail;  	return token; @@ -1280,13 +1282,13 @@ static int event_read_id(void)  	char *token;  	int id; -	if (read_expected_item(EVENT_ITEM, "ID") < 0) +	if (read_expected_item(TEP_EVENT_ITEM, "ID") < 0)  		return -1; -	if (read_expected(EVENT_OP, ":") < 0) +	if (read_expected(TEP_EVENT_OP, ":") < 0)  		return -1; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto fail;  	id = strtoul(token, NULL, 0); @@ -1298,9 +1300,9 @@ static int event_read_id(void)  	return -1;  } -static int field_is_string(struct format_field *field) +static int field_is_string(struct tep_format_field *field)  { -	if ((field->flags & FIELD_IS_ARRAY) && +	if ((field->flags & TEP_FIELD_IS_ARRAY) &&  	    (strstr(field->type, "char") || strstr(field->type, "u8") ||  	     strstr(field->type, "s8")))  		return 1; @@ -1308,7 +1310,7 @@ static int field_is_string(struct format_field *field)  	return 0;  } -static int field_is_dynamic(struct format_field *field) +static int field_is_dynamic(struct tep_format_field *field)  {  	if (strncmp(field->type, "__data_loc", 10) == 0)  		return 1; @@ -1316,7 +1318,7 @@ static int field_is_dynamic(struct format_field *field)  	return 0;  } -static int field_is_long(struct format_field *field) +static int field_is_long(struct tep_format_field *field)  {  	/* includes long long */  	if (strstr(field->type, "long")) @@ -1327,7 +1329,7 @@ static int field_is_long(struct format_field *field)  static unsigned int type_size(const char *name)  { -	/* This covers all FIELD_IS_STRING types. */ +	/* This covers all TEP_FIELD_IS_STRING types. */  	static struct {  		const char *type;  		unsigned int size; @@ -1353,10 +1355,10 @@ static unsigned int type_size(const char *name)  	return 0;  } -static int event_read_fields(struct event_format *event, struct format_field **fields) +static int event_read_fields(struct tep_event_format *event, struct tep_format_field **fields)  { -	struct format_field *field = NULL; -	enum event_type type; +	struct tep_format_field *field = NULL; +	enum tep_event_type type;  	char *token;  	char *last_token;  	int count = 0; @@ -1365,14 +1367,14 @@ static int event_read_fields(struct event_format *event, struct format_field **f  		unsigned int size_dynamic = 0;  		type = read_token(&token); -		if (type == EVENT_NEWLINE) { +		if (type == TEP_EVENT_NEWLINE) {  			free_token(token);  			return count;  		}  		count++; -		if (test_type_token(type, token, EVENT_ITEM, "field")) +		if (test_type_token(type, token, TEP_EVENT_ITEM, "field"))  			goto fail;  		free_token(token); @@ -1381,17 +1383,17 @@ static int event_read_fields(struct event_format *event, struct format_field **f  		 * The ftrace fields may still use the "special" name.  		 * Just ignore it.  		 */ -		if (event->flags & EVENT_FL_ISFTRACE && -		    type == EVENT_ITEM && strcmp(token, "special") == 0) { +		if (event->flags & TEP_EVENT_FL_ISFTRACE && +		    type == TEP_EVENT_ITEM && strcmp(token, "special") == 0) {  			free_token(token);  			type = read_token(&token);  		} -		if (test_type_token(type, token, EVENT_OP, ":") < 0) +		if (test_type_token(type, token, TEP_EVENT_OP, ":") < 0)  			goto fail;  		free_token(token); -		if (read_expect_type(EVENT_ITEM, &token) < 0) +		if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  			goto fail;  		last_token = token; @@ -1405,17 +1407,17 @@ static int event_read_fields(struct event_format *event, struct format_field **f  		/* read the rest of the type */  		for (;;) {  			type = read_token(&token); -			if (type == EVENT_ITEM || -			    (type == EVENT_OP && strcmp(token, "*") == 0) || +			if (type == TEP_EVENT_ITEM || +			    (type == TEP_EVENT_OP && strcmp(token, "*") == 0) ||  			    /*  			     * Some of the ftrace fields are broken and have  			     * an illegal "." in them.  			     */ -			    (event->flags & EVENT_FL_ISFTRACE && -			     type == EVENT_OP && strcmp(token, ".") == 0)) { +			    (event->flags & TEP_EVENT_FL_ISFTRACE && +			     type == TEP_EVENT_OP && strcmp(token, ".") == 0)) {  				if (strcmp(token, "*") == 0) -					field->flags |= FIELD_IS_POINTER; +					field->flags |= TEP_FIELD_IS_POINTER;  				if (field->type) {  					char *new_type; @@ -1445,27 +1447,27 @@ static int event_read_fields(struct event_format *event, struct format_field **f  		}  		field->name = field->alias = last_token; -		if (test_type(type, EVENT_OP)) +		if (test_type(type, TEP_EVENT_OP))  			goto fail;  		if (strcmp(token, "[") == 0) { -			enum event_type last_type = type; +			enum tep_event_type last_type = type;  			char *brackets = token;  			char *new_brackets;  			int len; -			field->flags |= FIELD_IS_ARRAY; +			field->flags |= TEP_FIELD_IS_ARRAY;  			type = read_token(&token); -			if (type == EVENT_ITEM) +			if (type == TEP_EVENT_ITEM)  				field->arraylen = strtoul(token, NULL, 0);  			else  				field->arraylen = 0;  		        while (strcmp(token, "]") != 0) { -				if (last_type == EVENT_ITEM && -				    type == EVENT_ITEM) +				if (last_type == TEP_EVENT_ITEM && +				    type == TEP_EVENT_ITEM)  					len = 2;  				else  					len = 1; @@ -1486,7 +1488,7 @@ static int event_read_fields(struct event_format *event, struct format_field **f  				field->arraylen = strtoul(token, NULL, 0);  				free_token(token);  				type = read_token(&token); -				if (type == EVENT_NONE) { +				if (type == TEP_EVENT_NONE) {  					do_warning_event(event, "failed to find token");  					goto fail;  				} @@ -1509,7 +1511,7 @@ static int event_read_fields(struct event_format *event, struct format_field **f  			 * If the next token is not an OP, then it is of  			 * the format: type [] item;  			 */ -			if (type == EVENT_ITEM) { +			if (type == TEP_EVENT_ITEM) {  				char *new_type;  				new_type = realloc(field->type,  						   strlen(field->type) + @@ -1543,79 +1545,79 @@ static int event_read_fields(struct event_format *event, struct format_field **f  		}  		if (field_is_string(field)) -			field->flags |= FIELD_IS_STRING; +			field->flags |= TEP_FIELD_IS_STRING;  		if (field_is_dynamic(field)) -			field->flags |= FIELD_IS_DYNAMIC; +			field->flags |= TEP_FIELD_IS_DYNAMIC;  		if (field_is_long(field)) -			field->flags |= FIELD_IS_LONG; +			field->flags |= TEP_FIELD_IS_LONG; -		if (test_type_token(type, token,  EVENT_OP, ";")) +		if (test_type_token(type, token,  TEP_EVENT_OP, ";"))  			goto fail;  		free_token(token); -		if (read_expected(EVENT_ITEM, "offset") < 0) +		if (read_expected(TEP_EVENT_ITEM, "offset") < 0)  			goto fail_expect; -		if (read_expected(EVENT_OP, ":") < 0) +		if (read_expected(TEP_EVENT_OP, ":") < 0)  			goto fail_expect; -		if (read_expect_type(EVENT_ITEM, &token)) +		if (read_expect_type(TEP_EVENT_ITEM, &token))  			goto fail;  		field->offset = strtoul(token, NULL, 0);  		free_token(token); -		if (read_expected(EVENT_OP, ";") < 0) +		if (read_expected(TEP_EVENT_OP, ";") < 0)  			goto fail_expect; -		if (read_expected(EVENT_ITEM, "size") < 0) +		if (read_expected(TEP_EVENT_ITEM, "size") < 0)  			goto fail_expect; -		if (read_expected(EVENT_OP, ":") < 0) +		if (read_expected(TEP_EVENT_OP, ":") < 0)  			goto fail_expect; -		if (read_expect_type(EVENT_ITEM, &token)) +		if (read_expect_type(TEP_EVENT_ITEM, &token))  			goto fail;  		field->size = strtoul(token, NULL, 0);  		free_token(token); -		if (read_expected(EVENT_OP, ";") < 0) +		if (read_expected(TEP_EVENT_OP, ";") < 0)  			goto fail_expect;  		type = read_token(&token); -		if (type != EVENT_NEWLINE) { +		if (type != TEP_EVENT_NEWLINE) {  			/* newer versions of the kernel have a "signed" type */ -			if (test_type_token(type, token, EVENT_ITEM, "signed")) +			if (test_type_token(type, token, TEP_EVENT_ITEM, "signed"))  				goto fail;  			free_token(token); -			if (read_expected(EVENT_OP, ":") < 0) +			if (read_expected(TEP_EVENT_OP, ":") < 0)  				goto fail_expect; -			if (read_expect_type(EVENT_ITEM, &token)) +			if (read_expect_type(TEP_EVENT_ITEM, &token))  				goto fail;  			if (strtoul(token, NULL, 0)) -				field->flags |= FIELD_IS_SIGNED; +				field->flags |= TEP_FIELD_IS_SIGNED;  			free_token(token); -			if (read_expected(EVENT_OP, ";") < 0) +			if (read_expected(TEP_EVENT_OP, ";") < 0)  				goto fail_expect; -			if (read_expect_type(EVENT_NEWLINE, &token)) +			if (read_expect_type(TEP_EVENT_NEWLINE, &token))  				goto fail;  		}  		free_token(token); -		if (field->flags & FIELD_IS_ARRAY) { +		if (field->flags & TEP_FIELD_IS_ARRAY) {  			if (field->arraylen)  				field->elementsize = field->size / field->arraylen; -			else if (field->flags & FIELD_IS_DYNAMIC) +			else if (field->flags & TEP_FIELD_IS_DYNAMIC)  				field->elementsize = size_dynamic; -			else if (field->flags & FIELD_IS_STRING) +			else if (field->flags & TEP_FIELD_IS_STRING)  				field->elementsize = 1; -			else if (field->flags & FIELD_IS_LONG) +			else if (field->flags & TEP_FIELD_IS_LONG)  				field->elementsize = event->pevent ?  						     event->pevent->long_size :  						     sizeof(long); @@ -1640,18 +1642,18 @@ fail_expect:  	return -1;  } -static int event_read_format(struct event_format *event) +static int event_read_format(struct tep_event_format *event)  {  	char *token;  	int ret; -	if (read_expected_item(EVENT_ITEM, "format") < 0) +	if (read_expected_item(TEP_EVENT_ITEM, "format") < 0)  		return -1; -	if (read_expected(EVENT_OP, ":") < 0) +	if (read_expected(TEP_EVENT_OP, ":") < 0)  		return -1; -	if (read_expect_type(EVENT_NEWLINE, &token)) +	if (read_expect_type(TEP_EVENT_NEWLINE, &token))  		goto fail;  	free_token(token); @@ -1672,14 +1674,14 @@ static int event_read_format(struct event_format *event)  	return -1;  } -static enum event_type -process_arg_token(struct event_format *event, struct print_arg *arg, -		  char **tok, enum event_type type); +static enum tep_event_type +process_arg_token(struct tep_event_format *event, struct tep_print_arg *arg, +		  char **tok, enum tep_event_type type); -static enum event_type -process_arg(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_arg(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	char *token;  	type = read_token(&token); @@ -1688,32 +1690,32 @@ process_arg(struct event_format *event, struct print_arg *arg, char **tok)  	return process_arg_token(event, arg, tok, type);  } -static enum event_type -process_op(struct event_format *event, struct print_arg *arg, char **tok); +static enum tep_event_type +process_op(struct tep_event_format *event, struct tep_print_arg *arg, char **tok);  /*   * For __print_symbolic() and __print_flags, we need to completely   * evaluate the first argument, which defines what to print next.   */ -static enum event_type -process_field_arg(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_field_arg(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	type = process_arg(event, arg, tok); -	while (type == EVENT_OP) { +	while (type == TEP_EVENT_OP) {  		type = process_op(event, arg, tok);  	}  	return type;  } -static enum event_type -process_cond(struct event_format *event, struct print_arg *top, char **tok) +static enum tep_event_type +process_cond(struct tep_event_format *event, struct tep_print_arg *top, char **tok)  { -	struct print_arg *arg, *left, *right; -	enum event_type type; +	struct tep_print_arg *arg, *left, *right; +	enum tep_event_type type;  	char *token = NULL;  	arg = alloc_arg(); @@ -1728,7 +1730,7 @@ process_cond(struct event_format *event, struct print_arg *top, char **tok)  		goto out_free;  	} -	arg->type = PRINT_OP; +	arg->type = TEP_PRINT_OP;  	arg->op.left = left;  	arg->op.right = right; @@ -1736,16 +1738,16 @@ process_cond(struct event_format *event, struct print_arg *top, char **tok)  	type = process_arg(event, left, &token);   again: -	if (type == EVENT_ERROR) +	if (type == TEP_EVENT_ERROR)  		goto out_free;  	/* Handle other operations in the arguments */ -	if (type == EVENT_OP && strcmp(token, ":") != 0) { +	if (type == TEP_EVENT_OP && strcmp(token, ":") != 0) {  		type = process_op(event, left, &token);  		goto again;  	} -	if (test_type_token(type, token, EVENT_OP, ":")) +	if (test_type_token(type, token, TEP_EVENT_OP, ":"))  		goto out_free;  	arg->op.op = token; @@ -1762,14 +1764,14 @@ out_free:  	top->op.right = NULL;  	free_token(token);  	free_arg(arg); -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_array(struct event_format *event, struct print_arg *top, char **tok) +static enum tep_event_type +process_array(struct tep_event_format *event, struct tep_print_arg *top, char **tok)  { -	struct print_arg *arg; -	enum event_type type; +	struct tep_print_arg *arg; +	enum tep_event_type type;  	char *token = NULL;  	arg = alloc_arg(); @@ -1777,12 +1779,12 @@ process_array(struct event_format *event, struct print_arg *top, char **tok)  		do_warning_event(event, "%s: not enough memory!", __func__);  		/* '*tok' is set to top->op.op.  No need to free. */  		*tok = NULL; -		return EVENT_ERROR; +		return TEP_EVENT_ERROR;  	}  	*tok = NULL;  	type = process_arg(event, arg, &token); -	if (test_type_token(type, token, EVENT_OP, "]")) +	if (test_type_token(type, token, TEP_EVENT_OP, "]"))  		goto out_free;  	top->op.right = arg; @@ -1796,7 +1798,7 @@ process_array(struct event_format *event, struct print_arg *top, char **tok)  out_free:  	free_token(token);  	free_arg(arg); -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  }  static int get_op_prio(char *op) @@ -1854,11 +1856,11 @@ static int get_op_prio(char *op)  	}  } -static int set_op_prio(struct print_arg *arg) +static int set_op_prio(struct tep_print_arg *arg)  {  	/* single ops are the greatest */ -	if (!arg->op.left || arg->op.left->type == PRINT_NULL) +	if (!arg->op.left || arg->op.left->type == TEP_PRINT_NULL)  		arg->op.prio = 0;  	else  		arg->op.prio = get_op_prio(arg->op.op); @@ -1867,17 +1869,17 @@ static int set_op_prio(struct print_arg *arg)  }  /* Note, *tok does not get freed, but will most likely be saved */ -static enum event_type -process_op(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_op(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	struct print_arg *left, *right = NULL; -	enum event_type type; +	struct tep_print_arg *left, *right = NULL; +	enum tep_event_type type;  	char *token;  	/* the op is passed in via tok */  	token = *tok; -	if (arg->type == PRINT_OP && !arg->op.left) { +	if (arg->type == TEP_PRINT_OP && !arg->op.left) {  		/* handle single op */  		if (token[1]) {  			do_warning_event(event, "bad op token %s", token); @@ -1900,7 +1902,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)  		if (!left)  			goto out_warn_free; -		left->type = PRINT_NULL; +		left->type = TEP_PRINT_NULL;  		arg->op.left = left;  		right = alloc_arg(); @@ -1922,7 +1924,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)  		/* copy the top arg to the left */  		*left = *arg; -		arg->type = PRINT_OP; +		arg->type = TEP_PRINT_OP;  		arg->op.op = token;  		arg->op.left = left;  		arg->op.prio = 0; @@ -1956,13 +1958,13 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)  		/* copy the top arg to the left */  		*left = *arg; -		arg->type = PRINT_OP; +		arg->type = TEP_PRINT_OP;  		arg->op.op = token;  		arg->op.left = left;  		arg->op.right = NULL;  		if (set_op_prio(arg) == -1) { -			event->flags |= EVENT_FL_FAILED; +			event->flags |= TEP_EVENT_FL_FAILED;  			/* arg->op.op (= token) will be freed at out_free */  			arg->op.op = NULL;  			goto out_free; @@ -1973,10 +1975,10 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)  		/* could just be a type pointer */  		if ((strcmp(arg->op.op, "*") == 0) && -		    type == EVENT_DELIM && (strcmp(token, ")") == 0)) { +		    type == TEP_EVENT_DELIM && (strcmp(token, ")") == 0)) {  			char *new_atom; -			if (left->type != PRINT_ATOM) { +			if (left->type != TEP_PRINT_ATOM) {  				do_warning_event(event, "bad pointer type");  				goto out_free;  			} @@ -1999,16 +2001,16 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)  			goto out_warn_free;  		type = process_arg_token(event, right, tok, type); -		if (type == EVENT_ERROR) { +		if (type == TEP_EVENT_ERROR) {  			free_arg(right);  			/* token was freed in process_arg_token() via *tok */  			token = NULL;  			goto out_free;  		} -		if (right->type == PRINT_OP && +		if (right->type == TEP_PRINT_OP &&  		    get_op_prio(arg->op.op) < get_op_prio(right->op.op)) { -			struct print_arg tmp; +			struct tep_print_arg tmp;  			/* rotate ops according to the priority */  			arg->op.right = right->op.left; @@ -2030,7 +2032,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)  		*left = *arg; -		arg->type = PRINT_OP; +		arg->type = TEP_PRINT_OP;  		arg->op.op = token;  		arg->op.left = left; @@ -2041,12 +2043,12 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)  	} else {  		do_warning_event(event, "unknown op '%s'", token); -		event->flags |= EVENT_FL_FAILED; +		event->flags |= TEP_EVENT_FL_FAILED;  		/* the arg is now the left side */  		goto out_free;  	} -	if (type == EVENT_OP && strcmp(*tok, ":") != 0) { +	if (type == TEP_EVENT_OP && strcmp(*tok, ":") != 0) {  		int prio;  		/* higher prios need to be closer to the root */ @@ -2065,34 +2067,34 @@ out_warn_free:  out_free:  	free_token(token);  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_entry(struct event_format *event __maybe_unused, struct print_arg *arg, +static enum tep_event_type +process_entry(struct tep_event_format *event __maybe_unused, struct tep_print_arg *arg,  	      char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	char *field;  	char *token; -	if (read_expected(EVENT_OP, "->") < 0) +	if (read_expected(TEP_EVENT_OP, "->") < 0)  		goto out_err; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto out_free;  	field = token; -	arg->type = PRINT_FIELD; +	arg->type = TEP_PRINT_FIELD;  	arg->field.name = field;  	if (is_flag_field) {  		arg->field.field = tep_find_any_field(event, arg->field.name); -		arg->field.field->flags |= FIELD_IS_FLAG; +		arg->field.field->flags |= TEP_FIELD_IS_FLAG;  		is_flag_field = 0;  	} else if (is_symbolic_field) {  		arg->field.field = tep_find_any_field(event, arg->field.name); -		arg->field.field->flags |= FIELD_IS_SYMBOLIC; +		arg->field.field->flags |= TEP_FIELD_IS_SYMBOLIC;  		is_symbolic_field = 0;  	} @@ -2105,14 +2107,14 @@ process_entry(struct event_format *event __maybe_unused, struct print_arg *arg,  	free_token(token);   out_err:  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static int alloc_and_process_delim(struct event_format *event, char *next_token, -				   struct print_arg **print_arg) +static int alloc_and_process_delim(struct tep_event_format *event, char *next_token, +				   struct tep_print_arg **print_arg)  { -	struct print_arg *field; -	enum event_type type; +	struct tep_print_arg *field; +	enum tep_event_type type;  	char *token;  	int ret = 0; @@ -2125,7 +2127,7 @@ static int alloc_and_process_delim(struct event_format *event, char *next_token,  	type = process_arg(event, field, &token); -	if (test_type_token(type, token, EVENT_DELIM, next_token)) { +	if (test_type_token(type, token, TEP_EVENT_DELIM, next_token)) {  		errno = EINVAL;  		ret = -1;  		free_arg(field); @@ -2140,7 +2142,7 @@ out_free_token:  	return ret;  } -static char *arg_eval (struct print_arg *arg); +static char *arg_eval (struct tep_print_arg *arg);  static unsigned long long  eval_type_str(unsigned long long val, const char *type, int pointer) @@ -2237,9 +2239,9 @@ eval_type_str(unsigned long long val, const char *type, int pointer)   * Try to figure out the type.   */  static unsigned long long -eval_type(unsigned long long val, struct print_arg *arg, int pointer) +eval_type(unsigned long long val, struct tep_print_arg *arg, int pointer)  { -	if (arg->type != PRINT_TYPE) { +	if (arg->type != TEP_PRINT_TYPE) {  		do_warning("expected type argument");  		return 0;  	} @@ -2247,22 +2249,22 @@ eval_type(unsigned long long val, struct print_arg *arg, int pointer)  	return eval_type_str(val, arg->typecast.type, pointer);  } -static int arg_num_eval(struct print_arg *arg, long long *val) +static int arg_num_eval(struct tep_print_arg *arg, long long *val)  {  	long long left, right;  	int ret = 1;  	switch (arg->type) { -	case PRINT_ATOM: +	case TEP_PRINT_ATOM:  		*val = strtoll(arg->atom.atom, NULL, 0);  		break; -	case PRINT_TYPE: +	case TEP_PRINT_TYPE:  		ret = arg_num_eval(arg->typecast.item, val);  		if (!ret)  			break;  		*val = eval_type(*val, arg, 0);  		break; -	case PRINT_OP: +	case TEP_PRINT_OP:  		switch (arg->op.op[0]) {  		case '|':  			ret = arg_num_eval(arg->op.left, &left); @@ -2365,7 +2367,7 @@ static int arg_num_eval(struct print_arg *arg, long long *val)  			break;  		case '-':  			/* check for negative */ -			if (arg->op.left->type == PRINT_NULL) +			if (arg->op.left->type == TEP_PRINT_NULL)  				left = 0;  			else  				ret = arg_num_eval(arg->op.left, &left); @@ -2377,7 +2379,7 @@ static int arg_num_eval(struct print_arg *arg, long long *val)  			*val = left - right;  			break;  		case '+': -			if (arg->op.left->type == PRINT_NULL) +			if (arg->op.left->type == TEP_PRINT_NULL)  				left = 0;  			else  				ret = arg_num_eval(arg->op.left, &left); @@ -2400,11 +2402,11 @@ static int arg_num_eval(struct print_arg *arg, long long *val)  		}  		break; -	case PRINT_NULL: -	case PRINT_FIELD ... PRINT_SYMBOL: -	case PRINT_STRING: -	case PRINT_BSTRING: -	case PRINT_BITMASK: +	case TEP_PRINT_NULL: +	case TEP_PRINT_FIELD ... TEP_PRINT_SYMBOL: +	case TEP_PRINT_STRING: +	case TEP_PRINT_BSTRING: +	case TEP_PRINT_BITMASK:  	default:  		do_warning("invalid eval type %d", arg->type);  		ret = 0; @@ -2413,27 +2415,27 @@ static int arg_num_eval(struct print_arg *arg, long long *val)  	return ret;  } -static char *arg_eval (struct print_arg *arg) +static char *arg_eval (struct tep_print_arg *arg)  {  	long long val;  	static char buf[20];  	switch (arg->type) { -	case PRINT_ATOM: +	case TEP_PRINT_ATOM:  		return arg->atom.atom; -	case PRINT_TYPE: +	case TEP_PRINT_TYPE:  		return arg_eval(arg->typecast.item); -	case PRINT_OP: +	case TEP_PRINT_OP:  		if (!arg_num_eval(arg, &val))  			break;  		sprintf(buf, "%lld", val);  		return buf; -	case PRINT_NULL: -	case PRINT_FIELD ... PRINT_SYMBOL: -	case PRINT_STRING: -	case PRINT_BSTRING: -	case PRINT_BITMASK: +	case TEP_PRINT_NULL: +	case TEP_PRINT_FIELD ... TEP_PRINT_SYMBOL: +	case TEP_PRINT_STRING: +	case TEP_PRINT_BSTRING: +	case TEP_PRINT_BITMASK:  	default:  		do_warning("invalid eval type %d", arg->type);  		break; @@ -2442,19 +2444,19 @@ static char *arg_eval (struct print_arg *arg)  	return NULL;  } -static enum event_type -process_fields(struct event_format *event, struct print_flag_sym **list, char **tok) +static enum tep_event_type +process_fields(struct tep_event_format *event, struct tep_print_flag_sym **list, char **tok)  { -	enum event_type type; -	struct print_arg *arg = NULL; -	struct print_flag_sym *field; +	enum tep_event_type type; +	struct tep_print_arg *arg = NULL; +	struct tep_print_flag_sym *field;  	char *token = *tok;  	char *value;  	do {  		free_token(token);  		type = read_token_item(&token); -		if (test_type_token(type, token, EVENT_OP, "{")) +		if (test_type_token(type, token, TEP_EVENT_OP, "{"))  			break;  		arg = alloc_arg(); @@ -2464,13 +2466,13 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char **  		free_token(token);  		type = process_arg(event, arg, &token); -		if (type == EVENT_OP) +		if (type == TEP_EVENT_OP)  			type = process_op(event, arg, &token); -		if (type == EVENT_ERROR) +		if (type == TEP_EVENT_ERROR)  			goto out_free; -		if (test_type_token(type, token, EVENT_DELIM, ",")) +		if (test_type_token(type, token, TEP_EVENT_DELIM, ","))  			goto out_free;  		field = calloc(1, sizeof(*field)); @@ -2491,7 +2493,7 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char **  		free_token(token);  		type = process_arg(event, arg, &token); -		if (test_type_token(type, token, EVENT_OP, "}")) +		if (test_type_token(type, token, TEP_EVENT_OP, "}"))  			goto out_free_field;  		value = arg_eval(arg); @@ -2508,7 +2510,7 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char **  		free_token(token);  		type = read_token_item(&token); -	} while (type == EVENT_DELIM && strcmp(token, ",") == 0); +	} while (type == TEP_EVENT_DELIM && strcmp(token, ",") == 0);  	*tok = token;  	return type; @@ -2520,18 +2522,18 @@ out_free:  	free_token(token);  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_flags(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_flags(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	struct print_arg *field; -	enum event_type type; +	struct tep_print_arg *field; +	enum tep_event_type type;  	char *token = NULL;  	memset(arg, 0, sizeof(*arg)); -	arg->type = PRINT_FLAGS; +	arg->type = TEP_PRINT_FLAGS;  	field = alloc_arg();  	if (!field) { @@ -2542,10 +2544,10 @@ process_flags(struct event_format *event, struct print_arg *arg, char **tok)  	type = process_field_arg(event, field, &token);  	/* Handle operations in the first argument */ -	while (type == EVENT_OP) +	while (type == TEP_EVENT_OP)  		type = process_op(event, field, &token); -	if (test_type_token(type, token, EVENT_DELIM, ",")) +	if (test_type_token(type, token, TEP_EVENT_DELIM, ","))  		goto out_free_field;  	free_token(token); @@ -2557,11 +2559,11 @@ process_flags(struct event_format *event, struct print_arg *arg, char **tok)  		type = read_token_item(&token);  	} -	if (test_type_token(type, token, EVENT_DELIM, ",")) +	if (test_type_token(type, token, TEP_EVENT_DELIM, ","))  		goto out_free;  	type = process_fields(event, &arg->flags.flags, &token); -	if (test_type_token(type, token, EVENT_DELIM, ")")) +	if (test_type_token(type, token, TEP_EVENT_DELIM, ")"))  		goto out_free;  	free_token(token); @@ -2573,18 +2575,18 @@ out_free_field:  out_free:  	free_token(token);  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_symbols(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_symbols(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	struct print_arg *field; -	enum event_type type; +	struct tep_print_arg *field; +	enum tep_event_type type;  	char *token = NULL;  	memset(arg, 0, sizeof(*arg)); -	arg->type = PRINT_SYMBOL; +	arg->type = TEP_PRINT_SYMBOL;  	field = alloc_arg();  	if (!field) { @@ -2594,13 +2596,13 @@ process_symbols(struct event_format *event, struct print_arg *arg, char **tok)  	type = process_field_arg(event, field, &token); -	if (test_type_token(type, token, EVENT_DELIM, ",")) +	if (test_type_token(type, token, TEP_EVENT_DELIM, ","))  		goto out_free_field;  	arg->symbol.field = field;  	type = process_fields(event, &arg->symbol.symbols, &token); -	if (test_type_token(type, token, EVENT_DELIM, ")")) +	if (test_type_token(type, token, TEP_EVENT_DELIM, ")"))  		goto out_free;  	free_token(token); @@ -2612,12 +2614,12 @@ out_free_field:  out_free:  	free_token(token);  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_hex_common(struct event_format *event, struct print_arg *arg, -		   char **tok, enum print_arg_type type) +static enum tep_event_type +process_hex_common(struct tep_event_format *event, struct tep_print_arg *arg, +		   char **tok, enum tep_print_arg_type type)  {  	memset(arg, 0, sizeof(*arg));  	arg->type = type; @@ -2635,27 +2637,27 @@ free_field:  	arg->hex.field = NULL;  out:  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_hex(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_hex(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	return process_hex_common(event, arg, tok, PRINT_HEX); +	return process_hex_common(event, arg, tok, TEP_PRINT_HEX);  } -static enum event_type -process_hex_str(struct event_format *event, struct print_arg *arg, +static enum tep_event_type +process_hex_str(struct tep_event_format *event, struct tep_print_arg *arg,  		char **tok)  { -	return process_hex_common(event, arg, tok, PRINT_HEX_STR); +	return process_hex_common(event, arg, tok, TEP_PRINT_HEX_STR);  } -static enum event_type -process_int_array(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_int_array(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  {  	memset(arg, 0, sizeof(*arg)); -	arg->type = PRINT_INT_ARRAY; +	arg->type = TEP_PRINT_INT_ARRAY;  	if (alloc_and_process_delim(event, ",", &arg->int_array.field))  		goto out; @@ -2676,18 +2678,18 @@ free_field:  	arg->int_array.field = NULL;  out:  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_dynamic_array(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_dynamic_array(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	struct format_field *field; -	enum event_type type; +	struct tep_format_field *field; +	enum tep_event_type type;  	char *token;  	memset(arg, 0, sizeof(*arg)); -	arg->type = PRINT_DYNAMIC_ARRAY; +	arg->type = TEP_PRINT_DYNAMIC_ARRAY;  	/*  	 * The item within the parenthesis is another field that holds @@ -2695,7 +2697,7 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char **  	 */  	type = read_token(&token);  	*tok = token; -	if (type != EVENT_ITEM) +	if (type != TEP_EVENT_ITEM)  		goto out_free;  	/* Find the field */ @@ -2707,13 +2709,13 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char **  	arg->dynarray.field = field;  	arg->dynarray.index = 0; -	if (read_expected(EVENT_DELIM, ")") < 0) +	if (read_expected(TEP_EVENT_DELIM, ")") < 0)  		goto out_free;  	free_token(token);  	type = read_token_item(&token);  	*tok = token; -	if (type != EVENT_OP || strcmp(token, "[") != 0) +	if (type != TEP_EVENT_OP || strcmp(token, "[") != 0)  		return type;  	free_token(token); @@ -2721,14 +2723,14 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char **  	if (!arg) {  		do_warning_event(event, "%s: not enough memory!", __func__);  		*tok = NULL; -		return EVENT_ERROR; +		return TEP_EVENT_ERROR;  	}  	type = process_arg(event, arg, &token); -	if (type == EVENT_ERROR) +	if (type == TEP_EVENT_ERROR)  		goto out_free_arg; -	if (!test_type_token(type, token, EVENT_OP, "]")) +	if (!test_type_token(type, token, TEP_EVENT_OP, "]"))  		goto out_free_arg;  	free_token(token); @@ -2740,21 +2742,21 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char **   out_free:  	free_token(token);  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_dynamic_array_len(struct event_format *event, struct print_arg *arg, +static enum tep_event_type +process_dynamic_array_len(struct tep_event_format *event, struct tep_print_arg *arg,  			  char **tok)  { -	struct format_field *field; -	enum event_type type; +	struct tep_format_field *field; +	enum tep_event_type type;  	char *token; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto out_free; -	arg->type = PRINT_DYNAMIC_ARRAY_LEN; +	arg->type = TEP_PRINT_DYNAMIC_ARRAY_LEN;  	/* Find the field */  	field = tep_find_field(event, token); @@ -2764,7 +2766,7 @@ process_dynamic_array_len(struct event_format *event, struct print_arg *arg,  	arg->dynarray.field = field;  	arg->dynarray.index = 0; -	if (read_expected(EVENT_DELIM, ")") < 0) +	if (read_expected(TEP_EVENT_DELIM, ")") < 0)  		goto out_err;  	type = read_token(&token); @@ -2776,28 +2778,28 @@ process_dynamic_array_len(struct event_format *event, struct print_arg *arg,  	free_token(token);   out_err:  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_paren(struct event_format *event, struct print_arg *arg, char **tok) +static enum tep_event_type +process_paren(struct tep_event_format *event, struct tep_print_arg *arg, char **tok)  { -	struct print_arg *item_arg; -	enum event_type type; +	struct tep_print_arg *item_arg; +	enum tep_event_type type;  	char *token;  	type = process_arg(event, arg, &token); -	if (type == EVENT_ERROR) +	if (type == TEP_EVENT_ERROR)  		goto out_free; -	if (type == EVENT_OP) +	if (type == TEP_EVENT_OP)  		type = process_op(event, arg, &token); -	if (type == EVENT_ERROR) +	if (type == TEP_EVENT_ERROR)  		goto out_free; -	if (test_type_token(type, token, EVENT_DELIM, ")")) +	if (test_type_token(type, token, TEP_EVENT_DELIM, ")"))  		goto out_free;  	free_token(token); @@ -2808,13 +2810,13 @@ process_paren(struct event_format *event, struct print_arg *arg, char **tok)  	 * this was a typecast.  	 */  	if (event_item_type(type) || -	    (type == EVENT_DELIM && strcmp(token, "(") == 0)) { +	    (type == TEP_EVENT_DELIM && strcmp(token, "(") == 0)) {  		/* make this a typecast and contine */  		/* prevous must be an atom */ -		if (arg->type != PRINT_ATOM) { -			do_warning_event(event, "previous needed to be PRINT_ATOM"); +		if (arg->type != TEP_PRINT_ATOM) { +			do_warning_event(event, "previous needed to be TEP_PRINT_ATOM");  			goto out_free;  		} @@ -2825,7 +2827,7 @@ process_paren(struct event_format *event, struct print_arg *arg, char **tok)  			goto out_free;  		} -		arg->type = PRINT_TYPE; +		arg->type = TEP_PRINT_TYPE;  		arg->typecast.type = arg->atom.atom;  		arg->typecast.item = item_arg;  		type = process_arg_token(event, item_arg, &token, type); @@ -2838,25 +2840,25 @@ process_paren(struct event_format *event, struct print_arg *arg, char **tok)   out_free:  	free_token(token);  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_str(struct event_format *event __maybe_unused, struct print_arg *arg, +static enum tep_event_type +process_str(struct tep_event_format *event __maybe_unused, struct tep_print_arg *arg,  	    char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	char *token; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto out_free; -	arg->type = PRINT_STRING; +	arg->type = TEP_PRINT_STRING;  	arg->string.string = token;  	arg->string.offset = -1; -	if (read_expected(EVENT_DELIM, ")") < 0) +	if (read_expected(TEP_EVENT_DELIM, ")") < 0)  		goto out_err;  	type = read_token(&token); @@ -2868,24 +2870,24 @@ process_str(struct event_format *event __maybe_unused, struct print_arg *arg,  	free_token(token);   out_err:  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_bitmask(struct event_format *event __maybe_unused, struct print_arg *arg, -	    char **tok) +static enum tep_event_type +process_bitmask(struct tep_event_format *event __maybe_unused, struct tep_print_arg *arg, +		char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	char *token; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto out_free; -	arg->type = PRINT_BITMASK; +	arg->type = TEP_PRINT_BITMASK;  	arg->bitmask.bitmask = token;  	arg->bitmask.offset = -1; -	if (read_expected(EVENT_DELIM, ")") < 0) +	if (read_expected(TEP_EVENT_DELIM, ")") < 0)  		goto out_err;  	type = read_token(&token); @@ -2897,7 +2899,7 @@ process_bitmask(struct event_format *event __maybe_unused, struct print_arg *arg  	free_token(token);   out_err:  	*tok = NULL; -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  }  static struct tep_function_handler * @@ -2932,17 +2934,17 @@ static void remove_func_handler(struct tep_handle *pevent, char *func_name)  	}  } -static enum event_type -process_func_handler(struct event_format *event, struct tep_function_handler *func, -		     struct print_arg *arg, char **tok) +static enum tep_event_type +process_func_handler(struct tep_event_format *event, struct tep_function_handler *func, +		     struct tep_print_arg *arg, char **tok)  { -	struct print_arg **next_arg; -	struct print_arg *farg; -	enum event_type type; +	struct tep_print_arg **next_arg; +	struct tep_print_arg *farg; +	enum tep_event_type type;  	char *token;  	int i; -	arg->type = PRINT_FUNC; +	arg->type = TEP_PRINT_FUNC;  	arg->func.func = func;  	*tok = NULL; @@ -2953,12 +2955,12 @@ process_func_handler(struct event_format *event, struct tep_function_handler *fu  		if (!farg) {  			do_warning_event(event, "%s: not enough memory!",  					 __func__); -			return EVENT_ERROR; +			return TEP_EVENT_ERROR;  		}  		type = process_arg(event, farg, &token);  		if (i < (func->nr_args - 1)) { -			if (type != EVENT_DELIM || strcmp(token, ",") != 0) { +			if (type != TEP_EVENT_DELIM || strcmp(token, ",") != 0) {  				do_warning_event(event,  					"Error: function '%s()' expects %d arguments but event %s only uses %d",  					func->name, func->nr_args, @@ -2966,7 +2968,7 @@ process_func_handler(struct event_format *event, struct tep_function_handler *fu  				goto err;  			}  		} else { -			if (type != EVENT_DELIM || strcmp(token, ")") != 0) { +			if (type != TEP_EVENT_DELIM || strcmp(token, ")") != 0) {  				do_warning_event(event,  					"Error: function '%s()' only expects %d arguments but event %s has more",  					func->name, func->nr_args, event->name); @@ -2987,11 +2989,11 @@ process_func_handler(struct event_format *event, struct tep_function_handler *fu  err:  	free_arg(farg);  	free_token(token); -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_function(struct event_format *event, struct print_arg *arg, +static enum tep_event_type +process_function(struct tep_event_format *event, struct tep_print_arg *arg,  		 char *token, char **tok)  {  	struct tep_function_handler *func; @@ -3043,12 +3045,12 @@ process_function(struct event_format *event, struct print_arg *arg,  	do_warning_event(event, "function %s not defined", token);  	free_token(token); -	return EVENT_ERROR; +	return TEP_EVENT_ERROR;  } -static enum event_type -process_arg_token(struct event_format *event, struct print_arg *arg, -		  char **tok, enum event_type type) +static enum tep_event_type +process_arg_token(struct tep_event_format *event, struct tep_print_arg *arg, +		  char **tok, enum tep_event_type type)  {  	char *token;  	char *atom; @@ -3056,7 +3058,7 @@ process_arg_token(struct event_format *event, struct print_arg *arg,  	token = *tok;  	switch (type) { -	case EVENT_ITEM: +	case TEP_EVENT_ITEM:  		if (strcmp(token, "REC") == 0) {  			free_token(token);  			type = process_entry(event, arg, &token); @@ -3070,7 +3072,7 @@ process_arg_token(struct event_format *event, struct print_arg *arg,  		 * If the next token is a parenthesis, then this  		 * is a function.  		 */ -		if (type == EVENT_DELIM && strcmp(token, "(") == 0) { +		if (type == TEP_EVENT_DELIM && strcmp(token, "(") == 0) {  			free_token(token);  			token = NULL;  			/* this will free atom. */ @@ -3078,7 +3080,7 @@ process_arg_token(struct event_format *event, struct print_arg *arg,  			break;  		}  		/* atoms can be more than one token long */ -		while (type == EVENT_ITEM) { +		while (type == TEP_EVENT_ITEM) {  			char *new_atom;  			new_atom = realloc(atom,  					   strlen(atom) + strlen(token) + 2); @@ -3086,7 +3088,7 @@ process_arg_token(struct event_format *event, struct print_arg *arg,  				free(atom);  				*tok = NULL;  				free_token(token); -				return EVENT_ERROR; +				return TEP_EVENT_ERROR;  			}  			atom = new_atom;  			strcat(atom, " "); @@ -3095,55 +3097,55 @@ process_arg_token(struct event_format *event, struct print_arg *arg,  			type = read_token_item(&token);  		} -		arg->type = PRINT_ATOM; +		arg->type = TEP_PRINT_ATOM;  		arg->atom.atom = atom;  		break; -	case EVENT_DQUOTE: -	case EVENT_SQUOTE: -		arg->type = PRINT_ATOM; +	case TEP_EVENT_DQUOTE: +	case TEP_EVENT_SQUOTE: +		arg->type = TEP_PRINT_ATOM;  		arg->atom.atom = token;  		type = read_token_item(&token);  		break; -	case EVENT_DELIM: +	case TEP_EVENT_DELIM:  		if (strcmp(token, "(") == 0) {  			free_token(token);  			type = process_paren(event, arg, &token);  			break;  		} -	case EVENT_OP: +	case TEP_EVENT_OP:  		/* handle single ops */ -		arg->type = PRINT_OP; +		arg->type = TEP_PRINT_OP;  		arg->op.op = token;  		arg->op.left = NULL;  		type = process_op(event, arg, &token);  		/* On error, the op is freed */ -		if (type == EVENT_ERROR) +		if (type == TEP_EVENT_ERROR)  			arg->op.op = NULL;  		/* return error type if errored */  		break; -	case EVENT_ERROR ... EVENT_NEWLINE: +	case TEP_EVENT_ERROR ... TEP_EVENT_NEWLINE:  	default:  		do_warning_event(event, "unexpected type %d", type); -		return EVENT_ERROR; +		return TEP_EVENT_ERROR;  	}  	*tok = token;  	return type;  } -static int event_read_print_args(struct event_format *event, struct print_arg **list) +static int event_read_print_args(struct tep_event_format *event, struct tep_print_arg **list)  { -	enum event_type type = EVENT_ERROR; -	struct print_arg *arg; +	enum tep_event_type type = TEP_EVENT_ERROR; +	struct tep_print_arg *arg;  	char *token;  	int args = 0;  	do { -		if (type == EVENT_NEWLINE) { +		if (type == TEP_EVENT_NEWLINE) {  			type = read_token_item(&token);  			continue;  		} @@ -3157,7 +3159,7 @@ static int event_read_print_args(struct event_format *event, struct print_arg **  		type = process_arg(event, arg, &token); -		if (type == EVENT_ERROR) { +		if (type == TEP_EVENT_ERROR) {  			free_token(token);  			free_arg(arg);  			return -1; @@ -3166,10 +3168,10 @@ static int event_read_print_args(struct event_format *event, struct print_arg **  		*list = arg;  		args++; -		if (type == EVENT_OP) { +		if (type == TEP_EVENT_OP) {  			type = process_op(event, arg, &token);  			free_token(token); -			if (type == EVENT_ERROR) { +			if (type == TEP_EVENT_ERROR) {  				*list = NULL;  				free_arg(arg);  				return -1; @@ -3178,37 +3180,37 @@ static int event_read_print_args(struct event_format *event, struct print_arg **  			continue;  		} -		if (type == EVENT_DELIM && strcmp(token, ",") == 0) { +		if (type == TEP_EVENT_DELIM && strcmp(token, ",") == 0) {  			free_token(token);  			*list = arg;  			list = &arg->next;  			continue;  		}  		break; -	} while (type != EVENT_NONE); +	} while (type != TEP_EVENT_NONE); -	if (type != EVENT_NONE && type != EVENT_ERROR) +	if (type != TEP_EVENT_NONE && type != TEP_EVENT_ERROR)  		free_token(token);  	return args;  } -static int event_read_print(struct event_format *event) +static int event_read_print(struct tep_event_format *event)  { -	enum event_type type; +	enum tep_event_type type;  	char *token;  	int ret; -	if (read_expected_item(EVENT_ITEM, "print") < 0) +	if (read_expected_item(TEP_EVENT_ITEM, "print") < 0)  		return -1; -	if (read_expected(EVENT_ITEM, "fmt") < 0) +	if (read_expected(TEP_EVENT_ITEM, "fmt") < 0)  		return -1; -	if (read_expected(EVENT_OP, ":") < 0) +	if (read_expected(TEP_EVENT_OP, ":") < 0)  		return -1; -	if (read_expect_type(EVENT_DQUOTE, &token) < 0) +	if (read_expect_type(TEP_EVENT_DQUOTE, &token) < 0)  		goto fail;   concat: @@ -3218,11 +3220,11 @@ static int event_read_print(struct event_format *event)  	/* ok to have no arg */  	type = read_token_item(&token); -	if (type == EVENT_NONE) +	if (type == TEP_EVENT_NONE)  		return 0;  	/* Handle concatenation of print lines */ -	if (type == EVENT_DQUOTE) { +	if (type == TEP_EVENT_DQUOTE) {  		char *cat;  		if (asprintf(&cat, "%s%s", event->print_fmt.format, token) < 0) @@ -3234,7 +3236,7 @@ static int event_read_print(struct event_format *event)  		goto concat;  	} -	if (test_type_token(type, token, EVENT_DELIM, ",")) +	if (test_type_token(type, token, TEP_EVENT_DELIM, ","))  		goto fail;  	free_token(token); @@ -3258,10 +3260,10 @@ static int event_read_print(struct event_format *event)   * Returns a common field from the event by the given @name.   * This only searchs the common fields and not all field.   */ -struct format_field * -tep_find_common_field(struct event_format *event, const char *name) +struct tep_format_field * +tep_find_common_field(struct tep_event_format *event, const char *name)  { -	struct format_field *format; +	struct tep_format_field *format;  	for (format = event->format.common_fields;  	     format; format = format->next) { @@ -3280,10 +3282,10 @@ tep_find_common_field(struct event_format *event, const char *name)   * Returns a non-common field by the given @name.   * This does not search common fields.   */ -struct format_field * -tep_find_field(struct event_format *event, const char *name) +struct tep_format_field * +tep_find_field(struct tep_event_format *event, const char *name)  { -	struct format_field *format; +	struct tep_format_field *format;  	for (format = event->format.fields;  	     format; format = format->next) { @@ -3303,10 +3305,10 @@ tep_find_field(struct event_format *event, const char *name)   * This searchs the common field names first, then   * the non-common ones if a common one was not found.   */ -struct format_field * -tep_find_any_field(struct event_format *event, const char *name) +struct tep_format_field * +tep_find_any_field(struct tep_event_format *event, const char *name)  { -	struct format_field *format; +	struct tep_format_field *format;  	format = tep_find_common_field(event, name);  	if (format) @@ -3330,11 +3332,11 @@ unsigned long long tep_read_number(struct tep_handle *pevent,  	case 1:  		return *(unsigned char *)ptr;  	case 2: -		return data2host2(pevent, ptr); +		return tep_data2host2(pevent, ptr);  	case 4: -		return data2host4(pevent, ptr); +		return tep_data2host4(pevent, ptr);  	case 8: -		return data2host8(pevent, ptr); +		return tep_data2host8(pevent, ptr);  	default:  		/* BUG! */  		return 0; @@ -3352,7 +3354,7 @@ unsigned long long tep_read_number(struct tep_handle *pevent,   *   * Returns 0 on success, -1 otherwise.   */ -int tep_read_number_field(struct format_field *field, const void *data, +int tep_read_number_field(struct tep_format_field *field, const void *data,  			  unsigned long long *value)  {  	if (!field) @@ -3373,8 +3375,8 @@ int tep_read_number_field(struct format_field *field, const void *data,  static int get_common_info(struct tep_handle *pevent,  			   const char *type, int *offset, int *size)  { -	struct event_format *event; -	struct format_field *field; +	struct tep_event_format *event; +	struct tep_format_field *field;  	/*  	 * All events should have the same common elements. @@ -3460,11 +3462,11 @@ static int events_id_cmp(const void *a, const void *b);   *   * Returns an event that has a given @id.   */ -struct event_format *tep_find_event(struct tep_handle *pevent, int id) +struct tep_event_format *tep_find_event(struct tep_handle *pevent, int id)  { -	struct event_format **eventptr; -	struct event_format key; -	struct event_format *pkey = &key; +	struct tep_event_format **eventptr; +	struct tep_event_format key; +	struct tep_event_format *pkey = &key;  	/* Check cache first */  	if (pevent->last_event && pevent->last_event->id == id) @@ -3492,11 +3494,11 @@ struct event_format *tep_find_event(struct tep_handle *pevent, int id)   * This returns an event with a given @name and under the system   * @sys. If @sys is NULL the first event with @name is returned.   */ -struct event_format * +struct tep_event_format *  tep_find_event_by_name(struct tep_handle *pevent,  		       const char *sys, const char *name)  { -	struct event_format *event; +	struct tep_event_format *event;  	int i;  	if (pevent->last_event && @@ -3521,23 +3523,23 @@ tep_find_event_by_name(struct tep_handle *pevent,  }  static unsigned long long -eval_num_arg(void *data, int size, struct event_format *event, struct print_arg *arg) +eval_num_arg(void *data, int size, struct tep_event_format *event, struct tep_print_arg *arg)  {  	struct tep_handle *pevent = event->pevent;  	unsigned long long val = 0;  	unsigned long long left, right; -	struct print_arg *typearg = NULL; -	struct print_arg *larg; +	struct tep_print_arg *typearg = NULL; +	struct tep_print_arg *larg;  	unsigned long offset;  	unsigned int field_size;  	switch (arg->type) { -	case PRINT_NULL: +	case TEP_PRINT_NULL:  		/* ?? */  		return 0; -	case PRINT_ATOM: +	case TEP_PRINT_ATOM:  		return strtoull(arg->atom.atom, NULL, 0); -	case PRINT_FIELD: +	case TEP_PRINT_FIELD:  		if (!arg->field.field) {  			arg->field.field = tep_find_any_field(event, arg->field.name);  			if (!arg->field.field) @@ -3548,27 +3550,27 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg  		val = tep_read_number(pevent, data + arg->field.field->offset,  				      arg->field.field->size);  		break; -	case PRINT_FLAGS: -	case PRINT_SYMBOL: -	case PRINT_INT_ARRAY: -	case PRINT_HEX: -	case PRINT_HEX_STR: +	case TEP_PRINT_FLAGS: +	case TEP_PRINT_SYMBOL: +	case TEP_PRINT_INT_ARRAY: +	case TEP_PRINT_HEX: +	case TEP_PRINT_HEX_STR:  		break; -	case PRINT_TYPE: +	case TEP_PRINT_TYPE:  		val = eval_num_arg(data, size, event, arg->typecast.item);  		return eval_type(val, arg, 0); -	case PRINT_STRING: -	case PRINT_BSTRING: -	case PRINT_BITMASK: +	case TEP_PRINT_STRING: +	case TEP_PRINT_BSTRING: +	case TEP_PRINT_BITMASK:  		return 0; -	case PRINT_FUNC: { +	case TEP_PRINT_FUNC: {  		struct trace_seq s;  		trace_seq_init(&s);  		val = process_defined_func(&s, data, size, event, arg);  		trace_seq_destroy(&s);  		return val;  	} -	case PRINT_OP: +	case TEP_PRINT_OP:  		if (strcmp(arg->op.op, "[") == 0) {  			/*  			 * Arrays are special, since we don't want @@ -3578,7 +3580,7 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg  			/* handle typecasts */  			larg = arg->op.left; -			while (larg->type == PRINT_TYPE) { +			while (larg->type == TEP_PRINT_TYPE) {  				if (!typearg)  					typearg = larg;  				larg = larg->typecast.item; @@ -3588,7 +3590,7 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg  			field_size = pevent->long_size;  			switch (larg->type) { -			case PRINT_DYNAMIC_ARRAY: +			case TEP_PRINT_DYNAMIC_ARRAY:  				offset = tep_read_number(pevent,  						   data + larg->dynarray.field->offset,  						   larg->dynarray.field->size); @@ -3602,7 +3604,7 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg  				offset &= 0xffff;  				offset += right;  				break; -			case PRINT_FIELD: +			case TEP_PRINT_FIELD:  				if (!larg->field.field) {  					larg->field.field =  						tep_find_any_field(event, larg->field.name); @@ -3718,7 +3720,7 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg  			goto out_warning_op;  		}  		break; -	case PRINT_DYNAMIC_ARRAY_LEN: +	case TEP_PRINT_DYNAMIC_ARRAY_LEN:  		offset = tep_read_number(pevent,  					 data + arg->dynarray.field->offset,  					 arg->dynarray.field->size); @@ -3729,7 +3731,7 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg  		 */  		val = (unsigned long long)(offset >> 16);  		break; -	case PRINT_DYNAMIC_ARRAY: +	case TEP_PRINT_DYNAMIC_ARRAY:  		/* Without [], we pass the address to the dynamic data */  		offset = tep_read_number(pevent,  					 data + arg->dynarray.field->offset, @@ -3861,12 +3863,12 @@ static void print_bitmask_to_seq(struct tep_handle *pevent,  }  static void print_str_arg(struct trace_seq *s, void *data, int size, -			  struct event_format *event, const char *format, -			  int len_arg, struct print_arg *arg) +			  struct tep_event_format *event, const char *format, +			  int len_arg, struct tep_print_arg *arg)  {  	struct tep_handle *pevent = event->pevent; -	struct print_flag_sym *flag; -	struct format_field *field; +	struct tep_print_flag_sym *flag; +	struct tep_format_field *field;  	struct printk_map *printk;  	long long val, fval;  	unsigned long long addr; @@ -3876,13 +3878,13 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  	int i, len;  	switch (arg->type) { -	case PRINT_NULL: +	case TEP_PRINT_NULL:  		/* ?? */  		return; -	case PRINT_ATOM: +	case TEP_PRINT_ATOM:  		print_str_to_seq(s, format, len_arg, arg->atom.atom);  		return; -	case PRINT_FIELD: +	case TEP_PRINT_FIELD:  		field = arg->field.field;  		if (!field) {  			field = tep_find_any_field(event, arg->field.name); @@ -3900,7 +3902,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  		 * and the size is the same as long_size, assume that it  		 * is a pointer.  		 */ -		if (!(field->flags & FIELD_IS_ARRAY) && +		if (!(field->flags & TEP_FIELD_IS_ARRAY) &&  		    field->size == pevent->long_size) {  			/* Handle heterogeneous recording and processing @@ -3939,7 +3941,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  		print_str_to_seq(s, format, len_arg, str);  		free(str);  		break; -	case PRINT_FLAGS: +	case TEP_PRINT_FLAGS:  		val = eval_num_arg(data, size, event, arg->flags.field);  		print = 0;  		for (flag = arg->flags.flags; flag; flag = flag->next) { @@ -3962,7 +3964,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  			trace_seq_printf(s, "0x%llx", val);  		}  		break; -	case PRINT_SYMBOL: +	case TEP_PRINT_SYMBOL:  		val = eval_num_arg(data, size, event, arg->symbol.field);  		for (flag = arg->symbol.symbols; flag; flag = flag->next) {  			fval = eval_flag(flag->value); @@ -3974,9 +3976,9 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  		if (!flag)  			trace_seq_printf(s, "0x%llx", val);  		break; -	case PRINT_HEX: -	case PRINT_HEX_STR: -		if (arg->hex.field->type == PRINT_DYNAMIC_ARRAY) { +	case TEP_PRINT_HEX: +	case TEP_PRINT_HEX_STR: +		if (arg->hex.field->type == TEP_PRINT_DYNAMIC_ARRAY) {  			unsigned long offset;  			offset = tep_read_number(pevent,  				data + arg->hex.field->dynarray.field->offset, @@ -3995,19 +3997,19 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  		}  		len = eval_num_arg(data, size, event, arg->hex.size);  		for (i = 0; i < len; i++) { -			if (i && arg->type == PRINT_HEX) +			if (i && arg->type == TEP_PRINT_HEX)  				trace_seq_putc(s, ' ');  			trace_seq_printf(s, "%02x", hex[i]);  		}  		break; -	case PRINT_INT_ARRAY: { +	case TEP_PRINT_INT_ARRAY: {  		void *num;  		int el_size; -		if (arg->int_array.field->type == PRINT_DYNAMIC_ARRAY) { +		if (arg->int_array.field->type == TEP_PRINT_DYNAMIC_ARRAY) {  			unsigned long offset; -			struct format_field *field = +			struct tep_format_field *field =  				arg->int_array.field->dynarray.field;  			offset = tep_read_number(pevent,  						 data + field->offset, @@ -4049,43 +4051,43 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  		}  		break;  	} -	case PRINT_TYPE: +	case TEP_PRINT_TYPE:  		break; -	case PRINT_STRING: { +	case TEP_PRINT_STRING: {  		int str_offset;  		if (arg->string.offset == -1) { -			struct format_field *f; +			struct tep_format_field *f;  			f = tep_find_any_field(event, arg->string.string);  			arg->string.offset = f->offset;  		} -		str_offset = data2host4(pevent, data + arg->string.offset); +		str_offset = tep_data2host4(pevent, data + arg->string.offset);  		str_offset &= 0xffff;  		print_str_to_seq(s, format, len_arg, ((char *)data) + str_offset);  		break;  	} -	case PRINT_BSTRING: +	case TEP_PRINT_BSTRING:  		print_str_to_seq(s, format, len_arg, arg->string.string);  		break; -	case PRINT_BITMASK: { +	case TEP_PRINT_BITMASK: {  		int bitmask_offset;  		int bitmask_size;  		if (arg->bitmask.offset == -1) { -			struct format_field *f; +			struct tep_format_field *f;  			f = tep_find_any_field(event, arg->bitmask.bitmask);  			arg->bitmask.offset = f->offset;  		} -		bitmask_offset = data2host4(pevent, data + arg->bitmask.offset); +		bitmask_offset = tep_data2host4(pevent, data + arg->bitmask.offset);  		bitmask_size = bitmask_offset >> 16;  		bitmask_offset &= 0xffff;  		print_bitmask_to_seq(pevent, s, format, len_arg,  				     data + bitmask_offset, bitmask_size);  		break;  	} -	case PRINT_OP: +	case TEP_PRINT_OP:  		/*  		 * The only op for string should be ? :  		 */ @@ -4099,7 +4101,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,  			print_str_arg(s, data, size, event,  				      format, len_arg, arg->op.right->op.right);  		break; -	case PRINT_FUNC: +	case TEP_PRINT_FUNC:  		process_defined_func(s, data, size, event, arg);  		break;  	default: @@ -4116,13 +4118,13 @@ out_warning_field:  static unsigned long long  process_defined_func(struct trace_seq *s, void *data, int size, -		     struct event_format *event, struct print_arg *arg) +		     struct tep_event_format *event, struct tep_print_arg *arg)  {  	struct tep_function_handler *func_handle = arg->func.func;  	struct func_params *param;  	unsigned long long *args;  	unsigned long long ret; -	struct print_arg *farg; +	struct tep_print_arg *farg;  	struct trace_seq str;  	struct save_str {  		struct save_str *next; @@ -4199,9 +4201,9 @@ out_free:  	return ret;  } -static void free_args(struct print_arg *args) +static void free_args(struct tep_print_arg *args)  { -	struct print_arg *next; +	struct tep_print_arg *next;  	while (args) {  		next = args->next; @@ -4211,11 +4213,11 @@ static void free_args(struct print_arg *args)  	}  } -static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struct event_format *event) +static struct tep_print_arg *make_bprint_args(char *fmt, void *data, int size, struct tep_event_format *event)  {  	struct tep_handle *pevent = event->pevent; -	struct format_field *field, *ip_field; -	struct print_arg *args, *arg, **next; +	struct tep_format_field *field, *ip_field; +	struct tep_print_arg *args, *arg, **next;  	unsigned long long ip, val;  	char *ptr;  	void *bptr; @@ -4254,7 +4256,7 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc  	arg->next = NULL;  	next = &arg->next; -	arg->type = PRINT_ATOM; +	arg->type = TEP_PRINT_ATOM;  	if (asprintf(&arg->atom.atom, "%lld", ip) < 0)  		goto out_free; @@ -4342,7 +4344,7 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc  					goto out_free;  				}  				arg->next = NULL; -				arg->type = PRINT_ATOM; +				arg->type = TEP_PRINT_ATOM;  				if (asprintf(&arg->atom.atom, "%lld", val) < 0) {  					free(arg);  					goto out_free; @@ -4366,7 +4368,7 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc  					goto out_free;  				}  				arg->next = NULL; -				arg->type = PRINT_BSTRING; +				arg->type = TEP_PRINT_BSTRING;  				arg->string.string = strdup(bptr);  				if (!arg->string.string)  					goto out_free; @@ -4388,11 +4390,11 @@ out_free:  static char *  get_bprint_format(void *data, int size __maybe_unused, -		  struct event_format *event) +		  struct tep_event_format *event)  {  	struct tep_handle *pevent = event->pevent;  	unsigned long long addr; -	struct format_field *field; +	struct tep_format_field *field;  	struct printk_map *printk;  	char *format; @@ -4423,17 +4425,17 @@ get_bprint_format(void *data, int size __maybe_unused,  }  static void print_mac_arg(struct trace_seq *s, int mac, void *data, int size, -			  struct event_format *event, struct print_arg *arg) +			  struct tep_event_format *event, struct tep_print_arg *arg)  {  	unsigned char *buf;  	const char *fmt = "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x"; -	if (arg->type == PRINT_FUNC) { +	if (arg->type == TEP_PRINT_FUNC) {  		process_defined_func(s, data, size, event, arg);  		return;  	} -	if (arg->type != PRINT_FIELD) { +	if (arg->type != TEP_PRINT_FIELD) {  		trace_seq_printf(s, "ARG TYPE NOT FIELD BUT %d",  				 arg->type);  		return; @@ -4576,17 +4578,17 @@ static void print_ip6_addr(struct trace_seq *s, char i, unsigned char *buf)   * %pISpc print an IP address based on sockaddr; p adds port.   */  static int print_ipv4_arg(struct trace_seq *s, const char *ptr, char i, -			  void *data, int size, struct event_format *event, -			  struct print_arg *arg) +			  void *data, int size, struct tep_event_format *event, +			  struct tep_print_arg *arg)  {  	unsigned char *buf; -	if (arg->type == PRINT_FUNC) { +	if (arg->type == TEP_PRINT_FUNC) {  		process_defined_func(s, data, size, event, arg);  		return 0;  	} -	if (arg->type != PRINT_FIELD) { +	if (arg->type != TEP_PRINT_FIELD) {  		trace_seq_printf(s, "ARG TYPE NOT FIELD BUT %d", arg->type);  		return 0;  	} @@ -4613,8 +4615,8 @@ static int print_ipv4_arg(struct trace_seq *s, const char *ptr, char i,  }  static int print_ipv6_arg(struct trace_seq *s, const char *ptr, char i, -			  void *data, int size, struct event_format *event, -			  struct print_arg *arg) +			  void *data, int size, struct tep_event_format *event, +			  struct tep_print_arg *arg)  {  	char have_c = 0;  	unsigned char *buf; @@ -4627,12 +4629,12 @@ static int print_ipv6_arg(struct trace_seq *s, const char *ptr, char i,  		rc++;  	} -	if (arg->type == PRINT_FUNC) { +	if (arg->type == TEP_PRINT_FUNC) {  		process_defined_func(s, data, size, event, arg);  		return rc;  	} -	if (arg->type != PRINT_FIELD) { +	if (arg->type != TEP_PRINT_FIELD) {  		trace_seq_printf(s, "ARG TYPE NOT FIELD BUT %d", arg->type);  		return rc;  	} @@ -4663,8 +4665,8 @@ static int print_ipv6_arg(struct trace_seq *s, const char *ptr, char i,  }  static int print_ipsa_arg(struct trace_seq *s, const char *ptr, char i, -			  void *data, int size, struct event_format *event, -			  struct print_arg *arg) +			  void *data, int size, struct tep_event_format *event, +			  struct tep_print_arg *arg)  {  	char have_c = 0, have_p = 0;  	unsigned char *buf; @@ -4685,12 +4687,12 @@ static int print_ipsa_arg(struct trace_seq *s, const char *ptr, char i,  		}  	} -	if (arg->type == PRINT_FUNC) { +	if (arg->type == TEP_PRINT_FUNC) {  		process_defined_func(s, data, size, event, arg);  		return rc;  	} -	if (arg->type != PRINT_FIELD) { +	if (arg->type != TEP_PRINT_FIELD) {  		trace_seq_printf(s, "ARG TYPE NOT FIELD BUT %d", arg->type);  		return rc;  	} @@ -4745,8 +4747,8 @@ static int print_ipsa_arg(struct trace_seq *s, const char *ptr, char i,  }  static int print_ip_arg(struct trace_seq *s, const char *ptr, -			void *data, int size, struct event_format *event, -			struct print_arg *arg) +			void *data, int size, struct tep_event_format *event, +			struct tep_print_arg *arg)  {  	char i = *ptr;  /* 'i' or 'I' */  	char ver; @@ -4787,22 +4789,22 @@ static int is_printable_array(char *p, unsigned int len)  }  void tep_print_field(struct trace_seq *s, void *data, -		     struct format_field *field) +		     struct tep_format_field *field)  {  	unsigned long long val;  	unsigned int offset, len, i;  	struct tep_handle *pevent = field->event->pevent; -	if (field->flags & FIELD_IS_ARRAY) { +	if (field->flags & TEP_FIELD_IS_ARRAY) {  		offset = field->offset;  		len = field->size; -		if (field->flags & FIELD_IS_DYNAMIC) { +		if (field->flags & TEP_FIELD_IS_DYNAMIC) {  			val = tep_read_number(pevent, data + offset, len);  			offset = val;  			len = offset >> 16;  			offset &= 0xffff;  		} -		if (field->flags & FIELD_IS_STRING && +		if (field->flags & TEP_FIELD_IS_STRING &&  		    is_printable_array(data + offset, len)) {  			trace_seq_printf(s, "%s", (char *)data + offset);  		} else { @@ -4814,21 +4816,21 @@ void tep_print_field(struct trace_seq *s, void *data,  						 *((unsigned char *)data + offset + i));  			}  			trace_seq_putc(s, ']'); -			field->flags &= ~FIELD_IS_STRING; +			field->flags &= ~TEP_FIELD_IS_STRING;  		}  	} else {  		val = tep_read_number(pevent, data + field->offset,  				      field->size); -		if (field->flags & FIELD_IS_POINTER) { +		if (field->flags & TEP_FIELD_IS_POINTER) {  			trace_seq_printf(s, "0x%llx", val); -		} else if (field->flags & FIELD_IS_SIGNED) { +		} else if (field->flags & TEP_FIELD_IS_SIGNED) {  			switch (field->size) {  			case 4:  				/*  				 * If field is long then print it in hex.  				 * A long usually stores pointers.  				 */ -				if (field->flags & FIELD_IS_LONG) +				if (field->flags & TEP_FIELD_IS_LONG)  					trace_seq_printf(s, "0x%x", (int)val);  				else  					trace_seq_printf(s, "%d", (int)val); @@ -4843,7 +4845,7 @@ void tep_print_field(struct trace_seq *s, void *data,  				trace_seq_printf(s, "%lld", val);  			}  		} else { -			if (field->flags & FIELD_IS_LONG) +			if (field->flags & TEP_FIELD_IS_LONG)  				trace_seq_printf(s, "0x%llx", val);  			else  				trace_seq_printf(s, "%llu", val); @@ -4852,9 +4854,9 @@ void tep_print_field(struct trace_seq *s, void *data,  }  void tep_print_fields(struct trace_seq *s, void *data, -		      int size __maybe_unused, struct event_format *event) +		      int size __maybe_unused, struct tep_event_format *event)  { -	struct format_field *field; +	struct tep_format_field *field;  	field = event->format.fields;  	while (field) { @@ -4864,12 +4866,12 @@ void tep_print_fields(struct trace_seq *s, void *data,  	}  } -static void pretty_print(struct trace_seq *s, void *data, int size, struct event_format *event) +static void pretty_print(struct trace_seq *s, void *data, int size, struct tep_event_format *event)  {  	struct tep_handle *pevent = event->pevent; -	struct print_fmt *print_fmt = &event->print_fmt; -	struct print_arg *arg = print_fmt->args; -	struct print_arg *args = NULL; +	struct tep_print_fmt *print_fmt = &event->print_fmt; +	struct tep_print_arg *arg = print_fmt->args; +	struct tep_print_arg *args = NULL;  	const char *ptr = print_fmt->format;  	unsigned long long val;  	struct func_map *func; @@ -4883,13 +4885,13 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  	int len;  	int ls; -	if (event->flags & EVENT_FL_FAILED) { +	if (event->flags & TEP_EVENT_FL_FAILED) {  		trace_seq_printf(s, "[FAILED TO PARSE]");  		tep_print_fields(s, data, size, event);  		return;  	} -	if (event->flags & EVENT_FL_ISBPRINT) { +	if (event->flags & TEP_EVENT_FL_ISBPRINT) {  		bprint_fmt = get_bprint_format(data, size, event);  		args = make_bprint_args(bprint_fmt, data, size, event);  		arg = args; @@ -4944,7 +4946,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  				/* The argument is the length. */  				if (!arg) {  					do_warning_event(event, "no argument match"); -					event->flags |= EVENT_FL_FAILED; +					event->flags |= TEP_EVENT_FL_FAILED;  					goto out_failed;  				}  				len_arg = eval_num_arg(data, size, event, arg); @@ -4966,7 +4968,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  				if (isalnum(ptr[1]))  					ptr++; -				if (arg->type == PRINT_BSTRING) { +				if (arg->type == TEP_PRINT_BSTRING) {  					trace_seq_puts(s, arg->string.string);  					break;  				} @@ -4997,7 +4999,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  			case 'u':  				if (!arg) {  					do_warning_event(event, "no argument match"); -					event->flags |= EVENT_FL_FAILED; +					event->flags |= TEP_EVENT_FL_FAILED;  					goto out_failed;  				} @@ -5007,7 +5009,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  				/* should never happen */  				if (len > 31) {  					do_warning_event(event, "bad format!"); -					event->flags |= EVENT_FL_FAILED; +					event->flags |= TEP_EVENT_FL_FAILED;  					len = 31;  				} @@ -5073,13 +5075,13 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  					break;  				default:  					do_warning_event(event, "bad count (%d)", ls); -					event->flags |= EVENT_FL_FAILED; +					event->flags |= TEP_EVENT_FL_FAILED;  				}  				break;  			case 's':  				if (!arg) {  					do_warning_event(event, "no matching argument"); -					event->flags |= EVENT_FL_FAILED; +					event->flags |= TEP_EVENT_FL_FAILED;  					goto out_failed;  				} @@ -5089,7 +5091,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  				/* should never happen */  				if (len > 31) {  					do_warning_event(event, "bad format!"); -					event->flags |= EVENT_FL_FAILED; +					event->flags |= TEP_EVENT_FL_FAILED;  					len = 31;  				} @@ -5114,7 +5116,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event  			trace_seq_putc(s, *ptr);  	} -	if (event->flags & EVENT_FL_FAILED) { +	if (event->flags & TEP_EVENT_FL_FAILED) {  out_failed:  		trace_seq_printf(s, "[FAILED TO PARSE]");  	} @@ -5227,7 +5229,7 @@ int tep_data_type(struct tep_handle *pevent, struct tep_record *rec)   *   * This returns the event form a given @type;   */ -struct event_format *tep_data_event_from_type(struct tep_handle *pevent, int type) +struct tep_event_format *tep_data_event_from_type(struct tep_handle *pevent, int type)  {  	return tep_find_event(pevent, type);  } @@ -5385,16 +5387,16 @@ int tep_cmdline_pid(struct tep_handle *pevent, struct cmdline *cmdline)   * This parses the raw @data using the given @event information and   * writes the print format into the trace_seq.   */ -void tep_event_info(struct trace_seq *s, struct event_format *event, +void tep_event_info(struct trace_seq *s, struct tep_event_format *event,  		    struct tep_record *record)  {  	int print_pretty = 1; -	if (event->pevent->print_raw || (event->flags & EVENT_FL_PRINTRAW)) +	if (event->pevent->print_raw || (event->flags & TEP_EVENT_FL_PRINTRAW))  		tep_print_fields(s, record->data, record->size, event);  	else { -		if (event->handler && !(event->flags & EVENT_FL_NOHANDLE)) +		if (event->handler && !(event->flags & TEP_EVENT_FL_NOHANDLE))  			print_pretty = event->handler(s, record, event,  						      event->context); @@ -5426,7 +5428,7 @@ static bool is_timestamp_in_us(char *trace_clock, bool use_trace_clock)   * Returns the associated event for a given record, or NULL if non is   * is found.   */ -struct event_format * +struct tep_event_format *  tep_find_event_by_record(struct tep_handle *pevent, struct tep_record *record)  {  	int type; @@ -5451,7 +5453,7 @@ tep_find_event_by_record(struct tep_handle *pevent, struct tep_record *record)   * Writes the tasks comm, pid and CPU to @s.   */  void tep_print_event_task(struct tep_handle *pevent, struct trace_seq *s, -			  struct event_format *event, +			  struct tep_event_format *event,  			  struct tep_record *record)  {  	void *data = record->data; @@ -5479,7 +5481,7 @@ void tep_print_event_task(struct tep_handle *pevent, struct trace_seq *s,   * Writes the timestamp of the record into @s.   */  void tep_print_event_time(struct tep_handle *pevent, struct trace_seq *s, -			  struct event_format *event, +			  struct tep_event_format *event,  			  struct tep_record *record,  			  bool use_trace_clock)  { @@ -5529,7 +5531,7 @@ void tep_print_event_time(struct tep_handle *pevent, struct trace_seq *s,   * Writes the parsing of the record's data to @s.   */  void tep_print_event_data(struct tep_handle *pevent, struct trace_seq *s, -			  struct event_format *event, +			  struct tep_event_format *event,  			  struct tep_record *record)  {  	static const char *spaces = "                    "; /* 20 spaces */ @@ -5548,7 +5550,7 @@ void tep_print_event_data(struct tep_handle *pevent, struct trace_seq *s,  void tep_print_event(struct tep_handle *pevent, struct trace_seq *s,  		     struct tep_record *record, bool use_trace_clock)  { -	struct event_format *event; +	struct tep_event_format *event;  	event = tep_find_event_by_record(pevent, record);  	if (!event) { @@ -5570,8 +5572,8 @@ void tep_print_event(struct tep_handle *pevent, struct trace_seq *s,  static int events_id_cmp(const void *a, const void *b)  { -	struct event_format * const * ea = a; -	struct event_format * const * eb = b; +	struct tep_event_format * const * ea = a; +	struct tep_event_format * const * eb = b;  	if ((*ea)->id < (*eb)->id)  		return -1; @@ -5584,8 +5586,8 @@ static int events_id_cmp(const void *a, const void *b)  static int events_name_cmp(const void *a, const void *b)  { -	struct event_format * const * ea = a; -	struct event_format * const * eb = b; +	struct tep_event_format * const * ea = a; +	struct tep_event_format * const * eb = b;  	int res;  	res = strcmp((*ea)->name, (*eb)->name); @@ -5601,8 +5603,8 @@ static int events_name_cmp(const void *a, const void *b)  static int events_system_cmp(const void *a, const void *b)  { -	struct event_format * const * ea = a; -	struct event_format * const * eb = b; +	struct tep_event_format * const * ea = a; +	struct tep_event_format * const * eb = b;  	int res;  	res = strcmp((*ea)->system, (*eb)->system); @@ -5616,9 +5618,9 @@ static int events_system_cmp(const void *a, const void *b)  	return events_id_cmp(a, b);  } -struct event_format **tep_list_events(struct tep_handle *pevent, enum event_sort_type sort_type) +struct tep_event_format **tep_list_events(struct tep_handle *pevent, enum tep_event_sort_type sort_type)  { -	struct event_format **events; +	struct tep_event_format **events;  	int (*sort)(const void *a, const void *b);  	events = pevent->sort_events; @@ -5637,20 +5639,20 @@ struct event_format **tep_list_events(struct tep_handle *pevent, enum event_sort  		pevent->sort_events = events;  		/* the internal events are sorted by id */ -		if (sort_type == EVENT_SORT_ID) { +		if (sort_type == TEP_EVENT_SORT_ID) {  			pevent->last_type = sort_type;  			return events;  		}  	}  	switch (sort_type) { -	case EVENT_SORT_ID: +	case TEP_EVENT_SORT_ID:  		sort = events_id_cmp;  		break; -	case EVENT_SORT_NAME: +	case TEP_EVENT_SORT_NAME:  		sort = events_name_cmp;  		break; -	case EVENT_SORT_SYSTEM: +	case TEP_EVENT_SORT_SYSTEM:  		sort = events_system_cmp;  		break;  	default: @@ -5663,12 +5665,12 @@ struct event_format **tep_list_events(struct tep_handle *pevent, enum event_sort  	return events;  } -static struct format_field ** +static struct tep_format_field **  get_event_fields(const char *type, const char *name, -		 int count, struct format_field *list) +		 int count, struct tep_format_field *list)  { -	struct format_field **fields; -	struct format_field *field; +	struct tep_format_field **fields; +	struct tep_format_field *field;  	int i = 0;  	fields = malloc(sizeof(*fields) * (count + 1)); @@ -5701,7 +5703,7 @@ get_event_fields(const char *type, const char *name,   * Returns an allocated array of fields. The last item in the array is NULL.   * The array must be freed with free().   */ -struct format_field **tep_event_common_fields(struct event_format *event) +struct tep_format_field **tep_event_common_fields(struct tep_event_format *event)  {  	return get_event_fields("common", event->name,  				event->format.nr_common, @@ -5715,14 +5717,14 @@ struct format_field **tep_event_common_fields(struct event_format *event)   * Returns an allocated array of fields. The last item in the array is NULL.   * The array must be freed with free().   */ -struct format_field **tep_event_fields(struct event_format *event) +struct tep_format_field **tep_event_fields(struct tep_event_format *event)  {  	return get_event_fields("event", event->name,  				event->format.nr_fields,  				event->format.fields);  } -static void print_fields(struct trace_seq *s, struct print_flag_sym *field) +static void print_fields(struct trace_seq *s, struct tep_print_flag_sym *field)  {  	trace_seq_printf(s, "{ %s, %s }", field->value, field->str);  	if (field->next) { @@ -5732,22 +5734,22 @@ static void print_fields(struct trace_seq *s, struct print_flag_sym *field)  }  /* for debugging */ -static void print_args(struct print_arg *args) +static void print_args(struct tep_print_arg *args)  {  	int print_paren = 1;  	struct trace_seq s;  	switch (args->type) { -	case PRINT_NULL: +	case TEP_PRINT_NULL:  		printf("null");  		break; -	case PRINT_ATOM: +	case TEP_PRINT_ATOM:  		printf("%s", args->atom.atom);  		break; -	case PRINT_FIELD: +	case TEP_PRINT_FIELD:  		printf("REC->%s", args->field.name);  		break; -	case PRINT_FLAGS: +	case TEP_PRINT_FLAGS:  		printf("__print_flags(");  		print_args(args->flags.field);  		printf(", %s, ", args->flags.delim); @@ -5757,7 +5759,7 @@ static void print_args(struct print_arg *args)  		trace_seq_destroy(&s);  		printf(")");  		break; -	case PRINT_SYMBOL: +	case TEP_PRINT_SYMBOL:  		printf("__print_symbolic(");  		print_args(args->symbol.field);  		printf(", "); @@ -5767,21 +5769,21 @@ static void print_args(struct print_arg *args)  		trace_seq_destroy(&s);  		printf(")");  		break; -	case PRINT_HEX: +	case TEP_PRINT_HEX:  		printf("__print_hex(");  		print_args(args->hex.field);  		printf(", ");  		print_args(args->hex.size);  		printf(")");  		break; -	case PRINT_HEX_STR: +	case TEP_PRINT_HEX_STR:  		printf("__print_hex_str(");  		print_args(args->hex.field);  		printf(", ");  		print_args(args->hex.size);  		printf(")");  		break; -	case PRINT_INT_ARRAY: +	case TEP_PRINT_INT_ARRAY:  		printf("__print_array(");  		print_args(args->int_array.field);  		printf(", "); @@ -5790,18 +5792,18 @@ static void print_args(struct print_arg *args)  		print_args(args->int_array.el_size);  		printf(")");  		break; -	case PRINT_STRING: -	case PRINT_BSTRING: +	case TEP_PRINT_STRING: +	case TEP_PRINT_BSTRING:  		printf("__get_str(%s)", args->string.string);  		break; -	case PRINT_BITMASK: +	case TEP_PRINT_BITMASK:  		printf("__get_bitmask(%s)", args->bitmask.bitmask);  		break; -	case PRINT_TYPE: +	case TEP_PRINT_TYPE:  		printf("(%s)", args->typecast.type);  		print_args(args->typecast.item);  		break; -	case PRINT_OP: +	case TEP_PRINT_OP:  		if (strcmp(args->op.op, ":") == 0)  			print_paren = 0;  		if (print_paren) @@ -5833,13 +5835,13 @@ static void parse_header_field(const char *field,  	save_input_buf_ptr = input_buf_ptr;  	save_input_buf_siz = input_buf_siz; -	if (read_expected(EVENT_ITEM, "field") < 0) +	if (read_expected(TEP_EVENT_ITEM, "field") < 0)  		return; -	if (read_expected(EVENT_OP, ":") < 0) +	if (read_expected(TEP_EVENT_OP, ":") < 0)  		return;  	/* type */ -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto fail;  	free_token(token); @@ -5847,42 +5849,42 @@ static void parse_header_field(const char *field,  	 * If this is not a mandatory field, then test it first.  	 */  	if (mandatory) { -		if (read_expected(EVENT_ITEM, field) < 0) +		if (read_expected(TEP_EVENT_ITEM, field) < 0)  			return;  	} else { -		if (read_expect_type(EVENT_ITEM, &token) < 0) +		if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  			goto fail;  		if (strcmp(token, field) != 0)  			goto discard;  		free_token(token);  	} -	if (read_expected(EVENT_OP, ";") < 0) +	if (read_expected(TEP_EVENT_OP, ";") < 0)  		return; -	if (read_expected(EVENT_ITEM, "offset") < 0) +	if (read_expected(TEP_EVENT_ITEM, "offset") < 0)  		return; -	if (read_expected(EVENT_OP, ":") < 0) +	if (read_expected(TEP_EVENT_OP, ":") < 0)  		return; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto fail;  	*offset = atoi(token);  	free_token(token); -	if (read_expected(EVENT_OP, ";") < 0) +	if (read_expected(TEP_EVENT_OP, ";") < 0)  		return; -	if (read_expected(EVENT_ITEM, "size") < 0) +	if (read_expected(TEP_EVENT_ITEM, "size") < 0)  		return; -	if (read_expected(EVENT_OP, ":") < 0) +	if (read_expected(TEP_EVENT_OP, ":") < 0)  		return; -	if (read_expect_type(EVENT_ITEM, &token) < 0) +	if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)  		goto fail;  	*size = atoi(token);  	free_token(token); -	if (read_expected(EVENT_OP, ";") < 0) +	if (read_expected(TEP_EVENT_OP, ";") < 0)  		return;  	type = read_token(&token); -	if (type != EVENT_NEWLINE) { +	if (type != TEP_EVENT_NEWLINE) {  		/* newer versions of the kernel have a "signed" type */ -		if (type != EVENT_ITEM) +		if (type != TEP_EVENT_ITEM)  			goto fail;  		if (strcmp(token, "signed") != 0) @@ -5890,17 +5892,17 @@ static void parse_header_field(const char *field,  		free_token(token); -		if (read_expected(EVENT_OP, ":") < 0) +		if (read_expected(TEP_EVENT_OP, ":") < 0)  			return; -		if (read_expect_type(EVENT_ITEM, &token)) +		if (read_expect_type(TEP_EVENT_ITEM, &token))  			goto fail;  		free_token(token); -		if (read_expected(EVENT_OP, ";") < 0) +		if (read_expected(TEP_EVENT_OP, ";") < 0)  			return; -		if (read_expect_type(EVENT_NEWLINE, &token)) +		if (read_expect_type(TEP_EVENT_NEWLINE, &token))  			goto fail;  	}   fail: @@ -5957,7 +5959,7 @@ int tep_parse_header_page(struct tep_handle *pevent, char *buf, unsigned long si  	return 0;  } -static int event_matches(struct event_format *event, +static int event_matches(struct tep_event_format *event,  			 int id, const char *sys_name,  			 const char *event_name)  { @@ -5980,7 +5982,7 @@ static void free_handler(struct event_handler *handle)  	free(handle);  } -static int find_event_handle(struct tep_handle *pevent, struct event_format *event) +static int find_event_handle(struct tep_handle *pevent, struct tep_event_format *event)  {  	struct event_handler *handle, **next; @@ -6021,11 +6023,11 @@ static int find_event_handle(struct tep_handle *pevent, struct event_format *eve   *   * /sys/kernel/debug/tracing/events/.../.../format   */ -enum tep_errno __tep_parse_format(struct event_format **eventp, +enum tep_errno __tep_parse_format(struct tep_event_format **eventp,  				  struct tep_handle *pevent, const char *buf,  				  unsigned long size, const char *sys)  { -	struct event_format *event; +	struct tep_event_format *event;  	int ret;  	init_input_buf(buf, size); @@ -6042,10 +6044,10 @@ enum tep_errno __tep_parse_format(struct event_format **eventp,  	}  	if (strcmp(sys, "ftrace") == 0) { -		event->flags |= EVENT_FL_ISFTRACE; +		event->flags |= TEP_EVENT_FL_ISFTRACE;  		if (strcmp(event->name, "bprint") == 0) -			event->flags |= EVENT_FL_ISBPRINT; +			event->flags |= TEP_EVENT_FL_ISBPRINT;  	}  	event->id = event_read_id(); @@ -6088,22 +6090,22 @@ enum tep_errno __tep_parse_format(struct event_format **eventp,  		goto event_parse_failed;  	} -	if (!ret && (event->flags & EVENT_FL_ISFTRACE)) { -		struct format_field *field; -		struct print_arg *arg, **list; +	if (!ret && (event->flags & TEP_EVENT_FL_ISFTRACE)) { +		struct tep_format_field *field; +		struct tep_print_arg *arg, **list;  		/* old ftrace had no args */  		list = &event->print_fmt.args;  		for (field = event->format.fields; field; field = field->next) {  			arg = alloc_arg();  			if (!arg) { -				event->flags |= EVENT_FL_FAILED; +				event->flags |= TEP_EVENT_FL_FAILED;  				return TEP_ERRNO__OLD_FTRACE_ARG_FAILED;  			} -			arg->type = PRINT_FIELD; +			arg->type = TEP_PRINT_FIELD;  			arg->field.name = strdup(field->name);  			if (!arg->field.name) { -				event->flags |= EVENT_FL_FAILED; +				event->flags |= TEP_EVENT_FL_FAILED;  				free_arg(arg);  				return TEP_ERRNO__OLD_FTRACE_ARG_FAILED;  			} @@ -6117,7 +6119,7 @@ enum tep_errno __tep_parse_format(struct event_format **eventp,  	return 0;   event_parse_failed: -	event->flags |= EVENT_FL_FAILED; +	event->flags |= TEP_EVENT_FL_FAILED;  	return ret;   event_alloc_failed: @@ -6130,12 +6132,12 @@ enum tep_errno __tep_parse_format(struct event_format **eventp,  static enum tep_errno  __parse_event(struct tep_handle *pevent, -	      struct event_format **eventp, +	      struct tep_event_format **eventp,  	      const char *buf, unsigned long size,  	      const char *sys)  {  	int ret = __tep_parse_format(eventp, pevent, buf, size, sys); -	struct event_format *event = *eventp; +	struct tep_event_format *event = *eventp;  	if (event == NULL)  		return ret; @@ -6172,7 +6174,7 @@ event_add_failed:   * /sys/kernel/debug/tracing/events/.../.../format   */  enum tep_errno tep_parse_format(struct tep_handle *pevent, -				struct event_format **eventp, +				struct tep_event_format **eventp,  				const char *buf,  				unsigned long size, const char *sys)  { @@ -6196,40 +6198,11 @@ enum tep_errno tep_parse_format(struct tep_handle *pevent,  enum tep_errno tep_parse_event(struct tep_handle *pevent, const char *buf,  			       unsigned long size, const char *sys)  { -	struct event_format *event = NULL; +	struct tep_event_format *event = NULL;  	return __parse_event(pevent, &event, buf, size, sys);  } -#undef _PE -#define _PE(code, str) str -static const char * const tep_error_str[] = { -	TEP_ERRORS -}; -#undef _PE - -int tep_strerror(struct tep_handle *pevent __maybe_unused, -		 enum tep_errno errnum, char *buf, size_t buflen) -{ -	int idx; -	const char *msg; - -	if (errnum >= 0) { -		str_error_r(errnum, buf, buflen); -		return 0; -	} - -	if (errnum <= __TEP_ERRNO__START || -	    errnum >= __TEP_ERRNO__END) -		return -1; - -	idx = errnum - __TEP_ERRNO__START - 1; -	msg = tep_error_str[idx]; -	snprintf(buf, buflen, "%s", msg); - -	return 0; -} - -int get_field_val(struct trace_seq *s, struct format_field *field, +int get_field_val(struct trace_seq *s, struct tep_format_field *field,  		  const char *name, struct tep_record *record,  		  unsigned long long *val, int err)  { @@ -6262,11 +6235,11 @@ int get_field_val(struct trace_seq *s, struct format_field *field,   *   * On failure, it returns NULL.   */ -void *tep_get_field_raw(struct trace_seq *s, struct event_format *event, +void *tep_get_field_raw(struct trace_seq *s, struct tep_event_format *event,  			const char *name, struct tep_record *record,  			int *len, int err)  { -	struct format_field *field; +	struct tep_format_field *field;  	void *data = record->data;  	unsigned offset;  	int dummy; @@ -6287,7 +6260,7 @@ void *tep_get_field_raw(struct trace_seq *s, struct event_format *event,  		len = &dummy;  	offset = field->offset; -	if (field->flags & FIELD_IS_DYNAMIC) { +	if (field->flags & TEP_FIELD_IS_DYNAMIC) {  		offset = tep_read_number(event->pevent,  					    data + offset, field->size);  		*len = offset >> 16; @@ -6309,11 +6282,11 @@ void *tep_get_field_raw(struct trace_seq *s, struct event_format *event,   *   * Returns 0 on success -1 on field not found.   */ -int tep_get_field_val(struct trace_seq *s, struct event_format *event, +int tep_get_field_val(struct trace_seq *s, struct tep_event_format *event,  		      const char *name, struct tep_record *record,  		      unsigned long long *val, int err)  { -	struct format_field *field; +	struct tep_format_field *field;  	if (!event)  		return -1; @@ -6334,11 +6307,11 @@ int tep_get_field_val(struct trace_seq *s, struct event_format *event,   *   * Returns 0 on success -1 on field not found.   */ -int tep_get_common_field_val(struct trace_seq *s, struct event_format *event, +int tep_get_common_field_val(struct trace_seq *s, struct tep_event_format *event,  			     const char *name, struct tep_record *record,  			     unsigned long long *val, int err)  { -	struct format_field *field; +	struct tep_format_field *field;  	if (!event)  		return -1; @@ -6359,11 +6332,11 @@ int tep_get_common_field_val(struct trace_seq *s, struct event_format *event,   *   * Returns 0 on success -1 on field not found.   */ -int tep_get_any_field_val(struct trace_seq *s, struct event_format *event, +int tep_get_any_field_val(struct trace_seq *s, struct tep_event_format *event,  			  const char *name, struct tep_record *record,  			  unsigned long long *val, int err)  { -	struct format_field *field; +	struct tep_format_field *field;  	if (!event)  		return -1; @@ -6385,10 +6358,10 @@ int tep_get_any_field_val(struct trace_seq *s, struct event_format *event,   * Returns: 0 on success, -1 field not found, or 1 if buffer is full.   */  int tep_print_num_field(struct trace_seq *s, const char *fmt, -			struct event_format *event, const char *name, +			struct tep_event_format *event, const char *name,  			struct tep_record *record, int err)  { -	struct format_field *field = tep_find_field(event, name); +	struct tep_format_field *field = tep_find_field(event, name);  	unsigned long long val;  	if (!field) @@ -6417,10 +6390,10 @@ int tep_print_num_field(struct trace_seq *s, const char *fmt,   * Returns: 0 on success, -1 field not found, or 1 if buffer is full.   */  int tep_print_func_field(struct trace_seq *s, const char *fmt, -			 struct event_format *event, const char *name, +			 struct tep_event_format *event, const char *name,  			 struct tep_record *record, int err)  { -	struct format_field *field = tep_find_field(event, name); +	struct tep_format_field *field = tep_find_field(event, name);  	struct tep_handle *pevent = event->pevent;  	unsigned long long val;  	struct func_map *func; @@ -6577,11 +6550,11 @@ int tep_unregister_print_function(struct tep_handle *pevent,  	return -1;  } -static struct event_format *search_event(struct tep_handle *pevent, int id, +static struct tep_event_format *search_event(struct tep_handle *pevent, int id,  					 const char *sys_name,  					 const char *event_name)  { -	struct event_format *event; +	struct tep_event_format *event;  	if (id >= 0) {  		/* search by id */ @@ -6621,7 +6594,7 @@ int tep_register_event_handler(struct tep_handle *pevent, int id,  			       const char *sys_name, const char *event_name,  			       tep_event_handler_func func, void *context)  { -	struct event_format *event; +	struct tep_event_format *event;  	struct event_handler *handle;  	event = search_event(pevent, id, sys_name, event_name); @@ -6705,7 +6678,7 @@ int tep_unregister_event_handler(struct tep_handle *pevent, int id,  				 const char *sys_name, const char *event_name,  				 tep_event_handler_func func, void *context)  { -	struct event_format *event; +	struct tep_event_format *event;  	struct event_handler *handle;  	struct event_handler **next; @@ -6757,7 +6730,7 @@ void tep_ref(struct tep_handle *pevent)  	pevent->ref_count++;  } -void tep_free_format_field(struct format_field *field) +void tep_free_format_field(struct tep_format_field *field)  {  	free(field->type);  	if (field->alias != field->name) @@ -6766,9 +6739,9 @@ void tep_free_format_field(struct format_field *field)  	free(field);  } -static void free_format_fields(struct format_field *field) +static void free_format_fields(struct tep_format_field *field)  { -	struct format_field *next; +	struct tep_format_field *next;  	while (field) {  		next = field->next; @@ -6777,13 +6750,13 @@ static void free_format_fields(struct format_field *field)  	}  } -static void free_formats(struct format *format) +static void free_formats(struct tep_format *format)  {  	free_format_fields(format->common_fields);  	free_format_fields(format->fields);  } -void tep_free_format(struct event_format *event) +void tep_free_format(struct tep_event_format *event)  {  	free(event->name);  	free(event->system); diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h index 44b7c2d41f9f..16bf4c890b6f 100644 --- a/tools/lib/traceevent/event-parse.h +++ b/tools/lib/traceevent/event-parse.h @@ -26,17 +26,12 @@  #include <regex.h>  #include <string.h> +#include "trace-seq.h" +  #ifndef __maybe_unused  #define __maybe_unused __attribute__((unused))  #endif -/* ----------------------- trace_seq ----------------------- */ - - -#ifndef TRACE_SEQ_BUF_SIZE -#define TRACE_SEQ_BUF_SIZE 4096 -#endif -  #ifndef DEBUG_RECORD  #define DEBUG_RECORD 0  #endif @@ -59,51 +54,14 @@ struct tep_record {  #endif  }; -enum trace_seq_fail { -	TRACE_SEQ__GOOD, -	TRACE_SEQ__BUFFER_POISONED, -	TRACE_SEQ__MEM_ALLOC_FAILED, -}; - -/* - * Trace sequences are used to allow a function to call several other functions - * to create a string of data to use (up to a max of PAGE_SIZE). - */ - -struct trace_seq { -	char			*buffer; -	unsigned int		buffer_size; -	unsigned int		len; -	unsigned int		readpos; -	enum trace_seq_fail	state; -}; - -void trace_seq_init(struct trace_seq *s); -void trace_seq_reset(struct trace_seq *s); -void trace_seq_destroy(struct trace_seq *s); - -extern int trace_seq_printf(struct trace_seq *s, const char *fmt, ...) -	__attribute__ ((format (printf, 2, 3))); -extern int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args) -	__attribute__ ((format (printf, 2, 0))); - -extern int trace_seq_puts(struct trace_seq *s, const char *str); -extern int trace_seq_putc(struct trace_seq *s, unsigned char c); - -extern void trace_seq_terminate(struct trace_seq *s); - -extern int trace_seq_do_fprintf(struct trace_seq *s, FILE *fp); -extern int trace_seq_do_printf(struct trace_seq *s); - - -/* ----------------------- pevent ----------------------- */ +/* ----------------------- tep ----------------------- */  struct tep_handle; -struct event_format; +struct tep_event_format;  typedef int (*tep_event_handler_func)(struct trace_seq *s,  				      struct tep_record *record, -				      struct event_format *event, +				      struct tep_event_format *event,  				      void *context);  typedef int (*tep_plugin_load_func)(struct tep_handle *pevent); @@ -172,20 +130,20 @@ struct tep_plugin_option {  #define TEP_PLUGIN_OPTIONS_NAME MAKE_STR(TEP_PLUGIN_OPTIONS)  #define TEP_PLUGIN_ALIAS_NAME MAKE_STR(TEP_PLUGIN_ALIAS) -enum format_flags { -	FIELD_IS_ARRAY		= 1, -	FIELD_IS_POINTER	= 2, -	FIELD_IS_SIGNED		= 4, -	FIELD_IS_STRING		= 8, -	FIELD_IS_DYNAMIC	= 16, -	FIELD_IS_LONG		= 32, -	FIELD_IS_FLAG		= 64, -	FIELD_IS_SYMBOLIC	= 128, +enum tep_format_flags { +	TEP_FIELD_IS_ARRAY	= 1, +	TEP_FIELD_IS_POINTER	= 2, +	TEP_FIELD_IS_SIGNED	= 4, +	TEP_FIELD_IS_STRING	= 8, +	TEP_FIELD_IS_DYNAMIC	= 16, +	TEP_FIELD_IS_LONG	= 32, +	TEP_FIELD_IS_FLAG	= 64, +	TEP_FIELD_IS_SYMBOLIC	= 128,  }; -struct format_field { -	struct format_field	*next; -	struct event_format	*event; +struct tep_format_field { +	struct tep_format_field	*next; +	struct tep_event_format	*event;  	char			*type;  	char			*name;  	char			*alias; @@ -196,169 +154,169 @@ struct format_field {  	unsigned long		flags;  }; -struct format { +struct tep_format {  	int			nr_common;  	int			nr_fields; -	struct format_field	*common_fields; -	struct format_field	*fields; +	struct tep_format_field	*common_fields; +	struct tep_format_field	*fields;  }; -struct print_arg_atom { +struct tep_print_arg_atom {  	char			*atom;  }; -struct print_arg_string { +struct tep_print_arg_string {  	char			*string;  	int			offset;  }; -struct print_arg_bitmask { +struct tep_print_arg_bitmask {  	char			*bitmask;  	int			offset;  }; -struct print_arg_field { +struct tep_print_arg_field {  	char			*name; -	struct format_field	*field; +	struct tep_format_field	*field;  }; -struct print_flag_sym { -	struct print_flag_sym	*next; -	char			*value; -	char			*str; +struct tep_print_flag_sym { +	struct tep_print_flag_sym	*next; +	char				*value; +	char				*str;  }; -struct print_arg_typecast { +struct tep_print_arg_typecast {  	char 			*type; -	struct print_arg	*item; +	struct tep_print_arg	*item;  }; -struct print_arg_flags { -	struct print_arg	*field; -	char			*delim; -	struct print_flag_sym	*flags; +struct tep_print_arg_flags { +	struct tep_print_arg		*field; +	char				*delim; +	struct tep_print_flag_sym	*flags;  }; -struct print_arg_symbol { -	struct print_arg	*field; -	struct print_flag_sym	*symbols; +struct tep_print_arg_symbol { +	struct tep_print_arg		*field; +	struct tep_print_flag_sym	*symbols;  }; -struct print_arg_hex { -	struct print_arg	*field; -	struct print_arg	*size; +struct tep_print_arg_hex { +	struct tep_print_arg	*field; +	struct tep_print_arg	*size;  }; -struct print_arg_int_array { -	struct print_arg	*field; -	struct print_arg	*count; -	struct print_arg	*el_size; +struct tep_print_arg_int_array { +	struct tep_print_arg	*field; +	struct tep_print_arg	*count; +	struct tep_print_arg	*el_size;  }; -struct print_arg_dynarray { -	struct format_field	*field; -	struct print_arg	*index; +struct tep_print_arg_dynarray { +	struct tep_format_field	*field; +	struct tep_print_arg	*index;  }; -struct print_arg; +struct tep_print_arg; -struct print_arg_op { +struct tep_print_arg_op {  	char			*op;  	int			prio; -	struct print_arg	*left; -	struct print_arg	*right; +	struct tep_print_arg	*left; +	struct tep_print_arg	*right;  };  struct tep_function_handler; -struct print_arg_func { +struct tep_print_arg_func {  	struct tep_function_handler	*func; -	struct print_arg		*args; -}; - -enum print_arg_type { -	PRINT_NULL, -	PRINT_ATOM, -	PRINT_FIELD, -	PRINT_FLAGS, -	PRINT_SYMBOL, -	PRINT_HEX, -	PRINT_INT_ARRAY, -	PRINT_TYPE, -	PRINT_STRING, -	PRINT_BSTRING, -	PRINT_DYNAMIC_ARRAY, -	PRINT_OP, -	PRINT_FUNC, -	PRINT_BITMASK, -	PRINT_DYNAMIC_ARRAY_LEN, -	PRINT_HEX_STR, -}; - -struct print_arg { -	struct print_arg		*next; -	enum print_arg_type		type; +	struct tep_print_arg		*args; +}; + +enum tep_print_arg_type { +	TEP_PRINT_NULL, +	TEP_PRINT_ATOM, +	TEP_PRINT_FIELD, +	TEP_PRINT_FLAGS, +	TEP_PRINT_SYMBOL, +	TEP_PRINT_HEX, +	TEP_PRINT_INT_ARRAY, +	TEP_PRINT_TYPE, +	TEP_PRINT_STRING, +	TEP_PRINT_BSTRING, +	TEP_PRINT_DYNAMIC_ARRAY, +	TEP_PRINT_OP, +	TEP_PRINT_FUNC, +	TEP_PRINT_BITMASK, +	TEP_PRINT_DYNAMIC_ARRAY_LEN, +	TEP_PRINT_HEX_STR, +}; + +struct tep_print_arg { +	struct tep_print_arg		*next; +	enum tep_print_arg_type		type;  	union { -		struct print_arg_atom		atom; -		struct print_arg_field		field; -		struct print_arg_typecast	typecast; -		struct print_arg_flags		flags; -		struct print_arg_symbol		symbol; -		struct print_arg_hex		hex; -		struct print_arg_int_array	int_array; -		struct print_arg_func		func; -		struct print_arg_string		string; -		struct print_arg_bitmask	bitmask; -		struct print_arg_op		op; -		struct print_arg_dynarray	dynarray; +		struct tep_print_arg_atom	atom; +		struct tep_print_arg_field	field; +		struct tep_print_arg_typecast	typecast; +		struct tep_print_arg_flags	flags; +		struct tep_print_arg_symbol	symbol; +		struct tep_print_arg_hex	hex; +		struct tep_print_arg_int_array	int_array; +		struct tep_print_arg_func	func; +		struct tep_print_arg_string	string; +		struct tep_print_arg_bitmask	bitmask; +		struct tep_print_arg_op		op; +		struct tep_print_arg_dynarray	dynarray;  	};  }; -struct print_fmt { +struct tep_print_fmt {  	char			*format; -	struct print_arg	*args; +	struct tep_print_arg	*args;  }; -struct event_format { +struct tep_event_format {  	struct tep_handle	*pevent;  	char			*name;  	int			id;  	int			flags; -	struct format		format; -	struct print_fmt	print_fmt; +	struct tep_format	format; +	struct tep_print_fmt	print_fmt;  	char			*system;  	tep_event_handler_func	handler;  	void			*context;  };  enum { -	EVENT_FL_ISFTRACE	= 0x01, -	EVENT_FL_ISPRINT	= 0x02, -	EVENT_FL_ISBPRINT	= 0x04, -	EVENT_FL_ISFUNCENT	= 0x10, -	EVENT_FL_ISFUNCRET	= 0x20, -	EVENT_FL_NOHANDLE	= 0x40, -	EVENT_FL_PRINTRAW	= 0x80, +	TEP_EVENT_FL_ISFTRACE	= 0x01, +	TEP_EVENT_FL_ISPRINT	= 0x02, +	TEP_EVENT_FL_ISBPRINT	= 0x04, +	TEP_EVENT_FL_ISFUNCENT	= 0x10, +	TEP_EVENT_FL_ISFUNCRET	= 0x20, +	TEP_EVENT_FL_NOHANDLE	= 0x40, +	TEP_EVENT_FL_PRINTRAW	= 0x80, -	EVENT_FL_FAILED		= 0x80000000 +	TEP_EVENT_FL_FAILED	= 0x80000000  }; -enum event_sort_type { -	EVENT_SORT_ID, -	EVENT_SORT_NAME, -	EVENT_SORT_SYSTEM, +enum tep_event_sort_type { +	TEP_EVENT_SORT_ID, +	TEP_EVENT_SORT_NAME, +	TEP_EVENT_SORT_SYSTEM,  }; -enum event_type { -	EVENT_ERROR, -	EVENT_NONE, -	EVENT_SPACE, -	EVENT_NEWLINE, -	EVENT_OP, -	EVENT_DELIM, -	EVENT_ITEM, -	EVENT_DQUOTE, -	EVENT_SQUOTE, +enum tep_event_type { +	TEP_EVENT_ERROR, +	TEP_EVENT_NONE, +	TEP_EVENT_SPACE, +	TEP_EVENT_NEWLINE, +	TEP_EVENT_OP, +	TEP_EVENT_DELIM, +	TEP_EVENT_ITEM, +	TEP_EVENT_DQUOTE, +	TEP_EVENT_SQUOTE,  };  typedef unsigned long long (*tep_func_handler)(struct trace_seq *s, @@ -431,12 +389,12 @@ enum tep_errno {  };  #undef _PE -struct plugin_list; +struct tep_plugin_list;  #define INVALID_PLUGIN_LIST_OPTION	((char **)((unsigned long)-1)) -struct plugin_list *tep_load_plugins(struct tep_handle *pevent); -void tep_unload_plugins(struct plugin_list *plugin_list, +struct tep_plugin_list *tep_load_plugins(struct tep_handle *pevent); +void tep_unload_plugins(struct tep_plugin_list *plugin_list,  			struct tep_handle *pevent);  char **tep_plugin_list_options(void);  void tep_plugin_free_options_list(char **list); @@ -445,156 +403,25 @@ int tep_plugin_add_options(const char *name,  void tep_plugin_remove_options(struct tep_plugin_option *options);  void tep_print_plugins(struct trace_seq *s,  			const char *prefix, const char *suffix, -			const struct plugin_list *list); - -struct cmdline; -struct cmdline_list; -struct func_map; -struct func_list; -struct event_handler; -struct func_resolver; +			const struct tep_plugin_list *list); +/* tep_handle */  typedef char *(tep_func_resolver_t)(void *priv,  				    unsigned long long *addrp, char **modp); +void tep_set_flag(struct tep_handle *tep, int flag); +unsigned short __tep_data2host2(struct tep_handle *pevent, unsigned short data); +unsigned int __tep_data2host4(struct tep_handle *pevent, unsigned int data); +unsigned long long +__tep_data2host8(struct tep_handle *pevent, unsigned long long data); -struct tep_handle { -	int ref_count; - -	int header_page_ts_offset; -	int header_page_ts_size; -	int header_page_size_offset; -	int header_page_size_size; -	int header_page_data_offset; -	int header_page_data_size; -	int header_page_overwrite; - -	int file_bigendian; -	int host_bigendian; - -	int latency_format; - -	int old_format; - -	int cpus; -	int long_size; -	int page_size; - -	struct cmdline *cmdlines; -	struct cmdline_list *cmdlist; -	int cmdline_count; - -	struct func_map *func_map; -	struct func_resolver *func_resolver; -	struct func_list *funclist; -	unsigned int func_count; - -	struct printk_map *printk_map; -	struct printk_list *printklist; -	unsigned int printk_count; - - -	struct event_format **events; -	int nr_events; -	struct event_format **sort_events; -	enum event_sort_type last_type; - -	int type_offset; -	int type_size; - -	int pid_offset; -	int pid_size; - - 	int pc_offset; -	int pc_size; - -	int flags_offset; -	int flags_size; - -	int ld_offset; -	int ld_size; - -	int print_raw; - -	int test_filters; - -	int flags; - -	struct format_field *bprint_ip_field; -	struct format_field *bprint_fmt_field; -	struct format_field *bprint_buf_field; - -	struct event_handler *handlers; -	struct tep_function_handler *func_handlers; - -	/* cache */ -	struct event_format *last_event; - -	char *trace_clock; -}; - -static inline void tep_set_flag(struct tep_handle *pevent, int flag) -{ -	pevent->flags |= flag; -} - -static inline unsigned short -__data2host2(struct tep_handle *pevent, unsigned short data) -{ -	unsigned short swap; - -	if (pevent->host_bigendian == pevent->file_bigendian) -		return data; - -	swap = ((data & 0xffULL) << 8) | -		((data & (0xffULL << 8)) >> 8); - -	return swap; -} - -static inline unsigned int -__data2host4(struct tep_handle *pevent, unsigned int data) -{ -	unsigned int swap; - -	if (pevent->host_bigendian == pevent->file_bigendian) -		return data; - -	swap = ((data & 0xffULL) << 24) | -		((data & (0xffULL << 8)) << 8) | -		((data & (0xffULL << 16)) >> 8) | -		((data & (0xffULL << 24)) >> 24); - -	return swap; -} - -static inline unsigned long long -__data2host8(struct tep_handle *pevent, unsigned long long data) -{ -	unsigned long long swap; - -	if (pevent->host_bigendian == pevent->file_bigendian) -		return data; - -	swap = ((data & 0xffULL) << 56) | -		((data & (0xffULL << 8)) << 40) | -		((data & (0xffULL << 16)) << 24) | -		((data & (0xffULL << 24)) << 8) | -		((data & (0xffULL << 32)) >> 8) | -		((data & (0xffULL << 40)) >> 24) | -		((data & (0xffULL << 48)) >> 40) | -		((data & (0xffULL << 56)) >> 56); - -	return swap; -} - -#define data2host2(pevent, ptr)		__data2host2(pevent, *(unsigned short *)(ptr)) -#define data2host4(pevent, ptr)		__data2host4(pevent, *(unsigned int *)(ptr)) -#define data2host8(pevent, ptr)					\ +#define tep_data2host2(pevent, ptr)	__tep_data2host2(pevent, *(unsigned short *)(ptr)) +#define tep_data2host4(pevent, ptr)	__tep_data2host4(pevent, *(unsigned int *)(ptr)) +#define tep_data2host8(pevent, ptr)	\  ({								\  	unsigned long long __val;				\  								\  	memcpy(&__val, (ptr), sizeof(unsigned long long));	\ -	__data2host8(pevent, __val);				\ +	__tep_data2host8(pevent, __val);				\  })  static inline int tep_host_bigendian(void) @@ -627,14 +454,14 @@ int tep_register_print_string(struct tep_handle *pevent, const char *fmt,  int tep_pid_is_registered(struct tep_handle *pevent, int pid);  void tep_print_event_task(struct tep_handle *pevent, struct trace_seq *s, -			  struct event_format *event, +			  struct tep_event_format *event,  			  struct tep_record *record);  void tep_print_event_time(struct tep_handle *pevent, struct trace_seq *s, -			  struct event_format *event, +			  struct tep_event_format *event,  			  struct tep_record *record,  			  bool use_trace_clock);  void tep_print_event_data(struct tep_handle *pevent, struct trace_seq *s, -			  struct event_format *event, +			  struct tep_event_format *event,  			  struct tep_record *record);  void tep_print_event(struct tep_handle *pevent, struct trace_seq *s,  		     struct tep_record *record, bool use_trace_clock); @@ -645,32 +472,32 @@ int tep_parse_header_page(struct tep_handle *pevent, char *buf, unsigned long si  enum tep_errno tep_parse_event(struct tep_handle *pevent, const char *buf,  			       unsigned long size, const char *sys);  enum tep_errno tep_parse_format(struct tep_handle *pevent, -				struct event_format **eventp, +				struct tep_event_format **eventp,  				const char *buf,  				unsigned long size, const char *sys); -void tep_free_format(struct event_format *event); -void tep_free_format_field(struct format_field *field); +void tep_free_format(struct tep_event_format *event); +void tep_free_format_field(struct tep_format_field *field); -void *tep_get_field_raw(struct trace_seq *s, struct event_format *event, +void *tep_get_field_raw(struct trace_seq *s, struct tep_event_format *event,  			const char *name, struct tep_record *record,  			int *len, int err); -int tep_get_field_val(struct trace_seq *s, struct event_format *event, +int tep_get_field_val(struct trace_seq *s, struct tep_event_format *event,  		      const char *name, struct tep_record *record,  		      unsigned long long *val, int err); -int tep_get_common_field_val(struct trace_seq *s, struct event_format *event, +int tep_get_common_field_val(struct trace_seq *s, struct tep_event_format *event,  			     const char *name, struct tep_record *record,  			     unsigned long long *val, int err); -int tep_get_any_field_val(struct trace_seq *s, struct event_format *event, +int tep_get_any_field_val(struct trace_seq *s, struct tep_event_format *event,  			  const char *name, struct tep_record *record,  			  unsigned long long *val, int err);  int tep_print_num_field(struct trace_seq *s, const char *fmt, -			   struct event_format *event, const char *name, -			   struct tep_record *record, int err); +			struct tep_event_format *event, const char *name, +			struct tep_record *record, int err);  int tep_print_func_field(struct trace_seq *s, const char *fmt, -			 struct event_format *event, const char *name, +			 struct tep_event_format *event, const char *name,  			 struct tep_record *record, int err);  int tep_register_event_handler(struct tep_handle *pevent, int id, @@ -686,29 +513,30 @@ int tep_register_print_function(struct tep_handle *pevent,  int tep_unregister_print_function(struct tep_handle *pevent,  				  tep_func_handler func, char *name); -struct format_field *tep_find_common_field(struct event_format *event, const char *name); -struct format_field *tep_find_field(struct event_format *event, const char *name); -struct format_field *tep_find_any_field(struct event_format *event, const char *name); +struct tep_format_field *tep_find_common_field(struct tep_event_format *event, const char *name); +struct tep_format_field *tep_find_field(struct tep_event_format *event, const char *name); +struct tep_format_field *tep_find_any_field(struct tep_event_format *event, const char *name);  const char *tep_find_function(struct tep_handle *pevent, unsigned long long addr);  unsigned long long  tep_find_function_address(struct tep_handle *pevent, unsigned long long addr);  unsigned long long tep_read_number(struct tep_handle *pevent, const void *ptr, int size); -int tep_read_number_field(struct format_field *field, const void *data, +int tep_read_number_field(struct tep_format_field *field, const void *data,  			  unsigned long long *value); -struct event_format *tep_find_event(struct tep_handle *pevent, int id); +struct tep_event_format *tep_get_first_event(struct tep_handle *tep); +int tep_get_events_count(struct tep_handle *tep); +struct tep_event_format *tep_find_event(struct tep_handle *pevent, int id); -struct event_format * +struct tep_event_format *  tep_find_event_by_name(struct tep_handle *pevent, const char *sys, const char *name); - -struct event_format * +struct tep_event_format *  tep_find_event_by_record(struct tep_handle *pevent, struct tep_record *record);  void tep_data_lat_fmt(struct tep_handle *pevent,  		      struct trace_seq *s, struct tep_record *record);  int tep_data_type(struct tep_handle *pevent, struct tep_record *rec); -struct event_format *tep_data_event_from_type(struct tep_handle *pevent, int type); +struct tep_event_format *tep_data_event_from_type(struct tep_handle *pevent, int type);  int tep_data_pid(struct tep_handle *pevent, struct tep_record *rec);  int tep_data_preempt_count(struct tep_handle *pevent, struct tep_record *rec);  int tep_data_flags(struct tep_handle *pevent, struct tep_record *rec); @@ -719,77 +547,35 @@ struct cmdline *tep_data_pid_from_comm(struct tep_handle *pevent, const char *co  int tep_cmdline_pid(struct tep_handle *pevent, struct cmdline *cmdline);  void tep_print_field(struct trace_seq *s, void *data, -		     struct format_field *field); +		     struct tep_format_field *field);  void tep_print_fields(struct trace_seq *s, void *data, -		      int size __maybe_unused, struct event_format *event); -void tep_event_info(struct trace_seq *s, struct event_format *event, +		      int size __maybe_unused, struct tep_event_format *event); +void tep_event_info(struct trace_seq *s, struct tep_event_format *event,  		       struct tep_record *record);  int tep_strerror(struct tep_handle *pevent, enum tep_errno errnum,  		    char *buf, size_t buflen); -struct event_format **tep_list_events(struct tep_handle *pevent, enum event_sort_type); -struct format_field **tep_event_common_fields(struct event_format *event); -struct format_field **tep_event_fields(struct event_format *event); - -static inline int tep_get_cpus(struct tep_handle *pevent) -{ -	return pevent->cpus; -} - -static inline void tep_set_cpus(struct tep_handle *pevent, int cpus) -{ -	pevent->cpus = cpus; -} - -static inline int tep_get_long_size(struct tep_handle *pevent) -{ -	return pevent->long_size; -} - -static inline void tep_set_long_size(struct tep_handle *pevent, int long_size) -{ -	pevent->long_size = long_size; -} - -static inline int tep_get_page_size(struct tep_handle *pevent) -{ -	return pevent->page_size; -} - -static inline void tep_set_page_size(struct tep_handle *pevent, int _page_size) -{ -	pevent->page_size = _page_size; -} - -static inline int tep_is_file_bigendian(struct tep_handle *pevent) -{ -	return pevent->file_bigendian; -} - -static inline void tep_set_file_bigendian(struct tep_handle *pevent, int endian) -{ -	pevent->file_bigendian = endian; -} - -static inline int tep_is_host_bigendian(struct tep_handle *pevent) -{ -	return pevent->host_bigendian; -} - -static inline void tep_set_host_bigendian(struct tep_handle *pevent, int endian) -{ -	pevent->host_bigendian = endian; -} - -static inline int tep_is_latency_format(struct tep_handle *pevent) -{ -	return pevent->latency_format; -} - -static inline void tep_set_latency_format(struct tep_handle *pevent, int lat) -{ -	pevent->latency_format = lat; -} +struct tep_event_format **tep_list_events(struct tep_handle *pevent, enum tep_event_sort_type); +struct tep_format_field **tep_event_common_fields(struct tep_event_format *event); +struct tep_format_field **tep_event_fields(struct tep_event_format *event); + +enum tep_endian { +        TEP_LITTLE_ENDIAN = 0, +        TEP_BIG_ENDIAN +}; +int tep_get_cpus(struct tep_handle *pevent); +void tep_set_cpus(struct tep_handle *pevent, int cpus); +int tep_get_long_size(struct tep_handle *pevent); +void tep_set_long_size(struct tep_handle *pevent, int long_size); +int tep_get_page_size(struct tep_handle *pevent); +void tep_set_page_size(struct tep_handle *pevent, int _page_size); +int tep_is_file_bigendian(struct tep_handle *pevent); +void tep_set_file_bigendian(struct tep_handle *pevent, enum tep_endian endian); +int tep_is_host_bigendian(struct tep_handle *pevent); +void tep_set_host_bigendian(struct tep_handle *pevent, enum tep_endian endian); +int tep_is_latency_format(struct tep_handle *pevent); +void tep_set_latency_format(struct tep_handle *pevent, int lat); +int tep_get_header_page_size(struct tep_handle *pevent);  struct tep_handle *tep_alloc(void);  void tep_free(struct tep_handle *pevent); @@ -798,7 +584,7 @@ void tep_unref(struct tep_handle *pevent);  /* access to the internal parser */  void tep_buffer_init(const char *buf, unsigned long long size); -enum event_type tep_read_token(char **tok); +enum tep_event_type tep_read_token(char **tok);  void tep_free_token(char *token);  int tep_peek_char(void);  const char *tep_get_input_buf(void); @@ -810,136 +596,136 @@ void tep_print_printk(struct tep_handle *pevent);  /* ----------------------- filtering ----------------------- */ -enum filter_boolean_type { -	FILTER_FALSE, -	FILTER_TRUE, +enum tep_filter_boolean_type { +	TEP_FILTER_FALSE, +	TEP_FILTER_TRUE,  }; -enum filter_op_type { -	FILTER_OP_AND = 1, -	FILTER_OP_OR, -	FILTER_OP_NOT, +enum tep_filter_op_type { +	TEP_FILTER_OP_AND = 1, +	TEP_FILTER_OP_OR, +	TEP_FILTER_OP_NOT,  }; -enum filter_cmp_type { -	FILTER_CMP_NONE, -	FILTER_CMP_EQ, -	FILTER_CMP_NE, -	FILTER_CMP_GT, -	FILTER_CMP_LT, -	FILTER_CMP_GE, -	FILTER_CMP_LE, -	FILTER_CMP_MATCH, -	FILTER_CMP_NOT_MATCH, -	FILTER_CMP_REGEX, -	FILTER_CMP_NOT_REGEX, +enum tep_filter_cmp_type { +	TEP_FILTER_CMP_NONE, +	TEP_FILTER_CMP_EQ, +	TEP_FILTER_CMP_NE, +	TEP_FILTER_CMP_GT, +	TEP_FILTER_CMP_LT, +	TEP_FILTER_CMP_GE, +	TEP_FILTER_CMP_LE, +	TEP_FILTER_CMP_MATCH, +	TEP_FILTER_CMP_NOT_MATCH, +	TEP_FILTER_CMP_REGEX, +	TEP_FILTER_CMP_NOT_REGEX,  }; -enum filter_exp_type { -	FILTER_EXP_NONE, -	FILTER_EXP_ADD, -	FILTER_EXP_SUB, -	FILTER_EXP_MUL, -	FILTER_EXP_DIV, -	FILTER_EXP_MOD, -	FILTER_EXP_RSHIFT, -	FILTER_EXP_LSHIFT, -	FILTER_EXP_AND, -	FILTER_EXP_OR, -	FILTER_EXP_XOR, -	FILTER_EXP_NOT, +enum tep_filter_exp_type { +	TEP_FILTER_EXP_NONE, +	TEP_FILTER_EXP_ADD, +	TEP_FILTER_EXP_SUB, +	TEP_FILTER_EXP_MUL, +	TEP_FILTER_EXP_DIV, +	TEP_FILTER_EXP_MOD, +	TEP_FILTER_EXP_RSHIFT, +	TEP_FILTER_EXP_LSHIFT, +	TEP_FILTER_EXP_AND, +	TEP_FILTER_EXP_OR, +	TEP_FILTER_EXP_XOR, +	TEP_FILTER_EXP_NOT,  }; -enum filter_arg_type { -	FILTER_ARG_NONE, -	FILTER_ARG_BOOLEAN, -	FILTER_ARG_VALUE, -	FILTER_ARG_FIELD, -	FILTER_ARG_EXP, -	FILTER_ARG_OP, -	FILTER_ARG_NUM, -	FILTER_ARG_STR, +enum tep_filter_arg_type { +	TEP_FILTER_ARG_NONE, +	TEP_FILTER_ARG_BOOLEAN, +	TEP_FILTER_ARG_VALUE, +	TEP_FILTER_ARG_FIELD, +	TEP_FILTER_ARG_EXP, +	TEP_FILTER_ARG_OP, +	TEP_FILTER_ARG_NUM, +	TEP_FILTER_ARG_STR,  }; -enum filter_value_type { -	FILTER_NUMBER, -	FILTER_STRING, -	FILTER_CHAR +enum tep_filter_value_type { +	TEP_FILTER_NUMBER, +	TEP_FILTER_STRING, +	TEP_FILTER_CHAR  }; -struct fliter_arg; +struct tep_filter_arg; -struct filter_arg_boolean { -	enum filter_boolean_type	value; +struct tep_filter_arg_boolean { +	enum tep_filter_boolean_type	value;  }; -struct filter_arg_field { -	struct format_field	*field; +struct tep_filter_arg_field { +	struct tep_format_field		*field;  }; -struct filter_arg_value { -	enum filter_value_type	type; +struct tep_filter_arg_value { +	enum tep_filter_value_type	type;  	union {  		char			*str;  		unsigned long long	val;  	};  }; -struct filter_arg_op { -	enum filter_op_type	type; -	struct filter_arg	*left; -	struct filter_arg	*right; +struct tep_filter_arg_op { +	enum tep_filter_op_type		type; +	struct tep_filter_arg		*left; +	struct tep_filter_arg		*right;  }; -struct filter_arg_exp { -	enum filter_exp_type	type; -	struct filter_arg	*left; -	struct filter_arg	*right; +struct tep_filter_arg_exp { +	enum tep_filter_exp_type	type; +	struct tep_filter_arg		*left; +	struct tep_filter_arg		*right;  }; -struct filter_arg_num { -	enum filter_cmp_type	type; -	struct filter_arg	*left; -	struct filter_arg	*right; +struct tep_filter_arg_num { +	enum tep_filter_cmp_type	type; +	struct tep_filter_arg		*left; +	struct tep_filter_arg		*right;  }; -struct filter_arg_str { -	enum filter_cmp_type	type; -	struct format_field	*field; -	char			*val; -	char			*buffer; -	regex_t			reg; +struct tep_filter_arg_str { +	enum tep_filter_cmp_type	type; +	struct tep_format_field		*field; +	char				*val; +	char				*buffer; +	regex_t				reg;  }; -struct filter_arg { -	enum filter_arg_type	type; +struct tep_filter_arg { +	enum tep_filter_arg_type		type;  	union { -		struct filter_arg_boolean	boolean; -		struct filter_arg_field		field; -		struct filter_arg_value		value; -		struct filter_arg_op		op; -		struct filter_arg_exp		exp; -		struct filter_arg_num		num; -		struct filter_arg_str		str; +		struct tep_filter_arg_boolean	boolean; +		struct tep_filter_arg_field	field; +		struct tep_filter_arg_value	value; +		struct tep_filter_arg_op	op; +		struct tep_filter_arg_exp	exp; +		struct tep_filter_arg_num	num; +		struct tep_filter_arg_str	str;  	};  }; -struct filter_type { +struct tep_filter_type {  	int			event_id; -	struct event_format	*event; -	struct filter_arg	*filter; +	struct tep_event_format	*event; +	struct tep_filter_arg	*filter;  };  #define TEP_FILTER_ERROR_BUFSZ  1024 -struct event_filter { +struct tep_event_filter {  	struct tep_handle	*pevent;  	int			filters; -	struct filter_type	*event_filters; +	struct tep_filter_type	*event_filters;  	char			error_buffer[TEP_FILTER_ERROR_BUFSZ];  }; -struct event_filter *tep_filter_alloc(struct tep_handle *pevent); +struct tep_event_filter *tep_filter_alloc(struct tep_handle *pevent);  /* for backward compatibility */  #define FILTER_NONE		TEP_ERRNO__NO_FILTER @@ -947,45 +733,45 @@ struct event_filter *tep_filter_alloc(struct tep_handle *pevent);  #define FILTER_MISS		TEP_ERRNO__FILTER_MISS  #define FILTER_MATCH		TEP_ERRNO__FILTER_MATCH -enum filter_trivial_type { -	FILTER_TRIVIAL_FALSE, -	FILTER_TRIVIAL_TRUE, -	FILTER_TRIVIAL_BOTH, +enum tep_filter_trivial_type { +	TEP_FILTER_TRIVIAL_FALSE, +	TEP_FILTER_TRIVIAL_TRUE, +	TEP_FILTER_TRIVIAL_BOTH,  }; -enum tep_errno tep_filter_add_filter_str(struct event_filter *filter, +enum tep_errno tep_filter_add_filter_str(struct tep_event_filter *filter,  					 const char *filter_str); -enum tep_errno tep_filter_match(struct event_filter *filter, +enum tep_errno tep_filter_match(struct tep_event_filter *filter,  				struct tep_record *record); -int tep_filter_strerror(struct event_filter *filter, enum tep_errno err, +int tep_filter_strerror(struct tep_event_filter *filter, enum tep_errno err,  			char *buf, size_t buflen); -int tep_event_filtered(struct event_filter *filter, +int tep_event_filtered(struct tep_event_filter *filter,  		       int event_id); -void tep_filter_reset(struct event_filter *filter); +void tep_filter_reset(struct tep_event_filter *filter); -int tep_filter_clear_trivial(struct event_filter *filter, -			     enum filter_trivial_type type); +int tep_filter_clear_trivial(struct tep_event_filter *filter, +			     enum tep_filter_trivial_type type); -void tep_filter_free(struct event_filter *filter); +void tep_filter_free(struct tep_event_filter *filter); -char *tep_filter_make_string(struct event_filter *filter, int event_id); +char *tep_filter_make_string(struct tep_event_filter *filter, int event_id); -int tep_filter_remove_event(struct event_filter *filter, +int tep_filter_remove_event(struct tep_event_filter *filter,  			    int event_id); -int tep_filter_event_has_trivial(struct event_filter *filter, +int tep_filter_event_has_trivial(struct tep_event_filter *filter,  				 int event_id, -				 enum filter_trivial_type type); +				 enum tep_filter_trivial_type type); -int tep_filter_copy(struct event_filter *dest, struct event_filter *source); +int tep_filter_copy(struct tep_event_filter *dest, struct tep_event_filter *source); -int tep_update_trivial(struct event_filter *dest, struct event_filter *source, -			enum filter_trivial_type type); +int tep_update_trivial(struct tep_event_filter *dest, struct tep_event_filter *source, +			enum tep_filter_trivial_type type); -int tep_filter_compare(struct event_filter *filter1, struct event_filter *filter2); +int tep_filter_compare(struct tep_event_filter *filter1, struct tep_event_filter *filter2);  #endif /* _PARSE_EVENTS_H */ diff --git a/tools/lib/traceevent/event-plugin.c b/tools/lib/traceevent/event-plugin.c index f17e25097e1e..e74f16c88398 100644 --- a/tools/lib/traceevent/event-plugin.c +++ b/tools/lib/traceevent/event-plugin.c @@ -14,7 +14,9 @@  #include <unistd.h>  #include <dirent.h>  #include "event-parse.h" +#include "event-parse-local.h"  #include "event-utils.h" +#include "trace-seq.h"  #define LOCAL_PLUGIN_DIR ".traceevent/plugins" @@ -30,8 +32,8 @@ static struct trace_plugin_options {  	char				*value;  } *trace_plugin_options; -struct plugin_list { -	struct plugin_list	*next; +struct tep_plugin_list { +	struct tep_plugin_list	*next;  	char			*name;  	void			*handle;  }; @@ -258,7 +260,7 @@ void tep_plugin_remove_options(struct tep_plugin_option *options)   */  void tep_print_plugins(struct trace_seq *s,  		       const char *prefix, const char *suffix, -		       const struct plugin_list *list) +		       const struct tep_plugin_list *list)  {  	while (list) {  		trace_seq_printf(s, "%s%s%s", prefix, list->name, suffix); @@ -270,9 +272,9 @@ static void  load_plugin(struct tep_handle *pevent, const char *path,  	    const char *file, void *data)  { -	struct plugin_list **plugin_list = data; +	struct tep_plugin_list **plugin_list = data;  	tep_plugin_load_func func; -	struct plugin_list *list; +	struct tep_plugin_list *list;  	const char *alias;  	char *plugin;  	void *handle; @@ -416,20 +418,20 @@ load_plugins(struct tep_handle *pevent, const char *suffix,  	free(path);  } -struct plugin_list* +struct tep_plugin_list*  tep_load_plugins(struct tep_handle *pevent)  { -	struct plugin_list *list = NULL; +	struct tep_plugin_list *list = NULL;  	load_plugins(pevent, ".so", load_plugin, &list);  	return list;  }  void -tep_unload_plugins(struct plugin_list *plugin_list, struct tep_handle *pevent) +tep_unload_plugins(struct tep_plugin_list *plugin_list, struct tep_handle *pevent)  {  	tep_plugin_unload_func func; -	struct plugin_list *list; +	struct tep_plugin_list *list;  	while (plugin_list) {  		list = plugin_list; diff --git a/tools/lib/traceevent/parse-filter.c b/tools/lib/traceevent/parse-filter.c index e76154c02ee7..ed87cb56713d 100644 --- a/tools/lib/traceevent/parse-filter.c +++ b/tools/lib/traceevent/parse-filter.c @@ -11,22 +11,23 @@  #include <sys/types.h>  #include "event-parse.h" +#include "event-parse-local.h"  #include "event-utils.h"  #define COMM "COMM"  #define CPU "CPU" -static struct format_field comm = { +static struct tep_format_field comm = {  	.name = "COMM",  }; -static struct format_field cpu = { +static struct tep_format_field cpu = {  	.name = "CPU",  };  struct event_list {  	struct event_list	*next; -	struct event_format	*event; +	struct tep_event_format	*event;  };  static void show_error(char *error_buf, const char *fmt, ...) @@ -61,15 +62,15 @@ static void free_token(char *token)  	tep_free_token(token);  } -static enum event_type read_token(char **tok) +static enum tep_event_type read_token(char **tok)  { -	enum event_type type; +	enum tep_event_type type;  	char *token = NULL;  	do {  		free_token(token);  		type = tep_read_token(&token); -	} while (type == EVENT_NEWLINE || type == EVENT_SPACE); +	} while (type == TEP_EVENT_NEWLINE || type == TEP_EVENT_SPACE);  	/* If token is = or ! check to see if the next char is ~ */  	if (token && @@ -79,7 +80,7 @@ static enum event_type read_token(char **tok)  		*tok = malloc(3);  		if (*tok == NULL) {  			free_token(token); -			return EVENT_ERROR; +			return TEP_EVENT_ERROR;  		}  		sprintf(*tok, "%c%c", *token, '~');  		free_token(token); @@ -94,8 +95,8 @@ static enum event_type read_token(char **tok)  static int filter_cmp(const void *a, const void *b)  { -	const struct filter_type *ea = a; -	const struct filter_type *eb = b; +	const struct tep_filter_type *ea = a; +	const struct tep_filter_type *eb = b;  	if (ea->event_id < eb->event_id)  		return -1; @@ -106,11 +107,11 @@ static int filter_cmp(const void *a, const void *b)  	return 0;  } -static struct filter_type * -find_filter_type(struct event_filter *filter, int id) +static struct tep_filter_type * +find_filter_type(struct tep_event_filter *filter, int id)  { -	struct filter_type *filter_type; -	struct filter_type key; +	struct tep_filter_type *filter_type; +	struct tep_filter_type key;  	key.event_id = id; @@ -122,10 +123,10 @@ find_filter_type(struct event_filter *filter, int id)  	return filter_type;  } -static struct filter_type * -add_filter_type(struct event_filter *filter, int id) +static struct tep_filter_type * +add_filter_type(struct tep_event_filter *filter, int id)  { -	struct filter_type *filter_type; +	struct tep_filter_type *filter_type;  	int i;  	filter_type = find_filter_type(filter, id); @@ -165,9 +166,9 @@ add_filter_type(struct event_filter *filter, int id)   * tep_filter_alloc - create a new event filter   * @pevent: The pevent that this filter is associated with   */ -struct event_filter *tep_filter_alloc(struct tep_handle *pevent) +struct tep_event_filter *tep_filter_alloc(struct tep_handle *pevent)  { -	struct event_filter *filter; +	struct tep_event_filter *filter;  	filter = malloc(sizeof(*filter));  	if (filter == NULL) @@ -180,44 +181,44 @@ struct event_filter *tep_filter_alloc(struct tep_handle *pevent)  	return filter;  } -static struct filter_arg *allocate_arg(void) +static struct tep_filter_arg *allocate_arg(void)  { -	return calloc(1, sizeof(struct filter_arg)); +	return calloc(1, sizeof(struct tep_filter_arg));  } -static void free_arg(struct filter_arg *arg) +static void free_arg(struct tep_filter_arg *arg)  {  	if (!arg)  		return;  	switch (arg->type) { -	case FILTER_ARG_NONE: -	case FILTER_ARG_BOOLEAN: +	case TEP_FILTER_ARG_NONE: +	case TEP_FILTER_ARG_BOOLEAN:  		break; -	case FILTER_ARG_NUM: +	case TEP_FILTER_ARG_NUM:  		free_arg(arg->num.left);  		free_arg(arg->num.right);  		break; -	case FILTER_ARG_EXP: +	case TEP_FILTER_ARG_EXP:  		free_arg(arg->exp.left);  		free_arg(arg->exp.right);  		break; -	case FILTER_ARG_STR: +	case TEP_FILTER_ARG_STR:  		free(arg->str.val);  		regfree(&arg->str.reg);  		free(arg->str.buffer);  		break; -	case FILTER_ARG_VALUE: -		if (arg->value.type == FILTER_STRING || -		    arg->value.type == FILTER_CHAR) +	case TEP_FILTER_ARG_VALUE: +		if (arg->value.type == TEP_FILTER_STRING || +		    arg->value.type == TEP_FILTER_CHAR)  			free(arg->value.str);  		break; -	case FILTER_ARG_OP: +	case TEP_FILTER_ARG_OP:  		free_arg(arg->op.left);  		free_arg(arg->op.right);  	default: @@ -228,7 +229,7 @@ static void free_arg(struct filter_arg *arg)  }  static int add_event(struct event_list **events, -		      struct event_format *event) +		     struct tep_event_format *event)  {  	struct event_list *list; @@ -242,7 +243,7 @@ static int add_event(struct event_list **events,  	return 0;  } -static int event_match(struct event_format *event, +static int event_match(struct tep_event_format *event,  		       regex_t *sreg, regex_t *ereg)  {  	if (sreg) { @@ -258,7 +259,7 @@ static enum tep_errno  find_event(struct tep_handle *pevent, struct event_list **events,  	   char *sys_name, char *event_name)  { -	struct event_format *event; +	struct tep_event_format *event;  	regex_t ereg;  	regex_t sreg;  	int match = 0; @@ -333,11 +334,11 @@ static void free_events(struct event_list *events)  }  static enum tep_errno -create_arg_item(struct event_format *event, const char *token, -		enum event_type type, struct filter_arg **parg, char *error_str) +create_arg_item(struct tep_event_format *event, const char *token, +		enum tep_event_type type, struct tep_filter_arg **parg, char *error_str)  { -	struct format_field *field; -	struct filter_arg *arg; +	struct tep_format_field *field; +	struct tep_filter_arg *arg;  	arg = allocate_arg();  	if (arg == NULL) { @@ -347,11 +348,11 @@ create_arg_item(struct event_format *event, const char *token,  	switch (type) { -	case EVENT_SQUOTE: -	case EVENT_DQUOTE: -		arg->type = FILTER_ARG_VALUE; +	case TEP_EVENT_SQUOTE: +	case TEP_EVENT_DQUOTE: +		arg->type = TEP_FILTER_ARG_VALUE;  		arg->value.type = -			type == EVENT_DQUOTE ? FILTER_STRING : FILTER_CHAR; +			type == TEP_EVENT_DQUOTE ? TEP_FILTER_STRING : TEP_FILTER_CHAR;  		arg->value.str = strdup(token);  		if (!arg->value.str) {  			free_arg(arg); @@ -359,11 +360,11 @@ create_arg_item(struct event_format *event, const char *token,  			return TEP_ERRNO__MEM_ALLOC_FAILED;  		}  		break; -	case EVENT_ITEM: +	case TEP_EVENT_ITEM:  		/* if it is a number, then convert it */  		if (isdigit(token[0])) { -			arg->type = FILTER_ARG_VALUE; -			arg->value.type = FILTER_NUMBER; +			arg->type = TEP_FILTER_ARG_VALUE; +			arg->value.type = TEP_FILTER_NUMBER;  			arg->value.val = strtoull(token, NULL, 0);  			break;  		} @@ -377,12 +378,12 @@ create_arg_item(struct event_format *event, const char *token,  				field = &cpu;  			} else {  				/* not a field, Make it false */ -				arg->type = FILTER_ARG_BOOLEAN; -				arg->boolean.value = FILTER_FALSE; +				arg->type = TEP_FILTER_ARG_BOOLEAN; +				arg->boolean.value = TEP_FILTER_FALSE;  				break;  			}  		} -		arg->type = FILTER_ARG_FIELD; +		arg->type = TEP_FILTER_ARG_FIELD;  		arg->field.field = field;  		break;  	default: @@ -394,82 +395,82 @@ create_arg_item(struct event_format *event, const char *token,  	return 0;  } -static struct filter_arg * -create_arg_op(enum filter_op_type btype) +static struct tep_filter_arg * +create_arg_op(enum tep_filter_op_type btype)  { -	struct filter_arg *arg; +	struct tep_filter_arg *arg;  	arg = allocate_arg();  	if (!arg)  		return NULL; -	arg->type = FILTER_ARG_OP; +	arg->type = TEP_FILTER_ARG_OP;  	arg->op.type = btype;  	return arg;  } -static struct filter_arg * -create_arg_exp(enum filter_exp_type etype) +static struct tep_filter_arg * +create_arg_exp(enum tep_filter_exp_type etype)  { -	struct filter_arg *arg; +	struct tep_filter_arg *arg;  	arg = allocate_arg();  	if (!arg)  		return NULL; -	arg->type = FILTER_ARG_EXP; +	arg->type = TEP_FILTER_ARG_EXP;  	arg->exp.type = etype;  	return arg;  } -static struct filter_arg * -create_arg_cmp(enum filter_cmp_type ctype) +static struct tep_filter_arg * +create_arg_cmp(enum tep_filter_cmp_type ctype)  { -	struct filter_arg *arg; +	struct tep_filter_arg *arg;  	arg = allocate_arg();  	if (!arg)  		return NULL;  	/* Use NUM and change if necessary */ -	arg->type = FILTER_ARG_NUM; +	arg->type = TEP_FILTER_ARG_NUM;  	arg->num.type = ctype;  	return arg;  }  static enum tep_errno -add_right(struct filter_arg *op, struct filter_arg *arg, char *error_str) +add_right(struct tep_filter_arg *op, struct tep_filter_arg *arg, char *error_str)  { -	struct filter_arg *left; +	struct tep_filter_arg *left;  	char *str;  	int op_type;  	int ret;  	switch (op->type) { -	case FILTER_ARG_EXP: +	case TEP_FILTER_ARG_EXP:  		if (op->exp.right)  			goto out_fail;  		op->exp.right = arg;  		break; -	case FILTER_ARG_OP: +	case TEP_FILTER_ARG_OP:  		if (op->op.right)  			goto out_fail;  		op->op.right = arg;  		break; -	case FILTER_ARG_NUM: +	case TEP_FILTER_ARG_NUM:  		if (op->op.right)  			goto out_fail;  		/*  		 * The arg must be num, str, or field  		 */  		switch (arg->type) { -		case FILTER_ARG_VALUE: -		case FILTER_ARG_FIELD: +		case TEP_FILTER_ARG_VALUE: +		case TEP_FILTER_ARG_FIELD:  			break;  		default:  			show_error(error_str, "Illegal rvalue"); @@ -481,20 +482,20 @@ add_right(struct filter_arg *op, struct filter_arg *arg, char *error_str)  		 * convert this to a string or regex.  		 */  		switch (arg->value.type) { -		case FILTER_CHAR: +		case TEP_FILTER_CHAR:  			/*  			 * A char should be converted to number if  			 * the string is 1 byte, and the compare  			 * is not a REGEX.  			 */  			if (strlen(arg->value.str) == 1 && -			    op->num.type != FILTER_CMP_REGEX && -			    op->num.type != FILTER_CMP_NOT_REGEX) { -				arg->value.type = FILTER_NUMBER; +			    op->num.type != TEP_FILTER_CMP_REGEX && +			    op->num.type != TEP_FILTER_CMP_NOT_REGEX) { +				arg->value.type = TEP_FILTER_NUMBER;  				goto do_int;  			}  			/* fall through */ -		case FILTER_STRING: +		case TEP_FILTER_STRING:  			/* convert op to a string arg */  			op_type = op->num.type; @@ -508,16 +509,16 @@ add_right(struct filter_arg *op, struct filter_arg *arg, char *error_str)  			 * If left arg was a field not found then  			 * NULL the entire op.  			 */ -			if (left->type == FILTER_ARG_BOOLEAN) { +			if (left->type == TEP_FILTER_ARG_BOOLEAN) {  				free_arg(left);  				free_arg(arg); -				op->type = FILTER_ARG_BOOLEAN; -				op->boolean.value = FILTER_FALSE; +				op->type = TEP_FILTER_ARG_BOOLEAN; +				op->boolean.value = TEP_FILTER_FALSE;  				break;  			}  			/* Left arg must be a field */ -			if (left->type != FILTER_ARG_FIELD) { +			if (left->type != TEP_FILTER_ARG_FIELD) {  				show_error(error_str,  					   "Illegal lvalue for string comparison");  				return TEP_ERRNO__ILLEGAL_LVALUE; @@ -525,15 +526,15 @@ add_right(struct filter_arg *op, struct filter_arg *arg, char *error_str)  			/* Make sure this is a valid string compare */  			switch (op_type) { -			case FILTER_CMP_EQ: -				op_type = FILTER_CMP_MATCH; +			case TEP_FILTER_CMP_EQ: +				op_type = TEP_FILTER_CMP_MATCH;  				break; -			case FILTER_CMP_NE: -				op_type = FILTER_CMP_NOT_MATCH; +			case TEP_FILTER_CMP_NE: +				op_type = TEP_FILTER_CMP_NOT_MATCH;  				break; -			case FILTER_CMP_REGEX: -			case FILTER_CMP_NOT_REGEX: +			case TEP_FILTER_CMP_REGEX: +			case TEP_FILTER_CMP_NOT_REGEX:  				ret = regcomp(&op->str.reg, str, REG_ICASE|REG_NOSUB);  				if (ret) {  					show_error(error_str, @@ -548,7 +549,7 @@ add_right(struct filter_arg *op, struct filter_arg *arg, char *error_str)  				return TEP_ERRNO__ILLEGAL_STRING_CMP;  			} -			op->type = FILTER_ARG_STR; +			op->type = TEP_FILTER_ARG_STR;  			op->str.type = op_type;  			op->str.field = left->field.field;  			op->str.val = strdup(str); @@ -573,12 +574,12 @@ add_right(struct filter_arg *op, struct filter_arg *arg, char *error_str)  			break; -		case FILTER_NUMBER: +		case TEP_FILTER_NUMBER:   do_int:  			switch (op->num.type) { -			case FILTER_CMP_REGEX: -			case FILTER_CMP_NOT_REGEX: +			case TEP_FILTER_CMP_REGEX: +			case TEP_FILTER_CMP_NOT_REGEX:  				show_error(error_str,  					   "Op not allowed with integers");  				return TEP_ERRNO__ILLEGAL_INTEGER_CMP; @@ -605,35 +606,35 @@ add_right(struct filter_arg *op, struct filter_arg *arg, char *error_str)  	return TEP_ERRNO__SYNTAX_ERROR;  } -static struct filter_arg * -rotate_op_right(struct filter_arg *a, struct filter_arg *b) +static struct tep_filter_arg * +rotate_op_right(struct tep_filter_arg *a, struct tep_filter_arg *b)  { -	struct filter_arg *arg; +	struct tep_filter_arg *arg;  	arg = a->op.right;  	a->op.right = b;  	return arg;  } -static enum tep_errno add_left(struct filter_arg *op, struct filter_arg *arg) +static enum tep_errno add_left(struct tep_filter_arg *op, struct tep_filter_arg *arg)  {  	switch (op->type) { -	case FILTER_ARG_EXP: -		if (arg->type == FILTER_ARG_OP) +	case TEP_FILTER_ARG_EXP: +		if (arg->type == TEP_FILTER_ARG_OP)  			arg = rotate_op_right(arg, op);  		op->exp.left = arg;  		break; -	case FILTER_ARG_OP: +	case TEP_FILTER_ARG_OP:  		op->op.left = arg;  		break; -	case FILTER_ARG_NUM: -		if (arg->type == FILTER_ARG_OP) +	case TEP_FILTER_ARG_NUM: +		if (arg->type == TEP_FILTER_ARG_OP)  			arg = rotate_op_right(arg, op);  		/* left arg of compares must be a field */ -		if (arg->type != FILTER_ARG_FIELD && -		    arg->type != FILTER_ARG_BOOLEAN) +		if (arg->type != TEP_FILTER_ARG_FIELD && +		    arg->type != TEP_FILTER_ARG_BOOLEAN)  			return TEP_ERRNO__INVALID_ARG_TYPE;  		op->num.left = arg;  		break; @@ -652,91 +653,91 @@ enum op_type {  };  static enum op_type process_op(const char *token, -			       enum filter_op_type *btype, -			       enum filter_cmp_type *ctype, -			       enum filter_exp_type *etype) +			       enum tep_filter_op_type *btype, +			       enum tep_filter_cmp_type *ctype, +			       enum tep_filter_exp_type *etype)  { -	*btype = FILTER_OP_NOT; -	*etype = FILTER_EXP_NONE; -	*ctype = FILTER_CMP_NONE; +	*btype = TEP_FILTER_OP_NOT; +	*etype = TEP_FILTER_EXP_NONE; +	*ctype = TEP_FILTER_CMP_NONE;  	if (strcmp(token, "&&") == 0) -		*btype = FILTER_OP_AND; +		*btype = TEP_FILTER_OP_AND;  	else if (strcmp(token, "||") == 0) -		*btype = FILTER_OP_OR; +		*btype = TEP_FILTER_OP_OR;  	else if (strcmp(token, "!") == 0)  		return OP_NOT; -	if (*btype != FILTER_OP_NOT) +	if (*btype != TEP_FILTER_OP_NOT)  		return OP_BOOL;  	/* Check for value expressions */  	if (strcmp(token, "+") == 0) { -		*etype = FILTER_EXP_ADD; +		*etype = TEP_FILTER_EXP_ADD;  	} else if (strcmp(token, "-") == 0) { -		*etype = FILTER_EXP_SUB; +		*etype = TEP_FILTER_EXP_SUB;  	} else if (strcmp(token, "*") == 0) { -		*etype = FILTER_EXP_MUL; +		*etype = TEP_FILTER_EXP_MUL;  	} else if (strcmp(token, "/") == 0) { -		*etype = FILTER_EXP_DIV; +		*etype = TEP_FILTER_EXP_DIV;  	} else if (strcmp(token, "%") == 0) { -		*etype = FILTER_EXP_MOD; +		*etype = TEP_FILTER_EXP_MOD;  	} else if (strcmp(token, ">>") == 0) { -		*etype = FILTER_EXP_RSHIFT; +		*etype = TEP_FILTER_EXP_RSHIFT;  	} else if (strcmp(token, "<<") == 0) { -		*etype = FILTER_EXP_LSHIFT; +		*etype = TEP_FILTER_EXP_LSHIFT;  	} else if (strcmp(token, "&") == 0) { -		*etype = FILTER_EXP_AND; +		*etype = TEP_FILTER_EXP_AND;  	} else if (strcmp(token, "|") == 0) { -		*etype = FILTER_EXP_OR; +		*etype = TEP_FILTER_EXP_OR;  	} else if (strcmp(token, "^") == 0) { -		*etype = FILTER_EXP_XOR; +		*etype = TEP_FILTER_EXP_XOR;  	} else if (strcmp(token, "~") == 0) -		*etype = FILTER_EXP_NOT; +		*etype = TEP_FILTER_EXP_NOT; -	if (*etype != FILTER_EXP_NONE) +	if (*etype != TEP_FILTER_EXP_NONE)  		return OP_EXP;  	/* Check for compares */  	if (strcmp(token, "==") == 0) -		*ctype = FILTER_CMP_EQ; +		*ctype = TEP_FILTER_CMP_EQ;  	else if (strcmp(token, "!=") == 0) -		*ctype = FILTER_CMP_NE; +		*ctype = TEP_FILTER_CMP_NE;  	else if (strcmp(token, "<") == 0) -		*ctype = FILTER_CMP_LT; +		*ctype = TEP_FILTER_CMP_LT;  	else if (strcmp(token, ">") == 0) -		*ctype = FILTER_CMP_GT; +		*ctype = TEP_FILTER_CMP_GT;  	else if (strcmp(token, "<=") == 0) -		*ctype = FILTER_CMP_LE; +		*ctype = TEP_FILTER_CMP_LE;  	else if (strcmp(token, ">=") == 0) -		*ctype = FILTER_CMP_GE; +		*ctype = TEP_FILTER_CMP_GE;  	else if (strcmp(token, "=~") == 0) -		*ctype = FILTER_CMP_REGEX; +		*ctype = TEP_FILTER_CMP_REGEX;  	else if (strcmp(token, "!~") == 0) -		*ctype = FILTER_CMP_NOT_REGEX; +		*ctype = TEP_FILTER_CMP_NOT_REGEX;  	else  		return OP_NONE;  	return OP_CMP;  } -static int check_op_done(struct filter_arg *arg) +static int check_op_done(struct tep_filter_arg *arg)  {  	switch (arg->type) { -	case FILTER_ARG_EXP: +	case TEP_FILTER_ARG_EXP:  		return arg->exp.right != NULL; -	case FILTER_ARG_OP: +	case TEP_FILTER_ARG_OP:  		return arg->op.right != NULL; -	case FILTER_ARG_NUM: +	case TEP_FILTER_ARG_NUM:  		return arg->num.right != NULL; -	case FILTER_ARG_STR: +	case TEP_FILTER_ARG_STR:  		/* A string conversion is always done */  		return 1; -	case FILTER_ARG_BOOLEAN: +	case TEP_FILTER_ARG_BOOLEAN:  		/* field not found, is ok */  		return 1; @@ -752,14 +753,14 @@ enum filter_vals {  };  static enum tep_errno -reparent_op_arg(struct filter_arg *parent, struct filter_arg *old_child, -		struct filter_arg *arg, char *error_str) +reparent_op_arg(struct tep_filter_arg *parent, struct tep_filter_arg *old_child, +		struct tep_filter_arg *arg, char *error_str)  { -	struct filter_arg *other_child; -	struct filter_arg **ptr; +	struct tep_filter_arg *other_child; +	struct tep_filter_arg **ptr; -	if (parent->type != FILTER_ARG_OP && -	    arg->type != FILTER_ARG_OP) { +	if (parent->type != TEP_FILTER_ARG_OP && +	    arg->type != TEP_FILTER_ARG_OP) {  		show_error(error_str, "can not reparent other than OP");  		return TEP_ERRNO__REPARENT_NOT_OP;  	} @@ -804,7 +805,7 @@ reparent_op_arg(struct filter_arg *parent, struct filter_arg *old_child,  }  /* Returns either filter_vals (success) or tep_errno (failfure) */ -static int test_arg(struct filter_arg *parent, struct filter_arg *arg, +static int test_arg(struct tep_filter_arg *parent, struct tep_filter_arg *arg,  		    char *error_str)  {  	int lval, rval; @@ -812,16 +813,16 @@ static int test_arg(struct filter_arg *parent, struct filter_arg *arg,  	switch (arg->type) {  		/* bad case */ -	case FILTER_ARG_BOOLEAN: +	case TEP_FILTER_ARG_BOOLEAN:  		return FILTER_VAL_FALSE + arg->boolean.value;  		/* good cases: */ -	case FILTER_ARG_STR: -	case FILTER_ARG_VALUE: -	case FILTER_ARG_FIELD: +	case TEP_FILTER_ARG_STR: +	case TEP_FILTER_ARG_VALUE: +	case TEP_FILTER_ARG_FIELD:  		return FILTER_VAL_NORM; -	case FILTER_ARG_EXP: +	case TEP_FILTER_ARG_EXP:  		lval = test_arg(arg, arg->exp.left, error_str);  		if (lval != FILTER_VAL_NORM)  			return lval; @@ -830,7 +831,7 @@ static int test_arg(struct filter_arg *parent, struct filter_arg *arg,  			return rval;  		return FILTER_VAL_NORM; -	case FILTER_ARG_NUM: +	case TEP_FILTER_ARG_NUM:  		lval = test_arg(arg, arg->num.left, error_str);  		if (lval != FILTER_VAL_NORM)  			return lval; @@ -839,14 +840,14 @@ static int test_arg(struct filter_arg *parent, struct filter_arg *arg,  			return rval;  		return FILTER_VAL_NORM; -	case FILTER_ARG_OP: -		if (arg->op.type != FILTER_OP_NOT) { +	case TEP_FILTER_ARG_OP: +		if (arg->op.type != TEP_FILTER_OP_NOT) {  			lval = test_arg(arg, arg->op.left, error_str);  			switch (lval) {  			case FILTER_VAL_NORM:  				break;  			case FILTER_VAL_TRUE: -				if (arg->op.type == FILTER_OP_OR) +				if (arg->op.type == TEP_FILTER_OP_OR)  					return FILTER_VAL_TRUE;  				rval = test_arg(arg, arg->op.right, error_str);  				if (rval != FILTER_VAL_NORM) @@ -856,7 +857,7 @@ static int test_arg(struct filter_arg *parent, struct filter_arg *arg,  						       error_str);  			case FILTER_VAL_FALSE: -				if (arg->op.type == FILTER_OP_AND) +				if (arg->op.type == TEP_FILTER_OP_AND)  					return FILTER_VAL_FALSE;  				rval = test_arg(arg, arg->op.right, error_str);  				if (rval != FILTER_VAL_NORM) @@ -877,18 +878,18 @@ static int test_arg(struct filter_arg *parent, struct filter_arg *arg,  			break;  		case FILTER_VAL_TRUE: -			if (arg->op.type == FILTER_OP_OR) +			if (arg->op.type == TEP_FILTER_OP_OR)  				return FILTER_VAL_TRUE; -			if (arg->op.type == FILTER_OP_NOT) +			if (arg->op.type == TEP_FILTER_OP_NOT)  				return FILTER_VAL_FALSE;  			return reparent_op_arg(parent, arg, arg->op.left,  					       error_str);  		case FILTER_VAL_FALSE: -			if (arg->op.type == FILTER_OP_AND) +			if (arg->op.type == TEP_FILTER_OP_AND)  				return FILTER_VAL_FALSE; -			if (arg->op.type == FILTER_OP_NOT) +			if (arg->op.type == TEP_FILTER_OP_NOT)  				return FILTER_VAL_TRUE;  			return reparent_op_arg(parent, arg, arg->op.left, @@ -904,8 +905,8 @@ static int test_arg(struct filter_arg *parent, struct filter_arg *arg,  }  /* Remove any unknown event fields */ -static int collapse_tree(struct filter_arg *arg, -			 struct filter_arg **arg_collapsed, char *error_str) +static int collapse_tree(struct tep_filter_arg *arg, +			 struct tep_filter_arg **arg_collapsed, char *error_str)  {  	int ret; @@ -919,7 +920,7 @@ static int collapse_tree(struct filter_arg *arg,  		free_arg(arg);  		arg = allocate_arg();  		if (arg) { -			arg->type = FILTER_ARG_BOOLEAN; +			arg->type = TEP_FILTER_ARG_BOOLEAN;  			arg->boolean.value = ret == FILTER_VAL_TRUE;  		} else {  			show_error(error_str, "Failed to allocate filter arg"); @@ -939,19 +940,19 @@ static int collapse_tree(struct filter_arg *arg,  }  static enum tep_errno -process_filter(struct event_format *event, struct filter_arg **parg, +process_filter(struct tep_event_format *event, struct tep_filter_arg **parg,  	       char *error_str, int not)  { -	enum event_type type; +	enum tep_event_type type;  	char *token = NULL; -	struct filter_arg *current_op = NULL; -	struct filter_arg *current_exp = NULL; -	struct filter_arg *left_item = NULL; -	struct filter_arg *arg = NULL; +	struct tep_filter_arg *current_op = NULL; +	struct tep_filter_arg *current_exp = NULL; +	struct tep_filter_arg *left_item = NULL; +	struct tep_filter_arg *arg = NULL;  	enum op_type op_type; -	enum filter_op_type btype; -	enum filter_exp_type etype; -	enum filter_cmp_type ctype; +	enum tep_filter_op_type btype; +	enum tep_filter_exp_type etype; +	enum tep_filter_cmp_type ctype;  	enum tep_errno ret;  	*parg = NULL; @@ -960,9 +961,9 @@ process_filter(struct event_format *event, struct filter_arg **parg,  		free(token);  		type = read_token(&token);  		switch (type) { -		case EVENT_SQUOTE: -		case EVENT_DQUOTE: -		case EVENT_ITEM: +		case TEP_EVENT_SQUOTE: +		case TEP_EVENT_DQUOTE: +		case TEP_EVENT_ITEM:  			ret = create_arg_item(event, token, type, &arg, error_str);  			if (ret < 0)  				goto fail; @@ -987,7 +988,7 @@ process_filter(struct event_format *event, struct filter_arg **parg,  			arg = NULL;  			break; -		case EVENT_DELIM: +		case TEP_EVENT_DELIM:  			if (*token == ',') {  				show_error(error_str, "Illegal token ','");  				ret = TEP_ERRNO__ILLEGAL_TOKEN; @@ -1054,7 +1055,7 @@ process_filter(struct event_format *event, struct filter_arg **parg,  			}  			break; -		case EVENT_OP: +		case TEP_EVENT_OP:  			op_type = process_op(token, &btype, &ctype, &etype);  			/* All expect a left arg except for NOT */ @@ -1139,14 +1140,14 @@ process_filter(struct event_format *event, struct filter_arg **parg,  			if (ret < 0)  				goto fail_syntax;  			break; -		case EVENT_NONE: +		case TEP_EVENT_NONE:  			break; -		case EVENT_ERROR: +		case TEP_EVENT_ERROR:  			goto fail_alloc;  		default:  			goto fail_syntax;  		} -	} while (type != EVENT_NONE); +	} while (type != TEP_EVENT_NONE);  	if (!current_op && !current_exp)  		goto fail_syntax; @@ -1179,8 +1180,8 @@ process_filter(struct event_format *event, struct filter_arg **parg,  }  static enum tep_errno -process_event(struct event_format *event, const char *filter_str, -	      struct filter_arg **parg, char *error_str) +process_event(struct tep_event_format *event, const char *filter_str, +	      struct tep_filter_arg **parg, char *error_str)  {  	int ret; @@ -1196,19 +1197,19 @@ process_event(struct event_format *event, const char *filter_str,  		if (*parg == NULL)  			return TEP_ERRNO__MEM_ALLOC_FAILED; -		(*parg)->type = FILTER_ARG_BOOLEAN; -		(*parg)->boolean.value = FILTER_FALSE; +		(*parg)->type = TEP_FILTER_ARG_BOOLEAN; +		(*parg)->boolean.value = TEP_FILTER_FALSE;  	}  	return 0;  }  static enum tep_errno -filter_event(struct event_filter *filter, struct event_format *event, +filter_event(struct tep_event_filter *filter, struct tep_event_format *event,  	     const char *filter_str, char *error_str)  { -	struct filter_type *filter_type; -	struct filter_arg *arg; +	struct tep_filter_type *filter_type; +	struct tep_filter_arg *arg;  	enum tep_errno ret;  	if (filter_str) { @@ -1222,8 +1223,8 @@ filter_event(struct event_filter *filter, struct event_format *event,  		if (arg == NULL)  			return TEP_ERRNO__MEM_ALLOC_FAILED; -		arg->type = FILTER_ARG_BOOLEAN; -		arg->boolean.value = FILTER_TRUE; +		arg->type = TEP_FILTER_ARG_BOOLEAN; +		arg->boolean.value = TEP_FILTER_TRUE;  	}  	filter_type = add_filter_type(filter, event->id); @@ -1237,7 +1238,7 @@ filter_event(struct event_filter *filter, struct event_format *event,  	return 0;  } -static void filter_init_error_buf(struct event_filter *filter) +static void filter_init_error_buf(struct tep_event_filter *filter)  {  	/* clear buffer to reset show error */  	tep_buffer_init("", 0); @@ -1253,7 +1254,7 @@ static void filter_init_error_buf(struct event_filter *filter)   * negative error code.  Use tep_filter_strerror() to see   * actual error message in case of error.   */ -enum tep_errno tep_filter_add_filter_str(struct event_filter *filter, +enum tep_errno tep_filter_add_filter_str(struct tep_event_filter *filter,  					 const char *filter_str)  {  	struct tep_handle *pevent = filter->pevent; @@ -1351,7 +1352,7 @@ enum tep_errno tep_filter_add_filter_str(struct event_filter *filter,  	return rtn;  } -static void free_filter_type(struct filter_type *filter_type) +static void free_filter_type(struct tep_filter_type *filter_type)  {  	free_arg(filter_type->filter);  } @@ -1365,7 +1366,7 @@ static void free_filter_type(struct filter_type *filter_type)   *   * Returns 0 if message was filled successfully, -1 if error   */ -int tep_filter_strerror(struct event_filter *filter, enum tep_errno err, +int tep_filter_strerror(struct tep_event_filter *filter, enum tep_errno err,  			char *buf, size_t buflen)  {  	if (err <= __TEP_ERRNO__START || err >= __TEP_ERRNO__END) @@ -1393,10 +1394,10 @@ int tep_filter_strerror(struct event_filter *filter, enum tep_errno err,   * Returns 1: if an event was removed   *   0: if the event was not found   */ -int tep_filter_remove_event(struct event_filter *filter, +int tep_filter_remove_event(struct tep_event_filter *filter,  			    int event_id)  { -	struct filter_type *filter_type; +	struct tep_filter_type *filter_type;  	unsigned long len;  	if (!filter->filters) @@ -1428,7 +1429,7 @@ int tep_filter_remove_event(struct event_filter *filter,   *   * Removes all filters from a filter and resets it.   */ -void tep_filter_reset(struct event_filter *filter) +void tep_filter_reset(struct tep_event_filter *filter)  {  	int i; @@ -1440,7 +1441,7 @@ void tep_filter_reset(struct event_filter *filter)  	filter->event_filters = NULL;  } -void tep_filter_free(struct event_filter *filter) +void tep_filter_free(struct tep_event_filter *filter)  {  	tep_unref(filter->pevent); @@ -1449,14 +1450,14 @@ void tep_filter_free(struct event_filter *filter)  	free(filter);  } -static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg); +static char *arg_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg); -static int copy_filter_type(struct event_filter *filter, -			     struct event_filter *source, -			     struct filter_type *filter_type) +static int copy_filter_type(struct tep_event_filter *filter, +			    struct tep_event_filter *source, +			    struct tep_filter_type *filter_type)  { -	struct filter_arg *arg; -	struct event_format *event; +	struct tep_filter_arg *arg; +	struct tep_event_format *event;  	const char *sys;  	const char *name;  	char *str; @@ -1478,7 +1479,7 @@ static int copy_filter_type(struct event_filter *filter,  		if (arg == NULL)  			return -1; -		arg->type = FILTER_ARG_BOOLEAN; +		arg->type = TEP_FILTER_ARG_BOOLEAN;  		if (strcmp(str, "TRUE") == 0)  			arg->boolean.value = 1;  		else @@ -1507,7 +1508,7 @@ static int copy_filter_type(struct event_filter *filter,   *   * Returns 0 on success and -1 if not all filters were copied   */ -int tep_filter_copy(struct event_filter *dest, struct event_filter *source) +int tep_filter_copy(struct tep_event_filter *dest, struct tep_event_filter *source)  {  	int ret = 0;  	int i; @@ -1533,14 +1534,14 @@ int tep_filter_copy(struct event_filter *dest, struct event_filter *source)   * Returns 0 on success and -1 if there was a problem updating, but   *   events may have still been updated on error.   */ -int tep_update_trivial(struct event_filter *dest, struct event_filter *source, -		       enum filter_trivial_type type) +int tep_update_trivial(struct tep_event_filter *dest, struct tep_event_filter *source, +		       enum tep_filter_trivial_type type)  {  	struct tep_handle *src_pevent;  	struct tep_handle *dest_pevent; -	struct event_format *event; -	struct filter_type *filter_type; -	struct filter_arg *arg; +	struct tep_event_format *event; +	struct tep_filter_type *filter_type; +	struct tep_filter_arg *arg;  	char *str;  	int i; @@ -1554,10 +1555,10 @@ int tep_update_trivial(struct event_filter *dest, struct event_filter *source,  	for (i = 0; i < dest->filters; i++) {  		filter_type = &dest->event_filters[i];  		arg = filter_type->filter; -		if (arg->type != FILTER_ARG_BOOLEAN) +		if (arg->type != TEP_FILTER_ARG_BOOLEAN)  			continue; -		if ((arg->boolean.value && type == FILTER_TRIVIAL_FALSE) || -		    (!arg->boolean.value && type == FILTER_TRIVIAL_TRUE)) +		if ((arg->boolean.value && type == TEP_FILTER_TRIVIAL_FALSE) || +		    (!arg->boolean.value && type == TEP_FILTER_TRIVIAL_TRUE))  			continue;  		event = filter_type->event; @@ -1592,10 +1593,10 @@ int tep_update_trivial(struct event_filter *dest, struct event_filter *source,   *   * Returns 0 on success and -1 if there was a problem.   */ -int tep_filter_clear_trivial(struct event_filter *filter, -			     enum filter_trivial_type type) +int tep_filter_clear_trivial(struct tep_event_filter *filter, +			     enum tep_filter_trivial_type type)  { -	struct filter_type *filter_type; +	struct tep_filter_type *filter_type;  	int count = 0;  	int *ids = NULL;  	int i; @@ -1611,14 +1612,14 @@ int tep_filter_clear_trivial(struct event_filter *filter,  		int *new_ids;  		filter_type = &filter->event_filters[i]; -		if (filter_type->filter->type != FILTER_ARG_BOOLEAN) +		if (filter_type->filter->type != TEP_FILTER_ARG_BOOLEAN)  			continue;  		switch (type) { -		case FILTER_TRIVIAL_FALSE: +		case TEP_FILTER_TRIVIAL_FALSE:  			if (filter_type->filter->boolean.value)  				continue;  			break; -		case FILTER_TRIVIAL_TRUE: +		case TEP_FILTER_TRIVIAL_TRUE:  			if (!filter_type->filter->boolean.value)  				continue;  		default: @@ -1654,11 +1655,11 @@ int tep_filter_clear_trivial(struct event_filter *filter,   * Returns 1 if the event contains a matching trivial type   *  otherwise 0.   */ -int tep_filter_event_has_trivial(struct event_filter *filter, +int tep_filter_event_has_trivial(struct tep_event_filter *filter,  				 int event_id, -				 enum filter_trivial_type type) +				 enum tep_filter_trivial_type type)  { -	struct filter_type *filter_type; +	struct tep_filter_type *filter_type;  	if (!filter->filters)  		return 0; @@ -1668,25 +1669,25 @@ int tep_filter_event_has_trivial(struct event_filter *filter,  	if (!filter_type)  		return 0; -	if (filter_type->filter->type != FILTER_ARG_BOOLEAN) +	if (filter_type->filter->type != TEP_FILTER_ARG_BOOLEAN)  		return 0;  	switch (type) { -	case FILTER_TRIVIAL_FALSE: +	case TEP_FILTER_TRIVIAL_FALSE:  		return !filter_type->filter->boolean.value; -	case FILTER_TRIVIAL_TRUE: +	case TEP_FILTER_TRIVIAL_TRUE:  		return filter_type->filter->boolean.value;  	default:  		return 1;  	}  } -static int test_filter(struct event_format *event, struct filter_arg *arg, +static int test_filter(struct tep_event_format *event, struct tep_filter_arg *arg,  		       struct tep_record *record, enum tep_errno *err);  static const char * -get_comm(struct event_format *event, struct tep_record *record) +get_comm(struct tep_event_format *event, struct tep_record *record)  {  	const char *comm;  	int pid; @@ -1697,8 +1698,8 @@ get_comm(struct event_format *event, struct tep_record *record)  }  static unsigned long long -get_value(struct event_format *event, -	  struct format_field *field, struct tep_record *record) +get_value(struct tep_event_format *event, +	  struct tep_format_field *field, struct tep_record *record)  {  	unsigned long long val; @@ -1716,7 +1717,7 @@ get_value(struct event_format *event,  	tep_read_number_field(field, record->data, &val); -	if (!(field->flags & FIELD_IS_SIGNED)) +	if (!(field->flags & TEP_FIELD_IS_SIGNED))  		return val;  	switch (field->size) { @@ -1733,11 +1734,11 @@ get_value(struct event_format *event,  }  static unsigned long long -get_arg_value(struct event_format *event, struct filter_arg *arg, +get_arg_value(struct tep_event_format *event, struct tep_filter_arg *arg,  	      struct tep_record *record, enum tep_errno *err);  static unsigned long long -get_exp_value(struct event_format *event, struct filter_arg *arg, +get_exp_value(struct tep_event_format *event, struct tep_filter_arg *arg,  	      struct tep_record *record, enum tep_errno *err)  {  	unsigned long long lval, rval; @@ -1753,37 +1754,37 @@ get_exp_value(struct event_format *event, struct filter_arg *arg,  	}  	switch (arg->exp.type) { -	case FILTER_EXP_ADD: +	case TEP_FILTER_EXP_ADD:  		return lval + rval; -	case FILTER_EXP_SUB: +	case TEP_FILTER_EXP_SUB:  		return lval - rval; -	case FILTER_EXP_MUL: +	case TEP_FILTER_EXP_MUL:  		return lval * rval; -	case FILTER_EXP_DIV: +	case TEP_FILTER_EXP_DIV:  		return lval / rval; -	case FILTER_EXP_MOD: +	case TEP_FILTER_EXP_MOD:  		return lval % rval; -	case FILTER_EXP_RSHIFT: +	case TEP_FILTER_EXP_RSHIFT:  		return lval >> rval; -	case FILTER_EXP_LSHIFT: +	case TEP_FILTER_EXP_LSHIFT:  		return lval << rval; -	case FILTER_EXP_AND: +	case TEP_FILTER_EXP_AND:  		return lval & rval; -	case FILTER_EXP_OR: +	case TEP_FILTER_EXP_OR:  		return lval | rval; -	case FILTER_EXP_XOR: +	case TEP_FILTER_EXP_XOR:  		return lval ^ rval; -	case FILTER_EXP_NOT: +	case TEP_FILTER_EXP_NOT:  	default:  		if (!*err)  			*err = TEP_ERRNO__INVALID_EXP_TYPE; @@ -1792,21 +1793,21 @@ get_exp_value(struct event_format *event, struct filter_arg *arg,  }  static unsigned long long -get_arg_value(struct event_format *event, struct filter_arg *arg, +get_arg_value(struct tep_event_format *event, struct tep_filter_arg *arg,  	      struct tep_record *record, enum tep_errno *err)  {  	switch (arg->type) { -	case FILTER_ARG_FIELD: +	case TEP_FILTER_ARG_FIELD:  		return get_value(event, arg->field.field, record); -	case FILTER_ARG_VALUE: -		if (arg->value.type != FILTER_NUMBER) { +	case TEP_FILTER_ARG_VALUE: +		if (arg->value.type != TEP_FILTER_NUMBER) {  			if (!*err)  				*err = TEP_ERRNO__NOT_A_NUMBER;  		}  		return arg->value.val; -	case FILTER_ARG_EXP: +	case TEP_FILTER_ARG_EXP:  		return get_exp_value(event, arg, record, err);  	default: @@ -1816,7 +1817,7 @@ get_arg_value(struct event_format *event, struct filter_arg *arg,  	return 0;  } -static int test_num(struct event_format *event, struct filter_arg *arg, +static int test_num(struct tep_event_format *event, struct tep_filter_arg *arg,  		    struct tep_record *record, enum tep_errno *err)  {  	unsigned long long lval, rval; @@ -1832,22 +1833,22 @@ static int test_num(struct event_format *event, struct filter_arg *arg,  	}  	switch (arg->num.type) { -	case FILTER_CMP_EQ: +	case TEP_FILTER_CMP_EQ:  		return lval == rval; -	case FILTER_CMP_NE: +	case TEP_FILTER_CMP_NE:  		return lval != rval; -	case FILTER_CMP_GT: +	case TEP_FILTER_CMP_GT:  		return lval > rval; -	case FILTER_CMP_LT: +	case TEP_FILTER_CMP_LT:  		return lval < rval; -	case FILTER_CMP_GE: +	case TEP_FILTER_CMP_GE:  		return lval >= rval; -	case FILTER_CMP_LE: +	case TEP_FILTER_CMP_LE:  		return lval <= rval;  	default: @@ -1857,9 +1858,9 @@ static int test_num(struct event_format *event, struct filter_arg *arg,  	}  } -static const char *get_field_str(struct filter_arg *arg, struct tep_record *record) +static const char *get_field_str(struct tep_filter_arg *arg, struct tep_record *record)  { -	struct event_format *event; +	struct tep_event_format *event;  	struct tep_handle *pevent;  	unsigned long long addr;  	const char *val = NULL; @@ -1867,11 +1868,11 @@ static const char *get_field_str(struct filter_arg *arg, struct tep_record *reco  	char hex[64];  	/* If the field is not a string convert it */ -	if (arg->str.field->flags & FIELD_IS_STRING) { +	if (arg->str.field->flags & TEP_FIELD_IS_STRING) {  		val = record->data + arg->str.field->offset;  		size = arg->str.field->size; -		if (arg->str.field->flags & FIELD_IS_DYNAMIC) { +		if (arg->str.field->flags & TEP_FIELD_IS_DYNAMIC) {  			addr = *(unsigned int *)val;  			val = record->data + (addr & 0xffff);  			size = addr >> 16; @@ -1893,7 +1894,7 @@ static const char *get_field_str(struct filter_arg *arg, struct tep_record *reco  		pevent = event->pevent;  		addr = get_value(event, arg->str.field, record); -		if (arg->str.field->flags & (FIELD_IS_POINTER | FIELD_IS_LONG)) +		if (arg->str.field->flags & (TEP_FIELD_IS_POINTER | TEP_FIELD_IS_LONG))  			/* convert to a kernel symbol */  			val = tep_find_function(pevent, addr); @@ -1907,7 +1908,7 @@ static const char *get_field_str(struct filter_arg *arg, struct tep_record *reco  	return val;  } -static int test_str(struct event_format *event, struct filter_arg *arg, +static int test_str(struct tep_event_format *event, struct tep_filter_arg *arg,  		    struct tep_record *record, enum tep_errno *err)  {  	const char *val; @@ -1918,17 +1919,17 @@ static int test_str(struct event_format *event, struct filter_arg *arg,  		val = get_field_str(arg, record);  	switch (arg->str.type) { -	case FILTER_CMP_MATCH: +	case TEP_FILTER_CMP_MATCH:  		return strcmp(val, arg->str.val) == 0; -	case FILTER_CMP_NOT_MATCH: +	case TEP_FILTER_CMP_NOT_MATCH:  		return strcmp(val, arg->str.val) != 0; -	case FILTER_CMP_REGEX: +	case TEP_FILTER_CMP_REGEX:  		/* Returns zero on match */  		return !regexec(&arg->str.reg, val, 0, NULL, 0); -	case FILTER_CMP_NOT_REGEX: +	case TEP_FILTER_CMP_NOT_REGEX:  		return regexec(&arg->str.reg, val, 0, NULL, 0);  	default: @@ -1938,19 +1939,19 @@ static int test_str(struct event_format *event, struct filter_arg *arg,  	}  } -static int test_op(struct event_format *event, struct filter_arg *arg, +static int test_op(struct tep_event_format *event, struct tep_filter_arg *arg,  		   struct tep_record *record, enum tep_errno *err)  {  	switch (arg->op.type) { -	case FILTER_OP_AND: +	case TEP_FILTER_OP_AND:  		return test_filter(event, arg->op.left, record, err) &&  			test_filter(event, arg->op.right, record, err); -	case FILTER_OP_OR: +	case TEP_FILTER_OP_OR:  		return test_filter(event, arg->op.left, record, err) ||  			test_filter(event, arg->op.right, record, err); -	case FILTER_OP_NOT: +	case TEP_FILTER_OP_NOT:  		return !test_filter(event, arg->op.right, record, err);  	default: @@ -1960,7 +1961,7 @@ static int test_op(struct event_format *event, struct filter_arg *arg,  	}  } -static int test_filter(struct event_format *event, struct filter_arg *arg, +static int test_filter(struct tep_event_format *event, struct tep_filter_arg *arg,  		       struct tep_record *record, enum tep_errno *err)  {  	if (*err) { @@ -1971,22 +1972,22 @@ static int test_filter(struct event_format *event, struct filter_arg *arg,  	}  	switch (arg->type) { -	case FILTER_ARG_BOOLEAN: +	case TEP_FILTER_ARG_BOOLEAN:  		/* easy case */  		return arg->boolean.value; -	case FILTER_ARG_OP: +	case TEP_FILTER_ARG_OP:  		return test_op(event, arg, record, err); -	case FILTER_ARG_NUM: +	case TEP_FILTER_ARG_NUM:  		return test_num(event, arg, record, err); -	case FILTER_ARG_STR: +	case TEP_FILTER_ARG_STR:  		return test_str(event, arg, record, err); -	case FILTER_ARG_EXP: -	case FILTER_ARG_VALUE: -	case FILTER_ARG_FIELD: +	case TEP_FILTER_ARG_EXP: +	case TEP_FILTER_ARG_VALUE: +	case TEP_FILTER_ARG_FIELD:  		/*  		 * Expressions, fields and values evaluate  		 * to true if they return non zero @@ -2008,9 +2009,9 @@ static int test_filter(struct event_format *event, struct filter_arg *arg,   * Returns 1 if filter found for @event_id   *   otherwise 0;   */ -int tep_event_filtered(struct event_filter *filter, int event_id) +int tep_event_filtered(struct tep_event_filter *filter, int event_id)  { -	struct filter_type *filter_type; +	struct tep_filter_type *filter_type;  	if (!filter->filters)  		return 0; @@ -2032,11 +2033,11 @@ int tep_event_filtered(struct event_filter *filter, int event_id)   * NO_FILTER - if no filters exist   * otherwise - error occurred during test   */ -enum tep_errno tep_filter_match(struct event_filter *filter, +enum tep_errno tep_filter_match(struct tep_event_filter *filter,  				struct tep_record *record)  {  	struct tep_handle *pevent = filter->pevent; -	struct filter_type *filter_type; +	struct tep_filter_type *filter_type;  	int event_id;  	int ret;  	enum tep_errno err = 0; @@ -2059,7 +2060,7 @@ enum tep_errno tep_filter_match(struct event_filter *filter,  	return ret ? TEP_ERRNO__FILTER_MATCH : TEP_ERRNO__FILTER_MISS;  } -static char *op_to_str(struct event_filter *filter, struct filter_arg *arg) +static char *op_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg)  {  	char *str = NULL;  	char *left = NULL; @@ -2070,10 +2071,10 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)  	int val;  	switch (arg->op.type) { -	case FILTER_OP_AND: +	case TEP_FILTER_OP_AND:  		op = "&&";  		/* fall through */ -	case FILTER_OP_OR: +	case TEP_FILTER_OP_OR:  		if (!op)  			op = "||"; @@ -2094,8 +2095,8 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)  			right_val = 0;  		if (left_val >= 0) { -			if ((arg->op.type == FILTER_OP_AND && !left_val) || -			    (arg->op.type == FILTER_OP_OR && left_val)) { +			if ((arg->op.type == TEP_FILTER_OP_AND && !left_val) || +			    (arg->op.type == TEP_FILTER_OP_OR && left_val)) {  				/* Just return left value */  				str = left;  				left = NULL; @@ -2105,10 +2106,10 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)  				/* just evaluate this. */  				val = 0;  				switch (arg->op.type) { -				case FILTER_OP_AND: +				case TEP_FILTER_OP_AND:  					val = left_val && right_val;  					break; -				case FILTER_OP_OR: +				case TEP_FILTER_OP_OR:  					val = left_val || right_val;  					break;  				default: @@ -2119,8 +2120,8 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)  			}  		}  		if (right_val >= 0) { -			if ((arg->op.type == FILTER_OP_AND && !right_val) || -			    (arg->op.type == FILTER_OP_OR && right_val)) { +			if ((arg->op.type == TEP_FILTER_OP_AND && !right_val) || +			    (arg->op.type == TEP_FILTER_OP_OR && right_val)) {  				/* Just return right value */  				str = right;  				right = NULL; @@ -2135,7 +2136,7 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)  		asprintf(&str, "(%s) %s (%s)", left, op, right);  		break; -	case FILTER_OP_NOT: +	case TEP_FILTER_OP_NOT:  		op = "!";  		right = arg_to_str(filter, arg->op.right);  		if (!right) @@ -2163,7 +2164,7 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)  	return str;  } -static char *val_to_str(struct event_filter *filter, struct filter_arg *arg) +static char *val_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg)  {  	char *str = NULL; @@ -2172,12 +2173,12 @@ static char *val_to_str(struct event_filter *filter, struct filter_arg *arg)  	return str;  } -static char *field_to_str(struct event_filter *filter, struct filter_arg *arg) +static char *field_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg)  {  	return strdup(arg->field.field->name);  } -static char *exp_to_str(struct event_filter *filter, struct filter_arg *arg) +static char *exp_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg)  {  	char *lstr;  	char *rstr; @@ -2190,34 +2191,34 @@ static char *exp_to_str(struct event_filter *filter, struct filter_arg *arg)  		goto out;  	switch (arg->exp.type) { -	case FILTER_EXP_ADD: +	case TEP_FILTER_EXP_ADD:  		op = "+";  		break; -	case FILTER_EXP_SUB: +	case TEP_FILTER_EXP_SUB:  		op = "-";  		break; -	case FILTER_EXP_MUL: +	case TEP_FILTER_EXP_MUL:  		op = "*";  		break; -	case FILTER_EXP_DIV: +	case TEP_FILTER_EXP_DIV:  		op = "/";  		break; -	case FILTER_EXP_MOD: +	case TEP_FILTER_EXP_MOD:  		op = "%";  		break; -	case FILTER_EXP_RSHIFT: +	case TEP_FILTER_EXP_RSHIFT:  		op = ">>";  		break; -	case FILTER_EXP_LSHIFT: +	case TEP_FILTER_EXP_LSHIFT:  		op = "<<";  		break; -	case FILTER_EXP_AND: +	case TEP_FILTER_EXP_AND:  		op = "&";  		break; -	case FILTER_EXP_OR: +	case TEP_FILTER_EXP_OR:  		op = "|";  		break; -	case FILTER_EXP_XOR: +	case TEP_FILTER_EXP_XOR:  		op = "^";  		break;  	default: @@ -2233,7 +2234,7 @@ out:  	return str;  } -static char *num_to_str(struct event_filter *filter, struct filter_arg *arg) +static char *num_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg)  {  	char *lstr;  	char *rstr; @@ -2246,26 +2247,26 @@ static char *num_to_str(struct event_filter *filter, struct filter_arg *arg)  		goto out;  	switch (arg->num.type) { -	case FILTER_CMP_EQ: +	case TEP_FILTER_CMP_EQ:  		op = "==";  		/* fall through */ -	case FILTER_CMP_NE: +	case TEP_FILTER_CMP_NE:  		if (!op)  			op = "!=";  		/* fall through */ -	case FILTER_CMP_GT: +	case TEP_FILTER_CMP_GT:  		if (!op)  			op = ">";  		/* fall through */ -	case FILTER_CMP_LT: +	case TEP_FILTER_CMP_LT:  		if (!op)  			op = "<";  		/* fall through */ -	case FILTER_CMP_GE: +	case TEP_FILTER_CMP_GE:  		if (!op)  			op = ">=";  		/* fall through */ -	case FILTER_CMP_LE: +	case TEP_FILTER_CMP_LE:  		if (!op)  			op = "<="; @@ -2283,24 +2284,24 @@ out:  	return str;  } -static char *str_to_str(struct event_filter *filter, struct filter_arg *arg) +static char *str_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg)  {  	char *str = NULL;  	char *op = NULL;  	switch (arg->str.type) { -	case FILTER_CMP_MATCH: +	case TEP_FILTER_CMP_MATCH:  		op = "==";  		/* fall through */ -	case FILTER_CMP_NOT_MATCH: +	case TEP_FILTER_CMP_NOT_MATCH:  		if (!op)  			op = "!=";  		/* fall through */ -	case FILTER_CMP_REGEX: +	case TEP_FILTER_CMP_REGEX:  		if (!op)  			op = "=~";  		/* fall through */ -	case FILTER_CMP_NOT_REGEX: +	case TEP_FILTER_CMP_NOT_REGEX:  		if (!op)  			op = "!~"; @@ -2315,31 +2316,31 @@ static char *str_to_str(struct event_filter *filter, struct filter_arg *arg)  	return str;  } -static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg) +static char *arg_to_str(struct tep_event_filter *filter, struct tep_filter_arg *arg)  {  	char *str = NULL;  	switch (arg->type) { -	case FILTER_ARG_BOOLEAN: +	case TEP_FILTER_ARG_BOOLEAN:  		asprintf(&str, arg->boolean.value ? "TRUE" : "FALSE");  		return str; -	case FILTER_ARG_OP: +	case TEP_FILTER_ARG_OP:  		return op_to_str(filter, arg); -	case FILTER_ARG_NUM: +	case TEP_FILTER_ARG_NUM:  		return num_to_str(filter, arg); -	case FILTER_ARG_STR: +	case TEP_FILTER_ARG_STR:  		return str_to_str(filter, arg); -	case FILTER_ARG_VALUE: +	case TEP_FILTER_ARG_VALUE:  		return val_to_str(filter, arg); -	case FILTER_ARG_FIELD: +	case TEP_FILTER_ARG_FIELD:  		return field_to_str(filter, arg); -	case FILTER_ARG_EXP: +	case TEP_FILTER_ARG_EXP:  		return exp_to_str(filter, arg);  	default: @@ -2359,9 +2360,9 @@ static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg)   *  NULL is returned if no filter is found or allocation failed.   */  char * -tep_filter_make_string(struct event_filter *filter, int event_id) +tep_filter_make_string(struct tep_event_filter *filter, int event_id)  { -	struct filter_type *filter_type; +	struct tep_filter_type *filter_type;  	if (!filter->filters)  		return NULL; @@ -2383,10 +2384,10 @@ tep_filter_make_string(struct event_filter *filter, int event_id)   *  1 if the two filters hold the same content.   *  0 if they do not.   */ -int tep_filter_compare(struct event_filter *filter1, struct event_filter *filter2) +int tep_filter_compare(struct tep_event_filter *filter1, struct tep_event_filter *filter2)  { -	struct filter_type *filter_type1; -	struct filter_type *filter_type2; +	struct tep_filter_type *filter_type1; +	struct tep_filter_type *filter_type2;  	char *str1, *str2;  	int result;  	int i; @@ -2409,8 +2410,8 @@ int tep_filter_compare(struct event_filter *filter1, struct event_filter *filter  		if (filter_type1->filter->type != filter_type2->filter->type)  			break;  		switch (filter_type1->filter->type) { -		case FILTER_TRIVIAL_FALSE: -		case FILTER_TRIVIAL_TRUE: +		case TEP_FILTER_TRIVIAL_FALSE: +		case TEP_FILTER_TRIVIAL_TRUE:  			/* trivial types just need the type compared */  			continue;  		default: diff --git a/tools/lib/traceevent/plugin_function.c b/tools/lib/traceevent/plugin_function.c index 424747475d37..528acc75d81a 100644 --- a/tools/lib/traceevent/plugin_function.c +++ b/tools/lib/traceevent/plugin_function.c @@ -23,6 +23,7 @@  #include "event-parse.h"  #include "event-utils.h" +#include "trace-seq.h"  static struct func_stack {  	int size; @@ -123,7 +124,7 @@ static int add_and_get_index(const char *parent, const char *child, int cpu)  }  static int function_handler(struct trace_seq *s, struct tep_record *record, -			    struct event_format *event, void *context) +			    struct tep_event_format *event, void *context)  {  	struct tep_handle *pevent = event->pevent;  	unsigned long long function; diff --git a/tools/lib/traceevent/plugin_hrtimer.c b/tools/lib/traceevent/plugin_hrtimer.c index b43bfec565d8..9aa05b4ca811 100644 --- a/tools/lib/traceevent/plugin_hrtimer.c +++ b/tools/lib/traceevent/plugin_hrtimer.c @@ -23,10 +23,11 @@  #include <string.h>  #include "event-parse.h" +#include "trace-seq.h"  static int timer_expire_handler(struct trace_seq *s,  				struct tep_record *record, -				struct event_format *event, void *context) +				struct tep_event_format *event, void *context)  {  	trace_seq_printf(s, "hrtimer="); @@ -46,7 +47,7 @@ static int timer_expire_handler(struct trace_seq *s,  static int timer_start_handler(struct trace_seq *s,  			       struct tep_record *record, -			       struct event_format *event, void *context) +			       struct tep_event_format *event, void *context)  {  	trace_seq_printf(s, "hrtimer="); diff --git a/tools/lib/traceevent/plugin_jbd2.c b/tools/lib/traceevent/plugin_jbd2.c index 45a9acd19640..a5e34135dd6a 100644 --- a/tools/lib/traceevent/plugin_jbd2.c +++ b/tools/lib/traceevent/plugin_jbd2.c @@ -22,6 +22,7 @@  #include <string.h>  #include "event-parse.h" +#include "trace-seq.h"  #define MINORBITS	20  #define MINORMASK	((1U << MINORBITS) - 1) diff --git a/tools/lib/traceevent/plugin_kmem.c b/tools/lib/traceevent/plugin_kmem.c index 73966b05abce..1beb4eaddfdf 100644 --- a/tools/lib/traceevent/plugin_kmem.c +++ b/tools/lib/traceevent/plugin_kmem.c @@ -22,11 +22,12 @@  #include <string.h>  #include "event-parse.h" +#include "trace-seq.h"  static int call_site_handler(struct trace_seq *s, struct tep_record *record, -			     struct event_format *event, void *context) +			     struct tep_event_format *event, void *context)  { -	struct format_field *field; +	struct tep_format_field *field;  	unsigned long long val, addr;  	void *data = record->data;  	const char *func; diff --git a/tools/lib/traceevent/plugin_kvm.c b/tools/lib/traceevent/plugin_kvm.c index 1d0d15906225..d13c22846fa9 100644 --- a/tools/lib/traceevent/plugin_kvm.c +++ b/tools/lib/traceevent/plugin_kvm.c @@ -23,6 +23,7 @@  #include <stdint.h>  #include "event-parse.h" +#include "trace-seq.h"  #ifdef HAVE_UDIS86 @@ -248,7 +249,7 @@ static const char *find_exit_reason(unsigned isa, int val)  }  static int print_exit_reason(struct trace_seq *s, struct tep_record *record, -			     struct event_format *event, const char *field) +			     struct tep_event_format *event, const char *field)  {  	unsigned long long isa;  	unsigned long long val; @@ -269,7 +270,7 @@ static int print_exit_reason(struct trace_seq *s, struct tep_record *record,  }  static int kvm_exit_handler(struct trace_seq *s, struct tep_record *record, -			    struct event_format *event, void *context) +			    struct tep_event_format *event, void *context)  {  	unsigned long long info1 = 0, info2 = 0; @@ -292,7 +293,7 @@ static int kvm_exit_handler(struct trace_seq *s, struct tep_record *record,  static int kvm_emulate_insn_handler(struct trace_seq *s,  				    struct tep_record *record, -				    struct event_format *event, void *context) +				    struct tep_event_format *event, void *context)  {  	unsigned long long rip, csbase, len, flags, failed;  	int llen; @@ -331,7 +332,7 @@ static int kvm_emulate_insn_handler(struct trace_seq *s,  static int kvm_nested_vmexit_inject_handler(struct trace_seq *s, struct tep_record *record, -					    struct event_format *event, void *context) +					    struct tep_event_format *event, void *context)  {  	if (print_exit_reason(s, record, event, "exit_code") < 0)  		return -1; @@ -345,7 +346,7 @@ static int kvm_nested_vmexit_inject_handler(struct trace_seq *s, struct tep_reco  }  static int kvm_nested_vmexit_handler(struct trace_seq *s, struct tep_record *record, -				     struct event_format *event, void *context) +				     struct tep_event_format *event, void *context)  {  	tep_print_num_field(s, "rip %llx ", event, "rip", record, 1); @@ -371,7 +372,7 @@ union kvm_mmu_page_role {  };  static int kvm_mmu_print_role(struct trace_seq *s, struct tep_record *record, -			      struct event_format *event, void *context) +			      struct tep_event_format *event, void *context)  {  	unsigned long long val;  	static const char *access_str[] = { @@ -418,7 +419,7 @@ static int kvm_mmu_print_role(struct trace_seq *s, struct tep_record *record,  static int kvm_mmu_get_page_handler(struct trace_seq *s,  				    struct tep_record *record, -				    struct event_format *event, void *context) +				    struct tep_event_format *event, void *context)  {  	unsigned long long val; diff --git a/tools/lib/traceevent/plugin_mac80211.c b/tools/lib/traceevent/plugin_mac80211.c index de50a5316203..da3855e7b86f 100644 --- a/tools/lib/traceevent/plugin_mac80211.c +++ b/tools/lib/traceevent/plugin_mac80211.c @@ -22,13 +22,14 @@  #include <string.h>  #include "event-parse.h" +#include "trace-seq.h"  #define INDENT 65 -static void print_string(struct trace_seq *s, struct event_format *event, +static void print_string(struct trace_seq *s, struct tep_event_format *event,  			 const char *name, const void *data)  { -	struct format_field *f = tep_find_field(event, name); +	struct tep_format_field *f = tep_find_field(event, name);  	int offset;  	int length; @@ -59,7 +60,7 @@ static void print_string(struct trace_seq *s, struct event_format *event,  static int drv_bss_info_changed(struct trace_seq *s,  				struct tep_record *record, -				struct event_format *event, void *context) +				struct tep_event_format *event, void *context)  {  	void *data = record->data; diff --git a/tools/lib/traceevent/plugin_sched_switch.c b/tools/lib/traceevent/plugin_sched_switch.c index eecb4bd95c11..77882272672f 100644 --- a/tools/lib/traceevent/plugin_sched_switch.c +++ b/tools/lib/traceevent/plugin_sched_switch.c @@ -22,6 +22,7 @@  #include <string.h>  #include "event-parse.h" +#include "trace-seq.h"  static void write_state(struct trace_seq *s, int val)  { @@ -44,7 +45,7 @@ static void write_state(struct trace_seq *s, int val)  		trace_seq_putc(s, 'R');  } -static void write_and_save_comm(struct format_field *field, +static void write_and_save_comm(struct tep_format_field *field,  				struct tep_record *record,  				struct trace_seq *s, int pid)  { @@ -66,9 +67,9 @@ static void write_and_save_comm(struct format_field *field,  static int sched_wakeup_handler(struct trace_seq *s,  				struct tep_record *record, -				struct event_format *event, void *context) +				struct tep_event_format *event, void *context)  { -	struct format_field *field; +	struct tep_format_field *field;  	unsigned long long val;  	if (tep_get_field_val(s, event, "pid", record, &val, 1)) @@ -95,9 +96,9 @@ static int sched_wakeup_handler(struct trace_seq *s,  static int sched_switch_handler(struct trace_seq *s,  				struct tep_record *record, -				struct event_format *event, void *context) +				struct tep_event_format *event, void *context)  { -	struct format_field *field; +	struct tep_format_field *field;  	unsigned long long val;  	if (tep_get_field_val(s, event, "prev_pid", record, &val, 1)) diff --git a/tools/lib/traceevent/plugin_scsi.c b/tools/lib/traceevent/plugin_scsi.c index 5ec346f6b842..4eba25cc1431 100644 --- a/tools/lib/traceevent/plugin_scsi.c +++ b/tools/lib/traceevent/plugin_scsi.c @@ -3,6 +3,7 @@  #include <string.h>  #include <inttypes.h>  #include "event-parse.h" +#include "trace-seq.h"  typedef unsigned long sector_t;  typedef uint64_t u64; diff --git a/tools/lib/traceevent/plugin_xen.c b/tools/lib/traceevent/plugin_xen.c index b2acbd6e9c86..bc0496e4c296 100644 --- a/tools/lib/traceevent/plugin_xen.c +++ b/tools/lib/traceevent/plugin_xen.c @@ -3,6 +3,7 @@  #include <stdlib.h>  #include <string.h>  #include "event-parse.h" +#include "trace-seq.h"  #define __HYPERVISOR_set_trap_table			0  #define __HYPERVISOR_mmu_update				1 diff --git a/tools/lib/traceevent/tep_strerror.c b/tools/lib/traceevent/tep_strerror.c new file mode 100644 index 000000000000..4ac26445b2f6 --- /dev/null +++ b/tools/lib/traceevent/tep_strerror.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: LGPL-2.1 +#undef _GNU_SOURCE +#include <string.h> +#include <stdio.h> + +#include "event-parse.h" + +#undef _PE +#define _PE(code, str) str +static const char * const tep_error_str[] = { +	TEP_ERRORS +}; +#undef _PE + +/* + * The tools so far have been using the strerror_r() GNU variant, that returns + * a string, be it the buffer passed or something else. + * + * But that, besides being tricky in cases where we expect that the function + * using strerror_r() returns the error formatted in a provided buffer (we have + * to check if it returned something else and copy that instead), breaks the + * build on systems not using glibc, like Alpine Linux, where musl libc is + * used. + * + * So, introduce yet another wrapper, str_error_r(), that has the GNU + * interface, but uses the portable XSI variant of strerror_r(), so that users + * rest asured that the provided buffer is used and it is what is returned. + */ +int tep_strerror(struct tep_handle *tep __maybe_unused, +		 enum tep_errno errnum, char *buf, size_t buflen) +{ +	const char *msg; +	int idx; + +	if (!buflen) +		return 0; + +	if (errnum >= 0) { +		int err = strerror_r(errnum, buf, buflen); +		buf[buflen - 1] = 0; +		return err; +	} + +	if (errnum <= __TEP_ERRNO__START || +	    errnum >= __TEP_ERRNO__END) +		return -1; + +	idx = errnum - __TEP_ERRNO__START - 1; +	msg = tep_error_str[idx]; +	snprintf(buf, buflen, "%s", msg); + +	return 0; +} diff --git a/tools/lib/traceevent/trace-seq.c b/tools/lib/traceevent/trace-seq.c index e3bac4543d3b..8ff1d55954d1 100644 --- a/tools/lib/traceevent/trace-seq.c +++ b/tools/lib/traceevent/trace-seq.c @@ -3,6 +3,8 @@   * Copyright (C) 2009 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>   *   */ +#include "trace-seq.h" +  #include <stdio.h>  #include <stdlib.h>  #include <string.h> diff --git a/tools/lib/traceevent/trace-seq.h b/tools/lib/traceevent/trace-seq.h new file mode 100644 index 000000000000..d68ec69f8d1a --- /dev/null +++ b/tools/lib/traceevent/trace-seq.h @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: LGPL-2.1 +/* + * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> + * + */ + +#ifndef _TRACE_SEQ_H +#define _TRACE_SEQ_H + +#include <stdarg.h> +#include <stdio.h> + +/* ----------------------- trace_seq ----------------------- */ + +#ifndef TRACE_SEQ_BUF_SIZE +#define TRACE_SEQ_BUF_SIZE 4096 +#endif + +enum trace_seq_fail { +	TRACE_SEQ__GOOD, +	TRACE_SEQ__BUFFER_POISONED, +	TRACE_SEQ__MEM_ALLOC_FAILED, +}; + +/* + * Trace sequences are used to allow a function to call several other functions + * to create a string of data to use (up to a max of PAGE_SIZE). + */ + +struct trace_seq { +	char			*buffer; +	unsigned int		buffer_size; +	unsigned int		len; +	unsigned int		readpos; +	enum trace_seq_fail	state; +}; + +void trace_seq_init(struct trace_seq *s); +void trace_seq_reset(struct trace_seq *s); +void trace_seq_destroy(struct trace_seq *s); + +extern int trace_seq_printf(struct trace_seq *s, const char *fmt, ...) +	__attribute__ ((format (printf, 2, 3))); +extern int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args) +	__attribute__ ((format (printf, 2, 0))); + +extern int trace_seq_puts(struct trace_seq *s, const char *str); +extern int trace_seq_putc(struct trace_seq *s, unsigned char c); + +extern void trace_seq_terminate(struct trace_seq *s); + +extern int trace_seq_do_fprintf(struct trace_seq *s, FILE *fp); +extern int trace_seq_do_printf(struct trace_seq *s); + +#endif /* _TRACE_SEQ_H */  | 
