================
@@ -164,12 +164,17 @@ void lldb_private::ParseLinuxSMapRegions(llvm::StringRef 
linux_smap,
     if (!name.contains(' ')) {
       if (region) {
         if (name == "VmFlags") {
-          if (value.contains("mt"))
-            region->SetMemoryTagged(MemoryRegionInfo::eYes);
-          else
-            region->SetMemoryTagged(MemoryRegionInfo::eNo);
+          region->SetMemoryTagged(MemoryRegionInfo::eNo);
+          region->SetIsShadowStack(MemoryRegionInfo::eNo);
+
+          llvm::SmallVector<llvm::StringRef> flags;
+          value.split(flags, ' ', /*MaxSplit=*/-1, /*KeepEmpty=*/false);
+          for (llvm::StringRef flag : flags)
----------------
DavidSpickett wrote:

> It would be nice to be lazy and only tokenise as much as we need from the 
> string though. I'll see if there's an iterator version I can use.

You can do something like:
```
while value
  split by space
  if flag is not empty: check flag
```
But to make this early exit we'd need to know what we're looking for up front, 
which I can do but it's a bit complex for a single line that's going to be 
small 99% of the time.

I do use this strategy for patching in register information, but there it's 
because we're iterating over 100s of registers each time.

> You made me realise I don't actually have a test case to check we don't match 
> on substrings though, so I will add that.

I added this in LinuxProcMapsTest.cpp

https://github.com/llvm/llvm-project/pull/117861
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to