From: Namhyung Kim <namhyung@kernel.org>
To: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: acme@kernel.org, jolsa@kernel.org, adrian.hunter@intel.com,
irogers@google.com, segher@kernel.crashing.org,
christophe.leroy@csgroup.eu, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
akanksha@linux.ibm.com, maddy@linux.ibm.com, kjain@linux.ibm.com,
disgoel@linux.vnet.ibm.com
Subject: Re: [V4 14/16] tools/perf: Add support to find global register variables using find_data_type_global_reg
Date: Mon, 24 Jun 2024 23:17:00 -0700 [thread overview]
Message-ID: <Znpg3Op3X73xIqYD@google.com> (raw)
In-Reply-To: <20240614172631.56803-15-atrajeev@linux.vnet.ibm.com>
On Fri, Jun 14, 2024 at 10:56:29PM +0530, Athira Rajeev wrote:
> There are cases where define a global register variable and associate it
> with a specified register. Example, in powerpc, two registers are
> defined to represent variable:
> 1. r13: represents local_paca
> register struct paca_struct *local_paca asm("r13");
>
> 2. r1: represents stack_pointer
> register void *__stack_pointer asm("r1");
>
> These regs are present in dwarf debug as DW_OP_reg as part of variables
> in the cu_die (compile unit). These are not present in die search done
> in the list of nested scopes since these are global register variables.
>
> Example for local_paca represented by r13:
>
> <<>>
> <1><18dc6b4>: Abbrev Number: 128 (DW_TAG_variable)
> <18dc6b6> DW_AT_name : (indirect string, offset: 0x3861): local_paca
> <18dc6ba> DW_AT_decl_file : 48
> <18dc6bb> DW_AT_decl_line : 36
> <18dc6bc> DW_AT_decl_column : 30
> <18dc6bd> DW_AT_type : <0x18dc6c3>
> <18dc6c1> DW_AT_external : 1
> <18dc6c1> DW_AT_location : 1 byte block: 5d (DW_OP_reg13 (r13))
>
> <1><18dc6c3>: Abbrev Number: 3 (DW_TAG_pointer_type)
> <18dc6c4> DW_AT_byte_size : 8
> <18dc6c4> DW_AT_type : <0x18dc353>
>
> Where DW_AT_type : <0x18dc6c3> further points to :
>
> <1><18dc6c3>: Abbrev Number: 3 (DW_TAG_pointer_type)
> <18dc6c4> DW_AT_byte_size : 8
> <18dc6c4> DW_AT_type : <0x18dc353>
>
> which belongs to:
>
> <1><18dc353>: Abbrev Number: 67 (DW_TAG_structure_type)
> <18dc354> DW_AT_name : (indirect string, offset: 0x56cd): paca_struct
> <18dc358> DW_AT_byte_size : 2944
> <18dc35a> DW_AT_alignment : 128
> <18dc35b> DW_AT_decl_file : 48
> <18dc35c> DW_AT_decl_line : 61
> <18dc35d> DW_AT_decl_column : 8
> <18dc35d> DW_AT_sibling : <0x18dc6b4>
> <<>>
>
> Similar is case with "r1".
>
> <<>>
> <1><18dd772>: Abbrev Number: 129 (DW_TAG_variable)
> <18dd774> DW_AT_name : (indirect string, offset: 0x11ba): current_stack_pointer
> <18dd778> DW_AT_decl_file : 51
> <18dd779> DW_AT_decl_line : 1468
> <18dd77b> DW_AT_decl_column : 24
> <18dd77c> DW_AT_type : <0x18da5cd>
> <18dd780> DW_AT_external : 1
> <18dd780> DW_AT_location : 1 byte block: 51 (DW_OP_reg1 (r1))
>
> where 18da5cd is:
>
> <1><18da5cd>: Abbrev Number: 47 (DW_TAG_base_type)
> <18da5ce> DW_AT_byte_size : 8
> <18da5cf> DW_AT_encoding : 7 (unsigned)
> <18da5d0> DW_AT_name : (indirect string, offset: 0x55c7): long unsigned int
> <<>>
>
> To identify data type for these two special cases, iterate over
> variables in the CU die (Compile Unit) and match it with the register.
> If the variable is a base type, ie die_get_real_type will return NULL
> here, set offset to zero. With the changes, data type for "paca_struct"
> and "long unsigned int" for r1 is identified.
>
> Snippet from ./perf report -s type,type_off
>
> 12.85% long unsigned int long unsigned int +0 (no field)
> 4.68% struct paca_struct struct paca_struct +2312 (__current)
> 4.57% struct paca_struct struct paca_struct +2354 (irq_soft_mask)
>
> Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
> ---
> tools/perf/util/annotate-data.c | 40 ++++++++++++++++++++++++++++
> tools/perf/util/annotate.c | 8 ++++++
> tools/perf/util/annotate.h | 1 +
> tools/perf/util/include/dwarf-regs.h | 1 +
> 4 files changed, 50 insertions(+)
>
> diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-data.c
> index 734acdd8c4b7..82232f2d8e16 100644
> --- a/tools/perf/util/annotate-data.c
> +++ b/tools/perf/util/annotate-data.c
> @@ -1170,6 +1170,40 @@ static int find_data_type_block(struct data_loc_info *dloc,
> return ret;
> }
>
> +/*
> + * Handle cases where define a global register variable and
> + * associate it with a specified register. These regs are
> + * present in dwarf debug as DW_OP_reg as part of variables
> + * in the cu_die (compile unit). Iterate over variables in the
> + * cu_die and match with reg to identify data type die.
Ok, if they always point to the same type, you may cache the result and
avoid the repeated search everytime.
> + */
> +static int find_data_type_global_reg(struct data_loc_info *dloc, int reg, Dwarf_Die *cu_die,
> + Dwarf_Die *type_die)
> +{
> + Dwarf_Die vr_die;
> + int ret = -1;
> + struct die_var_type *var_types = NULL;
> +
> + die_collect_vars(cu_die, &var_types);
> + while (var_types) {
> + if (var_types->reg == reg) {
> + if (dwarf_offdie(dloc->di->dbg, var_types->die_off, &vr_die)) {
> + if (die_get_real_type(&vr_die, type_die) == NULL) {
> + dloc->type_offset = 0;
> + dwarf_offdie(dloc->di->dbg, var_types->die_off, type_die);
> + }
> + pr_debug_type_name(type_die, TSR_KIND_TYPE);
> + ret = 0;
> + pr_debug_dtp("found by CU for %s (die:%#lx)\n",
> + dwarf_diename(type_die), (long)dwarf_dieoffset(type_die));
> + }
> + break;
> + }
> + var_types = var_types->next;
> + }
Please add 'delete_var_types(var_types);' here.
Thanks,
Namhyung
> + return ret;
> +}
> +
> /* The result will be saved in @type_die */
> static int find_data_type_die(struct data_loc_info *dloc, Dwarf_Die *type_die)
> {
> @@ -1217,6 +1251,12 @@ static int find_data_type_die(struct data_loc_info *dloc, Dwarf_Die *type_die)
> pr_debug_dtp("CU for %s (die:%#lx)\n",
> dwarf_diename(&cu_die), (long)dwarf_dieoffset(&cu_die));
>
> + if (loc->reg_type == DWARF_REG_GLOBAL) {
> + ret = find_data_type_global_reg(dloc, reg, &cu_die, type_die);
> + if (!ret)
> + goto out;
> + }
> +
> if (reg == DWARF_REG_PC) {
> if (get_global_var_type(&cu_die, dloc, dloc->ip, dloc->var_addr,
> &offset, type_die)) {
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index bfa6420dc4b9..c7e4fd16e8b4 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -2431,6 +2431,14 @@ struct annotated_data_type *hist_entry__get_data_type(struct hist_entry *he)
> op_loc->reg1 = DWARF_REG_PC;
> }
>
> + /* Global reg variable 13 and 1
> + * assign to DWARF_REG_GLOBAL
> + */
> + if (arch__is(arch, "powerpc")) {
> + if ((op_loc->reg1 == 13) || (op_loc->reg1 == 1))
> + op_loc->reg_type = DWARF_REG_GLOBAL;
> + }
> +
> mem_type = find_data_type(&dloc);
>
> if (mem_type == NULL && is_stack_canary(arch, op_loc)) {
> diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
> index 9ba772f46270..ad69842a8ebc 100644
> --- a/tools/perf/util/annotate.h
> +++ b/tools/perf/util/annotate.h
> @@ -475,6 +475,7 @@ struct annotated_op_loc {
> bool mem_ref;
> bool multi_regs;
> bool imm;
> + int reg_type;
> };
>
> enum annotated_insn_ops {
> diff --git a/tools/perf/util/include/dwarf-regs.h b/tools/perf/util/include/dwarf-regs.h
> index 7ea39362ecaf..a873c906a86b 100644
> --- a/tools/perf/util/include/dwarf-regs.h
> +++ b/tools/perf/util/include/dwarf-regs.h
> @@ -5,6 +5,7 @@
>
> #define DWARF_REG_PC 0xd3af9c /* random number */
> #define DWARF_REG_FB 0xd3affb /* random number */
> +#define DWARF_REG_GLOBAL 0xd3affc /* random number */
>
> #ifdef HAVE_DWARF_SUPPORT
> const char *get_arch_regstr(unsigned int n);
> --
> 2.43.0
>
WARNING: multiple messages have this Message-ID (diff)
From: Namhyung Kim <namhyung@kernel.org>
To: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: irogers@google.com, disgoel@linux.vnet.ibm.com,
maddy@linux.ibm.com, kjain@linux.ibm.com,
adrian.hunter@intel.com, christophe.leroy@csgroup.eu,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
acme@kernel.org, jolsa@kernel.org, akanksha@linux.ibm.com,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [V4 14/16] tools/perf: Add support to find global register variables using find_data_type_global_reg
Date: Mon, 24 Jun 2024 23:17:00 -0700 [thread overview]
Message-ID: <Znpg3Op3X73xIqYD@google.com> (raw)
In-Reply-To: <20240614172631.56803-15-atrajeev@linux.vnet.ibm.com>
On Fri, Jun 14, 2024 at 10:56:29PM +0530, Athira Rajeev wrote:
> There are cases where define a global register variable and associate it
> with a specified register. Example, in powerpc, two registers are
> defined to represent variable:
> 1. r13: represents local_paca
> register struct paca_struct *local_paca asm("r13");
>
> 2. r1: represents stack_pointer
> register void *__stack_pointer asm("r1");
>
> These regs are present in dwarf debug as DW_OP_reg as part of variables
> in the cu_die (compile unit). These are not present in die search done
> in the list of nested scopes since these are global register variables.
>
> Example for local_paca represented by r13:
>
> <<>>
> <1><18dc6b4>: Abbrev Number: 128 (DW_TAG_variable)
> <18dc6b6> DW_AT_name : (indirect string, offset: 0x3861): local_paca
> <18dc6ba> DW_AT_decl_file : 48
> <18dc6bb> DW_AT_decl_line : 36
> <18dc6bc> DW_AT_decl_column : 30
> <18dc6bd> DW_AT_type : <0x18dc6c3>
> <18dc6c1> DW_AT_external : 1
> <18dc6c1> DW_AT_location : 1 byte block: 5d (DW_OP_reg13 (r13))
>
> <1><18dc6c3>: Abbrev Number: 3 (DW_TAG_pointer_type)
> <18dc6c4> DW_AT_byte_size : 8
> <18dc6c4> DW_AT_type : <0x18dc353>
>
> Where DW_AT_type : <0x18dc6c3> further points to :
>
> <1><18dc6c3>: Abbrev Number: 3 (DW_TAG_pointer_type)
> <18dc6c4> DW_AT_byte_size : 8
> <18dc6c4> DW_AT_type : <0x18dc353>
>
> which belongs to:
>
> <1><18dc353>: Abbrev Number: 67 (DW_TAG_structure_type)
> <18dc354> DW_AT_name : (indirect string, offset: 0x56cd): paca_struct
> <18dc358> DW_AT_byte_size : 2944
> <18dc35a> DW_AT_alignment : 128
> <18dc35b> DW_AT_decl_file : 48
> <18dc35c> DW_AT_decl_line : 61
> <18dc35d> DW_AT_decl_column : 8
> <18dc35d> DW_AT_sibling : <0x18dc6b4>
> <<>>
>
> Similar is case with "r1".
>
> <<>>
> <1><18dd772>: Abbrev Number: 129 (DW_TAG_variable)
> <18dd774> DW_AT_name : (indirect string, offset: 0x11ba): current_stack_pointer
> <18dd778> DW_AT_decl_file : 51
> <18dd779> DW_AT_decl_line : 1468
> <18dd77b> DW_AT_decl_column : 24
> <18dd77c> DW_AT_type : <0x18da5cd>
> <18dd780> DW_AT_external : 1
> <18dd780> DW_AT_location : 1 byte block: 51 (DW_OP_reg1 (r1))
>
> where 18da5cd is:
>
> <1><18da5cd>: Abbrev Number: 47 (DW_TAG_base_type)
> <18da5ce> DW_AT_byte_size : 8
> <18da5cf> DW_AT_encoding : 7 (unsigned)
> <18da5d0> DW_AT_name : (indirect string, offset: 0x55c7): long unsigned int
> <<>>
>
> To identify data type for these two special cases, iterate over
> variables in the CU die (Compile Unit) and match it with the register.
> If the variable is a base type, ie die_get_real_type will return NULL
> here, set offset to zero. With the changes, data type for "paca_struct"
> and "long unsigned int" for r1 is identified.
>
> Snippet from ./perf report -s type,type_off
>
> 12.85% long unsigned int long unsigned int +0 (no field)
> 4.68% struct paca_struct struct paca_struct +2312 (__current)
> 4.57% struct paca_struct struct paca_struct +2354 (irq_soft_mask)
>
> Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
> ---
> tools/perf/util/annotate-data.c | 40 ++++++++++++++++++++++++++++
> tools/perf/util/annotate.c | 8 ++++++
> tools/perf/util/annotate.h | 1 +
> tools/perf/util/include/dwarf-regs.h | 1 +
> 4 files changed, 50 insertions(+)
>
> diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-data.c
> index 734acdd8c4b7..82232f2d8e16 100644
> --- a/tools/perf/util/annotate-data.c
> +++ b/tools/perf/util/annotate-data.c
> @@ -1170,6 +1170,40 @@ static int find_data_type_block(struct data_loc_info *dloc,
> return ret;
> }
>
> +/*
> + * Handle cases where define a global register variable and
> + * associate it with a specified register. These regs are
> + * present in dwarf debug as DW_OP_reg as part of variables
> + * in the cu_die (compile unit). Iterate over variables in the
> + * cu_die and match with reg to identify data type die.
Ok, if they always point to the same type, you may cache the result and
avoid the repeated search everytime.
> + */
> +static int find_data_type_global_reg(struct data_loc_info *dloc, int reg, Dwarf_Die *cu_die,
> + Dwarf_Die *type_die)
> +{
> + Dwarf_Die vr_die;
> + int ret = -1;
> + struct die_var_type *var_types = NULL;
> +
> + die_collect_vars(cu_die, &var_types);
> + while (var_types) {
> + if (var_types->reg == reg) {
> + if (dwarf_offdie(dloc->di->dbg, var_types->die_off, &vr_die)) {
> + if (die_get_real_type(&vr_die, type_die) == NULL) {
> + dloc->type_offset = 0;
> + dwarf_offdie(dloc->di->dbg, var_types->die_off, type_die);
> + }
> + pr_debug_type_name(type_die, TSR_KIND_TYPE);
> + ret = 0;
> + pr_debug_dtp("found by CU for %s (die:%#lx)\n",
> + dwarf_diename(type_die), (long)dwarf_dieoffset(type_die));
> + }
> + break;
> + }
> + var_types = var_types->next;
> + }
Please add 'delete_var_types(var_types);' here.
Thanks,
Namhyung
> + return ret;
> +}
> +
> /* The result will be saved in @type_die */
> static int find_data_type_die(struct data_loc_info *dloc, Dwarf_Die *type_die)
> {
> @@ -1217,6 +1251,12 @@ static int find_data_type_die(struct data_loc_info *dloc, Dwarf_Die *type_die)
> pr_debug_dtp("CU for %s (die:%#lx)\n",
> dwarf_diename(&cu_die), (long)dwarf_dieoffset(&cu_die));
>
> + if (loc->reg_type == DWARF_REG_GLOBAL) {
> + ret = find_data_type_global_reg(dloc, reg, &cu_die, type_die);
> + if (!ret)
> + goto out;
> + }
> +
> if (reg == DWARF_REG_PC) {
> if (get_global_var_type(&cu_die, dloc, dloc->ip, dloc->var_addr,
> &offset, type_die)) {
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index bfa6420dc4b9..c7e4fd16e8b4 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -2431,6 +2431,14 @@ struct annotated_data_type *hist_entry__get_data_type(struct hist_entry *he)
> op_loc->reg1 = DWARF_REG_PC;
> }
>
> + /* Global reg variable 13 and 1
> + * assign to DWARF_REG_GLOBAL
> + */
> + if (arch__is(arch, "powerpc")) {
> + if ((op_loc->reg1 == 13) || (op_loc->reg1 == 1))
> + op_loc->reg_type = DWARF_REG_GLOBAL;
> + }
> +
> mem_type = find_data_type(&dloc);
>
> if (mem_type == NULL && is_stack_canary(arch, op_loc)) {
> diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
> index 9ba772f46270..ad69842a8ebc 100644
> --- a/tools/perf/util/annotate.h
> +++ b/tools/perf/util/annotate.h
> @@ -475,6 +475,7 @@ struct annotated_op_loc {
> bool mem_ref;
> bool multi_regs;
> bool imm;
> + int reg_type;
> };
>
> enum annotated_insn_ops {
> diff --git a/tools/perf/util/include/dwarf-regs.h b/tools/perf/util/include/dwarf-regs.h
> index 7ea39362ecaf..a873c906a86b 100644
> --- a/tools/perf/util/include/dwarf-regs.h
> +++ b/tools/perf/util/include/dwarf-regs.h
> @@ -5,6 +5,7 @@
>
> #define DWARF_REG_PC 0xd3af9c /* random number */
> #define DWARF_REG_FB 0xd3affb /* random number */
> +#define DWARF_REG_GLOBAL 0xd3affc /* random number */
>
> #ifdef HAVE_DWARF_SUPPORT
> const char *get_arch_regstr(unsigned int n);
> --
> 2.43.0
>
next prev parent reply other threads:[~2024-06-25 6:17 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-14 17:26 [V4 00/16] Add data type profiling support for powerpc Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 01/16] tools/perf: Move the data structures related to register type to header file Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-25 5:15 ` Namhyung Kim
2024-06-25 5:15 ` Namhyung Kim
2024-06-25 10:54 ` Athira Rajeev
2024-06-25 10:54 ` Athira Rajeev
2024-06-14 17:26 ` [V4 02/16] tools/perf: Add "update_insn_state" callback function to handle arch specific instruction tracking Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 03/16] tools/perf: Add support to capture and parse raw instruction in powerpc using dso__data_read_offset utility Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-25 5:29 ` Namhyung Kim
2024-06-25 5:29 ` Namhyung Kim
2024-06-25 12:38 ` Athira Rajeev
2024-06-25 12:38 ` Athira Rajeev
2024-06-25 18:39 ` Namhyung Kim
2024-06-25 18:39 ` Namhyung Kim
2024-06-26 4:09 ` Athira Rajeev
2024-06-26 4:09 ` Athira Rajeev
2024-06-14 17:26 ` [V4 04/16] tools/perf: Use sort keys to determine whether to pick objdump to disassemble Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-25 5:32 ` Namhyung Kim
2024-06-25 5:32 ` Namhyung Kim
2024-06-14 17:26 ` [V4 05/16] tools/perf: Add disasm_line__parse to parse raw instruction for powerpc Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-25 5:39 ` Namhyung Kim
2024-06-25 5:39 ` Namhyung Kim
2024-06-25 12:42 ` Athira Rajeev
2024-06-25 12:42 ` Athira Rajeev
2024-06-25 18:45 ` Namhyung Kim
2024-06-25 18:45 ` Namhyung Kim
2024-06-26 4:08 ` Athira Rajeev
2024-06-26 4:08 ` Athira Rajeev
2024-06-26 21:17 ` Namhyung Kim
2024-06-26 21:17 ` Namhyung Kim
2024-06-27 9:28 ` Athira Rajeev
2024-06-27 9:28 ` Athira Rajeev
2024-06-30 11:10 ` Athira Rajeev
2024-06-30 11:10 ` Athira Rajeev
2024-06-14 17:26 ` [V4 06/16] tools/perf: Update parameters for reg extract functions to use raw instruction on powerpc Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-25 6:00 ` Namhyung Kim
2024-06-25 6:00 ` Namhyung Kim
2024-06-25 12:43 ` Athira Rajeev
2024-06-25 12:43 ` Athira Rajeev
2024-06-14 17:26 ` [V4 07/16] tools/perf: Add support to identify memory instructions of opcode 31 in powerpc Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 08/16] tools/perf: Add some of the arithmetic instructions to support instruction tracking " Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 09/16] tools/perf: Add more instructions for instruction tracking Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 10/16] tools/perf: Update instruction tracking for powerpc Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 11/16] tools/perf: Make capstone_init non-static so that it can be used during symbol disassemble Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 12/16] tools/perf: Use capstone_init and remove open_capstone_handle from disasm.c Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 13/16] tools/perf: Add support to use libcapstone in powerpc Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-25 6:08 ` Namhyung Kim
2024-06-25 6:08 ` Namhyung Kim
2024-06-25 12:44 ` Athira Rajeev
2024-06-25 12:44 ` Athira Rajeev
2024-06-14 17:26 ` [V4 14/16] tools/perf: Add support to find global register variables using find_data_type_global_reg Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-25 6:17 ` Namhyung Kim [this message]
2024-06-25 6:17 ` Namhyung Kim
2024-06-25 12:45 ` Athira Rajeev
2024-06-25 12:45 ` Athira Rajeev
2024-06-14 17:26 ` [V4 15/16] tools/perf: Add support for global_die to capture name of variable in case of register defined variable Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-14 17:26 ` [V4 16/16] tools/perf: Set instruction name to be used with insn-stat when using raw instruction Athira Rajeev
2024-06-14 17:26 ` Athira Rajeev
2024-06-20 15:31 ` [V4 00/16] Add data type profiling support for powerpc Athira Rajeev
2024-06-20 15:31 ` Athira Rajeev
2024-06-22 0:06 ` Namhyung Kim
2024-06-22 0:06 ` Namhyung Kim
2024-06-25 11:48 ` Athira Rajeev
2024-06-25 11:48 ` Athira Rajeev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Znpg3Op3X73xIqYD@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=akanksha@linux.ibm.com \
--cc=atrajeev@linux.vnet.ibm.com \
--cc=christophe.leroy@csgroup.eu \
--cc=disgoel@linux.vnet.ibm.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=kjain@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=segher@kernel.crashing.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.