Linux Audio

Check our new training course

Loading...
   1// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
   2
   3/*
   4 * BTF-to-C type converter.
   5 *
   6 * Copyright (c) 2019 Facebook
   7 */
   8
   9#include <stdbool.h>
  10#include <stddef.h>
  11#include <stdlib.h>
  12#include <string.h>
  13#include <ctype.h>
  14#include <endian.h>
  15#include <errno.h>
  16#include <limits.h>
  17#include <linux/err.h>
  18#include <linux/btf.h>
  19#include <linux/kernel.h>
  20#include "btf.h"
  21#include "hashmap.h"
  22#include "libbpf.h"
  23#include "libbpf_internal.h"
  24
  25static const char PREFIXES[] = "\t\t\t\t\t\t\t\t\t\t\t\t\t";
  26static const size_t PREFIX_CNT = sizeof(PREFIXES) - 1;
  27
  28static const char *pfx(int lvl)
  29{
  30	return lvl >= PREFIX_CNT ? PREFIXES : &PREFIXES[PREFIX_CNT - lvl];
  31}
  32
  33enum btf_dump_type_order_state {
  34	NOT_ORDERED,
  35	ORDERING,
  36	ORDERED,
  37};
  38
  39enum btf_dump_type_emit_state {
  40	NOT_EMITTED,
  41	EMITTING,
  42	EMITTED,
  43};
  44
  45/* per-type auxiliary state */
  46struct btf_dump_type_aux_state {
  47	/* topological sorting state */
  48	enum btf_dump_type_order_state order_state: 2;
  49	/* emitting state used to determine the need for forward declaration */
  50	enum btf_dump_type_emit_state emit_state: 2;
  51	/* whether forward declaration was already emitted */
  52	__u8 fwd_emitted: 1;
  53	/* whether unique non-duplicate name was already assigned */
  54	__u8 name_resolved: 1;
  55	/* whether type is referenced from any other type */
  56	__u8 referenced: 1;
  57};
  58
  59/* indent string length; one indent string is added for each indent level */
  60#define BTF_DATA_INDENT_STR_LEN			32
  61
  62/*
  63 * Common internal data for BTF type data dump operations.
  64 */
  65struct btf_dump_data {
  66	const void *data_end;		/* end of valid data to show */
  67	bool compact;
  68	bool skip_names;
  69	bool emit_zeroes;
  70	__u8 indent_lvl;	/* base indent level */
  71	char indent_str[BTF_DATA_INDENT_STR_LEN];
  72	/* below are used during iteration */
  73	int depth;
  74	bool is_array_member;
  75	bool is_array_terminated;
  76	bool is_array_char;
  77};
  78
  79struct btf_dump {
  80	const struct btf *btf;
 
  81	btf_dump_printf_fn_t printf_fn;
  82	void *cb_ctx;
  83	int ptr_sz;
  84	bool strip_mods;
  85	bool skip_anon_defs;
  86	int last_id;
  87
  88	/* per-type auxiliary state */
  89	struct btf_dump_type_aux_state *type_states;
  90	size_t type_states_cap;
  91	/* per-type optional cached unique name, must be freed, if present */
  92	const char **cached_names;
  93	size_t cached_names_cap;
  94
  95	/* topo-sorted list of dependent type definitions */
  96	__u32 *emit_queue;
  97	int emit_queue_cap;
  98	int emit_queue_cnt;
  99
 100	/*
 101	 * stack of type declarations (e.g., chain of modifiers, arrays,
 102	 * funcs, etc)
 103	 */
 104	__u32 *decl_stack;
 105	int decl_stack_cap;
 106	int decl_stack_cnt;
 107
 108	/* maps struct/union/enum name to a number of name occurrences */
 109	struct hashmap *type_names;
 110	/*
 111	 * maps typedef identifiers and enum value names to a number of such
 112	 * name occurrences
 113	 */
 114	struct hashmap *ident_names;
 115	/*
 116	 * data for typed display; allocated if needed.
 117	 */
 118	struct btf_dump_data *typed_dump;
 119};
 120
 121static size_t str_hash_fn(long key, void *ctx)
 122{
 123	return str_hash((void *)key);
 124}
 125
 126static bool str_equal_fn(long a, long b, void *ctx)
 127{
 128	return strcmp((void *)a, (void *)b) == 0;
 129}
 130
 131static const char *btf_name_of(const struct btf_dump *d, __u32 name_off)
 132{
 133	return btf__name_by_offset(d->btf, name_off);
 134}
 135
 136static void btf_dump_printf(const struct btf_dump *d, const char *fmt, ...)
 137{
 138	va_list args;
 139
 140	va_start(args, fmt);
 141	d->printf_fn(d->cb_ctx, fmt, args);
 142	va_end(args);
 143}
 144
 145static int btf_dump_mark_referenced(struct btf_dump *d);
 146static int btf_dump_resize(struct btf_dump *d);
 147
 148struct btf_dump *btf_dump__new(const struct btf *btf,
 149			       btf_dump_printf_fn_t printf_fn,
 150			       void *ctx,
 151			       const struct btf_dump_opts *opts)
 152{
 153	struct btf_dump *d;
 154	int err;
 155
 156	if (!OPTS_VALID(opts, btf_dump_opts))
 157		return libbpf_err_ptr(-EINVAL);
 158
 159	if (!printf_fn)
 160		return libbpf_err_ptr(-EINVAL);
 161
 162	d = calloc(1, sizeof(struct btf_dump));
 163	if (!d)
 164		return libbpf_err_ptr(-ENOMEM);
 165
 166	d->btf = btf;
 
 167	d->printf_fn = printf_fn;
 168	d->cb_ctx = ctx;
 169	d->ptr_sz = btf__pointer_size(btf) ? : sizeof(void *);
 170
 171	d->type_names = hashmap__new(str_hash_fn, str_equal_fn, NULL);
 172	if (IS_ERR(d->type_names)) {
 173		err = PTR_ERR(d->type_names);
 174		d->type_names = NULL;
 175		goto err;
 176	}
 177	d->ident_names = hashmap__new(str_hash_fn, str_equal_fn, NULL);
 178	if (IS_ERR(d->ident_names)) {
 179		err = PTR_ERR(d->ident_names);
 180		d->ident_names = NULL;
 181		goto err;
 182	}
 183
 184	err = btf_dump_resize(d);
 185	if (err)
 186		goto err;
 187
 188	return d;
 189err:
 190	btf_dump__free(d);
 191	return libbpf_err_ptr(err);
 192}
 193
 194static int btf_dump_resize(struct btf_dump *d)
 195{
 196	int err, last_id = btf__type_cnt(d->btf) - 1;
 197
 198	if (last_id <= d->last_id)
 199		return 0;
 200
 201	if (libbpf_ensure_mem((void **)&d->type_states, &d->type_states_cap,
 202			      sizeof(*d->type_states), last_id + 1))
 203		return -ENOMEM;
 204	if (libbpf_ensure_mem((void **)&d->cached_names, &d->cached_names_cap,
 205			      sizeof(*d->cached_names), last_id + 1))
 206		return -ENOMEM;
 207
 208	if (d->last_id == 0) {
 209		/* VOID is special */
 210		d->type_states[0].order_state = ORDERED;
 211		d->type_states[0].emit_state = EMITTED;
 212	}
 213
 214	/* eagerly determine referenced types for anon enums */
 215	err = btf_dump_mark_referenced(d);
 216	if (err)
 217		return err;
 218
 219	d->last_id = last_id;
 220	return 0;
 221}
 222
 223static void btf_dump_free_names(struct hashmap *map)
 224{
 225	size_t bkt;
 226	struct hashmap_entry *cur;
 227
 228	hashmap__for_each_entry(map, cur, bkt)
 229		free((void *)cur->pkey);
 230
 231	hashmap__free(map);
 232}
 233
 234void btf_dump__free(struct btf_dump *d)
 235{
 236	int i;
 237
 238	if (IS_ERR_OR_NULL(d))
 239		return;
 240
 241	free(d->type_states);
 242	if (d->cached_names) {
 243		/* any set cached name is owned by us and should be freed */
 244		for (i = 0; i <= d->last_id; i++) {
 245			if (d->cached_names[i])
 246				free((void *)d->cached_names[i]);
 247		}
 248	}
 249	free(d->cached_names);
 250	free(d->emit_queue);
 251	free(d->decl_stack);
 252	btf_dump_free_names(d->type_names);
 253	btf_dump_free_names(d->ident_names);
 254
 255	free(d);
 256}
 257
 258static int btf_dump_order_type(struct btf_dump *d, __u32 id, bool through_ptr);
 259static void btf_dump_emit_type(struct btf_dump *d, __u32 id, __u32 cont_id);
 260
 261/*
 262 * Dump BTF type in a compilable C syntax, including all the necessary
 263 * dependent types, necessary for compilation. If some of the dependent types
 264 * were already emitted as part of previous btf_dump__dump_type() invocation
 265 * for another type, they won't be emitted again. This API allows callers to
 266 * filter out BTF types according to user-defined criterias and emitted only
 267 * minimal subset of types, necessary to compile everything. Full struct/union
 268 * definitions will still be emitted, even if the only usage is through
 269 * pointer and could be satisfied with just a forward declaration.
 270 *
 271 * Dumping is done in two high-level passes:
 272 *   1. Topologically sort type definitions to satisfy C rules of compilation.
 273 *   2. Emit type definitions in C syntax.
 274 *
 275 * Returns 0 on success; <0, otherwise.
 276 */
 277int btf_dump__dump_type(struct btf_dump *d, __u32 id)
 278{
 279	int err, i;
 280
 281	if (id >= btf__type_cnt(d->btf))
 282		return libbpf_err(-EINVAL);
 283
 284	err = btf_dump_resize(d);
 285	if (err)
 286		return libbpf_err(err);
 287
 288	d->emit_queue_cnt = 0;
 289	err = btf_dump_order_type(d, id, false);
 290	if (err < 0)
 291		return libbpf_err(err);
 292
 293	for (i = 0; i < d->emit_queue_cnt; i++)
 294		btf_dump_emit_type(d, d->emit_queue[i], 0 /*top-level*/);
 295
 296	return 0;
 297}
 298
 299/*
 300 * Mark all types that are referenced from any other type. This is used to
 301 * determine top-level anonymous enums that need to be emitted as an
 302 * independent type declarations.
 303 * Anonymous enums come in two flavors: either embedded in a struct's field
 304 * definition, in which case they have to be declared inline as part of field
 305 * type declaration; or as a top-level anonymous enum, typically used for
 306 * declaring global constants. It's impossible to distinguish between two
 307 * without knowning whether given enum type was referenced from other type:
 308 * top-level anonymous enum won't be referenced by anything, while embedded
 309 * one will.
 310 */
 311static int btf_dump_mark_referenced(struct btf_dump *d)
 312{
 313	int i, j, n = btf__type_cnt(d->btf);
 314	const struct btf_type *t;
 315	__u16 vlen;
 316
 317	for (i = d->last_id + 1; i < n; i++) {
 318		t = btf__type_by_id(d->btf, i);
 319		vlen = btf_vlen(t);
 320
 321		switch (btf_kind(t)) {
 322		case BTF_KIND_INT:
 323		case BTF_KIND_ENUM:
 324		case BTF_KIND_ENUM64:
 325		case BTF_KIND_FWD:
 326		case BTF_KIND_FLOAT:
 327			break;
 328
 329		case BTF_KIND_VOLATILE:
 330		case BTF_KIND_CONST:
 331		case BTF_KIND_RESTRICT:
 332		case BTF_KIND_PTR:
 333		case BTF_KIND_TYPEDEF:
 334		case BTF_KIND_FUNC:
 335		case BTF_KIND_VAR:
 336		case BTF_KIND_DECL_TAG:
 337		case BTF_KIND_TYPE_TAG:
 338			d->type_states[t->type].referenced = 1;
 339			break;
 340
 341		case BTF_KIND_ARRAY: {
 342			const struct btf_array *a = btf_array(t);
 343
 344			d->type_states[a->index_type].referenced = 1;
 345			d->type_states[a->type].referenced = 1;
 346			break;
 347		}
 348		case BTF_KIND_STRUCT:
 349		case BTF_KIND_UNION: {
 350			const struct btf_member *m = btf_members(t);
 351
 352			for (j = 0; j < vlen; j++, m++)
 353				d->type_states[m->type].referenced = 1;
 354			break;
 355		}
 356		case BTF_KIND_FUNC_PROTO: {
 357			const struct btf_param *p = btf_params(t);
 358
 359			for (j = 0; j < vlen; j++, p++)
 360				d->type_states[p->type].referenced = 1;
 361			break;
 362		}
 363		case BTF_KIND_DATASEC: {
 364			const struct btf_var_secinfo *v = btf_var_secinfos(t);
 365
 366			for (j = 0; j < vlen; j++, v++)
 367				d->type_states[v->type].referenced = 1;
 368			break;
 369		}
 370		default:
 371			return -EINVAL;
 372		}
 373	}
 374	return 0;
 375}
 376
 377static int btf_dump_add_emit_queue_id(struct btf_dump *d, __u32 id)
 378{
 379	__u32 *new_queue;
 380	size_t new_cap;
 381
 382	if (d->emit_queue_cnt >= d->emit_queue_cap) {
 383		new_cap = max(16, d->emit_queue_cap * 3 / 2);
 384		new_queue = libbpf_reallocarray(d->emit_queue, new_cap, sizeof(new_queue[0]));
 385		if (!new_queue)
 386			return -ENOMEM;
 387		d->emit_queue = new_queue;
 388		d->emit_queue_cap = new_cap;
 389	}
 390
 391	d->emit_queue[d->emit_queue_cnt++] = id;
 392	return 0;
 393}
 394
 395/*
 396 * Determine order of emitting dependent types and specified type to satisfy
 397 * C compilation rules.  This is done through topological sorting with an
 398 * additional complication which comes from C rules. The main idea for C is
 399 * that if some type is "embedded" into a struct/union, it's size needs to be
 400 * known at the time of definition of containing type. E.g., for:
 401 *
 402 *	struct A {};
 403 *	struct B { struct A x; }
 404 *
 405 * struct A *HAS* to be defined before struct B, because it's "embedded",
 406 * i.e., it is part of struct B layout. But in the following case:
 407 *
 408 *	struct A;
 409 *	struct B { struct A *x; }
 410 *	struct A {};
 411 *
 412 * it's enough to just have a forward declaration of struct A at the time of
 413 * struct B definition, as struct B has a pointer to struct A, so the size of
 414 * field x is known without knowing struct A size: it's sizeof(void *).
 415 *
 416 * Unfortunately, there are some trickier cases we need to handle, e.g.:
 417 *
 418 *	struct A {}; // if this was forward-declaration: compilation error
 419 *	struct B {
 420 *		struct { // anonymous struct
 421 *			struct A y;
 422 *		} *x;
 423 *	};
 424 *
 425 * In this case, struct B's field x is a pointer, so it's size is known
 426 * regardless of the size of (anonymous) struct it points to. But because this
 427 * struct is anonymous and thus defined inline inside struct B, *and* it
 428 * embeds struct A, compiler requires full definition of struct A to be known
 429 * before struct B can be defined. This creates a transitive dependency
 430 * between struct A and struct B. If struct A was forward-declared before
 431 * struct B definition and fully defined after struct B definition, that would
 432 * trigger compilation error.
 433 *
 434 * All this means that while we are doing topological sorting on BTF type
 435 * graph, we need to determine relationships between different types (graph
 436 * nodes):
 437 *   - weak link (relationship) between X and Y, if Y *CAN* be
 438 *   forward-declared at the point of X definition;
 439 *   - strong link, if Y *HAS* to be fully-defined before X can be defined.
 440 *
 441 * The rule is as follows. Given a chain of BTF types from X to Y, if there is
 442 * BTF_KIND_PTR type in the chain and at least one non-anonymous type
 443 * Z (excluding X, including Y), then link is weak. Otherwise, it's strong.
 444 * Weak/strong relationship is determined recursively during DFS traversal and
 445 * is returned as a result from btf_dump_order_type().
 446 *
 447 * btf_dump_order_type() is trying to avoid unnecessary forward declarations,
 448 * but it is not guaranteeing that no extraneous forward declarations will be
 449 * emitted.
 450 *
 451 * To avoid extra work, algorithm marks some of BTF types as ORDERED, when
 452 * it's done with them, but not for all (e.g., VOLATILE, CONST, RESTRICT,
 453 * ARRAY, FUNC_PROTO), as weak/strong semantics for those depends on the
 454 * entire graph path, so depending where from one came to that BTF type, it
 455 * might cause weak or strong ordering. For types like STRUCT/UNION/INT/ENUM,
 456 * once they are processed, there is no need to do it again, so they are
 457 * marked as ORDERED. We can mark PTR as ORDERED as well, as it semi-forces
 458 * weak link, unless subsequent referenced STRUCT/UNION/ENUM is anonymous. But
 459 * in any case, once those are processed, no need to do it again, as the
 460 * result won't change.
 461 *
 462 * Returns:
 463 *   - 1, if type is part of strong link (so there is strong topological
 464 *   ordering requirements);
 465 *   - 0, if type is part of weak link (so can be satisfied through forward
 466 *   declaration);
 467 *   - <0, on error (e.g., unsatisfiable type loop detected).
 468 */
 469static int btf_dump_order_type(struct btf_dump *d, __u32 id, bool through_ptr)
 470{
 471	/*
 472	 * Order state is used to detect strong link cycles, but only for BTF
 473	 * kinds that are or could be an independent definition (i.e.,
 474	 * stand-alone fwd decl, enum, typedef, struct, union). Ptrs, arrays,
 475	 * func_protos, modifiers are just means to get to these definitions.
 476	 * Int/void don't need definitions, they are assumed to be always
 477	 * properly defined.  We also ignore datasec, var, and funcs for now.
 478	 * So for all non-defining kinds, we never even set ordering state,
 479	 * for defining kinds we set ORDERING and subsequently ORDERED if it
 480	 * forms a strong link.
 481	 */
 482	struct btf_dump_type_aux_state *tstate = &d->type_states[id];
 483	const struct btf_type *t;
 484	__u16 vlen;
 485	int err, i;
 486
 487	/* return true, letting typedefs know that it's ok to be emitted */
 488	if (tstate->order_state == ORDERED)
 489		return 1;
 490
 491	t = btf__type_by_id(d->btf, id);
 492
 493	if (tstate->order_state == ORDERING) {
 494		/* type loop, but resolvable through fwd declaration */
 495		if (btf_is_composite(t) && through_ptr && t->name_off != 0)
 496			return 0;
 497		pr_warn("unsatisfiable type cycle, id:[%u]\n", id);
 498		return -ELOOP;
 499	}
 500
 501	switch (btf_kind(t)) {
 502	case BTF_KIND_INT:
 503	case BTF_KIND_FLOAT:
 504		tstate->order_state = ORDERED;
 505		return 0;
 506
 507	case BTF_KIND_PTR:
 508		err = btf_dump_order_type(d, t->type, true);
 509		tstate->order_state = ORDERED;
 510		return err;
 511
 512	case BTF_KIND_ARRAY:
 513		return btf_dump_order_type(d, btf_array(t)->type, false);
 514
 515	case BTF_KIND_STRUCT:
 516	case BTF_KIND_UNION: {
 517		const struct btf_member *m = btf_members(t);
 518		/*
 519		 * struct/union is part of strong link, only if it's embedded
 520		 * (so no ptr in a path) or it's anonymous (so has to be
 521		 * defined inline, even if declared through ptr)
 522		 */
 523		if (through_ptr && t->name_off != 0)
 524			return 0;
 525
 526		tstate->order_state = ORDERING;
 527
 528		vlen = btf_vlen(t);
 529		for (i = 0; i < vlen; i++, m++) {
 530			err = btf_dump_order_type(d, m->type, false);
 531			if (err < 0)
 532				return err;
 533		}
 534
 535		if (t->name_off != 0) {
 536			err = btf_dump_add_emit_queue_id(d, id);
 537			if (err < 0)
 538				return err;
 539		}
 540
 541		tstate->order_state = ORDERED;
 542		return 1;
 543	}
 544	case BTF_KIND_ENUM:
 545	case BTF_KIND_ENUM64:
 546	case BTF_KIND_FWD:
 547		/*
 548		 * non-anonymous or non-referenced enums are top-level
 549		 * declarations and should be emitted. Same logic can be
 550		 * applied to FWDs, it won't hurt anyways.
 551		 */
 552		if (t->name_off != 0 || !tstate->referenced) {
 553			err = btf_dump_add_emit_queue_id(d, id);
 554			if (err)
 555				return err;
 556		}
 557		tstate->order_state = ORDERED;
 558		return 1;
 559
 560	case BTF_KIND_TYPEDEF: {
 561		int is_strong;
 562
 563		is_strong = btf_dump_order_type(d, t->type, through_ptr);
 564		if (is_strong < 0)
 565			return is_strong;
 566
 567		/* typedef is similar to struct/union w.r.t. fwd-decls */
 568		if (through_ptr && !is_strong)
 569			return 0;
 570
 571		/* typedef is always a named definition */
 572		err = btf_dump_add_emit_queue_id(d, id);
 573		if (err)
 574			return err;
 575
 576		d->type_states[id].order_state = ORDERED;
 577		return 1;
 578	}
 579	case BTF_KIND_VOLATILE:
 580	case BTF_KIND_CONST:
 581	case BTF_KIND_RESTRICT:
 582	case BTF_KIND_TYPE_TAG:
 583		return btf_dump_order_type(d, t->type, through_ptr);
 584
 585	case BTF_KIND_FUNC_PROTO: {
 586		const struct btf_param *p = btf_params(t);
 587		bool is_strong;
 588
 589		err = btf_dump_order_type(d, t->type, through_ptr);
 590		if (err < 0)
 591			return err;
 592		is_strong = err > 0;
 593
 594		vlen = btf_vlen(t);
 595		for (i = 0; i < vlen; i++, p++) {
 596			err = btf_dump_order_type(d, p->type, through_ptr);
 597			if (err < 0)
 598				return err;
 599			if (err > 0)
 600				is_strong = true;
 601		}
 602		return is_strong;
 603	}
 604	case BTF_KIND_FUNC:
 605	case BTF_KIND_VAR:
 606	case BTF_KIND_DATASEC:
 607	case BTF_KIND_DECL_TAG:
 608		d->type_states[id].order_state = ORDERED;
 609		return 0;
 610
 611	default:
 612		return -EINVAL;
 613	}
 614}
 615
 616static void btf_dump_emit_missing_aliases(struct btf_dump *d, __u32 id,
 617					  const struct btf_type *t);
 618
 619static void btf_dump_emit_struct_fwd(struct btf_dump *d, __u32 id,
 620				     const struct btf_type *t);
 621static void btf_dump_emit_struct_def(struct btf_dump *d, __u32 id,
 622				     const struct btf_type *t, int lvl);
 623
 624static void btf_dump_emit_enum_fwd(struct btf_dump *d, __u32 id,
 625				   const struct btf_type *t);
 626static void btf_dump_emit_enum_def(struct btf_dump *d, __u32 id,
 627				   const struct btf_type *t, int lvl);
 628
 629static void btf_dump_emit_fwd_def(struct btf_dump *d, __u32 id,
 630				  const struct btf_type *t);
 631
 632static void btf_dump_emit_typedef_def(struct btf_dump *d, __u32 id,
 633				      const struct btf_type *t, int lvl);
 634
 635/* a local view into a shared stack */
 636struct id_stack {
 637	const __u32 *ids;
 638	int cnt;
 639};
 640
 641static void btf_dump_emit_type_decl(struct btf_dump *d, __u32 id,
 642				    const char *fname, int lvl);
 643static void btf_dump_emit_type_chain(struct btf_dump *d,
 644				     struct id_stack *decl_stack,
 645				     const char *fname, int lvl);
 646
 647static const char *btf_dump_type_name(struct btf_dump *d, __u32 id);
 648static const char *btf_dump_ident_name(struct btf_dump *d, __u32 id);
 649static size_t btf_dump_name_dups(struct btf_dump *d, struct hashmap *name_map,
 650				 const char *orig_name);
 651
 652static bool btf_dump_is_blacklisted(struct btf_dump *d, __u32 id)
 653{
 654	const struct btf_type *t = btf__type_by_id(d->btf, id);
 655
 656	/* __builtin_va_list is a compiler built-in, which causes compilation
 657	 * errors, when compiling w/ different compiler, then used to compile
 658	 * original code (e.g., GCC to compile kernel, Clang to use generated
 659	 * C header from BTF). As it is built-in, it should be already defined
 660	 * properly internally in compiler.
 661	 */
 662	if (t->name_off == 0)
 663		return false;
 664	return strcmp(btf_name_of(d, t->name_off), "__builtin_va_list") == 0;
 665}
 666
 667/*
 668 * Emit C-syntax definitions of types from chains of BTF types.
 669 *
 670 * High-level handling of determining necessary forward declarations are handled
 671 * by btf_dump_emit_type() itself, but all nitty-gritty details of emitting type
 672 * declarations/definitions in C syntax  are handled by a combo of
 673 * btf_dump_emit_type_decl()/btf_dump_emit_type_chain() w/ delegation to
 674 * corresponding btf_dump_emit_*_{def,fwd}() functions.
 675 *
 676 * We also keep track of "containing struct/union type ID" to determine when
 677 * we reference it from inside and thus can avoid emitting unnecessary forward
 678 * declaration.
 679 *
 680 * This algorithm is designed in such a way, that even if some error occurs
 681 * (either technical, e.g., out of memory, or logical, i.e., malformed BTF
 682 * that doesn't comply to C rules completely), algorithm will try to proceed
 683 * and produce as much meaningful output as possible.
 684 */
 685static void btf_dump_emit_type(struct btf_dump *d, __u32 id, __u32 cont_id)
 686{
 687	struct btf_dump_type_aux_state *tstate = &d->type_states[id];
 688	bool top_level_def = cont_id == 0;
 689	const struct btf_type *t;
 690	__u16 kind;
 691
 692	if (tstate->emit_state == EMITTED)
 693		return;
 694
 695	t = btf__type_by_id(d->btf, id);
 696	kind = btf_kind(t);
 697
 698	if (tstate->emit_state == EMITTING) {
 699		if (tstate->fwd_emitted)
 700			return;
 701
 702		switch (kind) {
 703		case BTF_KIND_STRUCT:
 704		case BTF_KIND_UNION:
 705			/*
 706			 * if we are referencing a struct/union that we are
 707			 * part of - then no need for fwd declaration
 708			 */
 709			if (id == cont_id)
 710				return;
 711			if (t->name_off == 0) {
 712				pr_warn("anonymous struct/union loop, id:[%u]\n",
 713					id);
 714				return;
 715			}
 716			btf_dump_emit_struct_fwd(d, id, t);
 717			btf_dump_printf(d, ";\n\n");
 718			tstate->fwd_emitted = 1;
 719			break;
 720		case BTF_KIND_TYPEDEF:
 721			/*
 722			 * for typedef fwd_emitted means typedef definition
 723			 * was emitted, but it can be used only for "weak"
 724			 * references through pointer only, not for embedding
 725			 */
 726			if (!btf_dump_is_blacklisted(d, id)) {
 727				btf_dump_emit_typedef_def(d, id, t, 0);
 728				btf_dump_printf(d, ";\n\n");
 729			}
 730			tstate->fwd_emitted = 1;
 731			break;
 732		default:
 733			break;
 734		}
 735
 736		return;
 737	}
 738
 739	switch (kind) {
 740	case BTF_KIND_INT:
 741		/* Emit type alias definitions if necessary */
 742		btf_dump_emit_missing_aliases(d, id, t);
 743
 744		tstate->emit_state = EMITTED;
 745		break;
 746	case BTF_KIND_ENUM:
 747	case BTF_KIND_ENUM64:
 748		if (top_level_def) {
 749			btf_dump_emit_enum_def(d, id, t, 0);
 750			btf_dump_printf(d, ";\n\n");
 751		}
 752		tstate->emit_state = EMITTED;
 753		break;
 754	case BTF_KIND_PTR:
 755	case BTF_KIND_VOLATILE:
 756	case BTF_KIND_CONST:
 757	case BTF_KIND_RESTRICT:
 758	case BTF_KIND_TYPE_TAG:
 759		btf_dump_emit_type(d, t->type, cont_id);
 760		break;
 761	case BTF_KIND_ARRAY:
 762		btf_dump_emit_type(d, btf_array(t)->type, cont_id);
 763		break;
 764	case BTF_KIND_FWD:
 765		btf_dump_emit_fwd_def(d, id, t);
 766		btf_dump_printf(d, ";\n\n");
 767		tstate->emit_state = EMITTED;
 768		break;
 769	case BTF_KIND_TYPEDEF:
 770		tstate->emit_state = EMITTING;
 771		btf_dump_emit_type(d, t->type, id);
 772		/*
 773		 * typedef can server as both definition and forward
 774		 * declaration; at this stage someone depends on
 775		 * typedef as a forward declaration (refers to it
 776		 * through pointer), so unless we already did it,
 777		 * emit typedef as a forward declaration
 778		 */
 779		if (!tstate->fwd_emitted && !btf_dump_is_blacklisted(d, id)) {
 780			btf_dump_emit_typedef_def(d, id, t, 0);
 781			btf_dump_printf(d, ";\n\n");
 782		}
 783		tstate->emit_state = EMITTED;
 784		break;
 785	case BTF_KIND_STRUCT:
 786	case BTF_KIND_UNION:
 787		tstate->emit_state = EMITTING;
 788		/* if it's a top-level struct/union definition or struct/union
 789		 * is anonymous, then in C we'll be emitting all fields and
 790		 * their types (as opposed to just `struct X`), so we need to
 791		 * make sure that all types, referenced from struct/union
 792		 * members have necessary forward-declarations, where
 793		 * applicable
 794		 */
 795		if (top_level_def || t->name_off == 0) {
 796			const struct btf_member *m = btf_members(t);
 797			__u16 vlen = btf_vlen(t);
 798			int i, new_cont_id;
 799
 800			new_cont_id = t->name_off == 0 ? cont_id : id;
 801			for (i = 0; i < vlen; i++, m++)
 802				btf_dump_emit_type(d, m->type, new_cont_id);
 803		} else if (!tstate->fwd_emitted && id != cont_id) {
 804			btf_dump_emit_struct_fwd(d, id, t);
 805			btf_dump_printf(d, ";\n\n");
 806			tstate->fwd_emitted = 1;
 807		}
 808
 809		if (top_level_def) {
 810			btf_dump_emit_struct_def(d, id, t, 0);
 811			btf_dump_printf(d, ";\n\n");
 812			tstate->emit_state = EMITTED;
 813		} else {
 814			tstate->emit_state = NOT_EMITTED;
 815		}
 816		break;
 817	case BTF_KIND_FUNC_PROTO: {
 818		const struct btf_param *p = btf_params(t);
 819		__u16 n = btf_vlen(t);
 820		int i;
 821
 822		btf_dump_emit_type(d, t->type, cont_id);
 823		for (i = 0; i < n; i++, p++)
 824			btf_dump_emit_type(d, p->type, cont_id);
 825
 826		break;
 827	}
 828	default:
 829		break;
 830	}
 831}
 832
 833static bool btf_is_struct_packed(const struct btf *btf, __u32 id,
 834				 const struct btf_type *t)
 835{
 836	const struct btf_member *m;
 837	int max_align = 1, align, i, bit_sz;
 838	__u16 vlen;
 839
 
 
 
 
 
 840	m = btf_members(t);
 841	vlen = btf_vlen(t);
 842	/* all non-bitfield fields have to be naturally aligned */
 843	for (i = 0; i < vlen; i++, m++) {
 844		align = btf__align_of(btf, m->type);
 845		bit_sz = btf_member_bitfield_size(t, i);
 846		if (align && bit_sz == 0 && m->offset % (8 * align) != 0)
 847			return true;
 848		max_align = max(align, max_align);
 849	}
 850	/* size of a non-packed struct has to be a multiple of its alignment */
 851	if (t->size % max_align != 0)
 852		return true;
 853	/*
 854	 * if original struct was marked as packed, but its layout is
 855	 * naturally aligned, we'll detect that it's not packed
 856	 */
 857	return false;
 858}
 859
 860static void btf_dump_emit_bit_padding(const struct btf_dump *d,
 861				      int cur_off, int next_off, int next_align,
 862				      bool in_bitfield, int lvl)
 863{
 864	const struct {
 865		const char *name;
 866		int bits;
 867	} pads[] = {
 868		{"long", d->ptr_sz * 8}, {"int", 32}, {"short", 16}, {"char", 8}
 869	};
 870	int new_off, pad_bits, bits, i;
 871	const char *pad_type;
 872
 873	if (cur_off >= next_off)
 874		return; /* no gap */
 875
 876	/* For filling out padding we want to take advantage of
 877	 * natural alignment rules to minimize unnecessary explicit
 878	 * padding. First, we find the largest type (among long, int,
 879	 * short, or char) that can be used to force naturally aligned
 880	 * boundary. Once determined, we'll use such type to fill in
 881	 * the remaining padding gap. In some cases we can rely on
 882	 * compiler filling some gaps, but sometimes we need to force
 883	 * alignment to close natural alignment with markers like
 884	 * `long: 0` (this is always the case for bitfields).  Note
 885	 * that even if struct itself has, let's say 4-byte alignment
 886	 * (i.e., it only uses up to int-aligned types), using `long:
 887	 * X;` explicit padding doesn't actually change struct's
 888	 * overall alignment requirements, but compiler does take into
 889	 * account that type's (long, in this example) natural
 890	 * alignment requirements when adding implicit padding. We use
 891	 * this fact heavily and don't worry about ruining correct
 892	 * struct alignment requirement.
 893	 */
 894	for (i = 0; i < ARRAY_SIZE(pads); i++) {
 895		pad_bits = pads[i].bits;
 896		pad_type = pads[i].name;
 897
 898		new_off = roundup(cur_off, pad_bits);
 899		if (new_off <= next_off)
 900			break;
 901	}
 902
 903	if (new_off > cur_off && new_off <= next_off) {
 904		/* We need explicit `<type>: 0` aligning mark if next
 905		 * field is right on alignment offset and its
 906		 * alignment requirement is less strict than <type>'s
 907		 * alignment (so compiler won't naturally align to the
 908		 * offset we expect), or if subsequent `<type>: X`,
 909		 * will actually completely fit in the remaining hole,
 910		 * making compiler basically ignore `<type>: X`
 911		 * completely.
 912		 */
 913		if (in_bitfield ||
 914		    (new_off == next_off && roundup(cur_off, next_align * 8) != new_off) ||
 915		    (new_off != next_off && next_off - new_off <= new_off - cur_off))
 916			/* but for bitfields we'll emit explicit bit count */
 917			btf_dump_printf(d, "\n%s%s: %d;", pfx(lvl), pad_type,
 918					in_bitfield ? new_off - cur_off : 0);
 919		cur_off = new_off;
 920	}
 921
 922	/* Now we know we start at naturally aligned offset for a chosen
 923	 * padding type (long, int, short, or char), and so the rest is just
 924	 * a straightforward filling of remaining padding gap with full
 925	 * `<type>: sizeof(<type>);` markers, except for the last one, which
 926	 * might need smaller than sizeof(<type>) padding.
 927	 */
 928	while (cur_off != next_off) {
 929		bits = min(next_off - cur_off, pad_bits);
 930		if (bits == pad_bits) {
 931			btf_dump_printf(d, "\n%s%s: %d;", pfx(lvl), pad_type, pad_bits);
 932			cur_off += bits;
 933			continue;
 934		}
 935		/* For the remainder padding that doesn't cover entire
 936		 * pad_type bit length, we pick the smallest necessary type.
 937		 * This is pure aesthetics, we could have just used `long`,
 938		 * but having smallest necessary one communicates better the
 939		 * scale of the padding gap.
 940		 */
 941		for (i = ARRAY_SIZE(pads) - 1; i >= 0; i--) {
 942			pad_type = pads[i].name;
 943			pad_bits = pads[i].bits;
 944			if (pad_bits < bits)
 945				continue;
 946
 947			btf_dump_printf(d, "\n%s%s: %d;", pfx(lvl), pad_type, bits);
 948			cur_off += bits;
 949			break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 950		}
 
 
 951	}
 952}
 953
 954static void btf_dump_emit_struct_fwd(struct btf_dump *d, __u32 id,
 955				     const struct btf_type *t)
 956{
 957	btf_dump_printf(d, "%s%s%s",
 958			btf_is_struct(t) ? "struct" : "union",
 959			t->name_off ? " " : "",
 960			btf_dump_type_name(d, id));
 961}
 962
 963static void btf_dump_emit_struct_def(struct btf_dump *d,
 964				     __u32 id,
 965				     const struct btf_type *t,
 966				     int lvl)
 967{
 968	const struct btf_member *m = btf_members(t);
 969	bool is_struct = btf_is_struct(t);
 970	bool packed, prev_bitfield = false;
 971	int align, i, off = 0;
 972	__u16 vlen = btf_vlen(t);
 973
 974	align = btf__align_of(d->btf, id);
 975	packed = is_struct ? btf_is_struct_packed(d->btf, id, t) : 0;
 976
 977	btf_dump_printf(d, "%s%s%s {",
 978			is_struct ? "struct" : "union",
 979			t->name_off ? " " : "",
 980			btf_dump_type_name(d, id));
 981
 982	for (i = 0; i < vlen; i++, m++) {
 983		const char *fname;
 984		int m_off, m_sz, m_align;
 985		bool in_bitfield;
 986
 987		fname = btf_name_of(d, m->name_off);
 988		m_sz = btf_member_bitfield_size(t, i);
 989		m_off = btf_member_bit_offset(t, i);
 990		m_align = packed ? 1 : btf__align_of(d->btf, m->type);
 991
 992		in_bitfield = prev_bitfield && m_sz != 0;
 993
 994		btf_dump_emit_bit_padding(d, off, m_off, m_align, in_bitfield, lvl + 1);
 995		btf_dump_printf(d, "\n%s", pfx(lvl + 1));
 996		btf_dump_emit_type_decl(d, m->type, fname, lvl + 1);
 997
 998		if (m_sz) {
 999			btf_dump_printf(d, ": %d", m_sz);
1000			off = m_off + m_sz;
1001			prev_bitfield = true;
1002		} else {
1003			m_sz = max((__s64)0, btf__resolve_size(d->btf, m->type));
1004			off = m_off + m_sz * 8;
1005			prev_bitfield = false;
1006		}
1007
1008		btf_dump_printf(d, ";");
1009	}
1010
1011	/* pad at the end, if necessary */
1012	if (is_struct)
1013		btf_dump_emit_bit_padding(d, off, t->size * 8, align, false, lvl + 1);
 
 
 
1014
1015	/*
1016	 * Keep `struct empty {}` on a single line,
1017	 * only print newline when there are regular or padding fields.
1018	 */
1019	if (vlen || t->size) {
1020		btf_dump_printf(d, "\n");
1021		btf_dump_printf(d, "%s}", pfx(lvl));
1022	} else {
1023		btf_dump_printf(d, "}");
1024	}
1025	if (packed)
1026		btf_dump_printf(d, " __attribute__((packed))");
1027}
1028
1029static const char *missing_base_types[][2] = {
1030	/*
1031	 * GCC emits typedefs to its internal __PolyX_t types when compiling Arm
1032	 * SIMD intrinsics. Alias them to standard base types.
1033	 */
1034	{ "__Poly8_t",		"unsigned char" },
1035	{ "__Poly16_t",		"unsigned short" },
1036	{ "__Poly64_t",		"unsigned long long" },
1037	{ "__Poly128_t",	"unsigned __int128" },
1038};
1039
1040static void btf_dump_emit_missing_aliases(struct btf_dump *d, __u32 id,
1041					  const struct btf_type *t)
1042{
1043	const char *name = btf_dump_type_name(d, id);
1044	int i;
1045
1046	for (i = 0; i < ARRAY_SIZE(missing_base_types); i++) {
1047		if (strcmp(name, missing_base_types[i][0]) == 0) {
1048			btf_dump_printf(d, "typedef %s %s;\n\n",
1049					missing_base_types[i][1], name);
1050			break;
1051		}
1052	}
1053}
1054
1055static void btf_dump_emit_enum_fwd(struct btf_dump *d, __u32 id,
1056				   const struct btf_type *t)
1057{
1058	btf_dump_printf(d, "enum %s", btf_dump_type_name(d, id));
1059}
1060
1061static void btf_dump_emit_enum32_val(struct btf_dump *d,
1062				     const struct btf_type *t,
1063				     int lvl, __u16 vlen)
1064{
1065	const struct btf_enum *v = btf_enum(t);
1066	bool is_signed = btf_kflag(t);
1067	const char *fmt_str;
1068	const char *name;
1069	size_t dup_cnt;
1070	int i;
1071
1072	for (i = 0; i < vlen; i++, v++) {
1073		name = btf_name_of(d, v->name_off);
1074		/* enumerators share namespace with typedef idents */
1075		dup_cnt = btf_dump_name_dups(d, d->ident_names, name);
1076		if (dup_cnt > 1) {
1077			fmt_str = is_signed ? "\n%s%s___%zd = %d," : "\n%s%s___%zd = %u,";
1078			btf_dump_printf(d, fmt_str, pfx(lvl + 1), name, dup_cnt, v->val);
1079		} else {
1080			fmt_str = is_signed ? "\n%s%s = %d," : "\n%s%s = %u,";
1081			btf_dump_printf(d, fmt_str, pfx(lvl + 1), name, v->val);
1082		}
1083	}
1084}
1085
1086static void btf_dump_emit_enum64_val(struct btf_dump *d,
1087				     const struct btf_type *t,
1088				     int lvl, __u16 vlen)
1089{
1090	const struct btf_enum64 *v = btf_enum64(t);
1091	bool is_signed = btf_kflag(t);
1092	const char *fmt_str;
1093	const char *name;
1094	size_t dup_cnt;
1095	__u64 val;
1096	int i;
1097
1098	for (i = 0; i < vlen; i++, v++) {
1099		name = btf_name_of(d, v->name_off);
1100		dup_cnt = btf_dump_name_dups(d, d->ident_names, name);
1101		val = btf_enum64_value(v);
1102		if (dup_cnt > 1) {
1103			fmt_str = is_signed ? "\n%s%s___%zd = %lldLL,"
1104					    : "\n%s%s___%zd = %lluULL,";
1105			btf_dump_printf(d, fmt_str,
1106					pfx(lvl + 1), name, dup_cnt,
1107					(unsigned long long)val);
1108		} else {
1109			fmt_str = is_signed ? "\n%s%s = %lldLL,"
1110					    : "\n%s%s = %lluULL,";
1111			btf_dump_printf(d, fmt_str,
1112					pfx(lvl + 1), name,
1113					(unsigned long long)val);
1114		}
1115	}
1116}
1117static void btf_dump_emit_enum_def(struct btf_dump *d, __u32 id,
1118				   const struct btf_type *t,
1119				   int lvl)
1120{
 
1121	__u16 vlen = btf_vlen(t);
 
 
 
1122
1123	btf_dump_printf(d, "enum%s%s",
1124			t->name_off ? " " : "",
1125			btf_dump_type_name(d, id));
1126
1127	if (!vlen)
1128		return;
1129
1130	btf_dump_printf(d, " {");
1131	if (btf_is_enum(t))
1132		btf_dump_emit_enum32_val(d, t, lvl, vlen);
1133	else
1134		btf_dump_emit_enum64_val(d, t, lvl, vlen);
1135	btf_dump_printf(d, "\n%s}", pfx(lvl));
1136
1137	/* special case enums with special sizes */
1138	if (t->size == 1) {
1139		/* one-byte enums can be forced with mode(byte) attribute */
1140		btf_dump_printf(d, " __attribute__((mode(byte)))");
1141	} else if (t->size == 8 && d->ptr_sz == 8) {
1142		/* enum can be 8-byte sized if one of the enumerator values
1143		 * doesn't fit in 32-bit integer, or by adding mode(word)
1144		 * attribute (but probably only on 64-bit architectures); do
1145		 * our best here to try to satisfy the contract without adding
1146		 * unnecessary attributes
1147		 */
1148		bool needs_word_mode;
1149
1150		if (btf_is_enum(t)) {
1151			/* enum can't represent 64-bit values, so we need word mode */
1152			needs_word_mode = true;
1153		} else {
1154			/* enum64 needs mode(word) if none of its values has
1155			 * non-zero upper 32-bits (which means that all values
1156			 * fit in 32-bit integers and won't cause compiler to
1157			 * bump enum to be 64-bit naturally
1158			 */
1159			int i;
1160
1161			needs_word_mode = true;
1162			for (i = 0; i < vlen; i++) {
1163				if (btf_enum64(t)[i].val_hi32 != 0) {
1164					needs_word_mode = false;
1165					break;
1166				}
1167			}
1168		}
1169		if (needs_word_mode)
1170			btf_dump_printf(d, " __attribute__((mode(word)))");
1171	}
1172
1173}
1174
1175static void btf_dump_emit_fwd_def(struct btf_dump *d, __u32 id,
1176				  const struct btf_type *t)
1177{
1178	const char *name = btf_dump_type_name(d, id);
1179
1180	if (btf_kflag(t))
1181		btf_dump_printf(d, "union %s", name);
1182	else
1183		btf_dump_printf(d, "struct %s", name);
1184}
1185
1186static void btf_dump_emit_typedef_def(struct btf_dump *d, __u32 id,
1187				     const struct btf_type *t, int lvl)
1188{
1189	const char *name = btf_dump_ident_name(d, id);
1190
1191	/*
1192	 * Old GCC versions are emitting invalid typedef for __gnuc_va_list
1193	 * pointing to VOID. This generates warnings from btf_dump() and
1194	 * results in uncompilable header file, so we are fixing it up here
1195	 * with valid typedef into __builtin_va_list.
1196	 */
1197	if (t->type == 0 && strcmp(name, "__gnuc_va_list") == 0) {
1198		btf_dump_printf(d, "typedef __builtin_va_list __gnuc_va_list");
1199		return;
1200	}
1201
1202	btf_dump_printf(d, "typedef ");
1203	btf_dump_emit_type_decl(d, t->type, name, lvl);
1204}
1205
1206static int btf_dump_push_decl_stack_id(struct btf_dump *d, __u32 id)
1207{
1208	__u32 *new_stack;
1209	size_t new_cap;
1210
1211	if (d->decl_stack_cnt >= d->decl_stack_cap) {
1212		new_cap = max(16, d->decl_stack_cap * 3 / 2);
1213		new_stack = libbpf_reallocarray(d->decl_stack, new_cap, sizeof(new_stack[0]));
1214		if (!new_stack)
1215			return -ENOMEM;
1216		d->decl_stack = new_stack;
1217		d->decl_stack_cap = new_cap;
1218	}
1219
1220	d->decl_stack[d->decl_stack_cnt++] = id;
1221
1222	return 0;
1223}
1224
1225/*
1226 * Emit type declaration (e.g., field type declaration in a struct or argument
1227 * declaration in function prototype) in correct C syntax.
1228 *
1229 * For most types it's trivial, but there are few quirky type declaration
1230 * cases worth mentioning:
1231 *   - function prototypes (especially nesting of function prototypes);
1232 *   - arrays;
1233 *   - const/volatile/restrict for pointers vs other types.
1234 *
1235 * For a good discussion of *PARSING* C syntax (as a human), see
1236 * Peter van der Linden's "Expert C Programming: Deep C Secrets",
1237 * Ch.3 "Unscrambling Declarations in C".
1238 *
1239 * It won't help with BTF to C conversion much, though, as it's an opposite
1240 * problem. So we came up with this algorithm in reverse to van der Linden's
1241 * parsing algorithm. It goes from structured BTF representation of type
1242 * declaration to a valid compilable C syntax.
1243 *
1244 * For instance, consider this C typedef:
1245 *	typedef const int * const * arr[10] arr_t;
1246 * It will be represented in BTF with this chain of BTF types:
1247 *	[typedef] -> [array] -> [ptr] -> [const] -> [ptr] -> [const] -> [int]
1248 *
1249 * Notice how [const] modifier always goes before type it modifies in BTF type
1250 * graph, but in C syntax, const/volatile/restrict modifiers are written to
1251 * the right of pointers, but to the left of other types. There are also other
1252 * quirks, like function pointers, arrays of them, functions returning other
1253 * functions, etc.
1254 *
1255 * We handle that by pushing all the types to a stack, until we hit "terminal"
1256 * type (int/enum/struct/union/fwd). Then depending on the kind of a type on
1257 * top of a stack, modifiers are handled differently. Array/function pointers
1258 * have also wildly different syntax and how nesting of them are done. See
1259 * code for authoritative definition.
1260 *
1261 * To avoid allocating new stack for each independent chain of BTF types, we
1262 * share one bigger stack, with each chain working only on its own local view
1263 * of a stack frame. Some care is required to "pop" stack frames after
1264 * processing type declaration chain.
1265 */
1266int btf_dump__emit_type_decl(struct btf_dump *d, __u32 id,
1267			     const struct btf_dump_emit_type_decl_opts *opts)
1268{
1269	const char *fname;
1270	int lvl, err;
1271
1272	if (!OPTS_VALID(opts, btf_dump_emit_type_decl_opts))
1273		return libbpf_err(-EINVAL);
1274
1275	err = btf_dump_resize(d);
1276	if (err)
1277		return libbpf_err(err);
1278
1279	fname = OPTS_GET(opts, field_name, "");
1280	lvl = OPTS_GET(opts, indent_level, 0);
1281	d->strip_mods = OPTS_GET(opts, strip_mods, false);
1282	btf_dump_emit_type_decl(d, id, fname, lvl);
1283	d->strip_mods = false;
1284	return 0;
1285}
1286
1287static void btf_dump_emit_type_decl(struct btf_dump *d, __u32 id,
1288				    const char *fname, int lvl)
1289{
1290	struct id_stack decl_stack;
1291	const struct btf_type *t;
1292	int err, stack_start;
1293
1294	stack_start = d->decl_stack_cnt;
1295	for (;;) {
1296		t = btf__type_by_id(d->btf, id);
1297		if (d->strip_mods && btf_is_mod(t))
1298			goto skip_mod;
1299
1300		err = btf_dump_push_decl_stack_id(d, id);
1301		if (err < 0) {
1302			/*
1303			 * if we don't have enough memory for entire type decl
1304			 * chain, restore stack, emit warning, and try to
1305			 * proceed nevertheless
1306			 */
1307			pr_warn("not enough memory for decl stack:%d", err);
1308			d->decl_stack_cnt = stack_start;
1309			return;
1310		}
1311skip_mod:
1312		/* VOID */
1313		if (id == 0)
1314			break;
1315
1316		switch (btf_kind(t)) {
1317		case BTF_KIND_PTR:
1318		case BTF_KIND_VOLATILE:
1319		case BTF_KIND_CONST:
1320		case BTF_KIND_RESTRICT:
1321		case BTF_KIND_FUNC_PROTO:
1322		case BTF_KIND_TYPE_TAG:
1323			id = t->type;
1324			break;
1325		case BTF_KIND_ARRAY:
1326			id = btf_array(t)->type;
1327			break;
1328		case BTF_KIND_INT:
1329		case BTF_KIND_ENUM:
1330		case BTF_KIND_ENUM64:
1331		case BTF_KIND_FWD:
1332		case BTF_KIND_STRUCT:
1333		case BTF_KIND_UNION:
1334		case BTF_KIND_TYPEDEF:
1335		case BTF_KIND_FLOAT:
1336			goto done;
1337		default:
1338			pr_warn("unexpected type in decl chain, kind:%u, id:[%u]\n",
1339				btf_kind(t), id);
1340			goto done;
1341		}
1342	}
1343done:
1344	/*
1345	 * We might be inside a chain of declarations (e.g., array of function
1346	 * pointers returning anonymous (so inlined) structs, having another
1347	 * array field). Each of those needs its own "stack frame" to handle
1348	 * emitting of declarations. Those stack frames are non-overlapping
1349	 * portions of shared btf_dump->decl_stack. To make it a bit nicer to
1350	 * handle this set of nested stacks, we create a view corresponding to
1351	 * our own "stack frame" and work with it as an independent stack.
1352	 * We'll need to clean up after emit_type_chain() returns, though.
1353	 */
1354	decl_stack.ids = d->decl_stack + stack_start;
1355	decl_stack.cnt = d->decl_stack_cnt - stack_start;
1356	btf_dump_emit_type_chain(d, &decl_stack, fname, lvl);
1357	/*
1358	 * emit_type_chain() guarantees that it will pop its entire decl_stack
1359	 * frame before returning. But it works with a read-only view into
1360	 * decl_stack, so it doesn't actually pop anything from the
1361	 * perspective of shared btf_dump->decl_stack, per se. We need to
1362	 * reset decl_stack state to how it was before us to avoid it growing
1363	 * all the time.
1364	 */
1365	d->decl_stack_cnt = stack_start;
1366}
1367
1368static void btf_dump_emit_mods(struct btf_dump *d, struct id_stack *decl_stack)
1369{
1370	const struct btf_type *t;
1371	__u32 id;
1372
1373	while (decl_stack->cnt) {
1374		id = decl_stack->ids[decl_stack->cnt - 1];
1375		t = btf__type_by_id(d->btf, id);
1376
1377		switch (btf_kind(t)) {
1378		case BTF_KIND_VOLATILE:
1379			btf_dump_printf(d, "volatile ");
1380			break;
1381		case BTF_KIND_CONST:
1382			btf_dump_printf(d, "const ");
1383			break;
1384		case BTF_KIND_RESTRICT:
1385			btf_dump_printf(d, "restrict ");
1386			break;
1387		default:
1388			return;
1389		}
1390		decl_stack->cnt--;
1391	}
1392}
1393
1394static void btf_dump_drop_mods(struct btf_dump *d, struct id_stack *decl_stack)
1395{
1396	const struct btf_type *t;
1397	__u32 id;
1398
1399	while (decl_stack->cnt) {
1400		id = decl_stack->ids[decl_stack->cnt - 1];
1401		t = btf__type_by_id(d->btf, id);
1402		if (!btf_is_mod(t))
1403			return;
1404		decl_stack->cnt--;
1405	}
1406}
1407
1408static void btf_dump_emit_name(const struct btf_dump *d,
1409			       const char *name, bool last_was_ptr)
1410{
1411	bool separate = name[0] && !last_was_ptr;
1412
1413	btf_dump_printf(d, "%s%s", separate ? " " : "", name);
1414}
1415
1416static void btf_dump_emit_type_chain(struct btf_dump *d,
1417				     struct id_stack *decls,
1418				     const char *fname, int lvl)
1419{
1420	/*
1421	 * last_was_ptr is used to determine if we need to separate pointer
1422	 * asterisk (*) from previous part of type signature with space, so
1423	 * that we get `int ***`, instead of `int * * *`. We default to true
1424	 * for cases where we have single pointer in a chain. E.g., in ptr ->
1425	 * func_proto case. func_proto will start a new emit_type_chain call
1426	 * with just ptr, which should be emitted as (*) or (*<fname>), so we
1427	 * don't want to prepend space for that last pointer.
1428	 */
1429	bool last_was_ptr = true;
1430	const struct btf_type *t;
1431	const char *name;
1432	__u16 kind;
1433	__u32 id;
1434
1435	while (decls->cnt) {
1436		id = decls->ids[--decls->cnt];
1437		if (id == 0) {
1438			/* VOID is a special snowflake */
1439			btf_dump_emit_mods(d, decls);
1440			btf_dump_printf(d, "void");
1441			last_was_ptr = false;
1442			continue;
1443		}
1444
1445		t = btf__type_by_id(d->btf, id);
1446		kind = btf_kind(t);
1447
1448		switch (kind) {
1449		case BTF_KIND_INT:
1450		case BTF_KIND_FLOAT:
1451			btf_dump_emit_mods(d, decls);
1452			name = btf_name_of(d, t->name_off);
1453			btf_dump_printf(d, "%s", name);
1454			break;
1455		case BTF_KIND_STRUCT:
1456		case BTF_KIND_UNION:
1457			btf_dump_emit_mods(d, decls);
1458			/* inline anonymous struct/union */
1459			if (t->name_off == 0 && !d->skip_anon_defs)
1460				btf_dump_emit_struct_def(d, id, t, lvl);
1461			else
1462				btf_dump_emit_struct_fwd(d, id, t);
1463			break;
1464		case BTF_KIND_ENUM:
1465		case BTF_KIND_ENUM64:
1466			btf_dump_emit_mods(d, decls);
1467			/* inline anonymous enum */
1468			if (t->name_off == 0 && !d->skip_anon_defs)
1469				btf_dump_emit_enum_def(d, id, t, lvl);
1470			else
1471				btf_dump_emit_enum_fwd(d, id, t);
1472			break;
1473		case BTF_KIND_FWD:
1474			btf_dump_emit_mods(d, decls);
1475			btf_dump_emit_fwd_def(d, id, t);
1476			break;
1477		case BTF_KIND_TYPEDEF:
1478			btf_dump_emit_mods(d, decls);
1479			btf_dump_printf(d, "%s", btf_dump_ident_name(d, id));
1480			break;
1481		case BTF_KIND_PTR:
1482			btf_dump_printf(d, "%s", last_was_ptr ? "*" : " *");
1483			break;
1484		case BTF_KIND_VOLATILE:
1485			btf_dump_printf(d, " volatile");
1486			break;
1487		case BTF_KIND_CONST:
1488			btf_dump_printf(d, " const");
1489			break;
1490		case BTF_KIND_RESTRICT:
1491			btf_dump_printf(d, " restrict");
1492			break;
1493		case BTF_KIND_TYPE_TAG:
1494			btf_dump_emit_mods(d, decls);
1495			name = btf_name_of(d, t->name_off);
1496			btf_dump_printf(d, " __attribute__((btf_type_tag(\"%s\")))", name);
1497			break;
1498		case BTF_KIND_ARRAY: {
1499			const struct btf_array *a = btf_array(t);
1500			const struct btf_type *next_t;
1501			__u32 next_id;
1502			bool multidim;
1503			/*
1504			 * GCC has a bug
1505			 * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=8354)
1506			 * which causes it to emit extra const/volatile
1507			 * modifiers for an array, if array's element type has
1508			 * const/volatile modifiers. Clang doesn't do that.
1509			 * In general, it doesn't seem very meaningful to have
1510			 * a const/volatile modifier for array, so we are
1511			 * going to silently skip them here.
1512			 */
1513			btf_dump_drop_mods(d, decls);
1514
1515			if (decls->cnt == 0) {
1516				btf_dump_emit_name(d, fname, last_was_ptr);
1517				btf_dump_printf(d, "[%u]", a->nelems);
1518				return;
1519			}
1520
1521			next_id = decls->ids[decls->cnt - 1];
1522			next_t = btf__type_by_id(d->btf, next_id);
1523			multidim = btf_is_array(next_t);
1524			/* we need space if we have named non-pointer */
1525			if (fname[0] && !last_was_ptr)
1526				btf_dump_printf(d, " ");
1527			/* no parentheses for multi-dimensional array */
1528			if (!multidim)
1529				btf_dump_printf(d, "(");
1530			btf_dump_emit_type_chain(d, decls, fname, lvl);
1531			if (!multidim)
1532				btf_dump_printf(d, ")");
1533			btf_dump_printf(d, "[%u]", a->nelems);
1534			return;
1535		}
1536		case BTF_KIND_FUNC_PROTO: {
1537			const struct btf_param *p = btf_params(t);
1538			__u16 vlen = btf_vlen(t);
1539			int i;
1540
1541			/*
1542			 * GCC emits extra volatile qualifier for
1543			 * __attribute__((noreturn)) function pointers. Clang
1544			 * doesn't do it. It's a GCC quirk for backwards
1545			 * compatibility with code written for GCC <2.5. So,
1546			 * similarly to extra qualifiers for array, just drop
1547			 * them, instead of handling them.
1548			 */
1549			btf_dump_drop_mods(d, decls);
1550			if (decls->cnt) {
1551				btf_dump_printf(d, " (");
1552				btf_dump_emit_type_chain(d, decls, fname, lvl);
1553				btf_dump_printf(d, ")");
1554			} else {
1555				btf_dump_emit_name(d, fname, last_was_ptr);
1556			}
1557			btf_dump_printf(d, "(");
1558			/*
1559			 * Clang for BPF target generates func_proto with no
1560			 * args as a func_proto with a single void arg (e.g.,
1561			 * `int (*f)(void)` vs just `int (*f)()`). We are
1562			 * going to pretend there are no args for such case.
1563			 */
1564			if (vlen == 1 && p->type == 0) {
1565				btf_dump_printf(d, ")");
1566				return;
1567			}
1568
1569			for (i = 0; i < vlen; i++, p++) {
1570				if (i > 0)
1571					btf_dump_printf(d, ", ");
1572
1573				/* last arg of type void is vararg */
1574				if (i == vlen - 1 && p->type == 0) {
1575					btf_dump_printf(d, "...");
1576					break;
1577				}
1578
1579				name = btf_name_of(d, p->name_off);
1580				btf_dump_emit_type_decl(d, p->type, name, lvl);
1581			}
1582
1583			btf_dump_printf(d, ")");
1584			return;
1585		}
1586		default:
1587			pr_warn("unexpected type in decl chain, kind:%u, id:[%u]\n",
1588				kind, id);
1589			return;
1590		}
1591
1592		last_was_ptr = kind == BTF_KIND_PTR;
1593	}
1594
1595	btf_dump_emit_name(d, fname, last_was_ptr);
1596}
1597
1598/* show type name as (type_name) */
1599static void btf_dump_emit_type_cast(struct btf_dump *d, __u32 id,
1600				    bool top_level)
1601{
1602	const struct btf_type *t;
1603
1604	/* for array members, we don't bother emitting type name for each
1605	 * member to avoid the redundancy of
1606	 * .name = (char[4])[(char)'f',(char)'o',(char)'o',]
1607	 */
1608	if (d->typed_dump->is_array_member)
1609		return;
1610
1611	/* avoid type name specification for variable/section; it will be done
1612	 * for the associated variable value(s).
1613	 */
1614	t = btf__type_by_id(d->btf, id);
1615	if (btf_is_var(t) || btf_is_datasec(t))
1616		return;
1617
1618	if (top_level)
1619		btf_dump_printf(d, "(");
1620
1621	d->skip_anon_defs = true;
1622	d->strip_mods = true;
1623	btf_dump_emit_type_decl(d, id, "", 0);
1624	d->strip_mods = false;
1625	d->skip_anon_defs = false;
1626
1627	if (top_level)
1628		btf_dump_printf(d, ")");
1629}
1630
1631/* return number of duplicates (occurrences) of a given name */
1632static size_t btf_dump_name_dups(struct btf_dump *d, struct hashmap *name_map,
1633				 const char *orig_name)
1634{
1635	char *old_name, *new_name;
1636	size_t dup_cnt = 0;
1637	int err;
1638
1639	new_name = strdup(orig_name);
1640	if (!new_name)
1641		return 1;
1642
1643	(void)hashmap__find(name_map, orig_name, &dup_cnt);
1644	dup_cnt++;
1645
1646	err = hashmap__set(name_map, new_name, dup_cnt, &old_name, NULL);
1647	if (err)
1648		free(new_name);
1649
1650	free(old_name);
1651
1652	return dup_cnt;
1653}
1654
1655static const char *btf_dump_resolve_name(struct btf_dump *d, __u32 id,
1656					 struct hashmap *name_map)
1657{
1658	struct btf_dump_type_aux_state *s = &d->type_states[id];
1659	const struct btf_type *t = btf__type_by_id(d->btf, id);
1660	const char *orig_name = btf_name_of(d, t->name_off);
1661	const char **cached_name = &d->cached_names[id];
1662	size_t dup_cnt;
1663
1664	if (t->name_off == 0)
1665		return "";
1666
1667	if (s->name_resolved)
1668		return *cached_name ? *cached_name : orig_name;
1669
1670	if (btf_is_fwd(t) || (btf_is_enum(t) && btf_vlen(t) == 0)) {
1671		s->name_resolved = 1;
1672		return orig_name;
1673	}
1674
1675	dup_cnt = btf_dump_name_dups(d, name_map, orig_name);
1676	if (dup_cnt > 1) {
1677		const size_t max_len = 256;
1678		char new_name[max_len];
1679
1680		snprintf(new_name, max_len, "%s___%zu", orig_name, dup_cnt);
1681		*cached_name = strdup(new_name);
1682	}
1683
1684	s->name_resolved = 1;
1685	return *cached_name ? *cached_name : orig_name;
1686}
1687
1688static const char *btf_dump_type_name(struct btf_dump *d, __u32 id)
1689{
1690	return btf_dump_resolve_name(d, id, d->type_names);
1691}
1692
1693static const char *btf_dump_ident_name(struct btf_dump *d, __u32 id)
1694{
1695	return btf_dump_resolve_name(d, id, d->ident_names);
1696}
1697
1698static int btf_dump_dump_type_data(struct btf_dump *d,
1699				   const char *fname,
1700				   const struct btf_type *t,
1701				   __u32 id,
1702				   const void *data,
1703				   __u8 bits_offset,
1704				   __u8 bit_sz);
1705
1706static const char *btf_dump_data_newline(struct btf_dump *d)
1707{
1708	return d->typed_dump->compact || d->typed_dump->depth == 0 ? "" : "\n";
1709}
1710
1711static const char *btf_dump_data_delim(struct btf_dump *d)
1712{
1713	return d->typed_dump->depth == 0 ? "" : ",";
1714}
1715
1716static void btf_dump_data_pfx(struct btf_dump *d)
1717{
1718	int i, lvl = d->typed_dump->indent_lvl + d->typed_dump->depth;
1719
1720	if (d->typed_dump->compact)
1721		return;
1722
1723	for (i = 0; i < lvl; i++)
1724		btf_dump_printf(d, "%s", d->typed_dump->indent_str);
1725}
1726
1727/* A macro is used here as btf_type_value[s]() appends format specifiers
1728 * to the format specifier passed in; these do the work of appending
1729 * delimiters etc while the caller simply has to specify the type values
1730 * in the format specifier + value(s).
1731 */
1732#define btf_dump_type_values(d, fmt, ...)				\
1733	btf_dump_printf(d, fmt "%s%s",					\
1734			##__VA_ARGS__,					\
1735			btf_dump_data_delim(d),				\
1736			btf_dump_data_newline(d))
1737
1738static int btf_dump_unsupported_data(struct btf_dump *d,
1739				     const struct btf_type *t,
1740				     __u32 id)
1741{
1742	btf_dump_printf(d, "<unsupported kind:%u>", btf_kind(t));
1743	return -ENOTSUP;
1744}
1745
1746static int btf_dump_get_bitfield_value(struct btf_dump *d,
1747				       const struct btf_type *t,
1748				       const void *data,
1749				       __u8 bits_offset,
1750				       __u8 bit_sz,
1751				       __u64 *value)
1752{
1753	__u16 left_shift_bits, right_shift_bits;
1754	const __u8 *bytes = data;
1755	__u8 nr_copy_bits;
1756	__u64 num = 0;
1757	int i;
1758
1759	/* Maximum supported bitfield size is 64 bits */
1760	if (t->size > 8) {
1761		pr_warn("unexpected bitfield size %d\n", t->size);
1762		return -EINVAL;
1763	}
1764
1765	/* Bitfield value retrieval is done in two steps; first relevant bytes are
1766	 * stored in num, then we left/right shift num to eliminate irrelevant bits.
1767	 */
1768#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1769	for (i = t->size - 1; i >= 0; i--)
1770		num = num * 256 + bytes[i];
1771	nr_copy_bits = bit_sz + bits_offset;
1772#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
1773	for (i = 0; i < t->size; i++)
1774		num = num * 256 + bytes[i];
1775	nr_copy_bits = t->size * 8 - bits_offset;
1776#else
1777# error "Unrecognized __BYTE_ORDER__"
1778#endif
1779	left_shift_bits = 64 - nr_copy_bits;
1780	right_shift_bits = 64 - bit_sz;
1781
1782	*value = (num << left_shift_bits) >> right_shift_bits;
1783
1784	return 0;
1785}
1786
1787static int btf_dump_bitfield_check_zero(struct btf_dump *d,
1788					const struct btf_type *t,
1789					const void *data,
1790					__u8 bits_offset,
1791					__u8 bit_sz)
1792{
1793	__u64 check_num;
1794	int err;
1795
1796	err = btf_dump_get_bitfield_value(d, t, data, bits_offset, bit_sz, &check_num);
1797	if (err)
1798		return err;
1799	if (check_num == 0)
1800		return -ENODATA;
1801	return 0;
1802}
1803
1804static int btf_dump_bitfield_data(struct btf_dump *d,
1805				  const struct btf_type *t,
1806				  const void *data,
1807				  __u8 bits_offset,
1808				  __u8 bit_sz)
1809{
1810	__u64 print_num;
1811	int err;
1812
1813	err = btf_dump_get_bitfield_value(d, t, data, bits_offset, bit_sz, &print_num);
1814	if (err)
1815		return err;
1816
1817	btf_dump_type_values(d, "0x%llx", (unsigned long long)print_num);
1818
1819	return 0;
1820}
1821
1822/* ints, floats and ptrs */
1823static int btf_dump_base_type_check_zero(struct btf_dump *d,
1824					 const struct btf_type *t,
1825					 __u32 id,
1826					 const void *data)
1827{
1828	static __u8 bytecmp[16] = {};
1829	int nr_bytes;
1830
1831	/* For pointer types, pointer size is not defined on a per-type basis.
1832	 * On dump creation however, we store the pointer size.
1833	 */
1834	if (btf_kind(t) == BTF_KIND_PTR)
1835		nr_bytes = d->ptr_sz;
1836	else
1837		nr_bytes = t->size;
1838
1839	if (nr_bytes < 1 || nr_bytes > 16) {
1840		pr_warn("unexpected size %d for id [%u]\n", nr_bytes, id);
1841		return -EINVAL;
1842	}
1843
1844	if (memcmp(data, bytecmp, nr_bytes) == 0)
1845		return -ENODATA;
1846	return 0;
1847}
1848
1849static bool ptr_is_aligned(const struct btf *btf, __u32 type_id,
1850			   const void *data)
1851{
1852	int alignment = btf__align_of(btf, type_id);
1853
1854	if (alignment == 0)
1855		return false;
1856
1857	return ((uintptr_t)data) % alignment == 0;
1858}
1859
1860static int btf_dump_int_data(struct btf_dump *d,
1861			     const struct btf_type *t,
1862			     __u32 type_id,
1863			     const void *data,
1864			     __u8 bits_offset)
1865{
1866	__u8 encoding = btf_int_encoding(t);
1867	bool sign = encoding & BTF_INT_SIGNED;
1868	char buf[16] __attribute__((aligned(16)));
1869	int sz = t->size;
1870
1871	if (sz == 0 || sz > sizeof(buf)) {
1872		pr_warn("unexpected size %d for id [%u]\n", sz, type_id);
1873		return -EINVAL;
1874	}
1875
1876	/* handle packed int data - accesses of integers not aligned on
1877	 * int boundaries can cause problems on some platforms.
1878	 */
1879	if (!ptr_is_aligned(d->btf, type_id, data)) {
1880		memcpy(buf, data, sz);
1881		data = buf;
1882	}
1883
1884	switch (sz) {
1885	case 16: {
1886		const __u64 *ints = data;
1887		__u64 lsi, msi;
1888
1889		/* avoid use of __int128 as some 32-bit platforms do not
1890		 * support it.
1891		 */
1892#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1893		lsi = ints[0];
1894		msi = ints[1];
1895#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
1896		lsi = ints[1];
1897		msi = ints[0];
1898#else
1899# error "Unrecognized __BYTE_ORDER__"
1900#endif
1901		if (msi == 0)
1902			btf_dump_type_values(d, "0x%llx", (unsigned long long)lsi);
1903		else
1904			btf_dump_type_values(d, "0x%llx%016llx", (unsigned long long)msi,
1905					     (unsigned long long)lsi);
1906		break;
1907	}
1908	case 8:
1909		if (sign)
1910			btf_dump_type_values(d, "%lld", *(long long *)data);
1911		else
1912			btf_dump_type_values(d, "%llu", *(unsigned long long *)data);
1913		break;
1914	case 4:
1915		if (sign)
1916			btf_dump_type_values(d, "%d", *(__s32 *)data);
1917		else
1918			btf_dump_type_values(d, "%u", *(__u32 *)data);
1919		break;
1920	case 2:
1921		if (sign)
1922			btf_dump_type_values(d, "%d", *(__s16 *)data);
1923		else
1924			btf_dump_type_values(d, "%u", *(__u16 *)data);
1925		break;
1926	case 1:
1927		if (d->typed_dump->is_array_char) {
1928			/* check for null terminator */
1929			if (d->typed_dump->is_array_terminated)
1930				break;
1931			if (*(char *)data == '\0') {
1932				d->typed_dump->is_array_terminated = true;
1933				break;
1934			}
1935			if (isprint(*(char *)data)) {
1936				btf_dump_type_values(d, "'%c'", *(char *)data);
1937				break;
1938			}
1939		}
1940		if (sign)
1941			btf_dump_type_values(d, "%d", *(__s8 *)data);
1942		else
1943			btf_dump_type_values(d, "%u", *(__u8 *)data);
1944		break;
1945	default:
1946		pr_warn("unexpected sz %d for id [%u]\n", sz, type_id);
1947		return -EINVAL;
1948	}
1949	return 0;
1950}
1951
1952union float_data {
1953	long double ld;
1954	double d;
1955	float f;
1956};
1957
1958static int btf_dump_float_data(struct btf_dump *d,
1959			       const struct btf_type *t,
1960			       __u32 type_id,
1961			       const void *data)
1962{
1963	const union float_data *flp = data;
1964	union float_data fl;
1965	int sz = t->size;
1966
1967	/* handle unaligned data; copy to local union */
1968	if (!ptr_is_aligned(d->btf, type_id, data)) {
1969		memcpy(&fl, data, sz);
1970		flp = &fl;
1971	}
1972
1973	switch (sz) {
1974	case 16:
1975		btf_dump_type_values(d, "%Lf", flp->ld);
1976		break;
1977	case 8:
1978		btf_dump_type_values(d, "%lf", flp->d);
1979		break;
1980	case 4:
1981		btf_dump_type_values(d, "%f", flp->f);
1982		break;
1983	default:
1984		pr_warn("unexpected size %d for id [%u]\n", sz, type_id);
1985		return -EINVAL;
1986	}
1987	return 0;
1988}
1989
1990static int btf_dump_var_data(struct btf_dump *d,
1991			     const struct btf_type *v,
1992			     __u32 id,
1993			     const void *data)
1994{
1995	enum btf_func_linkage linkage = btf_var(v)->linkage;
1996	const struct btf_type *t;
1997	const char *l;
1998	__u32 type_id;
1999
2000	switch (linkage) {
2001	case BTF_FUNC_STATIC:
2002		l = "static ";
2003		break;
2004	case BTF_FUNC_EXTERN:
2005		l = "extern ";
2006		break;
2007	case BTF_FUNC_GLOBAL:
2008	default:
2009		l = "";
2010		break;
2011	}
2012
2013	/* format of output here is [linkage] [type] [varname] = (type)value,
2014	 * for example "static int cpu_profile_flip = (int)1"
2015	 */
2016	btf_dump_printf(d, "%s", l);
2017	type_id = v->type;
2018	t = btf__type_by_id(d->btf, type_id);
2019	btf_dump_emit_type_cast(d, type_id, false);
2020	btf_dump_printf(d, " %s = ", btf_name_of(d, v->name_off));
2021	return btf_dump_dump_type_data(d, NULL, t, type_id, data, 0, 0);
2022}
2023
2024static int btf_dump_array_data(struct btf_dump *d,
2025			       const struct btf_type *t,
2026			       __u32 id,
2027			       const void *data)
2028{
2029	const struct btf_array *array = btf_array(t);
2030	const struct btf_type *elem_type;
2031	__u32 i, elem_type_id;
2032	__s64 elem_size;
2033	bool is_array_member;
2034
2035	elem_type_id = array->type;
2036	elem_type = skip_mods_and_typedefs(d->btf, elem_type_id, NULL);
2037	elem_size = btf__resolve_size(d->btf, elem_type_id);
2038	if (elem_size <= 0) {
2039		pr_warn("unexpected elem size %zd for array type [%u]\n",
2040			(ssize_t)elem_size, id);
2041		return -EINVAL;
2042	}
2043
2044	if (btf_is_int(elem_type)) {
2045		/*
2046		 * BTF_INT_CHAR encoding never seems to be set for
2047		 * char arrays, so if size is 1 and element is
2048		 * printable as a char, we'll do that.
2049		 */
2050		if (elem_size == 1)
2051			d->typed_dump->is_array_char = true;
2052	}
2053
2054	/* note that we increment depth before calling btf_dump_print() below;
2055	 * this is intentional.  btf_dump_data_newline() will not print a
2056	 * newline for depth 0 (since this leaves us with trailing newlines
2057	 * at the end of typed display), so depth is incremented first.
2058	 * For similar reasons, we decrement depth before showing the closing
2059	 * parenthesis.
2060	 */
2061	d->typed_dump->depth++;
2062	btf_dump_printf(d, "[%s", btf_dump_data_newline(d));
2063
2064	/* may be a multidimensional array, so store current "is array member"
2065	 * status so we can restore it correctly later.
2066	 */
2067	is_array_member = d->typed_dump->is_array_member;
2068	d->typed_dump->is_array_member = true;
2069	for (i = 0; i < array->nelems; i++, data += elem_size) {
2070		if (d->typed_dump->is_array_terminated)
2071			break;
2072		btf_dump_dump_type_data(d, NULL, elem_type, elem_type_id, data, 0, 0);
2073	}
2074	d->typed_dump->is_array_member = is_array_member;
2075	d->typed_dump->depth--;
2076	btf_dump_data_pfx(d);
2077	btf_dump_type_values(d, "]");
2078
2079	return 0;
2080}
2081
2082static int btf_dump_struct_data(struct btf_dump *d,
2083				const struct btf_type *t,
2084				__u32 id,
2085				const void *data)
2086{
2087	const struct btf_member *m = btf_members(t);
2088	__u16 n = btf_vlen(t);
2089	int i, err = 0;
2090
2091	/* note that we increment depth before calling btf_dump_print() below;
2092	 * this is intentional.  btf_dump_data_newline() will not print a
2093	 * newline for depth 0 (since this leaves us with trailing newlines
2094	 * at the end of typed display), so depth is incremented first.
2095	 * For similar reasons, we decrement depth before showing the closing
2096	 * parenthesis.
2097	 */
2098	d->typed_dump->depth++;
2099	btf_dump_printf(d, "{%s", btf_dump_data_newline(d));
2100
2101	for (i = 0; i < n; i++, m++) {
2102		const struct btf_type *mtype;
2103		const char *mname;
2104		__u32 moffset;
2105		__u8 bit_sz;
2106
2107		mtype = btf__type_by_id(d->btf, m->type);
2108		mname = btf_name_of(d, m->name_off);
2109		moffset = btf_member_bit_offset(t, i);
2110
2111		bit_sz = btf_member_bitfield_size(t, i);
2112		err = btf_dump_dump_type_data(d, mname, mtype, m->type, data + moffset / 8,
2113					      moffset % 8, bit_sz);
2114		if (err < 0)
2115			return err;
2116	}
2117	d->typed_dump->depth--;
2118	btf_dump_data_pfx(d);
2119	btf_dump_type_values(d, "}");
2120	return err;
2121}
2122
2123union ptr_data {
2124	unsigned int p;
2125	unsigned long long lp;
2126};
2127
2128static int btf_dump_ptr_data(struct btf_dump *d,
2129			      const struct btf_type *t,
2130			      __u32 id,
2131			      const void *data)
2132{
2133	if (ptr_is_aligned(d->btf, id, data) && d->ptr_sz == sizeof(void *)) {
2134		btf_dump_type_values(d, "%p", *(void **)data);
2135	} else {
2136		union ptr_data pt;
2137
2138		memcpy(&pt, data, d->ptr_sz);
2139		if (d->ptr_sz == 4)
2140			btf_dump_type_values(d, "0x%x", pt.p);
2141		else
2142			btf_dump_type_values(d, "0x%llx", pt.lp);
2143	}
2144	return 0;
2145}
2146
2147static int btf_dump_get_enum_value(struct btf_dump *d,
2148				   const struct btf_type *t,
2149				   const void *data,
2150				   __u32 id,
2151				   __s64 *value)
2152{
2153	bool is_signed = btf_kflag(t);
2154
2155	if (!ptr_is_aligned(d->btf, id, data)) {
2156		__u64 val;
2157		int err;
2158
2159		err = btf_dump_get_bitfield_value(d, t, data, 0, 0, &val);
2160		if (err)
2161			return err;
2162		*value = (__s64)val;
2163		return 0;
2164	}
2165
2166	switch (t->size) {
2167	case 8:
2168		*value = *(__s64 *)data;
2169		return 0;
2170	case 4:
2171		*value = is_signed ? (__s64)*(__s32 *)data : *(__u32 *)data;
2172		return 0;
2173	case 2:
2174		*value = is_signed ? *(__s16 *)data : *(__u16 *)data;
2175		return 0;
2176	case 1:
2177		*value = is_signed ? *(__s8 *)data : *(__u8 *)data;
2178		return 0;
2179	default:
2180		pr_warn("unexpected size %d for enum, id:[%u]\n", t->size, id);
2181		return -EINVAL;
2182	}
2183}
2184
2185static int btf_dump_enum_data(struct btf_dump *d,
2186			      const struct btf_type *t,
2187			      __u32 id,
2188			      const void *data)
2189{
2190	bool is_signed;
2191	__s64 value;
2192	int i, err;
2193
2194	err = btf_dump_get_enum_value(d, t, data, id, &value);
2195	if (err)
2196		return err;
2197
2198	is_signed = btf_kflag(t);
2199	if (btf_is_enum(t)) {
2200		const struct btf_enum *e;
2201
2202		for (i = 0, e = btf_enum(t); i < btf_vlen(t); i++, e++) {
2203			if (value != e->val)
2204				continue;
2205			btf_dump_type_values(d, "%s", btf_name_of(d, e->name_off));
2206			return 0;
2207		}
2208
2209		btf_dump_type_values(d, is_signed ? "%d" : "%u", value);
2210	} else {
2211		const struct btf_enum64 *e;
2212
2213		for (i = 0, e = btf_enum64(t); i < btf_vlen(t); i++, e++) {
2214			if (value != btf_enum64_value(e))
2215				continue;
2216			btf_dump_type_values(d, "%s", btf_name_of(d, e->name_off));
2217			return 0;
2218		}
2219
2220		btf_dump_type_values(d, is_signed ? "%lldLL" : "%lluULL",
2221				     (unsigned long long)value);
2222	}
2223	return 0;
2224}
2225
2226static int btf_dump_datasec_data(struct btf_dump *d,
2227				 const struct btf_type *t,
2228				 __u32 id,
2229				 const void *data)
2230{
2231	const struct btf_var_secinfo *vsi;
2232	const struct btf_type *var;
2233	__u32 i;
2234	int err;
2235
2236	btf_dump_type_values(d, "SEC(\"%s\") ", btf_name_of(d, t->name_off));
2237
2238	for (i = 0, vsi = btf_var_secinfos(t); i < btf_vlen(t); i++, vsi++) {
2239		var = btf__type_by_id(d->btf, vsi->type);
2240		err = btf_dump_dump_type_data(d, NULL, var, vsi->type, data + vsi->offset, 0, 0);
2241		if (err < 0)
2242			return err;
2243		btf_dump_printf(d, ";");
2244	}
2245	return 0;
2246}
2247
2248/* return size of type, or if base type overflows, return -E2BIG. */
2249static int btf_dump_type_data_check_overflow(struct btf_dump *d,
2250					     const struct btf_type *t,
2251					     __u32 id,
2252					     const void *data,
2253					     __u8 bits_offset,
2254					     __u8 bit_sz)
2255{
2256	__s64 size;
2257
2258	if (bit_sz) {
2259		/* bits_offset is at most 7. bit_sz is at most 128. */
2260		__u8 nr_bytes = (bits_offset + bit_sz + 7) / 8;
2261
2262		/* When bit_sz is non zero, it is called from
2263		 * btf_dump_struct_data() where it only cares about
2264		 * negative error value.
2265		 * Return nr_bytes in success case to make it
2266		 * consistent as the regular integer case below.
2267		 */
2268		return data + nr_bytes > d->typed_dump->data_end ? -E2BIG : nr_bytes;
2269	}
2270
2271	size = btf__resolve_size(d->btf, id);
2272
2273	if (size < 0 || size >= INT_MAX) {
2274		pr_warn("unexpected size [%zu] for id [%u]\n",
2275			(size_t)size, id);
2276		return -EINVAL;
2277	}
2278
2279	/* Only do overflow checking for base types; we do not want to
2280	 * avoid showing part of a struct, union or array, even if we
2281	 * do not have enough data to show the full object.  By
2282	 * restricting overflow checking to base types we can ensure
2283	 * that partial display succeeds, while avoiding overflowing
2284	 * and using bogus data for display.
2285	 */
2286	t = skip_mods_and_typedefs(d->btf, id, NULL);
2287	if (!t) {
2288		pr_warn("unexpected error skipping mods/typedefs for id [%u]\n",
2289			id);
2290		return -EINVAL;
2291	}
2292
2293	switch (btf_kind(t)) {
2294	case BTF_KIND_INT:
2295	case BTF_KIND_FLOAT:
2296	case BTF_KIND_PTR:
2297	case BTF_KIND_ENUM:
2298	case BTF_KIND_ENUM64:
2299		if (data + bits_offset / 8 + size > d->typed_dump->data_end)
2300			return -E2BIG;
2301		break;
2302	default:
2303		break;
2304	}
2305	return (int)size;
2306}
2307
2308static int btf_dump_type_data_check_zero(struct btf_dump *d,
2309					 const struct btf_type *t,
2310					 __u32 id,
2311					 const void *data,
2312					 __u8 bits_offset,
2313					 __u8 bit_sz)
2314{
2315	__s64 value;
2316	int i, err;
2317
2318	/* toplevel exceptions; we show zero values if
2319	 * - we ask for them (emit_zeros)
2320	 * - if we are at top-level so we see "struct empty { }"
2321	 * - or if we are an array member and the array is non-empty and
2322	 *   not a char array; we don't want to be in a situation where we
2323	 *   have an integer array 0, 1, 0, 1 and only show non-zero values.
2324	 *   If the array contains zeroes only, or is a char array starting
2325	 *   with a '\0', the array-level check_zero() will prevent showing it;
2326	 *   we are concerned with determining zero value at the array member
2327	 *   level here.
2328	 */
2329	if (d->typed_dump->emit_zeroes || d->typed_dump->depth == 0 ||
2330	    (d->typed_dump->is_array_member &&
2331	     !d->typed_dump->is_array_char))
2332		return 0;
2333
2334	t = skip_mods_and_typedefs(d->btf, id, NULL);
2335
2336	switch (btf_kind(t)) {
2337	case BTF_KIND_INT:
2338		if (bit_sz)
2339			return btf_dump_bitfield_check_zero(d, t, data, bits_offset, bit_sz);
2340		return btf_dump_base_type_check_zero(d, t, id, data);
2341	case BTF_KIND_FLOAT:
2342	case BTF_KIND_PTR:
2343		return btf_dump_base_type_check_zero(d, t, id, data);
2344	case BTF_KIND_ARRAY: {
2345		const struct btf_array *array = btf_array(t);
2346		const struct btf_type *elem_type;
2347		__u32 elem_type_id, elem_size;
2348		bool ischar;
2349
2350		elem_type_id = array->type;
2351		elem_size = btf__resolve_size(d->btf, elem_type_id);
2352		elem_type = skip_mods_and_typedefs(d->btf, elem_type_id, NULL);
2353
2354		ischar = btf_is_int(elem_type) && elem_size == 1;
2355
2356		/* check all elements; if _any_ element is nonzero, all
2357		 * of array is displayed.  We make an exception however
2358		 * for char arrays where the first element is 0; these
2359		 * are considered zeroed also, even if later elements are
2360		 * non-zero because the string is terminated.
2361		 */
2362		for (i = 0; i < array->nelems; i++) {
2363			if (i == 0 && ischar && *(char *)data == 0)
2364				return -ENODATA;
2365			err = btf_dump_type_data_check_zero(d, elem_type,
2366							    elem_type_id,
2367							    data +
2368							    (i * elem_size),
2369							    bits_offset, 0);
2370			if (err != -ENODATA)
2371				return err;
2372		}
2373		return -ENODATA;
2374	}
2375	case BTF_KIND_STRUCT:
2376	case BTF_KIND_UNION: {
2377		const struct btf_member *m = btf_members(t);
2378		__u16 n = btf_vlen(t);
2379
2380		/* if any struct/union member is non-zero, the struct/union
2381		 * is considered non-zero and dumped.
2382		 */
2383		for (i = 0; i < n; i++, m++) {
2384			const struct btf_type *mtype;
2385			__u32 moffset;
2386
2387			mtype = btf__type_by_id(d->btf, m->type);
2388			moffset = btf_member_bit_offset(t, i);
2389
2390			/* btf_int_bits() does not store member bitfield size;
2391			 * bitfield size needs to be stored here so int display
2392			 * of member can retrieve it.
2393			 */
2394			bit_sz = btf_member_bitfield_size(t, i);
2395			err = btf_dump_type_data_check_zero(d, mtype, m->type, data + moffset / 8,
2396							    moffset % 8, bit_sz);
2397			if (err != ENODATA)
2398				return err;
2399		}
2400		return -ENODATA;
2401	}
2402	case BTF_KIND_ENUM:
2403	case BTF_KIND_ENUM64:
2404		err = btf_dump_get_enum_value(d, t, data, id, &value);
2405		if (err)
2406			return err;
2407		if (value == 0)
2408			return -ENODATA;
2409		return 0;
2410	default:
2411		return 0;
2412	}
2413}
2414
2415/* returns size of data dumped, or error. */
2416static int btf_dump_dump_type_data(struct btf_dump *d,
2417				   const char *fname,
2418				   const struct btf_type *t,
2419				   __u32 id,
2420				   const void *data,
2421				   __u8 bits_offset,
2422				   __u8 bit_sz)
2423{
2424	int size, err = 0;
2425
2426	size = btf_dump_type_data_check_overflow(d, t, id, data, bits_offset, bit_sz);
2427	if (size < 0)
2428		return size;
2429	err = btf_dump_type_data_check_zero(d, t, id, data, bits_offset, bit_sz);
2430	if (err) {
2431		/* zeroed data is expected and not an error, so simply skip
2432		 * dumping such data.  Record other errors however.
2433		 */
2434		if (err == -ENODATA)
2435			return size;
2436		return err;
2437	}
2438	btf_dump_data_pfx(d);
2439
2440	if (!d->typed_dump->skip_names) {
2441		if (fname && strlen(fname) > 0)
2442			btf_dump_printf(d, ".%s = ", fname);
2443		btf_dump_emit_type_cast(d, id, true);
2444	}
2445
2446	t = skip_mods_and_typedefs(d->btf, id, NULL);
2447
2448	switch (btf_kind(t)) {
2449	case BTF_KIND_UNKN:
2450	case BTF_KIND_FWD:
2451	case BTF_KIND_FUNC:
2452	case BTF_KIND_FUNC_PROTO:
2453	case BTF_KIND_DECL_TAG:
2454		err = btf_dump_unsupported_data(d, t, id);
2455		break;
2456	case BTF_KIND_INT:
2457		if (bit_sz)
2458			err = btf_dump_bitfield_data(d, t, data, bits_offset, bit_sz);
2459		else
2460			err = btf_dump_int_data(d, t, id, data, bits_offset);
2461		break;
2462	case BTF_KIND_FLOAT:
2463		err = btf_dump_float_data(d, t, id, data);
2464		break;
2465	case BTF_KIND_PTR:
2466		err = btf_dump_ptr_data(d, t, id, data);
2467		break;
2468	case BTF_KIND_ARRAY:
2469		err = btf_dump_array_data(d, t, id, data);
2470		break;
2471	case BTF_KIND_STRUCT:
2472	case BTF_KIND_UNION:
2473		err = btf_dump_struct_data(d, t, id, data);
2474		break;
2475	case BTF_KIND_ENUM:
2476	case BTF_KIND_ENUM64:
2477		/* handle bitfield and int enum values */
2478		if (bit_sz) {
2479			__u64 print_num;
2480			__s64 enum_val;
2481
2482			err = btf_dump_get_bitfield_value(d, t, data, bits_offset, bit_sz,
2483							  &print_num);
2484			if (err)
2485				break;
2486			enum_val = (__s64)print_num;
2487			err = btf_dump_enum_data(d, t, id, &enum_val);
2488		} else
2489			err = btf_dump_enum_data(d, t, id, data);
2490		break;
2491	case BTF_KIND_VAR:
2492		err = btf_dump_var_data(d, t, id, data);
2493		break;
2494	case BTF_KIND_DATASEC:
2495		err = btf_dump_datasec_data(d, t, id, data);
2496		break;
2497	default:
2498		pr_warn("unexpected kind [%u] for id [%u]\n",
2499			BTF_INFO_KIND(t->info), id);
2500		return -EINVAL;
2501	}
2502	if (err < 0)
2503		return err;
2504	return size;
2505}
2506
2507int btf_dump__dump_type_data(struct btf_dump *d, __u32 id,
2508			     const void *data, size_t data_sz,
2509			     const struct btf_dump_type_data_opts *opts)
2510{
2511	struct btf_dump_data typed_dump = {};
2512	const struct btf_type *t;
2513	int ret;
2514
2515	if (!OPTS_VALID(opts, btf_dump_type_data_opts))
2516		return libbpf_err(-EINVAL);
2517
2518	t = btf__type_by_id(d->btf, id);
2519	if (!t)
2520		return libbpf_err(-ENOENT);
2521
2522	d->typed_dump = &typed_dump;
2523	d->typed_dump->data_end = data + data_sz;
2524	d->typed_dump->indent_lvl = OPTS_GET(opts, indent_level, 0);
2525
2526	/* default indent string is a tab */
2527	if (!OPTS_GET(opts, indent_str, NULL))
2528		d->typed_dump->indent_str[0] = '\t';
2529	else
2530		libbpf_strlcpy(d->typed_dump->indent_str, opts->indent_str,
2531			       sizeof(d->typed_dump->indent_str));
2532
2533	d->typed_dump->compact = OPTS_GET(opts, compact, false);
2534	d->typed_dump->skip_names = OPTS_GET(opts, skip_names, false);
2535	d->typed_dump->emit_zeroes = OPTS_GET(opts, emit_zeroes, false);
2536
2537	ret = btf_dump_dump_type_data(d, NULL, t, id, data, 0, 0);
2538
2539	d->typed_dump = NULL;
2540
2541	return libbpf_err(ret);
2542}
   1// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
   2
   3/*
   4 * BTF-to-C type converter.
   5 *
   6 * Copyright (c) 2019 Facebook
   7 */
   8
   9#include <stdbool.h>
  10#include <stddef.h>
  11#include <stdlib.h>
  12#include <string.h>
 
 
  13#include <errno.h>
 
  14#include <linux/err.h>
  15#include <linux/btf.h>
  16#include <linux/kernel.h>
  17#include "btf.h"
  18#include "hashmap.h"
  19#include "libbpf.h"
  20#include "libbpf_internal.h"
  21
  22static const char PREFIXES[] = "\t\t\t\t\t\t\t\t\t\t\t\t\t";
  23static const size_t PREFIX_CNT = sizeof(PREFIXES) - 1;
  24
  25static const char *pfx(int lvl)
  26{
  27	return lvl >= PREFIX_CNT ? PREFIXES : &PREFIXES[PREFIX_CNT - lvl];
  28}
  29
  30enum btf_dump_type_order_state {
  31	NOT_ORDERED,
  32	ORDERING,
  33	ORDERED,
  34};
  35
  36enum btf_dump_type_emit_state {
  37	NOT_EMITTED,
  38	EMITTING,
  39	EMITTED,
  40};
  41
  42/* per-type auxiliary state */
  43struct btf_dump_type_aux_state {
  44	/* topological sorting state */
  45	enum btf_dump_type_order_state order_state: 2;
  46	/* emitting state used to determine the need for forward declaration */
  47	enum btf_dump_type_emit_state emit_state: 2;
  48	/* whether forward declaration was already emitted */
  49	__u8 fwd_emitted: 1;
  50	/* whether unique non-duplicate name was already assigned */
  51	__u8 name_resolved: 1;
  52	/* whether type is referenced from any other type */
  53	__u8 referenced: 1;
  54};
  55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  56struct btf_dump {
  57	const struct btf *btf;
  58	const struct btf_ext *btf_ext;
  59	btf_dump_printf_fn_t printf_fn;
  60	struct btf_dump_opts opts;
  61	int ptr_sz;
  62	bool strip_mods;
 
  63	int last_id;
  64
  65	/* per-type auxiliary state */
  66	struct btf_dump_type_aux_state *type_states;
  67	size_t type_states_cap;
  68	/* per-type optional cached unique name, must be freed, if present */
  69	const char **cached_names;
  70	size_t cached_names_cap;
  71
  72	/* topo-sorted list of dependent type definitions */
  73	__u32 *emit_queue;
  74	int emit_queue_cap;
  75	int emit_queue_cnt;
  76
  77	/*
  78	 * stack of type declarations (e.g., chain of modifiers, arrays,
  79	 * funcs, etc)
  80	 */
  81	__u32 *decl_stack;
  82	int decl_stack_cap;
  83	int decl_stack_cnt;
  84
  85	/* maps struct/union/enum name to a number of name occurrences */
  86	struct hashmap *type_names;
  87	/*
  88	 * maps typedef identifiers and enum value names to a number of such
  89	 * name occurrences
  90	 */
  91	struct hashmap *ident_names;
 
 
 
 
  92};
  93
  94static size_t str_hash_fn(const void *key, void *ctx)
  95{
  96	return str_hash(key);
  97}
  98
  99static bool str_equal_fn(const void *a, const void *b, void *ctx)
 100{
 101	return strcmp(a, b) == 0;
 102}
 103
 104static const char *btf_name_of(const struct btf_dump *d, __u32 name_off)
 105{
 106	return btf__name_by_offset(d->btf, name_off);
 107}
 108
 109static void btf_dump_printf(const struct btf_dump *d, const char *fmt, ...)
 110{
 111	va_list args;
 112
 113	va_start(args, fmt);
 114	d->printf_fn(d->opts.ctx, fmt, args);
 115	va_end(args);
 116}
 117
 118static int btf_dump_mark_referenced(struct btf_dump *d);
 119static int btf_dump_resize(struct btf_dump *d);
 120
 121struct btf_dump *btf_dump__new(const struct btf *btf,
 122			       const struct btf_ext *btf_ext,
 123			       const struct btf_dump_opts *opts,
 124			       btf_dump_printf_fn_t printf_fn)
 125{
 126	struct btf_dump *d;
 127	int err;
 128
 
 
 
 
 
 
 129	d = calloc(1, sizeof(struct btf_dump));
 130	if (!d)
 131		return libbpf_err_ptr(-ENOMEM);
 132
 133	d->btf = btf;
 134	d->btf_ext = btf_ext;
 135	d->printf_fn = printf_fn;
 136	d->opts.ctx = opts ? opts->ctx : NULL;
 137	d->ptr_sz = btf__pointer_size(btf) ? : sizeof(void *);
 138
 139	d->type_names = hashmap__new(str_hash_fn, str_equal_fn, NULL);
 140	if (IS_ERR(d->type_names)) {
 141		err = PTR_ERR(d->type_names);
 142		d->type_names = NULL;
 143		goto err;
 144	}
 145	d->ident_names = hashmap__new(str_hash_fn, str_equal_fn, NULL);
 146	if (IS_ERR(d->ident_names)) {
 147		err = PTR_ERR(d->ident_names);
 148		d->ident_names = NULL;
 149		goto err;
 150	}
 151
 152	err = btf_dump_resize(d);
 153	if (err)
 154		goto err;
 155
 156	return d;
 157err:
 158	btf_dump__free(d);
 159	return libbpf_err_ptr(err);
 160}
 161
 162static int btf_dump_resize(struct btf_dump *d)
 163{
 164	int err, last_id = btf__get_nr_types(d->btf);
 165
 166	if (last_id <= d->last_id)
 167		return 0;
 168
 169	if (libbpf_ensure_mem((void **)&d->type_states, &d->type_states_cap,
 170			      sizeof(*d->type_states), last_id + 1))
 171		return -ENOMEM;
 172	if (libbpf_ensure_mem((void **)&d->cached_names, &d->cached_names_cap,
 173			      sizeof(*d->cached_names), last_id + 1))
 174		return -ENOMEM;
 175
 176	if (d->last_id == 0) {
 177		/* VOID is special */
 178		d->type_states[0].order_state = ORDERED;
 179		d->type_states[0].emit_state = EMITTED;
 180	}
 181
 182	/* eagerly determine referenced types for anon enums */
 183	err = btf_dump_mark_referenced(d);
 184	if (err)
 185		return err;
 186
 187	d->last_id = last_id;
 188	return 0;
 189}
 190
 
 
 
 
 
 
 
 
 
 
 
 191void btf_dump__free(struct btf_dump *d)
 192{
 193	int i;
 194
 195	if (IS_ERR_OR_NULL(d))
 196		return;
 197
 198	free(d->type_states);
 199	if (d->cached_names) {
 200		/* any set cached name is owned by us and should be freed */
 201		for (i = 0; i <= d->last_id; i++) {
 202			if (d->cached_names[i])
 203				free((void *)d->cached_names[i]);
 204		}
 205	}
 206	free(d->cached_names);
 207	free(d->emit_queue);
 208	free(d->decl_stack);
 209	hashmap__free(d->type_names);
 210	hashmap__free(d->ident_names);
 211
 212	free(d);
 213}
 214
 215static int btf_dump_order_type(struct btf_dump *d, __u32 id, bool through_ptr);
 216static void btf_dump_emit_type(struct btf_dump *d, __u32 id, __u32 cont_id);
 217
 218/*
 219 * Dump BTF type in a compilable C syntax, including all the necessary
 220 * dependent types, necessary for compilation. If some of the dependent types
 221 * were already emitted as part of previous btf_dump__dump_type() invocation
 222 * for another type, they won't be emitted again. This API allows callers to
 223 * filter out BTF types according to user-defined criterias and emitted only
 224 * minimal subset of types, necessary to compile everything. Full struct/union
 225 * definitions will still be emitted, even if the only usage is through
 226 * pointer and could be satisfied with just a forward declaration.
 227 *
 228 * Dumping is done in two high-level passes:
 229 *   1. Topologically sort type definitions to satisfy C rules of compilation.
 230 *   2. Emit type definitions in C syntax.
 231 *
 232 * Returns 0 on success; <0, otherwise.
 233 */
 234int btf_dump__dump_type(struct btf_dump *d, __u32 id)
 235{
 236	int err, i;
 237
 238	if (id > btf__get_nr_types(d->btf))
 239		return libbpf_err(-EINVAL);
 240
 241	err = btf_dump_resize(d);
 242	if (err)
 243		return libbpf_err(err);
 244
 245	d->emit_queue_cnt = 0;
 246	err = btf_dump_order_type(d, id, false);
 247	if (err < 0)
 248		return libbpf_err(err);
 249
 250	for (i = 0; i < d->emit_queue_cnt; i++)
 251		btf_dump_emit_type(d, d->emit_queue[i], 0 /*top-level*/);
 252
 253	return 0;
 254}
 255
 256/*
 257 * Mark all types that are referenced from any other type. This is used to
 258 * determine top-level anonymous enums that need to be emitted as an
 259 * independent type declarations.
 260 * Anonymous enums come in two flavors: either embedded in a struct's field
 261 * definition, in which case they have to be declared inline as part of field
 262 * type declaration; or as a top-level anonymous enum, typically used for
 263 * declaring global constants. It's impossible to distinguish between two
 264 * without knowning whether given enum type was referenced from other type:
 265 * top-level anonymous enum won't be referenced by anything, while embedded
 266 * one will.
 267 */
 268static int btf_dump_mark_referenced(struct btf_dump *d)
 269{
 270	int i, j, n = btf__get_nr_types(d->btf);
 271	const struct btf_type *t;
 272	__u16 vlen;
 273
 274	for (i = d->last_id + 1; i <= n; i++) {
 275		t = btf__type_by_id(d->btf, i);
 276		vlen = btf_vlen(t);
 277
 278		switch (btf_kind(t)) {
 279		case BTF_KIND_INT:
 280		case BTF_KIND_ENUM:
 
 281		case BTF_KIND_FWD:
 282		case BTF_KIND_FLOAT:
 283			break;
 284
 285		case BTF_KIND_VOLATILE:
 286		case BTF_KIND_CONST:
 287		case BTF_KIND_RESTRICT:
 288		case BTF_KIND_PTR:
 289		case BTF_KIND_TYPEDEF:
 290		case BTF_KIND_FUNC:
 291		case BTF_KIND_VAR:
 
 
 292			d->type_states[t->type].referenced = 1;
 293			break;
 294
 295		case BTF_KIND_ARRAY: {
 296			const struct btf_array *a = btf_array(t);
 297
 298			d->type_states[a->index_type].referenced = 1;
 299			d->type_states[a->type].referenced = 1;
 300			break;
 301		}
 302		case BTF_KIND_STRUCT:
 303		case BTF_KIND_UNION: {
 304			const struct btf_member *m = btf_members(t);
 305
 306			for (j = 0; j < vlen; j++, m++)
 307				d->type_states[m->type].referenced = 1;
 308			break;
 309		}
 310		case BTF_KIND_FUNC_PROTO: {
 311			const struct btf_param *p = btf_params(t);
 312
 313			for (j = 0; j < vlen; j++, p++)
 314				d->type_states[p->type].referenced = 1;
 315			break;
 316		}
 317		case BTF_KIND_DATASEC: {
 318			const struct btf_var_secinfo *v = btf_var_secinfos(t);
 319
 320			for (j = 0; j < vlen; j++, v++)
 321				d->type_states[v->type].referenced = 1;
 322			break;
 323		}
 324		default:
 325			return -EINVAL;
 326		}
 327	}
 328	return 0;
 329}
 330
 331static int btf_dump_add_emit_queue_id(struct btf_dump *d, __u32 id)
 332{
 333	__u32 *new_queue;
 334	size_t new_cap;
 335
 336	if (d->emit_queue_cnt >= d->emit_queue_cap) {
 337		new_cap = max(16, d->emit_queue_cap * 3 / 2);
 338		new_queue = libbpf_reallocarray(d->emit_queue, new_cap, sizeof(new_queue[0]));
 339		if (!new_queue)
 340			return -ENOMEM;
 341		d->emit_queue = new_queue;
 342		d->emit_queue_cap = new_cap;
 343	}
 344
 345	d->emit_queue[d->emit_queue_cnt++] = id;
 346	return 0;
 347}
 348
 349/*
 350 * Determine order of emitting dependent types and specified type to satisfy
 351 * C compilation rules.  This is done through topological sorting with an
 352 * additional complication which comes from C rules. The main idea for C is
 353 * that if some type is "embedded" into a struct/union, it's size needs to be
 354 * known at the time of definition of containing type. E.g., for:
 355 *
 356 *	struct A {};
 357 *	struct B { struct A x; }
 358 *
 359 * struct A *HAS* to be defined before struct B, because it's "embedded",
 360 * i.e., it is part of struct B layout. But in the following case:
 361 *
 362 *	struct A;
 363 *	struct B { struct A *x; }
 364 *	struct A {};
 365 *
 366 * it's enough to just have a forward declaration of struct A at the time of
 367 * struct B definition, as struct B has a pointer to struct A, so the size of
 368 * field x is known without knowing struct A size: it's sizeof(void *).
 369 *
 370 * Unfortunately, there are some trickier cases we need to handle, e.g.:
 371 *
 372 *	struct A {}; // if this was forward-declaration: compilation error
 373 *	struct B {
 374 *		struct { // anonymous struct
 375 *			struct A y;
 376 *		} *x;
 377 *	};
 378 *
 379 * In this case, struct B's field x is a pointer, so it's size is known
 380 * regardless of the size of (anonymous) struct it points to. But because this
 381 * struct is anonymous and thus defined inline inside struct B, *and* it
 382 * embeds struct A, compiler requires full definition of struct A to be known
 383 * before struct B can be defined. This creates a transitive dependency
 384 * between struct A and struct B. If struct A was forward-declared before
 385 * struct B definition and fully defined after struct B definition, that would
 386 * trigger compilation error.
 387 *
 388 * All this means that while we are doing topological sorting on BTF type
 389 * graph, we need to determine relationships between different types (graph
 390 * nodes):
 391 *   - weak link (relationship) between X and Y, if Y *CAN* be
 392 *   forward-declared at the point of X definition;
 393 *   - strong link, if Y *HAS* to be fully-defined before X can be defined.
 394 *
 395 * The rule is as follows. Given a chain of BTF types from X to Y, if there is
 396 * BTF_KIND_PTR type in the chain and at least one non-anonymous type
 397 * Z (excluding X, including Y), then link is weak. Otherwise, it's strong.
 398 * Weak/strong relationship is determined recursively during DFS traversal and
 399 * is returned as a result from btf_dump_order_type().
 400 *
 401 * btf_dump_order_type() is trying to avoid unnecessary forward declarations,
 402 * but it is not guaranteeing that no extraneous forward declarations will be
 403 * emitted.
 404 *
 405 * To avoid extra work, algorithm marks some of BTF types as ORDERED, when
 406 * it's done with them, but not for all (e.g., VOLATILE, CONST, RESTRICT,
 407 * ARRAY, FUNC_PROTO), as weak/strong semantics for those depends on the
 408 * entire graph path, so depending where from one came to that BTF type, it
 409 * might cause weak or strong ordering. For types like STRUCT/UNION/INT/ENUM,
 410 * once they are processed, there is no need to do it again, so they are
 411 * marked as ORDERED. We can mark PTR as ORDERED as well, as it semi-forces
 412 * weak link, unless subsequent referenced STRUCT/UNION/ENUM is anonymous. But
 413 * in any case, once those are processed, no need to do it again, as the
 414 * result won't change.
 415 *
 416 * Returns:
 417 *   - 1, if type is part of strong link (so there is strong topological
 418 *   ordering requirements);
 419 *   - 0, if type is part of weak link (so can be satisfied through forward
 420 *   declaration);
 421 *   - <0, on error (e.g., unsatisfiable type loop detected).
 422 */
 423static int btf_dump_order_type(struct btf_dump *d, __u32 id, bool through_ptr)
 424{
 425	/*
 426	 * Order state is used to detect strong link cycles, but only for BTF
 427	 * kinds that are or could be an independent definition (i.e.,
 428	 * stand-alone fwd decl, enum, typedef, struct, union). Ptrs, arrays,
 429	 * func_protos, modifiers are just means to get to these definitions.
 430	 * Int/void don't need definitions, they are assumed to be always
 431	 * properly defined.  We also ignore datasec, var, and funcs for now.
 432	 * So for all non-defining kinds, we never even set ordering state,
 433	 * for defining kinds we set ORDERING and subsequently ORDERED if it
 434	 * forms a strong link.
 435	 */
 436	struct btf_dump_type_aux_state *tstate = &d->type_states[id];
 437	const struct btf_type *t;
 438	__u16 vlen;
 439	int err, i;
 440
 441	/* return true, letting typedefs know that it's ok to be emitted */
 442	if (tstate->order_state == ORDERED)
 443		return 1;
 444
 445	t = btf__type_by_id(d->btf, id);
 446
 447	if (tstate->order_state == ORDERING) {
 448		/* type loop, but resolvable through fwd declaration */
 449		if (btf_is_composite(t) && through_ptr && t->name_off != 0)
 450			return 0;
 451		pr_warn("unsatisfiable type cycle, id:[%u]\n", id);
 452		return -ELOOP;
 453	}
 454
 455	switch (btf_kind(t)) {
 456	case BTF_KIND_INT:
 457	case BTF_KIND_FLOAT:
 458		tstate->order_state = ORDERED;
 459		return 0;
 460
 461	case BTF_KIND_PTR:
 462		err = btf_dump_order_type(d, t->type, true);
 463		tstate->order_state = ORDERED;
 464		return err;
 465
 466	case BTF_KIND_ARRAY:
 467		return btf_dump_order_type(d, btf_array(t)->type, false);
 468
 469	case BTF_KIND_STRUCT:
 470	case BTF_KIND_UNION: {
 471		const struct btf_member *m = btf_members(t);
 472		/*
 473		 * struct/union is part of strong link, only if it's embedded
 474		 * (so no ptr in a path) or it's anonymous (so has to be
 475		 * defined inline, even if declared through ptr)
 476		 */
 477		if (through_ptr && t->name_off != 0)
 478			return 0;
 479
 480		tstate->order_state = ORDERING;
 481
 482		vlen = btf_vlen(t);
 483		for (i = 0; i < vlen; i++, m++) {
 484			err = btf_dump_order_type(d, m->type, false);
 485			if (err < 0)
 486				return err;
 487		}
 488
 489		if (t->name_off != 0) {
 490			err = btf_dump_add_emit_queue_id(d, id);
 491			if (err < 0)
 492				return err;
 493		}
 494
 495		tstate->order_state = ORDERED;
 496		return 1;
 497	}
 498	case BTF_KIND_ENUM:
 
 499	case BTF_KIND_FWD:
 500		/*
 501		 * non-anonymous or non-referenced enums are top-level
 502		 * declarations and should be emitted. Same logic can be
 503		 * applied to FWDs, it won't hurt anyways.
 504		 */
 505		if (t->name_off != 0 || !tstate->referenced) {
 506			err = btf_dump_add_emit_queue_id(d, id);
 507			if (err)
 508				return err;
 509		}
 510		tstate->order_state = ORDERED;
 511		return 1;
 512
 513	case BTF_KIND_TYPEDEF: {
 514		int is_strong;
 515
 516		is_strong = btf_dump_order_type(d, t->type, through_ptr);
 517		if (is_strong < 0)
 518			return is_strong;
 519
 520		/* typedef is similar to struct/union w.r.t. fwd-decls */
 521		if (through_ptr && !is_strong)
 522			return 0;
 523
 524		/* typedef is always a named definition */
 525		err = btf_dump_add_emit_queue_id(d, id);
 526		if (err)
 527			return err;
 528
 529		d->type_states[id].order_state = ORDERED;
 530		return 1;
 531	}
 532	case BTF_KIND_VOLATILE:
 533	case BTF_KIND_CONST:
 534	case BTF_KIND_RESTRICT:
 
 535		return btf_dump_order_type(d, t->type, through_ptr);
 536
 537	case BTF_KIND_FUNC_PROTO: {
 538		const struct btf_param *p = btf_params(t);
 539		bool is_strong;
 540
 541		err = btf_dump_order_type(d, t->type, through_ptr);
 542		if (err < 0)
 543			return err;
 544		is_strong = err > 0;
 545
 546		vlen = btf_vlen(t);
 547		for (i = 0; i < vlen; i++, p++) {
 548			err = btf_dump_order_type(d, p->type, through_ptr);
 549			if (err < 0)
 550				return err;
 551			if (err > 0)
 552				is_strong = true;
 553		}
 554		return is_strong;
 555	}
 556	case BTF_KIND_FUNC:
 557	case BTF_KIND_VAR:
 558	case BTF_KIND_DATASEC:
 
 559		d->type_states[id].order_state = ORDERED;
 560		return 0;
 561
 562	default:
 563		return -EINVAL;
 564	}
 565}
 566
 567static void btf_dump_emit_missing_aliases(struct btf_dump *d, __u32 id,
 568					  const struct btf_type *t);
 569
 570static void btf_dump_emit_struct_fwd(struct btf_dump *d, __u32 id,
 571				     const struct btf_type *t);
 572static void btf_dump_emit_struct_def(struct btf_dump *d, __u32 id,
 573				     const struct btf_type *t, int lvl);
 574
 575static void btf_dump_emit_enum_fwd(struct btf_dump *d, __u32 id,
 576				   const struct btf_type *t);
 577static void btf_dump_emit_enum_def(struct btf_dump *d, __u32 id,
 578				   const struct btf_type *t, int lvl);
 579
 580static void btf_dump_emit_fwd_def(struct btf_dump *d, __u32 id,
 581				  const struct btf_type *t);
 582
 583static void btf_dump_emit_typedef_def(struct btf_dump *d, __u32 id,
 584				      const struct btf_type *t, int lvl);
 585
 586/* a local view into a shared stack */
 587struct id_stack {
 588	const __u32 *ids;
 589	int cnt;
 590};
 591
 592static void btf_dump_emit_type_decl(struct btf_dump *d, __u32 id,
 593				    const char *fname, int lvl);
 594static void btf_dump_emit_type_chain(struct btf_dump *d,
 595				     struct id_stack *decl_stack,
 596				     const char *fname, int lvl);
 597
 598static const char *btf_dump_type_name(struct btf_dump *d, __u32 id);
 599static const char *btf_dump_ident_name(struct btf_dump *d, __u32 id);
 600static size_t btf_dump_name_dups(struct btf_dump *d, struct hashmap *name_map,
 601				 const char *orig_name);
 602
 603static bool btf_dump_is_blacklisted(struct btf_dump *d, __u32 id)
 604{
 605	const struct btf_type *t = btf__type_by_id(d->btf, id);
 606
 607	/* __builtin_va_list is a compiler built-in, which causes compilation
 608	 * errors, when compiling w/ different compiler, then used to compile
 609	 * original code (e.g., GCC to compile kernel, Clang to use generated
 610	 * C header from BTF). As it is built-in, it should be already defined
 611	 * properly internally in compiler.
 612	 */
 613	if (t->name_off == 0)
 614		return false;
 615	return strcmp(btf_name_of(d, t->name_off), "__builtin_va_list") == 0;
 616}
 617
 618/*
 619 * Emit C-syntax definitions of types from chains of BTF types.
 620 *
 621 * High-level handling of determining necessary forward declarations are handled
 622 * by btf_dump_emit_type() itself, but all nitty-gritty details of emitting type
 623 * declarations/definitions in C syntax  are handled by a combo of
 624 * btf_dump_emit_type_decl()/btf_dump_emit_type_chain() w/ delegation to
 625 * corresponding btf_dump_emit_*_{def,fwd}() functions.
 626 *
 627 * We also keep track of "containing struct/union type ID" to determine when
 628 * we reference it from inside and thus can avoid emitting unnecessary forward
 629 * declaration.
 630 *
 631 * This algorithm is designed in such a way, that even if some error occurs
 632 * (either technical, e.g., out of memory, or logical, i.e., malformed BTF
 633 * that doesn't comply to C rules completely), algorithm will try to proceed
 634 * and produce as much meaningful output as possible.
 635 */
 636static void btf_dump_emit_type(struct btf_dump *d, __u32 id, __u32 cont_id)
 637{
 638	struct btf_dump_type_aux_state *tstate = &d->type_states[id];
 639	bool top_level_def = cont_id == 0;
 640	const struct btf_type *t;
 641	__u16 kind;
 642
 643	if (tstate->emit_state == EMITTED)
 644		return;
 645
 646	t = btf__type_by_id(d->btf, id);
 647	kind = btf_kind(t);
 648
 649	if (tstate->emit_state == EMITTING) {
 650		if (tstate->fwd_emitted)
 651			return;
 652
 653		switch (kind) {
 654		case BTF_KIND_STRUCT:
 655		case BTF_KIND_UNION:
 656			/*
 657			 * if we are referencing a struct/union that we are
 658			 * part of - then no need for fwd declaration
 659			 */
 660			if (id == cont_id)
 661				return;
 662			if (t->name_off == 0) {
 663				pr_warn("anonymous struct/union loop, id:[%u]\n",
 664					id);
 665				return;
 666			}
 667			btf_dump_emit_struct_fwd(d, id, t);
 668			btf_dump_printf(d, ";\n\n");
 669			tstate->fwd_emitted = 1;
 670			break;
 671		case BTF_KIND_TYPEDEF:
 672			/*
 673			 * for typedef fwd_emitted means typedef definition
 674			 * was emitted, but it can be used only for "weak"
 675			 * references through pointer only, not for embedding
 676			 */
 677			if (!btf_dump_is_blacklisted(d, id)) {
 678				btf_dump_emit_typedef_def(d, id, t, 0);
 679				btf_dump_printf(d, ";\n\n");
 680			}
 681			tstate->fwd_emitted = 1;
 682			break;
 683		default:
 684			break;
 685		}
 686
 687		return;
 688	}
 689
 690	switch (kind) {
 691	case BTF_KIND_INT:
 692		/* Emit type alias definitions if necessary */
 693		btf_dump_emit_missing_aliases(d, id, t);
 694
 695		tstate->emit_state = EMITTED;
 696		break;
 697	case BTF_KIND_ENUM:
 
 698		if (top_level_def) {
 699			btf_dump_emit_enum_def(d, id, t, 0);
 700			btf_dump_printf(d, ";\n\n");
 701		}
 702		tstate->emit_state = EMITTED;
 703		break;
 704	case BTF_KIND_PTR:
 705	case BTF_KIND_VOLATILE:
 706	case BTF_KIND_CONST:
 707	case BTF_KIND_RESTRICT:
 
 708		btf_dump_emit_type(d, t->type, cont_id);
 709		break;
 710	case BTF_KIND_ARRAY:
 711		btf_dump_emit_type(d, btf_array(t)->type, cont_id);
 712		break;
 713	case BTF_KIND_FWD:
 714		btf_dump_emit_fwd_def(d, id, t);
 715		btf_dump_printf(d, ";\n\n");
 716		tstate->emit_state = EMITTED;
 717		break;
 718	case BTF_KIND_TYPEDEF:
 719		tstate->emit_state = EMITTING;
 720		btf_dump_emit_type(d, t->type, id);
 721		/*
 722		 * typedef can server as both definition and forward
 723		 * declaration; at this stage someone depends on
 724		 * typedef as a forward declaration (refers to it
 725		 * through pointer), so unless we already did it,
 726		 * emit typedef as a forward declaration
 727		 */
 728		if (!tstate->fwd_emitted && !btf_dump_is_blacklisted(d, id)) {
 729			btf_dump_emit_typedef_def(d, id, t, 0);
 730			btf_dump_printf(d, ";\n\n");
 731		}
 732		tstate->emit_state = EMITTED;
 733		break;
 734	case BTF_KIND_STRUCT:
 735	case BTF_KIND_UNION:
 736		tstate->emit_state = EMITTING;
 737		/* if it's a top-level struct/union definition or struct/union
 738		 * is anonymous, then in C we'll be emitting all fields and
 739		 * their types (as opposed to just `struct X`), so we need to
 740		 * make sure that all types, referenced from struct/union
 741		 * members have necessary forward-declarations, where
 742		 * applicable
 743		 */
 744		if (top_level_def || t->name_off == 0) {
 745			const struct btf_member *m = btf_members(t);
 746			__u16 vlen = btf_vlen(t);
 747			int i, new_cont_id;
 748
 749			new_cont_id = t->name_off == 0 ? cont_id : id;
 750			for (i = 0; i < vlen; i++, m++)
 751				btf_dump_emit_type(d, m->type, new_cont_id);
 752		} else if (!tstate->fwd_emitted && id != cont_id) {
 753			btf_dump_emit_struct_fwd(d, id, t);
 754			btf_dump_printf(d, ";\n\n");
 755			tstate->fwd_emitted = 1;
 756		}
 757
 758		if (top_level_def) {
 759			btf_dump_emit_struct_def(d, id, t, 0);
 760			btf_dump_printf(d, ";\n\n");
 761			tstate->emit_state = EMITTED;
 762		} else {
 763			tstate->emit_state = NOT_EMITTED;
 764		}
 765		break;
 766	case BTF_KIND_FUNC_PROTO: {
 767		const struct btf_param *p = btf_params(t);
 768		__u16 vlen = btf_vlen(t);
 769		int i;
 770
 771		btf_dump_emit_type(d, t->type, cont_id);
 772		for (i = 0; i < vlen; i++, p++)
 773			btf_dump_emit_type(d, p->type, cont_id);
 774
 775		break;
 776	}
 777	default:
 778		break;
 779	}
 780}
 781
 782static bool btf_is_struct_packed(const struct btf *btf, __u32 id,
 783				 const struct btf_type *t)
 784{
 785	const struct btf_member *m;
 786	int align, i, bit_sz;
 787	__u16 vlen;
 788
 789	align = btf__align_of(btf, id);
 790	/* size of a non-packed struct has to be a multiple of its alignment*/
 791	if (align && t->size % align)
 792		return true;
 793
 794	m = btf_members(t);
 795	vlen = btf_vlen(t);
 796	/* all non-bitfield fields have to be naturally aligned */
 797	for (i = 0; i < vlen; i++, m++) {
 798		align = btf__align_of(btf, m->type);
 799		bit_sz = btf_member_bitfield_size(t, i);
 800		if (align && bit_sz == 0 && m->offset % (8 * align) != 0)
 801			return true;
 
 802	}
 803
 
 
 804	/*
 805	 * if original struct was marked as packed, but its layout is
 806	 * naturally aligned, we'll detect that it's not packed
 807	 */
 808	return false;
 809}
 810
 811static int chip_away_bits(int total, int at_most)
 
 
 812{
 813	return total % at_most ? : at_most;
 814}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 815
 816static void btf_dump_emit_bit_padding(const struct btf_dump *d,
 817				      int cur_off, int m_off, int m_bit_sz,
 818				      int align, int lvl)
 819{
 820	int off_diff = m_off - cur_off;
 821	int ptr_bits = d->ptr_sz * 8;
 
 
 
 
 
 
 
 
 
 
 
 
 822
 823	if (off_diff <= 0)
 824		/* no gap */
 825		return;
 826	if (m_bit_sz == 0 && off_diff < align * 8)
 827		/* natural padding will take care of a gap */
 828		return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 829
 830	while (off_diff > 0) {
 831		const char *pad_type;
 832		int pad_bits;
 833
 834		if (ptr_bits > 32 && off_diff > 32) {
 835			pad_type = "long";
 836			pad_bits = chip_away_bits(off_diff, ptr_bits);
 837		} else if (off_diff > 16) {
 838			pad_type = "int";
 839			pad_bits = chip_away_bits(off_diff, 32);
 840		} else if (off_diff > 8) {
 841			pad_type = "short";
 842			pad_bits = chip_away_bits(off_diff, 16);
 843		} else {
 844			pad_type = "char";
 845			pad_bits = chip_away_bits(off_diff, 8);
 846		}
 847		btf_dump_printf(d, "\n%s%s: %d;", pfx(lvl), pad_type, pad_bits);
 848		off_diff -= pad_bits;
 849	}
 850}
 851
 852static void btf_dump_emit_struct_fwd(struct btf_dump *d, __u32 id,
 853				     const struct btf_type *t)
 854{
 855	btf_dump_printf(d, "%s %s",
 856			btf_is_struct(t) ? "struct" : "union",
 
 857			btf_dump_type_name(d, id));
 858}
 859
 860static void btf_dump_emit_struct_def(struct btf_dump *d,
 861				     __u32 id,
 862				     const struct btf_type *t,
 863				     int lvl)
 864{
 865	const struct btf_member *m = btf_members(t);
 866	bool is_struct = btf_is_struct(t);
 867	int align, i, packed, off = 0;
 
 868	__u16 vlen = btf_vlen(t);
 869
 
 870	packed = is_struct ? btf_is_struct_packed(d->btf, id, t) : 0;
 871
 872	btf_dump_printf(d, "%s%s%s {",
 873			is_struct ? "struct" : "union",
 874			t->name_off ? " " : "",
 875			btf_dump_type_name(d, id));
 876
 877	for (i = 0; i < vlen; i++, m++) {
 878		const char *fname;
 879		int m_off, m_sz;
 
 880
 881		fname = btf_name_of(d, m->name_off);
 882		m_sz = btf_member_bitfield_size(t, i);
 883		m_off = btf_member_bit_offset(t, i);
 884		align = packed ? 1 : btf__align_of(d->btf, m->type);
 
 
 885
 886		btf_dump_emit_bit_padding(d, off, m_off, m_sz, align, lvl + 1);
 887		btf_dump_printf(d, "\n%s", pfx(lvl + 1));
 888		btf_dump_emit_type_decl(d, m->type, fname, lvl + 1);
 889
 890		if (m_sz) {
 891			btf_dump_printf(d, ": %d", m_sz);
 892			off = m_off + m_sz;
 
 893		} else {
 894			m_sz = max((__s64)0, btf__resolve_size(d->btf, m->type));
 895			off = m_off + m_sz * 8;
 
 896		}
 
 897		btf_dump_printf(d, ";");
 898	}
 899
 900	/* pad at the end, if necessary */
 901	if (is_struct) {
 902		align = packed ? 1 : btf__align_of(d->btf, id);
 903		btf_dump_emit_bit_padding(d, off, t->size * 8, 0, align,
 904					  lvl + 1);
 905	}
 906
 907	if (vlen)
 
 
 
 
 908		btf_dump_printf(d, "\n");
 909	btf_dump_printf(d, "%s}", pfx(lvl));
 
 
 
 910	if (packed)
 911		btf_dump_printf(d, " __attribute__((packed))");
 912}
 913
 914static const char *missing_base_types[][2] = {
 915	/*
 916	 * GCC emits typedefs to its internal __PolyX_t types when compiling Arm
 917	 * SIMD intrinsics. Alias them to standard base types.
 918	 */
 919	{ "__Poly8_t",		"unsigned char" },
 920	{ "__Poly16_t",		"unsigned short" },
 921	{ "__Poly64_t",		"unsigned long long" },
 922	{ "__Poly128_t",	"unsigned __int128" },
 923};
 924
 925static void btf_dump_emit_missing_aliases(struct btf_dump *d, __u32 id,
 926					  const struct btf_type *t)
 927{
 928	const char *name = btf_dump_type_name(d, id);
 929	int i;
 930
 931	for (i = 0; i < ARRAY_SIZE(missing_base_types); i++) {
 932		if (strcmp(name, missing_base_types[i][0]) == 0) {
 933			btf_dump_printf(d, "typedef %s %s;\n\n",
 934					missing_base_types[i][1], name);
 935			break;
 936		}
 937	}
 938}
 939
 940static void btf_dump_emit_enum_fwd(struct btf_dump *d, __u32 id,
 941				   const struct btf_type *t)
 942{
 943	btf_dump_printf(d, "enum %s", btf_dump_type_name(d, id));
 944}
 945
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 946static void btf_dump_emit_enum_def(struct btf_dump *d, __u32 id,
 947				   const struct btf_type *t,
 948				   int lvl)
 949{
 950	const struct btf_enum *v = btf_enum(t);
 951	__u16 vlen = btf_vlen(t);
 952	const char *name;
 953	size_t dup_cnt;
 954	int i;
 955
 956	btf_dump_printf(d, "enum%s%s",
 957			t->name_off ? " " : "",
 958			btf_dump_type_name(d, id));
 959
 960	if (vlen) {
 961		btf_dump_printf(d, " {");
 962		for (i = 0; i < vlen; i++, v++) {
 963			name = btf_name_of(d, v->name_off);
 964			/* enumerators share namespace with typedef idents */
 965			dup_cnt = btf_dump_name_dups(d, d->ident_names, name);
 966			if (dup_cnt > 1) {
 967				btf_dump_printf(d, "\n%s%s___%zu = %u,",
 968						pfx(lvl + 1), name, dup_cnt,
 969						(__u32)v->val);
 970			} else {
 971				btf_dump_printf(d, "\n%s%s = %u,",
 972						pfx(lvl + 1), name,
 973						(__u32)v->val);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 974			}
 975		}
 976		btf_dump_printf(d, "\n%s}", pfx(lvl));
 
 977	}
 
 978}
 979
 980static void btf_dump_emit_fwd_def(struct btf_dump *d, __u32 id,
 981				  const struct btf_type *t)
 982{
 983	const char *name = btf_dump_type_name(d, id);
 984
 985	if (btf_kflag(t))
 986		btf_dump_printf(d, "union %s", name);
 987	else
 988		btf_dump_printf(d, "struct %s", name);
 989}
 990
 991static void btf_dump_emit_typedef_def(struct btf_dump *d, __u32 id,
 992				     const struct btf_type *t, int lvl)
 993{
 994	const char *name = btf_dump_ident_name(d, id);
 995
 996	/*
 997	 * Old GCC versions are emitting invalid typedef for __gnuc_va_list
 998	 * pointing to VOID. This generates warnings from btf_dump() and
 999	 * results in uncompilable header file, so we are fixing it up here
1000	 * with valid typedef into __builtin_va_list.
1001	 */
1002	if (t->type == 0 && strcmp(name, "__gnuc_va_list") == 0) {
1003		btf_dump_printf(d, "typedef __builtin_va_list __gnuc_va_list");
1004		return;
1005	}
1006
1007	btf_dump_printf(d, "typedef ");
1008	btf_dump_emit_type_decl(d, t->type, name, lvl);
1009}
1010
1011static int btf_dump_push_decl_stack_id(struct btf_dump *d, __u32 id)
1012{
1013	__u32 *new_stack;
1014	size_t new_cap;
1015
1016	if (d->decl_stack_cnt >= d->decl_stack_cap) {
1017		new_cap = max(16, d->decl_stack_cap * 3 / 2);
1018		new_stack = libbpf_reallocarray(d->decl_stack, new_cap, sizeof(new_stack[0]));
1019		if (!new_stack)
1020			return -ENOMEM;
1021		d->decl_stack = new_stack;
1022		d->decl_stack_cap = new_cap;
1023	}
1024
1025	d->decl_stack[d->decl_stack_cnt++] = id;
1026
1027	return 0;
1028}
1029
1030/*
1031 * Emit type declaration (e.g., field type declaration in a struct or argument
1032 * declaration in function prototype) in correct C syntax.
1033 *
1034 * For most types it's trivial, but there are few quirky type declaration
1035 * cases worth mentioning:
1036 *   - function prototypes (especially nesting of function prototypes);
1037 *   - arrays;
1038 *   - const/volatile/restrict for pointers vs other types.
1039 *
1040 * For a good discussion of *PARSING* C syntax (as a human), see
1041 * Peter van der Linden's "Expert C Programming: Deep C Secrets",
1042 * Ch.3 "Unscrambling Declarations in C".
1043 *
1044 * It won't help with BTF to C conversion much, though, as it's an opposite
1045 * problem. So we came up with this algorithm in reverse to van der Linden's
1046 * parsing algorithm. It goes from structured BTF representation of type
1047 * declaration to a valid compilable C syntax.
1048 *
1049 * For instance, consider this C typedef:
1050 *	typedef const int * const * arr[10] arr_t;
1051 * It will be represented in BTF with this chain of BTF types:
1052 *	[typedef] -> [array] -> [ptr] -> [const] -> [ptr] -> [const] -> [int]
1053 *
1054 * Notice how [const] modifier always goes before type it modifies in BTF type
1055 * graph, but in C syntax, const/volatile/restrict modifiers are written to
1056 * the right of pointers, but to the left of other types. There are also other
1057 * quirks, like function pointers, arrays of them, functions returning other
1058 * functions, etc.
1059 *
1060 * We handle that by pushing all the types to a stack, until we hit "terminal"
1061 * type (int/enum/struct/union/fwd). Then depending on the kind of a type on
1062 * top of a stack, modifiers are handled differently. Array/function pointers
1063 * have also wildly different syntax and how nesting of them are done. See
1064 * code for authoritative definition.
1065 *
1066 * To avoid allocating new stack for each independent chain of BTF types, we
1067 * share one bigger stack, with each chain working only on its own local view
1068 * of a stack frame. Some care is required to "pop" stack frames after
1069 * processing type declaration chain.
1070 */
1071int btf_dump__emit_type_decl(struct btf_dump *d, __u32 id,
1072			     const struct btf_dump_emit_type_decl_opts *opts)
1073{
1074	const char *fname;
1075	int lvl, err;
1076
1077	if (!OPTS_VALID(opts, btf_dump_emit_type_decl_opts))
1078		return libbpf_err(-EINVAL);
1079
1080	err = btf_dump_resize(d);
1081	if (err)
1082		return libbpf_err(err);
1083
1084	fname = OPTS_GET(opts, field_name, "");
1085	lvl = OPTS_GET(opts, indent_level, 0);
1086	d->strip_mods = OPTS_GET(opts, strip_mods, false);
1087	btf_dump_emit_type_decl(d, id, fname, lvl);
1088	d->strip_mods = false;
1089	return 0;
1090}
1091
1092static void btf_dump_emit_type_decl(struct btf_dump *d, __u32 id,
1093				    const char *fname, int lvl)
1094{
1095	struct id_stack decl_stack;
1096	const struct btf_type *t;
1097	int err, stack_start;
1098
1099	stack_start = d->decl_stack_cnt;
1100	for (;;) {
1101		t = btf__type_by_id(d->btf, id);
1102		if (d->strip_mods && btf_is_mod(t))
1103			goto skip_mod;
1104
1105		err = btf_dump_push_decl_stack_id(d, id);
1106		if (err < 0) {
1107			/*
1108			 * if we don't have enough memory for entire type decl
1109			 * chain, restore stack, emit warning, and try to
1110			 * proceed nevertheless
1111			 */
1112			pr_warn("not enough memory for decl stack:%d", err);
1113			d->decl_stack_cnt = stack_start;
1114			return;
1115		}
1116skip_mod:
1117		/* VOID */
1118		if (id == 0)
1119			break;
1120
1121		switch (btf_kind(t)) {
1122		case BTF_KIND_PTR:
1123		case BTF_KIND_VOLATILE:
1124		case BTF_KIND_CONST:
1125		case BTF_KIND_RESTRICT:
1126		case BTF_KIND_FUNC_PROTO:
 
1127			id = t->type;
1128			break;
1129		case BTF_KIND_ARRAY:
1130			id = btf_array(t)->type;
1131			break;
1132		case BTF_KIND_INT:
1133		case BTF_KIND_ENUM:
 
1134		case BTF_KIND_FWD:
1135		case BTF_KIND_STRUCT:
1136		case BTF_KIND_UNION:
1137		case BTF_KIND_TYPEDEF:
1138		case BTF_KIND_FLOAT:
1139			goto done;
1140		default:
1141			pr_warn("unexpected type in decl chain, kind:%u, id:[%u]\n",
1142				btf_kind(t), id);
1143			goto done;
1144		}
1145	}
1146done:
1147	/*
1148	 * We might be inside a chain of declarations (e.g., array of function
1149	 * pointers returning anonymous (so inlined) structs, having another
1150	 * array field). Each of those needs its own "stack frame" to handle
1151	 * emitting of declarations. Those stack frames are non-overlapping
1152	 * portions of shared btf_dump->decl_stack. To make it a bit nicer to
1153	 * handle this set of nested stacks, we create a view corresponding to
1154	 * our own "stack frame" and work with it as an independent stack.
1155	 * We'll need to clean up after emit_type_chain() returns, though.
1156	 */
1157	decl_stack.ids = d->decl_stack + stack_start;
1158	decl_stack.cnt = d->decl_stack_cnt - stack_start;
1159	btf_dump_emit_type_chain(d, &decl_stack, fname, lvl);
1160	/*
1161	 * emit_type_chain() guarantees that it will pop its entire decl_stack
1162	 * frame before returning. But it works with a read-only view into
1163	 * decl_stack, so it doesn't actually pop anything from the
1164	 * perspective of shared btf_dump->decl_stack, per se. We need to
1165	 * reset decl_stack state to how it was before us to avoid it growing
1166	 * all the time.
1167	 */
1168	d->decl_stack_cnt = stack_start;
1169}
1170
1171static void btf_dump_emit_mods(struct btf_dump *d, struct id_stack *decl_stack)
1172{
1173	const struct btf_type *t;
1174	__u32 id;
1175
1176	while (decl_stack->cnt) {
1177		id = decl_stack->ids[decl_stack->cnt - 1];
1178		t = btf__type_by_id(d->btf, id);
1179
1180		switch (btf_kind(t)) {
1181		case BTF_KIND_VOLATILE:
1182			btf_dump_printf(d, "volatile ");
1183			break;
1184		case BTF_KIND_CONST:
1185			btf_dump_printf(d, "const ");
1186			break;
1187		case BTF_KIND_RESTRICT:
1188			btf_dump_printf(d, "restrict ");
1189			break;
1190		default:
1191			return;
1192		}
1193		decl_stack->cnt--;
1194	}
1195}
1196
1197static void btf_dump_drop_mods(struct btf_dump *d, struct id_stack *decl_stack)
1198{
1199	const struct btf_type *t;
1200	__u32 id;
1201
1202	while (decl_stack->cnt) {
1203		id = decl_stack->ids[decl_stack->cnt - 1];
1204		t = btf__type_by_id(d->btf, id);
1205		if (!btf_is_mod(t))
1206			return;
1207		decl_stack->cnt--;
1208	}
1209}
1210
1211static void btf_dump_emit_name(const struct btf_dump *d,
1212			       const char *name, bool last_was_ptr)
1213{
1214	bool separate = name[0] && !last_was_ptr;
1215
1216	btf_dump_printf(d, "%s%s", separate ? " " : "", name);
1217}
1218
1219static void btf_dump_emit_type_chain(struct btf_dump *d,
1220				     struct id_stack *decls,
1221				     const char *fname, int lvl)
1222{
1223	/*
1224	 * last_was_ptr is used to determine if we need to separate pointer
1225	 * asterisk (*) from previous part of type signature with space, so
1226	 * that we get `int ***`, instead of `int * * *`. We default to true
1227	 * for cases where we have single pointer in a chain. E.g., in ptr ->
1228	 * func_proto case. func_proto will start a new emit_type_chain call
1229	 * with just ptr, which should be emitted as (*) or (*<fname>), so we
1230	 * don't want to prepend space for that last pointer.
1231	 */
1232	bool last_was_ptr = true;
1233	const struct btf_type *t;
1234	const char *name;
1235	__u16 kind;
1236	__u32 id;
1237
1238	while (decls->cnt) {
1239		id = decls->ids[--decls->cnt];
1240		if (id == 0) {
1241			/* VOID is a special snowflake */
1242			btf_dump_emit_mods(d, decls);
1243			btf_dump_printf(d, "void");
1244			last_was_ptr = false;
1245			continue;
1246		}
1247
1248		t = btf__type_by_id(d->btf, id);
1249		kind = btf_kind(t);
1250
1251		switch (kind) {
1252		case BTF_KIND_INT:
1253		case BTF_KIND_FLOAT:
1254			btf_dump_emit_mods(d, decls);
1255			name = btf_name_of(d, t->name_off);
1256			btf_dump_printf(d, "%s", name);
1257			break;
1258		case BTF_KIND_STRUCT:
1259		case BTF_KIND_UNION:
1260			btf_dump_emit_mods(d, decls);
1261			/* inline anonymous struct/union */
1262			if (t->name_off == 0)
1263				btf_dump_emit_struct_def(d, id, t, lvl);
1264			else
1265				btf_dump_emit_struct_fwd(d, id, t);
1266			break;
1267		case BTF_KIND_ENUM:
 
1268			btf_dump_emit_mods(d, decls);
1269			/* inline anonymous enum */
1270			if (t->name_off == 0)
1271				btf_dump_emit_enum_def(d, id, t, lvl);
1272			else
1273				btf_dump_emit_enum_fwd(d, id, t);
1274			break;
1275		case BTF_KIND_FWD:
1276			btf_dump_emit_mods(d, decls);
1277			btf_dump_emit_fwd_def(d, id, t);
1278			break;
1279		case BTF_KIND_TYPEDEF:
1280			btf_dump_emit_mods(d, decls);
1281			btf_dump_printf(d, "%s", btf_dump_ident_name(d, id));
1282			break;
1283		case BTF_KIND_PTR:
1284			btf_dump_printf(d, "%s", last_was_ptr ? "*" : " *");
1285			break;
1286		case BTF_KIND_VOLATILE:
1287			btf_dump_printf(d, " volatile");
1288			break;
1289		case BTF_KIND_CONST:
1290			btf_dump_printf(d, " const");
1291			break;
1292		case BTF_KIND_RESTRICT:
1293			btf_dump_printf(d, " restrict");
1294			break;
 
 
 
 
 
1295		case BTF_KIND_ARRAY: {
1296			const struct btf_array *a = btf_array(t);
1297			const struct btf_type *next_t;
1298			__u32 next_id;
1299			bool multidim;
1300			/*
1301			 * GCC has a bug
1302			 * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=8354)
1303			 * which causes it to emit extra const/volatile
1304			 * modifiers for an array, if array's element type has
1305			 * const/volatile modifiers. Clang doesn't do that.
1306			 * In general, it doesn't seem very meaningful to have
1307			 * a const/volatile modifier for array, so we are
1308			 * going to silently skip them here.
1309			 */
1310			btf_dump_drop_mods(d, decls);
1311
1312			if (decls->cnt == 0) {
1313				btf_dump_emit_name(d, fname, last_was_ptr);
1314				btf_dump_printf(d, "[%u]", a->nelems);
1315				return;
1316			}
1317
1318			next_id = decls->ids[decls->cnt - 1];
1319			next_t = btf__type_by_id(d->btf, next_id);
1320			multidim = btf_is_array(next_t);
1321			/* we need space if we have named non-pointer */
1322			if (fname[0] && !last_was_ptr)
1323				btf_dump_printf(d, " ");
1324			/* no parentheses for multi-dimensional array */
1325			if (!multidim)
1326				btf_dump_printf(d, "(");
1327			btf_dump_emit_type_chain(d, decls, fname, lvl);
1328			if (!multidim)
1329				btf_dump_printf(d, ")");
1330			btf_dump_printf(d, "[%u]", a->nelems);
1331			return;
1332		}
1333		case BTF_KIND_FUNC_PROTO: {
1334			const struct btf_param *p = btf_params(t);
1335			__u16 vlen = btf_vlen(t);
1336			int i;
1337
1338			/*
1339			 * GCC emits extra volatile qualifier for
1340			 * __attribute__((noreturn)) function pointers. Clang
1341			 * doesn't do it. It's a GCC quirk for backwards
1342			 * compatibility with code written for GCC <2.5. So,
1343			 * similarly to extra qualifiers for array, just drop
1344			 * them, instead of handling them.
1345			 */
1346			btf_dump_drop_mods(d, decls);
1347			if (decls->cnt) {
1348				btf_dump_printf(d, " (");
1349				btf_dump_emit_type_chain(d, decls, fname, lvl);
1350				btf_dump_printf(d, ")");
1351			} else {
1352				btf_dump_emit_name(d, fname, last_was_ptr);
1353			}
1354			btf_dump_printf(d, "(");
1355			/*
1356			 * Clang for BPF target generates func_proto with no
1357			 * args as a func_proto with a single void arg (e.g.,
1358			 * `int (*f)(void)` vs just `int (*f)()`). We are
1359			 * going to pretend there are no args for such case.
1360			 */
1361			if (vlen == 1 && p->type == 0) {
1362				btf_dump_printf(d, ")");
1363				return;
1364			}
1365
1366			for (i = 0; i < vlen; i++, p++) {
1367				if (i > 0)
1368					btf_dump_printf(d, ", ");
1369
1370				/* last arg of type void is vararg */
1371				if (i == vlen - 1 && p->type == 0) {
1372					btf_dump_printf(d, "...");
1373					break;
1374				}
1375
1376				name = btf_name_of(d, p->name_off);
1377				btf_dump_emit_type_decl(d, p->type, name, lvl);
1378			}
1379
1380			btf_dump_printf(d, ")");
1381			return;
1382		}
1383		default:
1384			pr_warn("unexpected type in decl chain, kind:%u, id:[%u]\n",
1385				kind, id);
1386			return;
1387		}
1388
1389		last_was_ptr = kind == BTF_KIND_PTR;
1390	}
1391
1392	btf_dump_emit_name(d, fname, last_was_ptr);
1393}
1394
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1395/* return number of duplicates (occurrences) of a given name */
1396static size_t btf_dump_name_dups(struct btf_dump *d, struct hashmap *name_map,
1397				 const char *orig_name)
1398{
 
1399	size_t dup_cnt = 0;
 
 
 
 
 
1400
1401	hashmap__find(name_map, orig_name, (void **)&dup_cnt);
1402	dup_cnt++;
1403	hashmap__set(name_map, orig_name, (void *)dup_cnt, NULL, NULL);
 
 
 
 
 
1404
1405	return dup_cnt;
1406}
1407
1408static const char *btf_dump_resolve_name(struct btf_dump *d, __u32 id,
1409					 struct hashmap *name_map)
1410{
1411	struct btf_dump_type_aux_state *s = &d->type_states[id];
1412	const struct btf_type *t = btf__type_by_id(d->btf, id);
1413	const char *orig_name = btf_name_of(d, t->name_off);
1414	const char **cached_name = &d->cached_names[id];
1415	size_t dup_cnt;
1416
1417	if (t->name_off == 0)
1418		return "";
1419
1420	if (s->name_resolved)
1421		return *cached_name ? *cached_name : orig_name;
1422
 
 
 
 
 
1423	dup_cnt = btf_dump_name_dups(d, name_map, orig_name);
1424	if (dup_cnt > 1) {
1425		const size_t max_len = 256;
1426		char new_name[max_len];
1427
1428		snprintf(new_name, max_len, "%s___%zu", orig_name, dup_cnt);
1429		*cached_name = strdup(new_name);
1430	}
1431
1432	s->name_resolved = 1;
1433	return *cached_name ? *cached_name : orig_name;
1434}
1435
1436static const char *btf_dump_type_name(struct btf_dump *d, __u32 id)
1437{
1438	return btf_dump_resolve_name(d, id, d->type_names);
1439}
1440
1441static const char *btf_dump_ident_name(struct btf_dump *d, __u32 id)
1442{
1443	return btf_dump_resolve_name(d, id, d->ident_names);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1444}