Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6facd1bf authored by Florian Mayer's avatar Florian Mayer
Browse files

Test stack buffer size calculation.

Bug: 378140560
Change-Id: Idca03cac925bc0d8bd574817391c4eaca11f2bff
parent 7e0ba3af
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
#include "unwindstack/Memory.h"

#include <android-base/test_utils.h>
#include <procinfo/process_map.h>

#include "gtest/gtest.h"

#include "libdebuggerd/tombstone.h"
@@ -82,6 +84,33 @@ TEST(MteStackHistoryUnwindTest, TestOne) {
  EXPECT_EQ(e.tag(), 1ULL);
}

static std::optional<android::procinfo::MapInfo> FindMapping(void* data) {
  std::optional<android::procinfo::MapInfo> result;
  android::procinfo::ReadMapFile(
      "/proc/self/maps", [&result, data](const android::procinfo::MapInfo& info) {
        auto data_int = reinterpret_cast<uint64_t>(data) & ((1ULL << 56ULL) - 1ULL);
        if (info.start <= data_int && data_int < info.end) {
          result = info;
        }
      });
  return result;
}

TEST_P(MteStackHistoryTest, TestFree) {
  int size_cls = GetParam();
  size_t size = stack_mte_ringbuffer_size(size_cls);
  void* data = stack_mte_ringbuffer_allocate(size_cls, nullptr);
  EXPECT_EQ(stack_mte_ringbuffer_size_from_pointer(reinterpret_cast<uintptr_t>(data)), size);
  auto before = FindMapping(data);
  ASSERT_TRUE(before.has_value());
  EXPECT_EQ(before->end - before->start, size);
  stack_mte_free_ringbuffer(reinterpret_cast<uintptr_t>(data));
  for (size_t i = 0; i < size; i += page_size()) {
    auto after = FindMapping(static_cast<char*>(data) + i);
    EXPECT_TRUE(!after.has_value() || after->name != before->name);
  }
}

TEST_P(MteStackHistoryTest, TestEmpty) {
  int size_cls = GetParam();
  size_t size = stack_mte_ringbuffer_size(size_cls);