xref: /llvm-project/compiler-rt/lib/scudo/standalone/common.cpp (revision 4634a480e0e5aa3116b397369fe3877a8dfe4dc0)
16d46ebefSNico Weber //===-- common.cpp ----------------------------------------------*- C++ -*-===//
26d46ebefSNico Weber //
36d46ebefSNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
46d46ebefSNico Weber // See https://llvm.org/LICENSE.txt for license information.
56d46ebefSNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66d46ebefSNico Weber //
76d46ebefSNico Weber //===----------------------------------------------------------------------===//
86d46ebefSNico Weber 
96d46ebefSNico Weber #include "common.h"
106d46ebefSNico Weber #include "atomic_helpers.h"
1118722834SKostya Kortchinsky #include "string_utils.h"
126d46ebefSNico Weber 
136d46ebefSNico Weber namespace scudo {
146d46ebefSNico Weber 
15*4634a480SChristopher Ferris #if !defined(SCUDO_PAGE_SIZE)
16*4634a480SChristopher Ferris uptr PageSizeCached = 0;
17*4634a480SChristopher Ferris uptr PageSizeLogCached = 0;
18*4634a480SChristopher Ferris 
19*4634a480SChristopher Ferris // Must be defined in platform specific code.
206d46ebefSNico Weber uptr getPageSize();
216d46ebefSNico Weber 
22*4634a480SChristopher Ferris // This must be called in the init path or there could be a race if multiple
23*4634a480SChristopher Ferris // threads try to set the cached values.
246d46ebefSNico Weber uptr getPageSizeSlow() {
256d46ebefSNico Weber   PageSizeCached = getPageSize();
266d46ebefSNico Weber   CHECK_NE(PageSizeCached, 0);
27*4634a480SChristopher Ferris   PageSizeLogCached = getLog2(PageSizeCached);
286d46ebefSNico Weber   return PageSizeCached;
296d46ebefSNico Weber }
30*4634a480SChristopher Ferris #endif
316d46ebefSNico Weber 
326d46ebefSNico Weber } // namespace scudo
33