1 #include "callchain.h" 2 #include "debug.h" 3 #include "event.h" 4 #include "evsel.h" 5 #include "hist.h" 6 #include "machine.h" 7 #include "map.h" 8 #include "sort.h" 9 #include "strlist.h" 10 #include "thread.h" 11 #include "vdso.h" 12 #include <stdbool.h> 13 #include <symbol/kallsyms.h> 14 #include "unwind.h" 15 #include "linux/hash.h" 16 17 static void __machine__remove_thread(struct machine *machine, struct thread *th, bool lock); 18 19 static void dsos__init(struct dsos *dsos) 20 { 21 INIT_LIST_HEAD(&dsos->head); 22 dsos->root = RB_ROOT; 23 pthread_rwlock_init(&dsos->lock, NULL); 24 } 25 26 int machine__init(struct machine *machine, const char *root_dir, pid_t pid) 27 { 28 map_groups__init(&machine->kmaps, machine); 29 RB_CLEAR_NODE(&machine->rb_node); 30 dsos__init(&machine->dsos); 31 32 machine->threads = RB_ROOT; 33 pthread_rwlock_init(&machine->threads_lock, NULL); 34 INIT_LIST_HEAD(&machine->dead_threads); 35 machine->last_match = NULL; 36 37 machine->vdso_info = NULL; 38 machine->env = NULL; 39 40 machine->pid = pid; 41 42 machine->symbol_filter = NULL; 43 machine->id_hdr_size = 0; 44 machine->comm_exec = false; 45 machine->kernel_start = 0; 46 47 machine->root_dir = strdup(root_dir); 48 if (machine->root_dir == NULL) 49 return -ENOMEM; 50 51 if (pid != HOST_KERNEL_ID) { 52 struct thread *thread = machine__findnew_thread(machine, -1, 53 pid); 54 char comm[64]; 55 56 if (thread == NULL) 57 return -ENOMEM; 58 59 snprintf(comm, sizeof(comm), "[guest/%d]", pid); 60 thread__set_comm(thread, comm, 0); 61 thread__put(thread); 62 } 63 64 machine->current_tid = NULL; 65 66 return 0; 67 } 68 69 struct machine *machine__new_host(void) 70 { 71 struct machine *machine = malloc(sizeof(*machine)); 72 73 if (machine != NULL) { 74 machine__init(machine, "", HOST_KERNEL_ID); 75 76 if (machine__create_kernel_maps(machine) < 0) 77 goto out_delete; 78 } 79 80 return machine; 81 out_delete: 82 free(machine); 83 return NULL; 84 } 85 86 static void dsos__purge(struct dsos *dsos) 87 { 88 struct dso *pos, *n; 89 90 pthread_rwlock_wrlock(&dsos->lock); 91 92 list_for_each_entry_safe(pos, n, &dsos->head, node) { 93 RB_CLEAR_NODE(&pos->rb_node); 94 list_del_init(&pos->node); 95 dso__put(pos); 96 } 97 98 pthread_rwlock_unlock(&dsos->lock); 99 } 100 101 static void dsos__exit(struct dsos *dsos) 102 { 103 dsos__purge(dsos); 104 pthread_rwlock_destroy(&dsos->lock); 105 } 106 107 void machine__delete_threads(struct machine *machine) 108 { 109 struct rb_node *nd; 110 111 pthread_rwlock_wrlock(&machine->threads_lock); 112 nd = rb_first(&machine->threads); 113 while (nd) { 114 struct thread *t = rb_entry(nd, struct thread, rb_node); 115 116 nd = rb_next(nd); 117 __machine__remove_thread(machine, t, false); 118 } 119 pthread_rwlock_unlock(&machine->threads_lock); 120 } 121 122 void machine__exit(struct machine *machine) 123 { 124 map_groups__exit(&machine->kmaps); 125 dsos__exit(&machine->dsos); 126 machine__exit_vdso(machine); 127 zfree(&machine->root_dir); 128 zfree(&machine->current_tid); 129 pthread_rwlock_destroy(&machine->threads_lock); 130 } 131 132 void machine__delete(struct machine *machine) 133 { 134 machine__exit(machine); 135 free(machine); 136 } 137 138 void machines__init(struct machines *machines) 139 { 140 machine__init(&machines->host, "", HOST_KERNEL_ID); 141 machines->guests = RB_ROOT; 142 machines->symbol_filter = NULL; 143 } 144 145 void machines__exit(struct machines *machines) 146 { 147 machine__exit(&machines->host); 148 /* XXX exit guest */ 149 } 150 151 struct machine *machines__add(struct machines *machines, pid_t pid, 152 const char *root_dir) 153 { 154 struct rb_node **p = &machines->guests.rb_node; 155 struct rb_node *parent = NULL; 156 struct machine *pos, *machine = malloc(sizeof(*machine)); 157 158 if (machine == NULL) 159 return NULL; 160 161 if (machine__init(machine, root_dir, pid) != 0) { 162 free(machine); 163 return NULL; 164 } 165 166 machine->symbol_filter = machines->symbol_filter; 167 168 while (*p != NULL) { 169 parent = *p; 170 pos = rb_entry(parent, struct machine, rb_node); 171 if (pid < pos->pid) 172 p = &(*p)->rb_left; 173 else 174 p = &(*p)->rb_right; 175 } 176 177 rb_link_node(&machine->rb_node, parent, p); 178 rb_insert_color(&machine->rb_node, &machines->guests); 179 180 return machine; 181 } 182 183 void machines__set_symbol_filter(struct machines *machines, 184 symbol_filter_t symbol_filter) 185 { 186 struct rb_node *nd; 187 188 machines->symbol_filter = symbol_filter; 189 machines->host.symbol_filter = symbol_filter; 190 191 for (nd = rb_first(&machines->guests); nd; nd = rb_next(nd)) { 192 struct machine *machine = rb_entry(nd, struct machine, rb_node); 193 194 machine->symbol_filter = symbol_filter; 195 } 196 } 197 198 void machines__set_comm_exec(struct machines *machines, bool comm_exec) 199 { 200 struct rb_node *nd; 201 202 machines->host.comm_exec = comm_exec; 203 204 for (nd = rb_first(&machines->guests); nd; nd = rb_next(nd)) { 205 struct machine *machine = rb_entry(nd, struct machine, rb_node); 206 207 machine->comm_exec = comm_exec; 208 } 209 } 210 211 struct machine *machines__find(struct machines *machines, pid_t pid) 212 { 213 struct rb_node **p = &machines->guests.rb_node; 214 struct rb_node *parent = NULL; 215 struct machine *machine; 216 struct machine *default_machine = NULL; 217 218 if (pid == HOST_KERNEL_ID) 219 return &machines->host; 220 221 while (*p != NULL) { 222 parent = *p; 223 machine = rb_entry(parent, struct machine, rb_node); 224 if (pid < machine->pid) 225 p = &(*p)->rb_left; 226 else if (pid > machine->pid) 227 p = &(*p)->rb_right; 228 else 229 return machine; 230 if (!machine->pid) 231 default_machine = machine; 232 } 233 234 return default_machine; 235 } 236 237 struct machine *machines__findnew(struct machines *machines, pid_t pid) 238 { 239 char path[PATH_MAX]; 240 const char *root_dir = ""; 241 struct machine *machine = machines__find(machines, pid); 242 243 if (machine && (machine->pid == pid)) 244 goto out; 245 246 if ((pid != HOST_KERNEL_ID) && 247 (pid != DEFAULT_GUEST_KERNEL_ID) && 248 (symbol_conf.guestmount)) { 249 sprintf(path, "%s/%d", symbol_conf.guestmount, pid); 250 if (access(path, R_OK)) { 251 static struct strlist *seen; 252 253 if (!seen) 254 seen = strlist__new(NULL, NULL); 255 256 if (!strlist__has_entry(seen, path)) { 257 pr_err("Can't access file %s\n", path); 258 strlist__add(seen, path); 259 } 260 machine = NULL; 261 goto out; 262 } 263 root_dir = path; 264 } 265 266 machine = machines__add(machines, pid, root_dir); 267 out: 268 return machine; 269 } 270 271 void machines__process_guests(struct machines *machines, 272 machine__process_t process, void *data) 273 { 274 struct rb_node *nd; 275 276 for (nd = rb_first(&machines->guests); nd; nd = rb_next(nd)) { 277 struct machine *pos = rb_entry(nd, struct machine, rb_node); 278 process(pos, data); 279 } 280 } 281 282 char *machine__mmap_name(struct machine *machine, char *bf, size_t size) 283 { 284 if (machine__is_host(machine)) 285 snprintf(bf, size, "[%s]", "kernel.kallsyms"); 286 else if (machine__is_default_guest(machine)) 287 snprintf(bf, size, "[%s]", "guest.kernel.kallsyms"); 288 else { 289 snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", 290 machine->pid); 291 } 292 293 return bf; 294 } 295 296 void machines__set_id_hdr_size(struct machines *machines, u16 id_hdr_size) 297 { 298 struct rb_node *node; 299 struct machine *machine; 300 301 machines->host.id_hdr_size = id_hdr_size; 302 303 for (node = rb_first(&machines->guests); node; node = rb_next(node)) { 304 machine = rb_entry(node, struct machine, rb_node); 305 machine->id_hdr_size = id_hdr_size; 306 } 307 308 return; 309 } 310 311 static void machine__update_thread_pid(struct machine *machine, 312 struct thread *th, pid_t pid) 313 { 314 struct thread *leader; 315 316 if (pid == th->pid_ || pid == -1 || th->pid_ != -1) 317 return; 318 319 th->pid_ = pid; 320 321 if (th->pid_ == th->tid) 322 return; 323 324 leader = __machine__findnew_thread(machine, th->pid_, th->pid_); 325 if (!leader) 326 goto out_err; 327 328 if (!leader->mg) 329 leader->mg = map_groups__new(machine); 330 331 if (!leader->mg) 332 goto out_err; 333 334 if (th->mg == leader->mg) 335 return; 336 337 if (th->mg) { 338 /* 339 * Maps are created from MMAP events which provide the pid and 340 * tid. Consequently there never should be any maps on a thread 341 * with an unknown pid. Just print an error if there are. 342 */ 343 if (!map_groups__empty(th->mg)) 344 pr_err("Discarding thread maps for %d:%d\n", 345 th->pid_, th->tid); 346 map_groups__put(th->mg); 347 } 348 349 th->mg = map_groups__get(leader->mg); 350 351 return; 352 353 out_err: 354 pr_err("Failed to join map groups for %d:%d\n", th->pid_, th->tid); 355 } 356 357 static struct thread *____machine__findnew_thread(struct machine *machine, 358 pid_t pid, pid_t tid, 359 bool create) 360 { 361 struct rb_node **p = &machine->threads.rb_node; 362 struct rb_node *parent = NULL; 363 struct thread *th; 364 365 /* 366 * Front-end cache - TID lookups come in blocks, 367 * so most of the time we dont have to look up 368 * the full rbtree: 369 */ 370 th = machine->last_match; 371 if (th != NULL) { 372 if (th->tid == tid) { 373 machine__update_thread_pid(machine, th, pid); 374 return th; 375 } 376 377 machine->last_match = NULL; 378 } 379 380 while (*p != NULL) { 381 parent = *p; 382 th = rb_entry(parent, struct thread, rb_node); 383 384 if (th->tid == tid) { 385 machine->last_match = th; 386 machine__update_thread_pid(machine, th, pid); 387 return th; 388 } 389 390 if (tid < th->tid) 391 p = &(*p)->rb_left; 392 else 393 p = &(*p)->rb_right; 394 } 395 396 if (!create) 397 return NULL; 398 399 th = thread__new(pid, tid); 400 if (th != NULL) { 401 rb_link_node(&th->rb_node, parent, p); 402 rb_insert_color(&th->rb_node, &machine->threads); 403 404 /* 405 * We have to initialize map_groups separately 406 * after rb tree is updated. 407 * 408 * The reason is that we call machine__findnew_thread 409 * within thread__init_map_groups to find the thread 410 * leader and that would screwed the rb tree. 411 */ 412 if (thread__init_map_groups(th, machine)) { 413 rb_erase_init(&th->rb_node, &machine->threads); 414 RB_CLEAR_NODE(&th->rb_node); 415 thread__delete(th); 416 return NULL; 417 } 418 /* 419 * It is now in the rbtree, get a ref 420 */ 421 thread__get(th); 422 machine->last_match = th; 423 } 424 425 return th; 426 } 427 428 struct thread *__machine__findnew_thread(struct machine *machine, pid_t pid, pid_t tid) 429 { 430 return ____machine__findnew_thread(machine, pid, tid, true); 431 } 432 433 struct thread *machine__findnew_thread(struct machine *machine, pid_t pid, 434 pid_t tid) 435 { 436 struct thread *th; 437 438 pthread_rwlock_wrlock(&machine->threads_lock); 439 th = thread__get(__machine__findnew_thread(machine, pid, tid)); 440 pthread_rwlock_unlock(&machine->threads_lock); 441 return th; 442 } 443 444 struct thread *machine__find_thread(struct machine *machine, pid_t pid, 445 pid_t tid) 446 { 447 struct thread *th; 448 pthread_rwlock_rdlock(&machine->threads_lock); 449 th = thread__get(____machine__findnew_thread(machine, pid, tid, false)); 450 pthread_rwlock_unlock(&machine->threads_lock); 451 return th; 452 } 453 454 struct comm *machine__thread_exec_comm(struct machine *machine, 455 struct thread *thread) 456 { 457 if (machine->comm_exec) 458 return thread__exec_comm(thread); 459 else 460 return thread__comm(thread); 461 } 462 463 int machine__process_comm_event(struct machine *machine, union perf_event *event, 464 struct perf_sample *sample) 465 { 466 struct thread *thread = machine__findnew_thread(machine, 467 event->comm.pid, 468 event->comm.tid); 469 bool exec = event->header.misc & PERF_RECORD_MISC_COMM_EXEC; 470 int err = 0; 471 472 if (exec) 473 machine->comm_exec = true; 474 475 if (dump_trace) 476 perf_event__fprintf_comm(event, stdout); 477 478 if (thread == NULL || 479 __thread__set_comm(thread, event->comm.comm, sample->time, exec)) { 480 dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n"); 481 err = -1; 482 } 483 484 thread__put(thread); 485 486 return err; 487 } 488 489 int machine__process_lost_event(struct machine *machine __maybe_unused, 490 union perf_event *event, struct perf_sample *sample __maybe_unused) 491 { 492 dump_printf(": id:%" PRIu64 ": lost:%" PRIu64 "\n", 493 event->lost.id, event->lost.lost); 494 return 0; 495 } 496 497 int machine__process_lost_samples_event(struct machine *machine __maybe_unused, 498 union perf_event *event, struct perf_sample *sample) 499 { 500 dump_printf(": id:%" PRIu64 ": lost samples :%" PRIu64 "\n", 501 sample->id, event->lost_samples.lost); 502 return 0; 503 } 504 505 static struct dso *machine__findnew_module_dso(struct machine *machine, 506 struct kmod_path *m, 507 const char *filename) 508 { 509 struct dso *dso; 510 511 pthread_rwlock_wrlock(&machine->dsos.lock); 512 513 dso = __dsos__find(&machine->dsos, m->name, true); 514 if (!dso) { 515 dso = __dsos__addnew(&machine->dsos, m->name); 516 if (dso == NULL) 517 goto out_unlock; 518 519 if (machine__is_host(machine)) 520 dso->symtab_type = DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE; 521 else 522 dso->symtab_type = DSO_BINARY_TYPE__GUEST_KMODULE; 523 524 /* _KMODULE_COMP should be next to _KMODULE */ 525 if (m->kmod && m->comp) 526 dso->symtab_type++; 527 528 dso__set_short_name(dso, strdup(m->name), true); 529 dso__set_long_name(dso, strdup(filename), true); 530 } 531 532 dso__get(dso); 533 out_unlock: 534 pthread_rwlock_unlock(&machine->dsos.lock); 535 return dso; 536 } 537 538 int machine__process_aux_event(struct machine *machine __maybe_unused, 539 union perf_event *event) 540 { 541 if (dump_trace) 542 perf_event__fprintf_aux(event, stdout); 543 return 0; 544 } 545 546 int machine__process_itrace_start_event(struct machine *machine __maybe_unused, 547 union perf_event *event) 548 { 549 if (dump_trace) 550 perf_event__fprintf_itrace_start(event, stdout); 551 return 0; 552 } 553 554 int machine__process_switch_event(struct machine *machine __maybe_unused, 555 union perf_event *event) 556 { 557 if (dump_trace) 558 perf_event__fprintf_switch(event, stdout); 559 return 0; 560 } 561 562 struct map *machine__findnew_module_map(struct machine *machine, u64 start, 563 const char *filename) 564 { 565 struct map *map = NULL; 566 struct dso *dso; 567 struct kmod_path m; 568 569 if (kmod_path__parse_name(&m, filename)) 570 return NULL; 571 572 map = map_groups__find_by_name(&machine->kmaps, MAP__FUNCTION, 573 m.name); 574 if (map) 575 goto out; 576 577 dso = machine__findnew_module_dso(machine, &m, filename); 578 if (dso == NULL) 579 goto out; 580 581 map = map__new2(start, dso, MAP__FUNCTION); 582 if (map == NULL) 583 goto out; 584 585 map_groups__insert(&machine->kmaps, map); 586 587 out: 588 free(m.name); 589 return map; 590 } 591 592 size_t machines__fprintf_dsos(struct machines *machines, FILE *fp) 593 { 594 struct rb_node *nd; 595 size_t ret = __dsos__fprintf(&machines->host.dsos.head, fp); 596 597 for (nd = rb_first(&machines->guests); nd; nd = rb_next(nd)) { 598 struct machine *pos = rb_entry(nd, struct machine, rb_node); 599 ret += __dsos__fprintf(&pos->dsos.head, fp); 600 } 601 602 return ret; 603 } 604 605 size_t machine__fprintf_dsos_buildid(struct machine *m, FILE *fp, 606 bool (skip)(struct dso *dso, int parm), int parm) 607 { 608 return __dsos__fprintf_buildid(&m->dsos.head, fp, skip, parm); 609 } 610 611 size_t machines__fprintf_dsos_buildid(struct machines *machines, FILE *fp, 612 bool (skip)(struct dso *dso, int parm), int parm) 613 { 614 struct rb_node *nd; 615 size_t ret = machine__fprintf_dsos_buildid(&machines->host, fp, skip, parm); 616 617 for (nd = rb_first(&machines->guests); nd; nd = rb_next(nd)) { 618 struct machine *pos = rb_entry(nd, struct machine, rb_node); 619 ret += machine__fprintf_dsos_buildid(pos, fp, skip, parm); 620 } 621 return ret; 622 } 623 624 size_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp) 625 { 626 int i; 627 size_t printed = 0; 628 struct dso *kdso = machine__kernel_map(machine)->dso; 629 630 if (kdso->has_build_id) { 631 char filename[PATH_MAX]; 632 if (dso__build_id_filename(kdso, filename, sizeof(filename))) 633 printed += fprintf(fp, "[0] %s\n", filename); 634 } 635 636 for (i = 0; i < vmlinux_path__nr_entries; ++i) 637 printed += fprintf(fp, "[%d] %s\n", 638 i + kdso->has_build_id, vmlinux_path[i]); 639 640 return printed; 641 } 642 643 size_t machine__fprintf(struct machine *machine, FILE *fp) 644 { 645 size_t ret = 0; 646 struct rb_node *nd; 647 648 pthread_rwlock_rdlock(&machine->threads_lock); 649 650 for (nd = rb_first(&machine->threads); nd; nd = rb_next(nd)) { 651 struct thread *pos = rb_entry(nd, struct thread, rb_node); 652 653 ret += thread__fprintf(pos, fp); 654 } 655 656 pthread_rwlock_unlock(&machine->threads_lock); 657 658 return ret; 659 } 660 661 static struct dso *machine__get_kernel(struct machine *machine) 662 { 663 const char *vmlinux_name = NULL; 664 struct dso *kernel; 665 666 if (machine__is_host(machine)) { 667 vmlinux_name = symbol_conf.vmlinux_name; 668 if (!vmlinux_name) 669 vmlinux_name = "[kernel.kallsyms]"; 670 671 kernel = machine__findnew_kernel(machine, vmlinux_name, 672 "[kernel]", DSO_TYPE_KERNEL); 673 } else { 674 char bf[PATH_MAX]; 675 676 if (machine__is_default_guest(machine)) 677 vmlinux_name = symbol_conf.default_guest_vmlinux_name; 678 if (!vmlinux_name) 679 vmlinux_name = machine__mmap_name(machine, bf, 680 sizeof(bf)); 681 682 kernel = machine__findnew_kernel(machine, vmlinux_name, 683 "[guest.kernel]", 684 DSO_TYPE_GUEST_KERNEL); 685 } 686 687 if (kernel != NULL && (!kernel->has_build_id)) 688 dso__read_running_kernel_build_id(kernel, machine); 689 690 return kernel; 691 } 692 693 struct process_args { 694 u64 start; 695 }; 696 697 static void machine__get_kallsyms_filename(struct machine *machine, char *buf, 698 size_t bufsz) 699 { 700 if (machine__is_default_guest(machine)) 701 scnprintf(buf, bufsz, "%s", symbol_conf.default_guest_kallsyms); 702 else 703 scnprintf(buf, bufsz, "%s/proc/kallsyms", machine->root_dir); 704 } 705 706 const char *ref_reloc_sym_names[] = {"_text", "_stext", NULL}; 707 708 /* Figure out the start address of kernel map from /proc/kallsyms. 709 * Returns the name of the start symbol in *symbol_name. Pass in NULL as 710 * symbol_name if it's not that important. 711 */ 712 static u64 machine__get_running_kernel_start(struct machine *machine, 713 const char **symbol_name) 714 { 715 char filename[PATH_MAX]; 716 int i; 717 const char *name; 718 u64 addr = 0; 719 720 machine__get_kallsyms_filename(machine, filename, PATH_MAX); 721 722 if (symbol__restricted_filename(filename, "/proc/kallsyms")) 723 return 0; 724 725 for (i = 0; (name = ref_reloc_sym_names[i]) != NULL; i++) { 726 addr = kallsyms__get_function_start(filename, name); 727 if (addr) 728 break; 729 } 730 731 if (symbol_name) 732 *symbol_name = name; 733 734 return addr; 735 } 736 737 int __machine__create_kernel_maps(struct machine *machine, struct dso *kernel) 738 { 739 enum map_type type; 740 u64 start = machine__get_running_kernel_start(machine, NULL); 741 742 for (type = 0; type < MAP__NR_TYPES; ++type) { 743 struct kmap *kmap; 744 struct map *map; 745 746 machine->vmlinux_maps[type] = map__new2(start, kernel, type); 747 if (machine->vmlinux_maps[type] == NULL) 748 return -1; 749 750 machine->vmlinux_maps[type]->map_ip = 751 machine->vmlinux_maps[type]->unmap_ip = 752 identity__map_ip; 753 map = __machine__kernel_map(machine, type); 754 kmap = map__kmap(map); 755 if (!kmap) 756 return -1; 757 758 kmap->kmaps = &machine->kmaps; 759 map_groups__insert(&machine->kmaps, map); 760 } 761 762 return 0; 763 } 764 765 void machine__destroy_kernel_maps(struct machine *machine) 766 { 767 enum map_type type; 768 769 for (type = 0; type < MAP__NR_TYPES; ++type) { 770 struct kmap *kmap; 771 struct map *map = __machine__kernel_map(machine, type); 772 773 if (map == NULL) 774 continue; 775 776 kmap = map__kmap(map); 777 map_groups__remove(&machine->kmaps, map); 778 if (kmap && kmap->ref_reloc_sym) { 779 /* 780 * ref_reloc_sym is shared among all maps, so free just 781 * on one of them. 782 */ 783 if (type == MAP__FUNCTION) { 784 zfree((char **)&kmap->ref_reloc_sym->name); 785 zfree(&kmap->ref_reloc_sym); 786 } else 787 kmap->ref_reloc_sym = NULL; 788 } 789 790 machine->vmlinux_maps[type] = NULL; 791 } 792 } 793 794 int machines__create_guest_kernel_maps(struct machines *machines) 795 { 796 int ret = 0; 797 struct dirent **namelist = NULL; 798 int i, items = 0; 799 char path[PATH_MAX]; 800 pid_t pid; 801 char *endp; 802 803 if (symbol_conf.default_guest_vmlinux_name || 804 symbol_conf.default_guest_modules || 805 symbol_conf.default_guest_kallsyms) { 806 machines__create_kernel_maps(machines, DEFAULT_GUEST_KERNEL_ID); 807 } 808 809 if (symbol_conf.guestmount) { 810 items = scandir(symbol_conf.guestmount, &namelist, NULL, NULL); 811 if (items <= 0) 812 return -ENOENT; 813 for (i = 0; i < items; i++) { 814 if (!isdigit(namelist[i]->d_name[0])) { 815 /* Filter out . and .. */ 816 continue; 817 } 818 pid = (pid_t)strtol(namelist[i]->d_name, &endp, 10); 819 if ((*endp != '\0') || 820 (endp == namelist[i]->d_name) || 821 (errno == ERANGE)) { 822 pr_debug("invalid directory (%s). Skipping.\n", 823 namelist[i]->d_name); 824 continue; 825 } 826 sprintf(path, "%s/%s/proc/kallsyms", 827 symbol_conf.guestmount, 828 namelist[i]->d_name); 829 ret = access(path, R_OK); 830 if (ret) { 831 pr_debug("Can't access file %s\n", path); 832 goto failure; 833 } 834 machines__create_kernel_maps(machines, pid); 835 } 836 failure: 837 free(namelist); 838 } 839 840 return ret; 841 } 842 843 void machines__destroy_kernel_maps(struct machines *machines) 844 { 845 struct rb_node *next = rb_first(&machines->guests); 846 847 machine__destroy_kernel_maps(&machines->host); 848 849 while (next) { 850 struct machine *pos = rb_entry(next, struct machine, rb_node); 851 852 next = rb_next(&pos->rb_node); 853 rb_erase(&pos->rb_node, &machines->guests); 854 machine__delete(pos); 855 } 856 } 857 858 int machines__create_kernel_maps(struct machines *machines, pid_t pid) 859 { 860 struct machine *machine = machines__findnew(machines, pid); 861 862 if (machine == NULL) 863 return -1; 864 865 return machine__create_kernel_maps(machine); 866 } 867 868 int machine__load_kallsyms(struct machine *machine, const char *filename, 869 enum map_type type, symbol_filter_t filter) 870 { 871 struct map *map = machine__kernel_map(machine); 872 int ret = dso__load_kallsyms(map->dso, filename, map, filter); 873 874 if (ret > 0) { 875 dso__set_loaded(map->dso, type); 876 /* 877 * Since /proc/kallsyms will have multiple sessions for the 878 * kernel, with modules between them, fixup the end of all 879 * sections. 880 */ 881 __map_groups__fixup_end(&machine->kmaps, type); 882 } 883 884 return ret; 885 } 886 887 int machine__load_vmlinux_path(struct machine *machine, enum map_type type, 888 symbol_filter_t filter) 889 { 890 struct map *map = machine__kernel_map(machine); 891 int ret = dso__load_vmlinux_path(map->dso, map, filter); 892 893 if (ret > 0) 894 dso__set_loaded(map->dso, type); 895 896 return ret; 897 } 898 899 static void map_groups__fixup_end(struct map_groups *mg) 900 { 901 int i; 902 for (i = 0; i < MAP__NR_TYPES; ++i) 903 __map_groups__fixup_end(mg, i); 904 } 905 906 static char *get_kernel_version(const char *root_dir) 907 { 908 char version[PATH_MAX]; 909 FILE *file; 910 char *name, *tmp; 911 const char *prefix = "Linux version "; 912 913 sprintf(version, "%s/proc/version", root_dir); 914 file = fopen(version, "r"); 915 if (!file) 916 return NULL; 917 918 version[0] = '\0'; 919 tmp = fgets(version, sizeof(version), file); 920 fclose(file); 921 922 name = strstr(version, prefix); 923 if (!name) 924 return NULL; 925 name += strlen(prefix); 926 tmp = strchr(name, ' '); 927 if (tmp) 928 *tmp = '\0'; 929 930 return strdup(name); 931 } 932 933 static bool is_kmod_dso(struct dso *dso) 934 { 935 return dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE || 936 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE; 937 } 938 939 static int map_groups__set_module_path(struct map_groups *mg, const char *path, 940 struct kmod_path *m) 941 { 942 struct map *map; 943 char *long_name; 944 945 map = map_groups__find_by_name(mg, MAP__FUNCTION, m->name); 946 if (map == NULL) 947 return 0; 948 949 long_name = strdup(path); 950 if (long_name == NULL) 951 return -ENOMEM; 952 953 dso__set_long_name(map->dso, long_name, true); 954 dso__kernel_module_get_build_id(map->dso, ""); 955 956 /* 957 * Full name could reveal us kmod compression, so 958 * we need to update the symtab_type if needed. 959 */ 960 if (m->comp && is_kmod_dso(map->dso)) 961 map->dso->symtab_type++; 962 963 return 0; 964 } 965 966 static int map_groups__set_modules_path_dir(struct map_groups *mg, 967 const char *dir_name, int depth) 968 { 969 struct dirent *dent; 970 DIR *dir = opendir(dir_name); 971 int ret = 0; 972 973 if (!dir) { 974 pr_debug("%s: cannot open %s dir\n", __func__, dir_name); 975 return -1; 976 } 977 978 while ((dent = readdir(dir)) != NULL) { 979 char path[PATH_MAX]; 980 struct stat st; 981 982 /*sshfs might return bad dent->d_type, so we have to stat*/ 983 snprintf(path, sizeof(path), "%s/%s", dir_name, dent->d_name); 984 if (stat(path, &st)) 985 continue; 986 987 if (S_ISDIR(st.st_mode)) { 988 if (!strcmp(dent->d_name, ".") || 989 !strcmp(dent->d_name, "..")) 990 continue; 991 992 /* Do not follow top-level source and build symlinks */ 993 if (depth == 0) { 994 if (!strcmp(dent->d_name, "source") || 995 !strcmp(dent->d_name, "build")) 996 continue; 997 } 998 999 ret = map_groups__set_modules_path_dir(mg, path, 1000 depth + 1); 1001 if (ret < 0) 1002 goto out; 1003 } else { 1004 struct kmod_path m; 1005 1006 ret = kmod_path__parse_name(&m, dent->d_name); 1007 if (ret) 1008 goto out; 1009 1010 if (m.kmod) 1011 ret = map_groups__set_module_path(mg, path, &m); 1012 1013 free(m.name); 1014 1015 if (ret) 1016 goto out; 1017 } 1018 } 1019 1020 out: 1021 closedir(dir); 1022 return ret; 1023 } 1024 1025 static int machine__set_modules_path(struct machine *machine) 1026 { 1027 char *version; 1028 char modules_path[PATH_MAX]; 1029 1030 version = get_kernel_version(machine->root_dir); 1031 if (!version) 1032 return -1; 1033 1034 snprintf(modules_path, sizeof(modules_path), "%s/lib/modules/%s", 1035 machine->root_dir, version); 1036 free(version); 1037 1038 return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, 0); 1039 } 1040 1041 static int machine__create_module(void *arg, const char *name, u64 start) 1042 { 1043 struct machine *machine = arg; 1044 struct map *map; 1045 1046 map = machine__findnew_module_map(machine, start, name); 1047 if (map == NULL) 1048 return -1; 1049 1050 dso__kernel_module_get_build_id(map->dso, machine->root_dir); 1051 1052 return 0; 1053 } 1054 1055 static int machine__create_modules(struct machine *machine) 1056 { 1057 const char *modules; 1058 char path[PATH_MAX]; 1059 1060 if (machine__is_default_guest(machine)) { 1061 modules = symbol_conf.default_guest_modules; 1062 } else { 1063 snprintf(path, PATH_MAX, "%s/proc/modules", machine->root_dir); 1064 modules = path; 1065 } 1066 1067 if (symbol__restricted_filename(modules, "/proc/modules")) 1068 return -1; 1069 1070 if (modules__parse(modules, machine, machine__create_module)) 1071 return -1; 1072 1073 if (!machine__set_modules_path(machine)) 1074 return 0; 1075 1076 pr_debug("Problems setting modules path maps, continuing anyway...\n"); 1077 1078 return 0; 1079 } 1080 1081 int machine__create_kernel_maps(struct machine *machine) 1082 { 1083 struct dso *kernel = machine__get_kernel(machine); 1084 const char *name; 1085 u64 addr = machine__get_running_kernel_start(machine, &name); 1086 if (!addr) 1087 return -1; 1088 1089 if (kernel == NULL || 1090 __machine__create_kernel_maps(machine, kernel) < 0) 1091 return -1; 1092 1093 if (symbol_conf.use_modules && machine__create_modules(machine) < 0) { 1094 if (machine__is_host(machine)) 1095 pr_debug("Problems creating module maps, " 1096 "continuing anyway...\n"); 1097 else 1098 pr_debug("Problems creating module maps for guest %d, " 1099 "continuing anyway...\n", machine->pid); 1100 } 1101 1102 /* 1103 * Now that we have all the maps created, just set the ->end of them: 1104 */ 1105 map_groups__fixup_end(&machine->kmaps); 1106 1107 if (maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, name, 1108 addr)) { 1109 machine__destroy_kernel_maps(machine); 1110 return -1; 1111 } 1112 1113 return 0; 1114 } 1115 1116 static void machine__set_kernel_mmap_len(struct machine *machine, 1117 union perf_event *event) 1118 { 1119 int i; 1120 1121 for (i = 0; i < MAP__NR_TYPES; i++) { 1122 machine->vmlinux_maps[i]->start = event->mmap.start; 1123 machine->vmlinux_maps[i]->end = (event->mmap.start + 1124 event->mmap.len); 1125 /* 1126 * Be a bit paranoid here, some perf.data file came with 1127 * a zero sized synthesized MMAP event for the kernel. 1128 */ 1129 if (machine->vmlinux_maps[i]->end == 0) 1130 machine->vmlinux_maps[i]->end = ~0ULL; 1131 } 1132 } 1133 1134 static bool machine__uses_kcore(struct machine *machine) 1135 { 1136 struct dso *dso; 1137 1138 list_for_each_entry(dso, &machine->dsos.head, node) { 1139 if (dso__is_kcore(dso)) 1140 return true; 1141 } 1142 1143 return false; 1144 } 1145 1146 static int machine__process_kernel_mmap_event(struct machine *machine, 1147 union perf_event *event) 1148 { 1149 struct map *map; 1150 char kmmap_prefix[PATH_MAX]; 1151 enum dso_kernel_type kernel_type; 1152 bool is_kernel_mmap; 1153 1154 /* If we have maps from kcore then we do not need or want any others */ 1155 if (machine__uses_kcore(machine)) 1156 return 0; 1157 1158 machine__mmap_name(machine, kmmap_prefix, sizeof(kmmap_prefix)); 1159 if (machine__is_host(machine)) 1160 kernel_type = DSO_TYPE_KERNEL; 1161 else 1162 kernel_type = DSO_TYPE_GUEST_KERNEL; 1163 1164 is_kernel_mmap = memcmp(event->mmap.filename, 1165 kmmap_prefix, 1166 strlen(kmmap_prefix) - 1) == 0; 1167 if (event->mmap.filename[0] == '/' || 1168 (!is_kernel_mmap && event->mmap.filename[0] == '[')) { 1169 map = machine__findnew_module_map(machine, event->mmap.start, 1170 event->mmap.filename); 1171 if (map == NULL) 1172 goto out_problem; 1173 1174 map->end = map->start + event->mmap.len; 1175 } else if (is_kernel_mmap) { 1176 const char *symbol_name = (event->mmap.filename + 1177 strlen(kmmap_prefix)); 1178 /* 1179 * Should be there already, from the build-id table in 1180 * the header. 1181 */ 1182 struct dso *kernel = NULL; 1183 struct dso *dso; 1184 1185 pthread_rwlock_rdlock(&machine->dsos.lock); 1186 1187 list_for_each_entry(dso, &machine->dsos.head, node) { 1188 1189 /* 1190 * The cpumode passed to is_kernel_module is not the 1191 * cpumode of *this* event. If we insist on passing 1192 * correct cpumode to is_kernel_module, we should 1193 * record the cpumode when we adding this dso to the 1194 * linked list. 1195 * 1196 * However we don't really need passing correct 1197 * cpumode. We know the correct cpumode must be kernel 1198 * mode (if not, we should not link it onto kernel_dsos 1199 * list). 1200 * 1201 * Therefore, we pass PERF_RECORD_MISC_CPUMODE_UNKNOWN. 1202 * is_kernel_module() treats it as a kernel cpumode. 1203 */ 1204 1205 if (!dso->kernel || 1206 is_kernel_module(dso->long_name, 1207 PERF_RECORD_MISC_CPUMODE_UNKNOWN)) 1208 continue; 1209 1210 1211 kernel = dso; 1212 break; 1213 } 1214 1215 pthread_rwlock_unlock(&machine->dsos.lock); 1216 1217 if (kernel == NULL) 1218 kernel = machine__findnew_dso(machine, kmmap_prefix); 1219 if (kernel == NULL) 1220 goto out_problem; 1221 1222 kernel->kernel = kernel_type; 1223 if (__machine__create_kernel_maps(machine, kernel) < 0) { 1224 dso__put(kernel); 1225 goto out_problem; 1226 } 1227 1228 if (strstr(kernel->long_name, "vmlinux")) 1229 dso__set_short_name(kernel, "[kernel.vmlinux]", false); 1230 1231 machine__set_kernel_mmap_len(machine, event); 1232 1233 /* 1234 * Avoid using a zero address (kptr_restrict) for the ref reloc 1235 * symbol. Effectively having zero here means that at record 1236 * time /proc/sys/kernel/kptr_restrict was non zero. 1237 */ 1238 if (event->mmap.pgoff != 0) { 1239 maps__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps, 1240 symbol_name, 1241 event->mmap.pgoff); 1242 } 1243 1244 if (machine__is_default_guest(machine)) { 1245 /* 1246 * preload dso of guest kernel and modules 1247 */ 1248 dso__load(kernel, machine__kernel_map(machine), NULL); 1249 } 1250 } 1251 return 0; 1252 out_problem: 1253 return -1; 1254 } 1255 1256 int machine__process_mmap2_event(struct machine *machine, 1257 union perf_event *event, 1258 struct perf_sample *sample __maybe_unused) 1259 { 1260 u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; 1261 struct thread *thread; 1262 struct map *map; 1263 enum map_type type; 1264 int ret = 0; 1265 1266 if (dump_trace) 1267 perf_event__fprintf_mmap2(event, stdout); 1268 1269 if (cpumode == PERF_RECORD_MISC_GUEST_KERNEL || 1270 cpumode == PERF_RECORD_MISC_KERNEL) { 1271 ret = machine__process_kernel_mmap_event(machine, event); 1272 if (ret < 0) 1273 goto out_problem; 1274 return 0; 1275 } 1276 1277 thread = machine__findnew_thread(machine, event->mmap2.pid, 1278 event->mmap2.tid); 1279 if (thread == NULL) 1280 goto out_problem; 1281 1282 if (event->header.misc & PERF_RECORD_MISC_MMAP_DATA) 1283 type = MAP__VARIABLE; 1284 else 1285 type = MAP__FUNCTION; 1286 1287 map = map__new(machine, event->mmap2.start, 1288 event->mmap2.len, event->mmap2.pgoff, 1289 event->mmap2.pid, event->mmap2.maj, 1290 event->mmap2.min, event->mmap2.ino, 1291 event->mmap2.ino_generation, 1292 event->mmap2.prot, 1293 event->mmap2.flags, 1294 event->mmap2.filename, type, thread); 1295 1296 if (map == NULL) 1297 goto out_problem_map; 1298 1299 thread__insert_map(thread, map); 1300 thread__put(thread); 1301 map__put(map); 1302 return 0; 1303 1304 out_problem_map: 1305 thread__put(thread); 1306 out_problem: 1307 dump_printf("problem processing PERF_RECORD_MMAP2, skipping event.\n"); 1308 return 0; 1309 } 1310 1311 int machine__process_mmap_event(struct machine *machine, union perf_event *event, 1312 struct perf_sample *sample __maybe_unused) 1313 { 1314 u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; 1315 struct thread *thread; 1316 struct map *map; 1317 enum map_type type; 1318 int ret = 0; 1319 1320 if (dump_trace) 1321 perf_event__fprintf_mmap(event, stdout); 1322 1323 if (cpumode == PERF_RECORD_MISC_GUEST_KERNEL || 1324 cpumode == PERF_RECORD_MISC_KERNEL) { 1325 ret = machine__process_kernel_mmap_event(machine, event); 1326 if (ret < 0) 1327 goto out_problem; 1328 return 0; 1329 } 1330 1331 thread = machine__findnew_thread(machine, event->mmap.pid, 1332 event->mmap.tid); 1333 if (thread == NULL) 1334 goto out_problem; 1335 1336 if (event->header.misc & PERF_RECORD_MISC_MMAP_DATA) 1337 type = MAP__VARIABLE; 1338 else 1339 type = MAP__FUNCTION; 1340 1341 map = map__new(machine, event->mmap.start, 1342 event->mmap.len, event->mmap.pgoff, 1343 event->mmap.pid, 0, 0, 0, 0, 0, 0, 1344 event->mmap.filename, 1345 type, thread); 1346 1347 if (map == NULL) 1348 goto out_problem_map; 1349 1350 thread__insert_map(thread, map); 1351 thread__put(thread); 1352 map__put(map); 1353 return 0; 1354 1355 out_problem_map: 1356 thread__put(thread); 1357 out_problem: 1358 dump_printf("problem processing PERF_RECORD_MMAP, skipping event.\n"); 1359 return 0; 1360 } 1361 1362 static void __machine__remove_thread(struct machine *machine, struct thread *th, bool lock) 1363 { 1364 if (machine->last_match == th) 1365 machine->last_match = NULL; 1366 1367 BUG_ON(atomic_read(&th->refcnt) == 0); 1368 if (lock) 1369 pthread_rwlock_wrlock(&machine->threads_lock); 1370 rb_erase_init(&th->rb_node, &machine->threads); 1371 RB_CLEAR_NODE(&th->rb_node); 1372 /* 1373 * Move it first to the dead_threads list, then drop the reference, 1374 * if this is the last reference, then the thread__delete destructor 1375 * will be called and we will remove it from the dead_threads list. 1376 */ 1377 list_add_tail(&th->node, &machine->dead_threads); 1378 if (lock) 1379 pthread_rwlock_unlock(&machine->threads_lock); 1380 thread__put(th); 1381 } 1382 1383 void machine__remove_thread(struct machine *machine, struct thread *th) 1384 { 1385 return __machine__remove_thread(machine, th, true); 1386 } 1387 1388 int machine__process_fork_event(struct machine *machine, union perf_event *event, 1389 struct perf_sample *sample) 1390 { 1391 struct thread *thread = machine__find_thread(machine, 1392 event->fork.pid, 1393 event->fork.tid); 1394 struct thread *parent = machine__findnew_thread(machine, 1395 event->fork.ppid, 1396 event->fork.ptid); 1397 int err = 0; 1398 1399 if (dump_trace) 1400 perf_event__fprintf_task(event, stdout); 1401 1402 /* 1403 * There may be an existing thread that is not actually the parent, 1404 * either because we are processing events out of order, or because the 1405 * (fork) event that would have removed the thread was lost. Assume the 1406 * latter case and continue on as best we can. 1407 */ 1408 if (parent->pid_ != (pid_t)event->fork.ppid) { 1409 dump_printf("removing erroneous parent thread %d/%d\n", 1410 parent->pid_, parent->tid); 1411 machine__remove_thread(machine, parent); 1412 thread__put(parent); 1413 parent = machine__findnew_thread(machine, event->fork.ppid, 1414 event->fork.ptid); 1415 } 1416 1417 /* if a thread currently exists for the thread id remove it */ 1418 if (thread != NULL) { 1419 machine__remove_thread(machine, thread); 1420 thread__put(thread); 1421 } 1422 1423 thread = machine__findnew_thread(machine, event->fork.pid, 1424 event->fork.tid); 1425 1426 if (thread == NULL || parent == NULL || 1427 thread__fork(thread, parent, sample->time) < 0) { 1428 dump_printf("problem processing PERF_RECORD_FORK, skipping event.\n"); 1429 err = -1; 1430 } 1431 thread__put(thread); 1432 thread__put(parent); 1433 1434 return err; 1435 } 1436 1437 int machine__process_exit_event(struct machine *machine, union perf_event *event, 1438 struct perf_sample *sample __maybe_unused) 1439 { 1440 struct thread *thread = machine__find_thread(machine, 1441 event->fork.pid, 1442 event->fork.tid); 1443 1444 if (dump_trace) 1445 perf_event__fprintf_task(event, stdout); 1446 1447 if (thread != NULL) { 1448 thread__exited(thread); 1449 thread__put(thread); 1450 } 1451 1452 return 0; 1453 } 1454 1455 int machine__process_event(struct machine *machine, union perf_event *event, 1456 struct perf_sample *sample) 1457 { 1458 int ret; 1459 1460 switch (event->header.type) { 1461 case PERF_RECORD_COMM: 1462 ret = machine__process_comm_event(machine, event, sample); break; 1463 case PERF_RECORD_MMAP: 1464 ret = machine__process_mmap_event(machine, event, sample); break; 1465 case PERF_RECORD_MMAP2: 1466 ret = machine__process_mmap2_event(machine, event, sample); break; 1467 case PERF_RECORD_FORK: 1468 ret = machine__process_fork_event(machine, event, sample); break; 1469 case PERF_RECORD_EXIT: 1470 ret = machine__process_exit_event(machine, event, sample); break; 1471 case PERF_RECORD_LOST: 1472 ret = machine__process_lost_event(machine, event, sample); break; 1473 case PERF_RECORD_AUX: 1474 ret = machine__process_aux_event(machine, event); break; 1475 case PERF_RECORD_ITRACE_START: 1476 ret = machine__process_itrace_start_event(machine, event); break; 1477 case PERF_RECORD_LOST_SAMPLES: 1478 ret = machine__process_lost_samples_event(machine, event, sample); break; 1479 case PERF_RECORD_SWITCH: 1480 case PERF_RECORD_SWITCH_CPU_WIDE: 1481 ret = machine__process_switch_event(machine, event); break; 1482 default: 1483 ret = -1; 1484 break; 1485 } 1486 1487 return ret; 1488 } 1489 1490 static bool symbol__match_regex(struct symbol *sym, regex_t *regex) 1491 { 1492 if (sym->name && !regexec(regex, sym->name, 0, NULL, 0)) 1493 return 1; 1494 return 0; 1495 } 1496 1497 static void ip__resolve_ams(struct thread *thread, 1498 struct addr_map_symbol *ams, 1499 u64 ip) 1500 { 1501 struct addr_location al; 1502 1503 memset(&al, 0, sizeof(al)); 1504 /* 1505 * We cannot use the header.misc hint to determine whether a 1506 * branch stack address is user, kernel, guest, hypervisor. 1507 * Branches may straddle the kernel/user/hypervisor boundaries. 1508 * Thus, we have to try consecutively until we find a match 1509 * or else, the symbol is unknown 1510 */ 1511 thread__find_cpumode_addr_location(thread, MAP__FUNCTION, ip, &al); 1512 1513 ams->addr = ip; 1514 ams->al_addr = al.addr; 1515 ams->sym = al.sym; 1516 ams->map = al.map; 1517 } 1518 1519 static void ip__resolve_data(struct thread *thread, 1520 u8 m, struct addr_map_symbol *ams, u64 addr) 1521 { 1522 struct addr_location al; 1523 1524 memset(&al, 0, sizeof(al)); 1525 1526 thread__find_addr_location(thread, m, MAP__VARIABLE, addr, &al); 1527 if (al.map == NULL) { 1528 /* 1529 * some shared data regions have execute bit set which puts 1530 * their mapping in the MAP__FUNCTION type array. 1531 * Check there as a fallback option before dropping the sample. 1532 */ 1533 thread__find_addr_location(thread, m, MAP__FUNCTION, addr, &al); 1534 } 1535 1536 ams->addr = addr; 1537 ams->al_addr = al.addr; 1538 ams->sym = al.sym; 1539 ams->map = al.map; 1540 } 1541 1542 struct mem_info *sample__resolve_mem(struct perf_sample *sample, 1543 struct addr_location *al) 1544 { 1545 struct mem_info *mi = zalloc(sizeof(*mi)); 1546 1547 if (!mi) 1548 return NULL; 1549 1550 ip__resolve_ams(al->thread, &mi->iaddr, sample->ip); 1551 ip__resolve_data(al->thread, al->cpumode, &mi->daddr, sample->addr); 1552 mi->data_src.val = sample->data_src; 1553 1554 return mi; 1555 } 1556 1557 static int add_callchain_ip(struct thread *thread, 1558 struct symbol **parent, 1559 struct addr_location *root_al, 1560 u8 *cpumode, 1561 u64 ip) 1562 { 1563 struct addr_location al; 1564 1565 al.filtered = 0; 1566 al.sym = NULL; 1567 if (!cpumode) { 1568 thread__find_cpumode_addr_location(thread, MAP__FUNCTION, 1569 ip, &al); 1570 } else { 1571 if (ip >= PERF_CONTEXT_MAX) { 1572 switch (ip) { 1573 case PERF_CONTEXT_HV: 1574 *cpumode = PERF_RECORD_MISC_HYPERVISOR; 1575 break; 1576 case PERF_CONTEXT_KERNEL: 1577 *cpumode = PERF_RECORD_MISC_KERNEL; 1578 break; 1579 case PERF_CONTEXT_USER: 1580 *cpumode = PERF_RECORD_MISC_USER; 1581 break; 1582 default: 1583 pr_debug("invalid callchain context: " 1584 "%"PRId64"\n", (s64) ip); 1585 /* 1586 * It seems the callchain is corrupted. 1587 * Discard all. 1588 */ 1589 callchain_cursor_reset(&callchain_cursor); 1590 return 1; 1591 } 1592 return 0; 1593 } 1594 thread__find_addr_location(thread, *cpumode, MAP__FUNCTION, 1595 ip, &al); 1596 } 1597 1598 if (al.sym != NULL) { 1599 if (sort__has_parent && !*parent && 1600 symbol__match_regex(al.sym, &parent_regex)) 1601 *parent = al.sym; 1602 else if (have_ignore_callees && root_al && 1603 symbol__match_regex(al.sym, &ignore_callees_regex)) { 1604 /* Treat this symbol as the root, 1605 forgetting its callees. */ 1606 *root_al = al; 1607 callchain_cursor_reset(&callchain_cursor); 1608 } 1609 } 1610 1611 return callchain_cursor_append(&callchain_cursor, al.addr, al.map, al.sym); 1612 } 1613 1614 struct branch_info *sample__resolve_bstack(struct perf_sample *sample, 1615 struct addr_location *al) 1616 { 1617 unsigned int i; 1618 const struct branch_stack *bs = sample->branch_stack; 1619 struct branch_info *bi = calloc(bs->nr, sizeof(struct branch_info)); 1620 1621 if (!bi) 1622 return NULL; 1623 1624 for (i = 0; i < bs->nr; i++) { 1625 ip__resolve_ams(al->thread, &bi[i].to, bs->entries[i].to); 1626 ip__resolve_ams(al->thread, &bi[i].from, bs->entries[i].from); 1627 bi[i].flags = bs->entries[i].flags; 1628 } 1629 return bi; 1630 } 1631 1632 #define CHASHSZ 127 1633 #define CHASHBITS 7 1634 #define NO_ENTRY 0xff 1635 1636 #define PERF_MAX_BRANCH_DEPTH 127 1637 1638 /* Remove loops. */ 1639 static int remove_loops(struct branch_entry *l, int nr) 1640 { 1641 int i, j, off; 1642 unsigned char chash[CHASHSZ]; 1643 1644 memset(chash, NO_ENTRY, sizeof(chash)); 1645 1646 BUG_ON(PERF_MAX_BRANCH_DEPTH > 255); 1647 1648 for (i = 0; i < nr; i++) { 1649 int h = hash_64(l[i].from, CHASHBITS) % CHASHSZ; 1650 1651 /* no collision handling for now */ 1652 if (chash[h] == NO_ENTRY) { 1653 chash[h] = i; 1654 } else if (l[chash[h]].from == l[i].from) { 1655 bool is_loop = true; 1656 /* check if it is a real loop */ 1657 off = 0; 1658 for (j = chash[h]; j < i && i + off < nr; j++, off++) 1659 if (l[j].from != l[i + off].from) { 1660 is_loop = false; 1661 break; 1662 } 1663 if (is_loop) { 1664 memmove(l + i, l + i + off, 1665 (nr - (i + off)) * sizeof(*l)); 1666 nr -= off; 1667 } 1668 } 1669 } 1670 return nr; 1671 } 1672 1673 /* 1674 * Recolve LBR callstack chain sample 1675 * Return: 1676 * 1 on success get LBR callchain information 1677 * 0 no available LBR callchain information, should try fp 1678 * negative error code on other errors. 1679 */ 1680 static int resolve_lbr_callchain_sample(struct thread *thread, 1681 struct perf_sample *sample, 1682 struct symbol **parent, 1683 struct addr_location *root_al, 1684 int max_stack) 1685 { 1686 struct ip_callchain *chain = sample->callchain; 1687 int chain_nr = min(max_stack, (int)chain->nr); 1688 u8 cpumode = PERF_RECORD_MISC_USER; 1689 int i, j, err; 1690 u64 ip; 1691 1692 for (i = 0; i < chain_nr; i++) { 1693 if (chain->ips[i] == PERF_CONTEXT_USER) 1694 break; 1695 } 1696 1697 /* LBR only affects the user callchain */ 1698 if (i != chain_nr) { 1699 struct branch_stack *lbr_stack = sample->branch_stack; 1700 int lbr_nr = lbr_stack->nr; 1701 /* 1702 * LBR callstack can only get user call chain. 1703 * The mix_chain_nr is kernel call chain 1704 * number plus LBR user call chain number. 1705 * i is kernel call chain number, 1706 * 1 is PERF_CONTEXT_USER, 1707 * lbr_nr + 1 is the user call chain number. 1708 * For details, please refer to the comments 1709 * in callchain__printf 1710 */ 1711 int mix_chain_nr = i + 1 + lbr_nr + 1; 1712 1713 if (mix_chain_nr > PERF_MAX_STACK_DEPTH + PERF_MAX_BRANCH_DEPTH) { 1714 pr_warning("corrupted callchain. skipping...\n"); 1715 return 0; 1716 } 1717 1718 for (j = 0; j < mix_chain_nr; j++) { 1719 if (callchain_param.order == ORDER_CALLEE) { 1720 if (j < i + 1) 1721 ip = chain->ips[j]; 1722 else if (j > i + 1) 1723 ip = lbr_stack->entries[j - i - 2].from; 1724 else 1725 ip = lbr_stack->entries[0].to; 1726 } else { 1727 if (j < lbr_nr) 1728 ip = lbr_stack->entries[lbr_nr - j - 1].from; 1729 else if (j > lbr_nr) 1730 ip = chain->ips[i + 1 - (j - lbr_nr)]; 1731 else 1732 ip = lbr_stack->entries[0].to; 1733 } 1734 1735 err = add_callchain_ip(thread, parent, root_al, &cpumode, ip); 1736 if (err) 1737 return (err < 0) ? err : 0; 1738 } 1739 return 1; 1740 } 1741 1742 return 0; 1743 } 1744 1745 static int thread__resolve_callchain_sample(struct thread *thread, 1746 struct perf_evsel *evsel, 1747 struct perf_sample *sample, 1748 struct symbol **parent, 1749 struct addr_location *root_al, 1750 int max_stack) 1751 { 1752 struct branch_stack *branch = sample->branch_stack; 1753 struct ip_callchain *chain = sample->callchain; 1754 int chain_nr = min(max_stack, (int)chain->nr); 1755 u8 cpumode = PERF_RECORD_MISC_USER; 1756 int i, j, err; 1757 int skip_idx = -1; 1758 int first_call = 0; 1759 1760 callchain_cursor_reset(&callchain_cursor); 1761 1762 if (has_branch_callstack(evsel)) { 1763 err = resolve_lbr_callchain_sample(thread, sample, parent, 1764 root_al, max_stack); 1765 if (err) 1766 return (err < 0) ? err : 0; 1767 } 1768 1769 /* 1770 * Based on DWARF debug information, some architectures skip 1771 * a callchain entry saved by the kernel. 1772 */ 1773 if (chain->nr < PERF_MAX_STACK_DEPTH) 1774 skip_idx = arch_skip_callchain_idx(thread, chain); 1775 1776 /* 1777 * Add branches to call stack for easier browsing. This gives 1778 * more context for a sample than just the callers. 1779 * 1780 * This uses individual histograms of paths compared to the 1781 * aggregated histograms the normal LBR mode uses. 1782 * 1783 * Limitations for now: 1784 * - No extra filters 1785 * - No annotations (should annotate somehow) 1786 */ 1787 1788 if (branch && callchain_param.branch_callstack) { 1789 int nr = min(max_stack, (int)branch->nr); 1790 struct branch_entry be[nr]; 1791 1792 if (branch->nr > PERF_MAX_BRANCH_DEPTH) { 1793 pr_warning("corrupted branch chain. skipping...\n"); 1794 goto check_calls; 1795 } 1796 1797 for (i = 0; i < nr; i++) { 1798 if (callchain_param.order == ORDER_CALLEE) { 1799 be[i] = branch->entries[i]; 1800 /* 1801 * Check for overlap into the callchain. 1802 * The return address is one off compared to 1803 * the branch entry. To adjust for this 1804 * assume the calling instruction is not longer 1805 * than 8 bytes. 1806 */ 1807 if (i == skip_idx || 1808 chain->ips[first_call] >= PERF_CONTEXT_MAX) 1809 first_call++; 1810 else if (be[i].from < chain->ips[first_call] && 1811 be[i].from >= chain->ips[first_call] - 8) 1812 first_call++; 1813 } else 1814 be[i] = branch->entries[branch->nr - i - 1]; 1815 } 1816 1817 nr = remove_loops(be, nr); 1818 1819 for (i = 0; i < nr; i++) { 1820 err = add_callchain_ip(thread, parent, root_al, 1821 NULL, be[i].to); 1822 if (!err) 1823 err = add_callchain_ip(thread, parent, root_al, 1824 NULL, be[i].from); 1825 if (err == -EINVAL) 1826 break; 1827 if (err) 1828 return err; 1829 } 1830 chain_nr -= nr; 1831 } 1832 1833 check_calls: 1834 if (chain->nr > PERF_MAX_STACK_DEPTH && (int)chain->nr > max_stack) { 1835 pr_warning("corrupted callchain. skipping...\n"); 1836 return 0; 1837 } 1838 1839 for (i = first_call; i < chain_nr; i++) { 1840 u64 ip; 1841 1842 if (callchain_param.order == ORDER_CALLEE) 1843 j = i; 1844 else 1845 j = chain->nr - i - 1; 1846 1847 #ifdef HAVE_SKIP_CALLCHAIN_IDX 1848 if (j == skip_idx) 1849 continue; 1850 #endif 1851 ip = chain->ips[j]; 1852 1853 err = add_callchain_ip(thread, parent, root_al, &cpumode, ip); 1854 1855 if (err) 1856 return (err < 0) ? err : 0; 1857 } 1858 1859 return 0; 1860 } 1861 1862 static int unwind_entry(struct unwind_entry *entry, void *arg) 1863 { 1864 struct callchain_cursor *cursor = arg; 1865 return callchain_cursor_append(cursor, entry->ip, 1866 entry->map, entry->sym); 1867 } 1868 1869 int thread__resolve_callchain(struct thread *thread, 1870 struct perf_evsel *evsel, 1871 struct perf_sample *sample, 1872 struct symbol **parent, 1873 struct addr_location *root_al, 1874 int max_stack) 1875 { 1876 int ret = thread__resolve_callchain_sample(thread, evsel, 1877 sample, parent, 1878 root_al, max_stack); 1879 if (ret) 1880 return ret; 1881 1882 /* Can we do dwarf post unwind? */ 1883 if (!((evsel->attr.sample_type & PERF_SAMPLE_REGS_USER) && 1884 (evsel->attr.sample_type & PERF_SAMPLE_STACK_USER))) 1885 return 0; 1886 1887 /* Bail out if nothing was captured. */ 1888 if ((!sample->user_regs.regs) || 1889 (!sample->user_stack.size)) 1890 return 0; 1891 1892 return unwind__get_entries(unwind_entry, &callchain_cursor, 1893 thread, sample, max_stack); 1894 1895 } 1896 1897 int machine__for_each_thread(struct machine *machine, 1898 int (*fn)(struct thread *thread, void *p), 1899 void *priv) 1900 { 1901 struct rb_node *nd; 1902 struct thread *thread; 1903 int rc = 0; 1904 1905 for (nd = rb_first(&machine->threads); nd; nd = rb_next(nd)) { 1906 thread = rb_entry(nd, struct thread, rb_node); 1907 rc = fn(thread, priv); 1908 if (rc != 0) 1909 return rc; 1910 } 1911 1912 list_for_each_entry(thread, &machine->dead_threads, node) { 1913 rc = fn(thread, priv); 1914 if (rc != 0) 1915 return rc; 1916 } 1917 return rc; 1918 } 1919 1920 int machines__for_each_thread(struct machines *machines, 1921 int (*fn)(struct thread *thread, void *p), 1922 void *priv) 1923 { 1924 struct rb_node *nd; 1925 int rc = 0; 1926 1927 rc = machine__for_each_thread(&machines->host, fn, priv); 1928 if (rc != 0) 1929 return rc; 1930 1931 for (nd = rb_first(&machines->guests); nd; nd = rb_next(nd)) { 1932 struct machine *machine = rb_entry(nd, struct machine, rb_node); 1933 1934 rc = machine__for_each_thread(machine, fn, priv); 1935 if (rc != 0) 1936 return rc; 1937 } 1938 return rc; 1939 } 1940 1941 int __machine__synthesize_threads(struct machine *machine, struct perf_tool *tool, 1942 struct target *target, struct thread_map *threads, 1943 perf_event__handler_t process, bool data_mmap, 1944 unsigned int proc_map_timeout) 1945 { 1946 if (target__has_task(target)) 1947 return perf_event__synthesize_thread_map(tool, threads, process, machine, data_mmap, proc_map_timeout); 1948 else if (target__has_cpu(target)) 1949 return perf_event__synthesize_threads(tool, process, machine, data_mmap, proc_map_timeout); 1950 /* command specified */ 1951 return 0; 1952 } 1953 1954 pid_t machine__get_current_tid(struct machine *machine, int cpu) 1955 { 1956 if (cpu < 0 || cpu >= MAX_NR_CPUS || !machine->current_tid) 1957 return -1; 1958 1959 return machine->current_tid[cpu]; 1960 } 1961 1962 int machine__set_current_tid(struct machine *machine, int cpu, pid_t pid, 1963 pid_t tid) 1964 { 1965 struct thread *thread; 1966 1967 if (cpu < 0) 1968 return -EINVAL; 1969 1970 if (!machine->current_tid) { 1971 int i; 1972 1973 machine->current_tid = calloc(MAX_NR_CPUS, sizeof(pid_t)); 1974 if (!machine->current_tid) 1975 return -ENOMEM; 1976 for (i = 0; i < MAX_NR_CPUS; i++) 1977 machine->current_tid[i] = -1; 1978 } 1979 1980 if (cpu >= MAX_NR_CPUS) { 1981 pr_err("Requested CPU %d too large. ", cpu); 1982 pr_err("Consider raising MAX_NR_CPUS\n"); 1983 return -EINVAL; 1984 } 1985 1986 machine->current_tid[cpu] = tid; 1987 1988 thread = machine__findnew_thread(machine, pid, tid); 1989 if (!thread) 1990 return -ENOMEM; 1991 1992 thread->cpu = cpu; 1993 thread__put(thread); 1994 1995 return 0; 1996 } 1997 1998 int machine__get_kernel_start(struct machine *machine) 1999 { 2000 struct map *map = machine__kernel_map(machine); 2001 int err = 0; 2002 2003 /* 2004 * The only addresses above 2^63 are kernel addresses of a 64-bit 2005 * kernel. Note that addresses are unsigned so that on a 32-bit system 2006 * all addresses including kernel addresses are less than 2^32. In 2007 * that case (32-bit system), if the kernel mapping is unknown, all 2008 * addresses will be assumed to be in user space - see 2009 * machine__kernel_ip(). 2010 */ 2011 machine->kernel_start = 1ULL << 63; 2012 if (map) { 2013 err = map__load(map, machine->symbol_filter); 2014 if (map->start) 2015 machine->kernel_start = map->start; 2016 } 2017 return err; 2018 } 2019 2020 struct dso *machine__findnew_dso(struct machine *machine, const char *filename) 2021 { 2022 return dsos__findnew(&machine->dsos, filename); 2023 } 2024 2025 char *machine__resolve_kernel_addr(void *vmachine, unsigned long long *addrp, char **modp) 2026 { 2027 struct machine *machine = vmachine; 2028 struct map *map; 2029 struct symbol *sym = map_groups__find_symbol(&machine->kmaps, MAP__FUNCTION, *addrp, &map, NULL); 2030 2031 if (sym == NULL) 2032 return NULL; 2033 2034 *modp = __map__is_kmodule(map) ? (char *)map->dso->short_name : NULL; 2035 *addrp = map->unmap_ip(map, sym->start); 2036 return sym->name; 2037 } 2038