7 size_t symbol__fprintf(struct symbol
*sym
, FILE *fp
)
9 return fprintf(fp
, " %" PRIx64
"-%" PRIx64
" %c %s\n",
11 sym
->binding
== STB_GLOBAL
? 'g' :
12 sym
->binding
== STB_LOCAL
? 'l' : 'w',
16 size_t __symbol__fprintf_symname_offs(const struct symbol
*sym
,
17 const struct addr_location
*al
,
18 bool unknown_as_addr
, FILE *fp
)
23 if (sym
&& sym
->name
) {
24 length
= fprintf(fp
, "%s", sym
->name
);
26 if (al
->addr
< sym
->end
)
27 offset
= al
->addr
- sym
->start
;
29 offset
= al
->addr
- al
->map
->start
- sym
->start
;
30 length
+= fprintf(fp
, "+0x%lx", offset
);
33 } else if (al
&& unknown_as_addr
)
34 return fprintf(fp
, "[%#" PRIx64
"]", al
->addr
);
36 return fprintf(fp
, "[unknown]");
39 size_t symbol__fprintf_symname_offs(const struct symbol
*sym
,
40 const struct addr_location
*al
,
43 return __symbol__fprintf_symname_offs(sym
, al
, false, fp
);
46 size_t __symbol__fprintf_symname(const struct symbol
*sym
,
47 const struct addr_location
*al
,
48 bool unknown_as_addr
, FILE *fp
)
50 return __symbol__fprintf_symname_offs(sym
, al
, unknown_as_addr
, fp
);
53 size_t symbol__fprintf_symname(const struct symbol
*sym
, FILE *fp
)
55 return __symbol__fprintf_symname_offs(sym
, NULL
, false, fp
);
58 size_t dso__fprintf_symbols_by_name(struct dso
*dso
,
59 enum map_type type
, FILE *fp
)
63 struct symbol_name_rb_node
*pos
;
65 for (nd
= rb_first(&dso
->symbol_names
[type
]); nd
; nd
= rb_next(nd
)) {
66 pos
= rb_entry(nd
, struct symbol_name_rb_node
, rb_node
);
67 fprintf(fp
, "%s\n", pos
->sym
.name
);