1 // SPDX-License-Identifier: GPL-2.0
10 size_t symbol__fprintf(struct symbol
*sym
, FILE *fp
)
12 return fprintf(fp
, " %" PRIx64
"-%" PRIx64
" %c %s\n",
14 sym
->binding
== STB_GLOBAL
? 'g' :
15 sym
->binding
== STB_LOCAL
? 'l' : 'w',
19 size_t __symbol__fprintf_symname_offs(const struct symbol
*sym
,
20 const struct addr_location
*al
,
22 bool print_offsets
, FILE *fp
)
28 length
= fprintf(fp
, "%s", sym
->name
);
29 if (al
&& print_offsets
) {
30 if (al
->addr
< sym
->end
)
31 offset
= al
->addr
- sym
->start
;
33 offset
= al
->addr
- al
->map
->start
- sym
->start
;
34 length
+= fprintf(fp
, "+0x%lx", offset
);
37 } else if (al
&& unknown_as_addr
)
38 return fprintf(fp
, "[%#" PRIx64
"]", al
->addr
);
40 return fprintf(fp
, "[unknown]");
43 size_t symbol__fprintf_symname_offs(const struct symbol
*sym
,
44 const struct addr_location
*al
,
47 return __symbol__fprintf_symname_offs(sym
, al
, false, true, fp
);
50 size_t __symbol__fprintf_symname(const struct symbol
*sym
,
51 const struct addr_location
*al
,
52 bool unknown_as_addr
, FILE *fp
)
54 return __symbol__fprintf_symname_offs(sym
, al
, unknown_as_addr
, false, fp
);
57 size_t symbol__fprintf_symname(const struct symbol
*sym
, FILE *fp
)
59 return __symbol__fprintf_symname_offs(sym
, NULL
, false, false, fp
);
62 size_t dso__fprintf_symbols_by_name(struct dso
*dso
,
67 struct symbol_name_rb_node
*pos
;
69 for (nd
= rb_first_cached(&dso
->symbol_names
); nd
; nd
= rb_next(nd
)) {
70 pos
= rb_entry(nd
, struct symbol_name_rb_node
, rb_node
);
71 fprintf(fp
, "%s\n", pos
->sym
.name
);