[all-commits] [llvm/llvm-project] 070090: [lldb] Add option to show memory tags in memory re...

David Spickett via All-commits all-commits at lists.llvm.org
Wed Jan 26 06:40:54 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 070090d08eb506187f7203bd3b321ca1e74d9d5c
      https://github.com/llvm/llvm-project/commit/070090d08eb506187f7203bd3b321ca1e74d9d5c
  Author: David Spickett <david.spickett at linaro.org>
  Date:   2022-01-26 (Wed, 26 Jan 2022)

  Changed paths:
    M lldb/include/lldb/Core/DumpDataExtractor.h
    M lldb/source/Commands/CommandObjectMemory.cpp
    M lldb/source/Commands/Options.td
    M lldb/source/Core/DumpDataExtractor.cpp
    M lldb/test/API/linux/aarch64/mte_tag_access/TestAArch64LinuxMTEMemoryTagAccess.py
    M llvm/docs/ReleaseNotes.rst

  Log Message:
  -----------
  [lldb] Add option to show memory tags in memory read output

This adds an option --show-tags to "memory read".

(lldb) memory read mte_buf mte_buf+32 -f "x" -s8 --show-tags
0x900fffff7ff8000: 0x0000000000000000 0x0000000000000000 (tag: 0x0)
0x900fffff7ff8010: 0x0000000000000000 0x0000000000000000 (tag: 0x1)

Tags are printed on the end of each line, if that
line has any tags associated with it. Meaning that
untagged memory output is unchanged.

Tags are printed based on the granule(s) of memory that
a line covers. So you may have lines with 1 tag, with many
tags, no tags or partially tagged lines.

In the case of partially tagged lines, untagged granules
will show "<no tag>" so that the ordering is obvious.
For example, a line that covers 2 granules where the first
is not tagged:

(lldb) memory read mte_buf-16 mte_buf+16 -l32 -f"x" --show-tags
0x900fffff7ff7ff0: 0x00000000 <...> (tags: <no tag> 0x0)

Untagged lines will just not have the "(tags: ..." at all.
Though they may be part of a larger output that does have
some tagged lines.

To do this I've extended DumpDataExtractor to also print
memory tags where it has a valid execution context and
is asked to print them.

There are no special alignment requirements, simply
use "memory read" as usual. All alignment is handled
in DumpDataExtractor.

We use MakeTaggedRanges to find all the tagged memory
in the current dump, then read all that into a MemoryTagMap.

The tag map is populated once in DumpDataExtractor and re-used
for each subsequently printed line (or recursive call of
DumpDataExtractor, which some formats do).

Reviewed By: omjavaid

Differential Revision: https://reviews.llvm.org/D107140




More information about the All-commits mailing list