tools/perf/util/dwarf-aux.c | 56 ++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 28 deletions(-)
check_allowed_ops() is used from both HAVE_DWARF_GETLOCATIONS_SUPPORT
and HAVE_DWARF_CFI_SUPPORT sections, so move it into the right place so
that it's available when either are defined. This shows up when doing
a static cross compile for arm64:
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LDFLAGS="-static" \
EXTRA_PERFLIBS="-lexpat"
util/dwarf-aux.c:1723:6: error: implicit declaration of function 'check_allowed_ops'
Fixes: 55442cc2f22d ("perf dwarf-aux: Check allowed DWARF Ops")
Signed-off-by: James Clark <james.clark@arm.com>
---
tools/perf/util/dwarf-aux.c | 56 ++++++++++++++++++-------------------
1 file changed, 28 insertions(+), 28 deletions(-)
diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c
index c0a492e65388..c9584563cd56 100644
--- a/tools/perf/util/dwarf-aux.c
+++ b/tools/perf/util/dwarf-aux.c
@@ -1215,6 +1215,34 @@ static int offset_from_dwarf_op(Dwarf_Op *op)
}
return -1;
}
+
+static bool check_allowed_ops(Dwarf_Op *ops, size_t nops)
+{
+ /* The first op is checked separately */
+ ops++;
+ nops--;
+
+ /*
+ * It needs to make sure if the location expression matches to the given
+ * register and offset exactly. Thus it rejects any complex expressions
+ * and only allows a few of selected operators that doesn't change the
+ * location.
+ */
+ while (nops) {
+ switch (ops->atom) {
+ case DW_OP_stack_value:
+ case DW_OP_deref_size:
+ case DW_OP_deref:
+ case DW_OP_piece:
+ break;
+ default:
+ return false;
+ }
+ ops++;
+ nops--;
+ }
+ return true;
+}
#endif /* HAVE_DWARF_GETLOCATIONS_SUPPORT || HAVE_DWARF_CFI_SUPPORT */
#ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT
@@ -1395,34 +1423,6 @@ static bool match_var_offset(Dwarf_Die *die_mem, struct find_var_data *data,
return true;
}
-static bool check_allowed_ops(Dwarf_Op *ops, size_t nops)
-{
- /* The first op is checked separately */
- ops++;
- nops--;
-
- /*
- * It needs to make sure if the location expression matches to the given
- * register and offset exactly. Thus it rejects any complex expressions
- * and only allows a few of selected operators that doesn't change the
- * location.
- */
- while (nops) {
- switch (ops->atom) {
- case DW_OP_stack_value:
- case DW_OP_deref_size:
- case DW_OP_deref:
- case DW_OP_piece:
- break;
- default:
- return false;
- }
- ops++;
- nops--;
- }
- return true;
-}
-
/* Only checks direct child DIEs in the given scope. */
static int __die_find_var_reg_cb(Dwarf_Die *die_mem, void *arg)
{
--
2.34.1
On Wed, 8 May 2024 15:14:57 +0100 James Clark <james.clark@arm.com> wrote: > check_allowed_ops() is used from both HAVE_DWARF_GETLOCATIONS_SUPPORT > and HAVE_DWARF_CFI_SUPPORT sections, so move it into the right place so > that it's available when either are defined. This shows up when doing > a static cross compile for arm64: > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LDFLAGS="-static" \ > EXTRA_PERFLIBS="-lexpat" > > util/dwarf-aux.c:1723:6: error: implicit declaration of function 'check_allowed_ops' > Looks good to me. Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Thanks! > Fixes: 55442cc2f22d ("perf dwarf-aux: Check allowed DWARF Ops") > Signed-off-by: James Clark <james.clark@arm.com> > --- > tools/perf/util/dwarf-aux.c | 56 ++++++++++++++++++------------------- > 1 file changed, 28 insertions(+), 28 deletions(-) > > diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c > index c0a492e65388..c9584563cd56 100644 > --- a/tools/perf/util/dwarf-aux.c > +++ b/tools/perf/util/dwarf-aux.c > @@ -1215,6 +1215,34 @@ static int offset_from_dwarf_op(Dwarf_Op *op) > } > return -1; > } > + > +static bool check_allowed_ops(Dwarf_Op *ops, size_t nops) > +{ > + /* The first op is checked separately */ > + ops++; > + nops--; > + > + /* > + * It needs to make sure if the location expression matches to the given > + * register and offset exactly. Thus it rejects any complex expressions > + * and only allows a few of selected operators that doesn't change the > + * location. > + */ > + while (nops) { > + switch (ops->atom) { > + case DW_OP_stack_value: > + case DW_OP_deref_size: > + case DW_OP_deref: > + case DW_OP_piece: > + break; > + default: > + return false; > + } > + ops++; > + nops--; > + } > + return true; > +} > #endif /* HAVE_DWARF_GETLOCATIONS_SUPPORT || HAVE_DWARF_CFI_SUPPORT */ > > #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT > @@ -1395,34 +1423,6 @@ static bool match_var_offset(Dwarf_Die *die_mem, struct find_var_data *data, > return true; > } > > -static bool check_allowed_ops(Dwarf_Op *ops, size_t nops) > -{ > - /* The first op is checked separately */ > - ops++; > - nops--; > - > - /* > - * It needs to make sure if the location expression matches to the given > - * register and offset exactly. Thus it rejects any complex expressions > - * and only allows a few of selected operators that doesn't change the > - * location. > - */ > - while (nops) { > - switch (ops->atom) { > - case DW_OP_stack_value: > - case DW_OP_deref_size: > - case DW_OP_deref: > - case DW_OP_piece: > - break; > - default: > - return false; > - } > - ops++; > - nops--; > - } > - return true; > -} > - > /* Only checks direct child DIEs in the given scope. */ > static int __die_find_var_reg_cb(Dwarf_Die *die_mem, void *arg) > { > -- > 2.34.1 > > -- Masami Hiramatsu (Google) <mhiramat@kernel.org>
On Thu, May 09, 2024 at 10:11:36AM +0900, Masami Hiramatsu wrote: > On Wed, 8 May 2024 15:14:57 +0100 > James Clark <james.clark@arm.com> wrote: > > > check_allowed_ops() is used from both HAVE_DWARF_GETLOCATIONS_SUPPORT > > and HAVE_DWARF_CFI_SUPPORT sections, so move it into the right place so > > that it's available when either are defined. This shows up when doing > > a static cross compile for arm64: > > > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LDFLAGS="-static" \ > > EXTRA_PERFLIBS="-lexpat" > > > > util/dwarf-aux.c:1723:6: error: implicit declaration of function 'check_allowed_ops' > > > > Looks good to me. > > Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> > > Thanks! Thanks, applied to perf-tools-next, - Arnaldo > > Fixes: 55442cc2f22d ("perf dwarf-aux: Check allowed DWARF Ops") > > Signed-off-by: James Clark <james.clark@arm.com> > > --- > > tools/perf/util/dwarf-aux.c | 56 ++++++++++++++++++------------------- > > 1 file changed, 28 insertions(+), 28 deletions(-) > > > > diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c > > index c0a492e65388..c9584563cd56 100644 > > --- a/tools/perf/util/dwarf-aux.c > > +++ b/tools/perf/util/dwarf-aux.c > > @@ -1215,6 +1215,34 @@ static int offset_from_dwarf_op(Dwarf_Op *op) > > } > > return -1; > > } > > + > > +static bool check_allowed_ops(Dwarf_Op *ops, size_t nops) > > +{ > > + /* The first op is checked separately */ > > + ops++; > > + nops--; > > + > > + /* > > + * It needs to make sure if the location expression matches to the given > > + * register and offset exactly. Thus it rejects any complex expressions > > + * and only allows a few of selected operators that doesn't change the > > + * location. > > + */ > > + while (nops) { > > + switch (ops->atom) { > > + case DW_OP_stack_value: > > + case DW_OP_deref_size: > > + case DW_OP_deref: > > + case DW_OP_piece: > > + break; > > + default: > > + return false; > > + } > > + ops++; > > + nops--; > > + } > > + return true; > > +} > > #endif /* HAVE_DWARF_GETLOCATIONS_SUPPORT || HAVE_DWARF_CFI_SUPPORT */ > > > > #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT > > @@ -1395,34 +1423,6 @@ static bool match_var_offset(Dwarf_Die *die_mem, struct find_var_data *data, > > return true; > > } > > > > -static bool check_allowed_ops(Dwarf_Op *ops, size_t nops) > > -{ > > - /* The first op is checked separately */ > > - ops++; > > - nops--; > > - > > - /* > > - * It needs to make sure if the location expression matches to the given > > - * register and offset exactly. Thus it rejects any complex expressions > > - * and only allows a few of selected operators that doesn't change the > > - * location. > > - */ > > - while (nops) { > > - switch (ops->atom) { > > - case DW_OP_stack_value: > > - case DW_OP_deref_size: > > - case DW_OP_deref: > > - case DW_OP_piece: > > - break; > > - default: > > - return false; > > - } > > - ops++; > > - nops--; > > - } > > - return true; > > -} > > - > > /* Only checks direct child DIEs in the given scope. */ > > static int __die_find_var_reg_cb(Dwarf_Die *die_mem, void *arg) > > { > > -- > > 2.34.1 > > > > > > > -- > Masami Hiramatsu (Google) <mhiramat@kernel.org>
On Wed, May 8, 2024 at 7:15 AM James Clark <james.clark@arm.com> wrote: > > check_allowed_ops() is used from both HAVE_DWARF_GETLOCATIONS_SUPPORT > and HAVE_DWARF_CFI_SUPPORT sections, so move it into the right place so > that it's available when either are defined. This shows up when doing > a static cross compile for arm64: > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LDFLAGS="-static" \ > EXTRA_PERFLIBS="-lexpat" > > util/dwarf-aux.c:1723:6: error: implicit declaration of function 'check_allowed_ops' > > Fixes: 55442cc2f22d ("perf dwarf-aux: Check allowed DWARF Ops") > Signed-off-by: James Clark <james.clark@arm.com> Reviewed-by: Ian Rogers <irogers@google.com> (eye-balled to see the #if problem exists and this is the correct fix) Thanks, Ian > --- > tools/perf/util/dwarf-aux.c | 56 ++++++++++++++++++------------------- > 1 file changed, 28 insertions(+), 28 deletions(-) > > diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c > index c0a492e65388..c9584563cd56 100644 > --- a/tools/perf/util/dwarf-aux.c > +++ b/tools/perf/util/dwarf-aux.c > @@ -1215,6 +1215,34 @@ static int offset_from_dwarf_op(Dwarf_Op *op) > } > return -1; > } > + > +static bool check_allowed_ops(Dwarf_Op *ops, size_t nops) > +{ > + /* The first op is checked separately */ > + ops++; > + nops--; > + > + /* > + * It needs to make sure if the location expression matches to the given > + * register and offset exactly. Thus it rejects any complex expressions > + * and only allows a few of selected operators that doesn't change the > + * location. > + */ > + while (nops) { > + switch (ops->atom) { > + case DW_OP_stack_value: > + case DW_OP_deref_size: > + case DW_OP_deref: > + case DW_OP_piece: > + break; > + default: > + return false; > + } > + ops++; > + nops--; > + } > + return true; > +} > #endif /* HAVE_DWARF_GETLOCATIONS_SUPPORT || HAVE_DWARF_CFI_SUPPORT */ > > #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT > @@ -1395,34 +1423,6 @@ static bool match_var_offset(Dwarf_Die *die_mem, struct find_var_data *data, > return true; > } > > -static bool check_allowed_ops(Dwarf_Op *ops, size_t nops) > -{ > - /* The first op is checked separately */ > - ops++; > - nops--; > - > - /* > - * It needs to make sure if the location expression matches to the given > - * register and offset exactly. Thus it rejects any complex expressions > - * and only allows a few of selected operators that doesn't change the > - * location. > - */ > - while (nops) { > - switch (ops->atom) { > - case DW_OP_stack_value: > - case DW_OP_deref_size: > - case DW_OP_deref: > - case DW_OP_piece: > - break; > - default: > - return false; > - } > - ops++; > - nops--; > - } > - return true; > -} > - > /* Only checks direct child DIEs in the given scope. */ > static int __die_find_var_reg_cb(Dwarf_Die *die_mem, void *arg) > { > -- > 2.34.1 >
On Wed, May 8, 2024 at 2:05 PM Ian Rogers <irogers@google.com> wrote: > > On Wed, May 8, 2024 at 7:15 AM James Clark <james.clark@arm.com> wrote: > > > > check_allowed_ops() is used from both HAVE_DWARF_GETLOCATIONS_SUPPORT > > and HAVE_DWARF_CFI_SUPPORT sections, so move it into the right place so > > that it's available when either are defined. This shows up when doing > > a static cross compile for arm64: > > > > $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LDFLAGS="-static" \ > > EXTRA_PERFLIBS="-lexpat" > > > > util/dwarf-aux.c:1723:6: error: implicit declaration of function 'check_allowed_ops' > > > > Fixes: 55442cc2f22d ("perf dwarf-aux: Check allowed DWARF Ops") > > Signed-off-by: James Clark <james.clark@arm.com> > > Reviewed-by: Ian Rogers <irogers@google.com> > (eye-balled to see the #if problem exists and this is the correct fix) Acked-by: Namhyung Kim <namhyung@kernel.org> Thanks, Namhyung
© 2016 - 2024 Red Hat, Inc.