brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · c2a579c Raw
82 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * code tagging framework4 */5#ifndef _LINUX_CODETAG_H6#define _LINUX_CODETAG_H7 8#include <linux/types.h>9 10struct codetag_iterator;11struct codetag_type;12struct codetag_module;13struct seq_buf;14struct module;15 16/*17 * An instance of this structure is created in a special ELF section at every18 * code location being tagged.  At runtime, the special section is treated as19 * an array of these.20 */21struct codetag {22	unsigned int flags; /* used in later patches */23	unsigned int lineno;24	const char *modname;25	const char *function;26	const char *filename;27} __aligned(8);28 29union codetag_ref {30	struct codetag *ct;31};32 33struct codetag_type_desc {34	const char *section;35	size_t tag_size;36	void (*module_load)(struct codetag_type *cttype,37			    struct codetag_module *cmod);38	bool (*module_unload)(struct codetag_type *cttype,39			      struct codetag_module *cmod);40};41 42struct codetag_iterator {43	struct codetag_type *cttype;44	struct codetag_module *cmod;45	unsigned long mod_id;46	struct codetag *ct;47};48 49#ifdef MODULE50#define CT_MODULE_NAME KBUILD_MODNAME51#else52#define CT_MODULE_NAME NULL53#endif54 55#define CODE_TAG_INIT {					\56	.modname	= CT_MODULE_NAME,		\57	.function	= __func__,			\58	.filename	= __FILE__,			\59	.lineno		= __LINE__,			\60	.flags		= 0,				\61}62 63void codetag_lock_module_list(struct codetag_type *cttype, bool lock);64bool codetag_trylock_module_list(struct codetag_type *cttype);65struct codetag_iterator codetag_get_ct_iter(struct codetag_type *cttype);66struct codetag *codetag_next_ct(struct codetag_iterator *iter);67 68void codetag_to_text(struct seq_buf *out, struct codetag *ct);69 70struct codetag_type *71codetag_register_type(const struct codetag_type_desc *desc);72 73#if defined(CONFIG_CODE_TAGGING) && defined(CONFIG_MODULES)74void codetag_load_module(struct module *mod);75bool codetag_unload_module(struct module *mod);76#else77static inline void codetag_load_module(struct module *mod) {}78static inline bool codetag_unload_module(struct module *mod) { return true; }79#endif80 81#endif /* _LINUX_CODETAG_H */82