Chromium Code Reviews| Index: src/IceGlobalContext.h |
| diff --git a/src/IceGlobalContext.h b/src/IceGlobalContext.h |
| index 763a75b487ced3554f3bf53127106f792eabdf31..a632253f801fb70e7eee71349b8a093f4be91d1f 100644 |
| --- a/src/IceGlobalContext.h |
| +++ b/src/IceGlobalContext.h |
| @@ -72,7 +72,8 @@ class GlobalContext { |
| X("Regs Saved ", RegsSaved) \ |
| X("Frame Bytes ", FrameByte) \ |
| X("Spills ", NumSpills) \ |
| - X("Fills ", NumFills) |
| + X("Fills ", NumFills) \ |
| + X("R/P Imms ", NumRPImms) |
| //#define X(str, tag) |
| public: |
| @@ -263,6 +264,15 @@ public: |
| Tls->StatsCumulative.update(CodeStats::CS_NumFills); |
| } |
| + // Number of Randomized or Pooled Immediates |
| + void statsUpdateRPImms() { |
| + if (!getFlags().getDumpStats()) |
| + return; |
| + ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS); |
| + Tls->StatsFunction.update(CodeStats::CS_NumRPImms); |
| + Tls->StatsCumulative.update(CodeStats::CS_NumRPImms); |
| + } |
| + |
| // These are predefined TimerStackIdT values. |
| enum TimerStackKind { TSK_Default = 0, TSK_Funcs, TSK_Num }; |
| @@ -391,6 +401,21 @@ public: |
| return Match.empty() || Match == SymbolName; |
| } |
| + // Return the randomization cookie for diversification. |
| + // Initialize the cookie if necessary |
| + uint32_t getRandomizationCookie() { |
| + if (RandomizationCookie != 0) |
| + return RandomizationCookie; |
| + RandomizationCookieLock.lock(); |
|
Jim Stichnoth
2015/06/19 16:51:02
You should use the std::unique_lock<> pattern (see
|
| + while (RandomizationCookie == 0) { |
| + RandomNumberGenerator &RNG = getRNG(); |
| + RandomizationCookie = (uint32_t)RNG.next( |
| + (uint64_t)std::numeric_limits<uint32_t>::max() + 1); |
| + } |
| + RandomizationCookieLock.unlock(); |
| + return RandomizationCookie; |
| + } |
| + |
| private: |
| // Try to ensure mutexes are allocated on separate cache lines. |
| @@ -460,6 +485,11 @@ private: |
| typedef llvm::SmallVector<char, 32> ManglerVector; |
| void incrementSubstitutions(ManglerVector &OldName) const; |
| + // Randomization Cookie |
| + // Managed by getRandomizationCookie() |
| + GlobalLockType RandomizationCookieLock; |
| + uint32_t RandomizationCookie; |
| + |
| public: |
| static void TlsInit() { ICE_TLS_INIT_FIELD(TLS); } |
| }; |