forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Read proc/self/maps to find main thread stack base
pthread_getattr_np implementation in bionic throws sigabrt on failure to read proc/ file. Implement this function to avoid crashes. BUG=1129941 Change-Id: I54b94a609201a998924aaa8c8e77051f85acf377 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2425744 Commit-Queue: ssid <ssid@chromium.org> Reviewed-by: Mike Wittman <wittman@chromium.org> Reviewed-by: Tommy Nyquist <nyquist@chromium.org> Cr-Commit-Position: refs/heads/master@{#810829}
- Loading branch information
1 parent
1fdb72e
commit 30dea2a
Showing
7 changed files
with
125 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
// Copyright 2020 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "base/profiler/thread_delegate_posix.h" | ||
|
||
#include "base/process/process_handle.h" | ||
#include "build/build_config.h" | ||
#include "testing/gtest/include/gtest/gtest.h" | ||
|
||
namespace base { | ||
|
||
// ASAN moves local variables outside of the stack extents. | ||
#if defined(ADDRESS_SANITIZER) | ||
#define MAYBE_CurrentThreadBase DISABLED_CurrentThreadBase | ||
#else | ||
#define MAYBE_CurrentThreadBase CurrentThreadBase | ||
#endif | ||
TEST(ThreadDelegatePosixTest, MAYBE_CurrentThreadBase) { | ||
auto delegate = | ||
ThreadDelegatePosix::Create(GetSamplingProfilerCurrentThreadToken()); | ||
ASSERT_TRUE(delegate); | ||
uintptr_t base = delegate->GetStackBaseAddress(); | ||
EXPECT_GT(base, 0u); | ||
uintptr_t stack_addr = reinterpret_cast<uintptr_t>(&base); | ||
// Check that end of stack is within 4MiB of a current stack address. | ||
EXPECT_LE(base, stack_addr + 4 * 1024 * 1024); | ||
} | ||
|
||
#if defined(OS_ANDROID) | ||
|
||
TEST(ThreadDelegatePosixTest, AndroidMainThreadStackBase) { | ||
// The delegate does not use pthread id for main thread. | ||
auto delegate = ThreadDelegatePosix::Create( | ||
SamplingProfilerThreadToken{GetCurrentProcId(), pthread_t()}); | ||
ASSERT_TRUE(delegate); | ||
uintptr_t base = delegate->GetStackBaseAddress(); | ||
EXPECT_GT(base, 0u); | ||
} | ||
|
||
#endif // defined(OS_ANDROID) | ||
} // namespace base |