evsel.c (4343f61103cdb8ccd6f3d5dd7168f1176a1cee37) | evsel.c (53651b28cfb637ef604abc189d877948d1af39bb) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only | |
2/* 3 * Copyright (C) 2011, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com> 4 * 5 * Parts came from builtin-{top,stat,record}.c, see those files for further 6 * copyright notes. | 1/* 2 * Copyright (C) 2011, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com> 3 * 4 * Parts came from builtin-{top,stat,record}.c, see those files for further 5 * copyright notes. |
6 * 7 * Released under the GPL v2. (and only v2, not any later version) |
|
7 */ 8 9#include <byteswap.h> 10#include <errno.h> 11#include <inttypes.h> 12#include <linux/bitops.h> 13#include <api/fs/fs.h> 14#include <api/fs/tracing_path.h> --- 659 unchanged lines hidden (view full) --- 674{ 675 bool function = perf_evsel__is_function_event(evsel); 676 struct perf_event_attr *attr = &evsel->attr; 677 678 perf_evsel__set_sample_bit(evsel, CALLCHAIN); 679 680 attr->sample_max_stack = param->max_stack; 681 | 8 */ 9 10#include <byteswap.h> 11#include <errno.h> 12#include <inttypes.h> 13#include <linux/bitops.h> 14#include <api/fs/fs.h> 15#include <api/fs/tracing_path.h> --- 659 unchanged lines hidden (view full) --- 675{ 676 bool function = perf_evsel__is_function_event(evsel); 677 struct perf_event_attr *attr = &evsel->attr; 678 679 perf_evsel__set_sample_bit(evsel, CALLCHAIN); 680 681 attr->sample_max_stack = param->max_stack; 682 |
683 if (opts->kernel_callchains) 684 attr->exclude_callchain_user = 1; 685 if (opts->user_callchains) 686 attr->exclude_callchain_kernel = 1; |
|
682 if (param->record_mode == CALLCHAIN_LBR) { 683 if (!opts->branch_stack) { 684 if (attr->exclude_user) { 685 pr_warning("LBR callstack option is only available " 686 "to get user callchain information. " 687 "Falling back to framepointers.\n"); 688 } else { 689 perf_evsel__set_sample_bit(evsel, BRANCH_STACK); --- 6 unchanged lines hidden (view full) --- 696 pr_warning("Cannot use LBR callstack with branch stack. " 697 "Falling back to framepointers.\n"); 698 } 699 700 if (param->record_mode == CALLCHAIN_DWARF) { 701 if (!function) { 702 perf_evsel__set_sample_bit(evsel, REGS_USER); 703 perf_evsel__set_sample_bit(evsel, STACK_USER); | 687 if (param->record_mode == CALLCHAIN_LBR) { 688 if (!opts->branch_stack) { 689 if (attr->exclude_user) { 690 pr_warning("LBR callstack option is only available " 691 "to get user callchain information. " 692 "Falling back to framepointers.\n"); 693 } else { 694 perf_evsel__set_sample_bit(evsel, BRANCH_STACK); --- 6 unchanged lines hidden (view full) --- 701 pr_warning("Cannot use LBR callstack with branch stack. " 702 "Falling back to framepointers.\n"); 703 } 704 705 if (param->record_mode == CALLCHAIN_DWARF) { 706 if (!function) { 707 perf_evsel__set_sample_bit(evsel, REGS_USER); 708 perf_evsel__set_sample_bit(evsel, STACK_USER); |
704 attr->sample_regs_user |= PERF_REGS_MASK; | 709 if (opts->sample_user_regs && DWARF_MINIMAL_REGS != PERF_REGS_MASK) { 710 attr->sample_regs_user |= DWARF_MINIMAL_REGS; 711 pr_warning("WARNING: The use of --call-graph=dwarf may require all the user registers, " 712 "specifying a subset with --user-regs may render DWARF unwinding unreliable, " 713 "so the minimal registers set (IP, SP) is explicitly forced.\n"); 714 } else { 715 attr->sample_regs_user |= PERF_REGS_MASK; 716 } |
705 attr->sample_stack_user = param->dump_size; 706 attr->exclude_callchain_user = 1; 707 } else { 708 pr_info("Cannot use DWARF unwind for function trace event," 709 " falling back to framepointers.\n"); 710 } 711 } 712 --- 2349 unchanged lines hidden --- | 717 attr->sample_stack_user = param->dump_size; 718 attr->exclude_callchain_user = 1; 719 } else { 720 pr_info("Cannot use DWARF unwind for function trace event," 721 " falling back to framepointers.\n"); 722 } 723 } 724 --- 2349 unchanged lines hidden --- |