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 --- |