tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Globals_inc.h (2578B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
      4 
      5 // Largest sub-page size class, or zero if there are none
      6 GLOBAL(size_t, gMaxSubPageClass,
      7       gPageSize / 2 >= kMinSubPageClass ? gPageSize / 2 : 0)
      8 
      9 // Number of sub-page bins.
     10 GLOBAL(uint8_t, gNumSubPageClasses, []() GLOBAL_CONSTEXPR -> uint8_t {
     11  if GLOBAL_CONSTEXPR (gMaxSubPageClass != 0) {
     12    return mozilla::FloorLog2(gMaxSubPageClass) - LOG2(kMinSubPageClass) + 1;
     13  }
     14  return 0;
     15 }())
     16 
     17 GLOBAL(uint8_t, gPageSize2Pow, GLOBAL_LOG2(gPageSize))
     18 GLOBAL(uint8_t, gRealPageSize2Pow, GLOBAL_LOG2(gRealPageSize))
     19 GLOBAL(size_t, gPageSizeMask, gPageSize - 1)
     20 GLOBAL(size_t, gRealPageSizeMask, gRealPageSize - 1)
     21 
     22 // For system calls that allocate pages we use this to round-up to a real
     23 // page boundary.
     24 GLOBAL(size_t, gPagesPerRealPage,
     25       gPageSize < gRealPageSize ? gRealPageSize / gPageSize : 1);
     26 
     27 // Number of pages in a chunk.
     28 GLOBAL(size_t, gChunkNumPages, kChunkSize >> gPageSize2Pow)
     29 
     30 // Number of pages necessary for a chunk header plus a guard page.
     31 GLOBAL(size_t, gChunkHeaderNumPages,
     32       gPagesPerRealPage +
     33           (std::max(PAGE_CEILING(sizeof(arena_chunk_t) +
     34                                  sizeof(arena_chunk_map_t) * gChunkNumPages),
     35                     REAL_PAGE_CEILING(sizeof(arena_chunk_t) +
     36                                       sizeof(arena_chunk_map_t) *
     37                                           gChunkNumPages)) >>
     38            gPageSize2Pow));
     39 
     40 // One chunk, minus the header, minus a guard page
     41 GLOBAL(size_t, gMaxLargeClass,
     42       kChunkSize - gRealPageSize - (gChunkHeaderNumPages << gPageSize2Pow))
     43 
     44 // Various checks that regard configuration.
     45 GLOBAL_ASSERT(1ULL << gPageSize2Pow == gPageSize,
     46              "Page size is not a power of two");
     47 GLOBAL_ASSERT(1ULL << gRealPageSize2Pow == gRealPageSize,
     48              "Real page size is not a power of two");
     49 GLOBAL_ASSERT(kQuantum >= sizeof(void*));
     50 GLOBAL_ASSERT(kQuantum <= kQuantumWide);
     51 GLOBAL_ASSERT(!kNumQuantumWideClasses ||
     52              kQuantumWide <= (kMinSubPageClass - kMaxQuantumClass));
     53 
     54 GLOBAL_ASSERT(kQuantumWide <= kMaxQuantumClass);
     55 
     56 GLOBAL_ASSERT(gMaxSubPageClass >= kMinSubPageClass || gMaxSubPageClass == 0);
     57 GLOBAL_ASSERT(gMaxLargeClass >= gMaxSubPageClass);
     58 GLOBAL_ASSERT(kChunkSize >= gPageSize);
     59 GLOBAL_ASSERT(kChunkSize >= gRealPageSize);
     60 GLOBAL_ASSERT(gPagesPerRealPage < gChunkHeaderNumPages);
     61 GLOBAL_ASSERT(kQuantum * 4 <= kChunkSize);