1 // SPDX-License-Identifier: GPL-2.0
8 size_t symbol__fprintf(struct symbol
*sym
, FILE *fp
)
10 return fprintf(fp
, " %" PRIx64
"-%" PRIx64
" %c %s\n",
12 sym
->binding
== STB_GLOBAL
? 'g' :
13 sym
->binding
== STB_LOCAL
? 'l' : 'w',
17 size_t __symbol__fprintf_symname_offs(const struct symbol
*sym
,
18 const struct addr_location
*al
,
20 bool print_offsets
, FILE *fp
)
26 length
= fprintf(fp
, "%s", sym
->name
);
27 if (al
&& print_offsets
) {
28 if (al
->addr
< sym
->end
)
29 offset
= al
->addr
- sym
->start
;
31 offset
= al
->addr
- al
->map
->start
- sym
->start
;
32 length
+= fprintf(fp
, "+0x%lx", offset
);
35 } else if (al
&& unknown_as_addr
)
36 return fprintf(fp
, "[%#" PRIx64
"]", al
->addr
);
38 return fprintf(fp
, "[unknown]");
41 size_t symbol__fprintf_symname_offs(const struct symbol
*sym
,
42 const struct addr_location
*al
,
45 return __symbol__fprintf_symname_offs(sym
, al
, false, true, fp
);
48 size_t __symbol__fprintf_symname(const struct symbol
*sym
,
49 const struct addr_location
*al
,
50 bool unknown_as_addr
, FILE *fp
)
52 return __symbol__fprintf_symname_offs(sym
, al
, unknown_as_addr
, false, fp
);
55 size_t symbol__fprintf_symname(const struct symbol
*sym
, FILE *fp
)
57 return __symbol__fprintf_symname_offs(sym
, NULL
, false, false, fp
);
60 size_t dso__fprintf_symbols_by_name(struct dso
*dso
,
61 enum map_type type
, FILE *fp
)
65 struct symbol_name_rb_node
*pos
;
67 for (nd
= rb_first(&dso
->symbol_names
[type
]); nd
; nd
= rb_next(nd
)) {
68 pos
= rb_entry(nd
, struct symbol_name_rb_node
, rb_node
);
69 fprintf(fp
, "%s\n", pos
->sym
.name
);