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