srcline.c (a64489c56c307bf0955f0489158c5ecf6aa10fe2) srcline.c (5dfa210e407d0fedf746958bff206995bd46570d)
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include <linux/kernel.h>
6
7#include "util/dso.h"
8#include "util/util.h"

--- 415 unchanged lines hidden (view full) ---

424
425/*
426 * Number of addr2line failures (without success) before disabling it for that
427 * dso.
428 */
429#define A2L_FAIL_LIMIT 123
430
431char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include <linux/kernel.h>
6
7#include "util/dso.h"
8#include "util/util.h"

--- 415 unchanged lines hidden (view full) ---

424
425/*
426 * Number of addr2line failures (without success) before disabling it for that
427 * dso.
428 */
429#define A2L_FAIL_LIMIT 123
430
431char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
432 bool show_sym, bool unwind_inlines)
432 bool show_sym, bool show_addr, bool unwind_inlines)
433{
434 char *file = NULL;
435 unsigned line = 0;
436 char *srcline;
437 const char *dso_name;
438
439 if (!dso->has_srcline)
440 goto out;

--- 17 unchanged lines hidden (view full) ---

458 free(file);
459 return srcline;
460
461out:
462 if (dso->a2l_fails && ++dso->a2l_fails > A2L_FAIL_LIMIT) {
463 dso->has_srcline = 0;
464 dso__free_a2l(dso);
465 }
433{
434 char *file = NULL;
435 unsigned line = 0;
436 char *srcline;
437 const char *dso_name;
438
439 if (!dso->has_srcline)
440 goto out;

--- 17 unchanged lines hidden (view full) ---

458 free(file);
459 return srcline;
460
461out:
462 if (dso->a2l_fails && ++dso->a2l_fails > A2L_FAIL_LIMIT) {
463 dso->has_srcline = 0;
464 dso__free_a2l(dso);
465 }
466
467 if (!show_addr)
468 return (show_sym && sym) ?
469 strndup(sym->name, sym->namelen) : NULL;
470
466 if (sym) {
467 if (asprintf(&srcline, "%s+%" PRIu64, show_sym ? sym->name : "",
468 addr - sym->start) < 0)
469 return SRCLINE_UNKNOWN;
470 } else if (asprintf(&srcline, "%s[%" PRIx64 "]", dso->short_name, addr) < 0)
471 return SRCLINE_UNKNOWN;
472 return srcline;
473}
474
475void free_srcline(char *srcline)
476{
477 if (srcline && strcmp(srcline, SRCLINE_UNKNOWN) != 0)
478 free(srcline);
479}
480
481char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
471 if (sym) {
472 if (asprintf(&srcline, "%s+%" PRIu64, show_sym ? sym->name : "",
473 addr - sym->start) < 0)
474 return SRCLINE_UNKNOWN;
475 } else if (asprintf(&srcline, "%s[%" PRIx64 "]", dso->short_name, addr) < 0)
476 return SRCLINE_UNKNOWN;
477 return srcline;
478}
479
480void free_srcline(char *srcline)
481{
482 if (srcline && strcmp(srcline, SRCLINE_UNKNOWN) != 0)
483 free(srcline);
484}
485
486char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
482 bool show_sym)
487 bool show_sym, bool show_addr)
483{
488{
484 return __get_srcline(dso, addr, sym, show_sym, false);
489 return __get_srcline(dso, addr, sym, show_sym, show_addr, false);
485}
486
487struct inline_node *dso__parse_addr_inlines(struct dso *dso, u64 addr)
488{
489 const char *dso_name;
490
491 dso_name = dso__name(dso);
492 if (dso_name == NULL)

--- 18 unchanged lines hidden ---
490}
491
492struct inline_node *dso__parse_addr_inlines(struct dso *dso, u64 addr)
493{
494 const char *dso_name;
495
496 dso_name = dso__name(dso);
497 if (dso_name == NULL)

--- 18 unchanged lines hidden ---