On Tue, Jan 16, 2024 at 10:27 PM Namhyung Kim <namhyung@xxxxxxxxxx> wrote: > > Hello, > > This is a continuation of the data type profiling series. Now the basic > part (v3) which uses pointer variables is merged to the perf-tools-next > tree. And this part is for memory accesses without pointers as well as > small updates to handle some corner cases. Still mores to come to > complete the original series. > > There's no change from the previous version. For background and usages, > pleaes refer the posting of previous version [1] and a LWN article [2]. > > Basically most memory accesses happen with pointers, but there are cases > don't use pointers - direct accesses to global and local variables. > > Global variables are located in a static memory at a specific address. > So the DWARF location expression for the global vairable would also have > the static address. And it's common to access them using PC-relative > addressing mode. Thus it needs a special handling for global variables. > > On the other hand, local variables are located in the stack which varies > as program executes. So the local variables are accessed either by the > (stack) frame pointer or (current) stack pointer. But sometimes DWARF > location expression uses a frame base address (CFA) to specify location > of local variables. So it may need to convert or normalize the location > extracted from the instruction to match DWARF expression. > > Lastly, there are some cases DWARF location expressions end up having > complex (or not straight-forward) location. In that case, it cannot > simply match just the first expression with the instruction location. > It'd be safer to reject them. > > The code is available at 'perf/data-profile-update-v4' branch in the tree > below. The full version of the code is in 'perf/data-profile-v4' branch. > > git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git > > Thanks, > Namhyung > > > Cc: Ben Woodard <woodard@xxxxxxxxxx> > Cc: Joe Mario <jmario@xxxxxxxxxx> > CC: Kees Cook <keescook@xxxxxxxxxxxx> > Cc: David Blaikie <blaikie@xxxxxxxxxx> > Cc: Xu Liu <xliuprof@xxxxxxxxxx> > Cc: Kan Liang <kan.liang@xxxxxxxxxxxxxxx> > Cc: Ravi Bangoria <ravi.bangoria@xxxxxxx> > Cc: Mark Wielaard <mark@xxxxxxxxx> > Cc: Jason Merrill <jason@xxxxxxxxxx> > Cc: Jose E. Marchesi <jose.marchesi@xxxxxxxxxx> > Cc: William Huang <williamjhuang@xxxxxxxxxx> > > [1] https://lore.kernel.org/linux-perf-users/20231213001323.718046-1-namhyung@xxxxxxxxxx/ > [2] https://lwn.net/Articles/955709/ > > > Namhyung Kim (9): > perf annotate-data: Parse 'lock' prefix from llvm-objdump > perf annotate-data: Handle macro fusion on x86 > perf annotate-data: Handle array style accesses > perf annotate-data: Add stack operation pseudo type > perf annotate-data: Handle PC-relative addressing > perf annotate-data: Support global variables > perf dwarf-aux: Add die_get_cfa() > perf annotate-data: Support stack variables > perf dwarf-aux: Check allowed DWARF Ops Series: Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx> Thanks, Ian > tools/perf/util/annotate-data.c | 119 ++++++++++++++++---- > tools/perf/util/annotate-data.h | 8 +- > tools/perf/util/annotate.c | 153 ++++++++++++++++++++++++-- > tools/perf/util/annotate.h | 12 +- > tools/perf/util/dwarf-aux.c | 187 ++++++++++++++++++++++++++++---- > tools/perf/util/dwarf-aux.h | 18 +++ > 6 files changed, 439 insertions(+), 58 deletions(-) > > > base-commit: d988c9f511af71a3445b6a4f3a2c67208ff8e480 > -- > 2.43.0.381.gb435a96ce8-goog >