[Lldb-commits] [PATCH] D74398: [lldb-server] jThreadsInfo returns stack memory

Jaroslav Sevcik via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Apr 7 06:28:13 PDT 2020


jarin added a comment.

Looking at the code for flushing L1 cache <https://github.com/llvm/llvm-project/blob/e609fe68b2c59b145c0a5c66bedbee2bff545200/lldb/source/Target/Memory.cpp#L59-L71>, it appears broken. I am guessing that is the reason for the failure of my patch on the bots.

Here is the L1 <https://reviews.llvm.org/L1> flushing code (after checking L1 <https://reviews.llvm.org/L1> is not empty).

  AddrRange flush_range(addr, size);
  BlockMap::iterator pos = m_L1_cache.upper_bound(addr);
  if (pos != m_L1_cache.begin()) {
    --pos;
  }
  while (pos != m_L1_cache.end()) {
    AddrRange chunk_range(pos->first, pos->second->GetByteSize());
    if (!chunk_range.DoesIntersect(flush_range))
      break;
    pos = m_L1_cache.erase(pos);
  }

For instance, let the cache contains two chunks (10, 10) and (30, 10). Let us flush (25, 10). Then the while loop chunk_range will be (10, 10), which is not intersecting with (25, 10), so we do not flush anything. This is clearly wrong because (30, 10) should be flushed.

I am wondering whether something like this would be correct (I am still a bit worried about the case of overlapping things in L1 <https://reviews.llvm.org/L1>).

  AddrRange flush_range(addr, size);
  BlockMap::iterator pos = m_L1_cache.upper_bound(addr);
  if (pos != m_L1_cache.begin()) {
    // If we are not in the beginning, the previous range might be also intersecting.
    BlockMap::iterator previous = pos;
    previous--;
    AddrRange previous_range(previous->first, previous->second->GetByteSize()) 
    if (!previous_range.DoesIntersect(flush_range))
      pos = m_L1_cache.erase(previous);
  }
  while (pos != m_L1_cache.end()) {
    AddrRange chunk_range(pos->first, pos->second->GetByteSize());
    if (!chunk_range.DoesIntersect(flush_range))
      break;
    pos = m_L1_cache.erase(pos);
  }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D74398/new/

https://reviews.llvm.org/D74398





More information about the lldb-commits mailing list