Messages in this thread | | | From | Ian Rogers <> | Date | Wed, 8 May 2024 14:04:58 -0700 | Subject | Re: [PATCH] perf dwarf-aux: Fix build with HAVE_DWARF_CFI_SUPPORT |
| |
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 >
| |