Coverage for /Syzygy/agent/asan/shadow_marker_unittest.cc

CoverageLines executed / instrumented / missingexe / inst / missLanguageGroup
98.2%2202240.C++test

Line-by-line coverage:

   1    :  // Copyright 2014 Google Inc. All Rights Reserved.
   2    :  //
   3    :  // Licensed under the Apache License, Version 2.0 (the "License");
   4    :  // you may not use this file except in compliance with the License.
   5    :  // You may obtain a copy of the License at
   6    :  //
   7    :  //     http://www.apache.org/licenses/LICENSE-2.0
   8    :  //
   9    :  // Unless required by applicable law or agreed to in writing, software
  10    :  // distributed under the License is distributed on an "AS IS" BASIS,
  11    :  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12    :  // See the License for the specific language governing permissions and
  13    :  // limitations under the License.
  14    :  
  15    :  #include "syzygy/agent/asan/shadow_marker.h"
  16    :  
  17    :  #include "base/macros.h"
  18    :  #include "gtest/gtest.h"
  19    :  
  20    :  namespace agent {
  21    :  namespace asan {
  22    :  
  23    :  namespace {
  24    :  
  25    :  // A list of all of the defined enumeration values.
  26    :  #define EXTRACT_ENUM_NAME_MACRO(x, y)  x,
  27    :  static const ShadowMarker kValidShadowMarkers[] = {
  28    :    SHADOW_MARKER_GENERATOR(EXTRACT_ENUM_NAME_MACRO)
  29    :  };
  30    :  #undef EXTRACT_ENUM_NAME_MACRO
  31    :  
  32    :  static const ShadowMarker kRedzoneShadowMarkers[] = {
  33    :      kHeapHistoricBlockStartMarker0,
  34    :      kHeapHistoricBlockStartMarker1,
  35    :      kHeapHistoricBlockStartMarker2,
  36    :      kHeapHistoricBlockStartMarker3,
  37    :      kHeapHistoricBlockStartMarker4,
  38    :      kHeapHistoricBlockStartMarker5,
  39    :      kHeapHistoricBlockStartMarker6,
  40    :      kHeapHistoricBlockStartMarker7,
  41    :      kHeapHistoricNestedBlockStartMarker0,
  42    :      kHeapHistoricNestedBlockStartMarker1,
  43    :      kHeapHistoricNestedBlockStartMarker2,
  44    :      kHeapHistoricNestedBlockStartMarker3,
  45    :      kHeapHistoricNestedBlockStartMarker4,
  46    :      kHeapHistoricNestedBlockStartMarker5,
  47    :      kHeapHistoricNestedBlockStartMarker6,
  48    :      kHeapHistoricNestedBlockStartMarker7,
  49    :      kHeapHistoricBlockEndMarker,
  50    :      kHeapHistoricNestedBlockEndMarker,
  51    :      kHeapHistoricLeftPaddingMarker,
  52    :      kHeapHistoricRightPaddingMarker,
  53    :      kHeapHistoricFreedMarker,
  54    :      kHeapBlockStartMarker0,
  55    :      kHeapBlockStartMarker1,
  56    :      kHeapBlockStartMarker2,
  57    :      kHeapBlockStartMarker3,
  58    :      kHeapBlockStartMarker4,
  59    :      kHeapBlockStartMarker5,
  60    :      kHeapBlockStartMarker6,
  61    :      kHeapBlockStartMarker7,
  62    :      kHeapNestedBlockStartMarker0,
  63    :      kHeapNestedBlockStartMarker1,
  64    :      kHeapNestedBlockStartMarker2,
  65    :      kHeapNestedBlockStartMarker3,
  66    :      kHeapNestedBlockStartMarker4,
  67    :      kHeapNestedBlockStartMarker5,
  68    :      kHeapNestedBlockStartMarker6,
  69    :      kHeapNestedBlockStartMarker7,
  70    :      kAsanMemoryMarker,
  71    :      kInvalidAddressMarker,
  72    :      kUserRedzoneMarker,
  73    :      kHeapBlockEndMarker,
  74    :      kHeapNestedBlockEndMarker,
  75    :      kHeapLeftPaddingMarker,
  76    :      kHeapRightPaddingMarker,
  77    :      kAsanReservedMarker,
  78    :      kHeapFreedMarker,
  79    :  };
  80    :  
  81    :  static const ShadowMarker kActiveBlockShadowMarkers[] = {
  82    :      kHeapBlockStartMarker0,
  83    :      kHeapBlockStartMarker1,
  84    :      kHeapBlockStartMarker2,
  85    :      kHeapBlockStartMarker3,
  86    :      kHeapBlockStartMarker4,
  87    :      kHeapBlockStartMarker5,
  88    :      kHeapBlockStartMarker6,
  89    :      kHeapBlockStartMarker7,
  90    :      kHeapNestedBlockStartMarker0,
  91    :      kHeapNestedBlockStartMarker1,
  92    :      kHeapNestedBlockStartMarker2,
  93    :      kHeapNestedBlockStartMarker3,
  94    :      kHeapNestedBlockStartMarker4,
  95    :      kHeapNestedBlockStartMarker5,
  96    :      kHeapNestedBlockStartMarker6,
  97    :      kHeapNestedBlockStartMarker7,
  98    :      kHeapBlockEndMarker,
  99    :      kHeapNestedBlockEndMarker,
 100    :      kHeapLeftPaddingMarker,
 101    :      kHeapRightPaddingMarker,
 102    :      kHeapFreedMarker,
 103    :  };
 104    :  
 105    :  static const ShadowMarker kHistoricBlockShadowMarkers[] = {
 106    :      kHeapHistoricBlockStartMarker0,
 107    :      kHeapHistoricBlockStartMarker1,
 108    :      kHeapHistoricBlockStartMarker2,
 109    :      kHeapHistoricBlockStartMarker3,
 110    :      kHeapHistoricBlockStartMarker4,
 111    :      kHeapHistoricBlockStartMarker5,
 112    :      kHeapHistoricBlockStartMarker6,
 113    :      kHeapHistoricBlockStartMarker7,
 114    :      kHeapHistoricNestedBlockStartMarker0,
 115    :      kHeapHistoricNestedBlockStartMarker1,
 116    :      kHeapHistoricNestedBlockStartMarker2,
 117    :      kHeapHistoricNestedBlockStartMarker3,
 118    :      kHeapHistoricNestedBlockStartMarker4,
 119    :      kHeapHistoricNestedBlockStartMarker5,
 120    :      kHeapHistoricNestedBlockStartMarker6,
 121    :      kHeapHistoricNestedBlockStartMarker7,
 122    :      kHeapHistoricBlockEndMarker,
 123    :      kHeapHistoricNestedBlockEndMarker,
 124    :      kHeapHistoricLeftPaddingMarker,
 125    :      kHeapHistoricRightPaddingMarker,
 126    :      kHeapHistoricFreedMarker,
 127    :  };
 128    :  
 129    :  static const ShadowMarker kBlockShadowMarkers[] = {
 130    :      kHeapHistoricBlockStartMarker0,
 131    :      kHeapHistoricBlockStartMarker1,
 132    :      kHeapHistoricBlockStartMarker2,
 133    :      kHeapHistoricBlockStartMarker3,
 134    :      kHeapHistoricBlockStartMarker4,
 135    :      kHeapHistoricBlockStartMarker5,
 136    :      kHeapHistoricBlockStartMarker6,
 137    :      kHeapHistoricBlockStartMarker7,
 138    :      kHeapHistoricNestedBlockStartMarker0,
 139    :      kHeapHistoricNestedBlockStartMarker1,
 140    :      kHeapHistoricNestedBlockStartMarker2,
 141    :      kHeapHistoricNestedBlockStartMarker3,
 142    :      kHeapHistoricNestedBlockStartMarker4,
 143    :      kHeapHistoricNestedBlockStartMarker5,
 144    :      kHeapHistoricNestedBlockStartMarker6,
 145    :      kHeapHistoricNestedBlockStartMarker7,
 146    :      kHeapHistoricBlockEndMarker,
 147    :      kHeapHistoricNestedBlockEndMarker,
 148    :      kHeapHistoricLeftPaddingMarker,
 149    :      kHeapHistoricRightPaddingMarker,
 150    :      kHeapHistoricFreedMarker,
 151    :      kHeapBlockStartMarker0,
 152    :      kHeapBlockStartMarker1,
 153    :      kHeapBlockStartMarker2,
 154    :      kHeapBlockStartMarker3,
 155    :      kHeapBlockStartMarker4,
 156    :      kHeapBlockStartMarker5,
 157    :      kHeapBlockStartMarker6,
 158    :      kHeapBlockStartMarker7,
 159    :      kHeapNestedBlockStartMarker0,
 160    :      kHeapNestedBlockStartMarker1,
 161    :      kHeapNestedBlockStartMarker2,
 162    :      kHeapNestedBlockStartMarker3,
 163    :      kHeapNestedBlockStartMarker4,
 164    :      kHeapNestedBlockStartMarker5,
 165    :      kHeapNestedBlockStartMarker6,
 166    :      kHeapNestedBlockStartMarker7,
 167    :      kHeapBlockEndMarker,
 168    :      kHeapNestedBlockEndMarker,
 169    :      kHeapLeftPaddingMarker,
 170    :      kHeapRightPaddingMarker,
 171    :      kHeapFreedMarker,
 172    :  };
 173    :  
 174    :  static const ShadowMarker kActiveBlockStartShadowMarkers[] = {
 175    :      kHeapBlockStartMarker0,
 176    :      kHeapBlockStartMarker1,
 177    :      kHeapBlockStartMarker2,
 178    :      kHeapBlockStartMarker3,
 179    :      kHeapBlockStartMarker4,
 180    :      kHeapBlockStartMarker5,
 181    :      kHeapBlockStartMarker6,
 182    :      kHeapBlockStartMarker7,
 183    :      kHeapNestedBlockStartMarker0,
 184    :      kHeapNestedBlockStartMarker1,
 185    :      kHeapNestedBlockStartMarker2,
 186    :      kHeapNestedBlockStartMarker3,
 187    :      kHeapNestedBlockStartMarker4,
 188    :      kHeapNestedBlockStartMarker5,
 189    :      kHeapNestedBlockStartMarker6,
 190    :      kHeapNestedBlockStartMarker7,
 191    :  };
 192    :  
 193    :  static const ShadowMarker kHistoricBlockStartShadowMarkers[] = {
 194    :      kHeapHistoricBlockStartMarker0,
 195    :      kHeapHistoricBlockStartMarker1,
 196    :      kHeapHistoricBlockStartMarker2,
 197    :      kHeapHistoricBlockStartMarker3,
 198    :      kHeapHistoricBlockStartMarker4,
 199    :      kHeapHistoricBlockStartMarker5,
 200    :      kHeapHistoricBlockStartMarker6,
 201    :      kHeapHistoricBlockStartMarker7,
 202    :      kHeapHistoricNestedBlockStartMarker0,
 203    :      kHeapHistoricNestedBlockStartMarker1,
 204    :      kHeapHistoricNestedBlockStartMarker2,
 205    :      kHeapHistoricNestedBlockStartMarker3,
 206    :      kHeapHistoricNestedBlockStartMarker4,
 207    :      kHeapHistoricNestedBlockStartMarker5,
 208    :      kHeapHistoricNestedBlockStartMarker6,
 209    :      kHeapHistoricNestedBlockStartMarker7,
 210    :  };
 211    :  
 212    :  static const ShadowMarker kBlockStartShadowMarkers[] = {
 213    :      kHeapBlockStartMarker0,
 214    :      kHeapBlockStartMarker1,
 215    :      kHeapBlockStartMarker2,
 216    :      kHeapBlockStartMarker3,
 217    :      kHeapBlockStartMarker4,
 218    :      kHeapBlockStartMarker5,
 219    :      kHeapBlockStartMarker6,
 220    :      kHeapBlockStartMarker7,
 221    :      kHeapNestedBlockStartMarker0,
 222    :      kHeapNestedBlockStartMarker1,
 223    :      kHeapNestedBlockStartMarker2,
 224    :      kHeapNestedBlockStartMarker3,
 225    :      kHeapNestedBlockStartMarker4,
 226    :      kHeapNestedBlockStartMarker5,
 227    :      kHeapNestedBlockStartMarker6,
 228    :      kHeapNestedBlockStartMarker7,
 229    :      kHeapHistoricBlockStartMarker0,
 230    :      kHeapHistoricBlockStartMarker1,
 231    :      kHeapHistoricBlockStartMarker2,
 232    :      kHeapHistoricBlockStartMarker3,
 233    :      kHeapHistoricBlockStartMarker4,
 234    :      kHeapHistoricBlockStartMarker5,
 235    :      kHeapHistoricBlockStartMarker6,
 236    :      kHeapHistoricBlockStartMarker7,
 237    :      kHeapHistoricNestedBlockStartMarker0,
 238    :      kHeapHistoricNestedBlockStartMarker1,
 239    :      kHeapHistoricNestedBlockStartMarker2,
 240    :      kHeapHistoricNestedBlockStartMarker3,
 241    :      kHeapHistoricNestedBlockStartMarker4,
 242    :      kHeapHistoricNestedBlockStartMarker5,
 243    :      kHeapHistoricNestedBlockStartMarker6,
 244    :      kHeapHistoricNestedBlockStartMarker7,
 245    :  };
 246    :  
 247    :  static const ShadowMarker kNestedBlockStartShadowMarkers[] = {
 248    :      kHeapNestedBlockStartMarker0,
 249    :      kHeapNestedBlockStartMarker1,
 250    :      kHeapNestedBlockStartMarker2,
 251    :      kHeapNestedBlockStartMarker3,
 252    :      kHeapNestedBlockStartMarker4,
 253    :      kHeapNestedBlockStartMarker5,
 254    :      kHeapNestedBlockStartMarker6,
 255    :      kHeapNestedBlockStartMarker7,
 256    :      kHeapHistoricNestedBlockStartMarker0,
 257    :      kHeapHistoricNestedBlockStartMarker1,
 258    :      kHeapHistoricNestedBlockStartMarker2,
 259    :      kHeapHistoricNestedBlockStartMarker3,
 260    :      kHeapHistoricNestedBlockStartMarker4,
 261    :      kHeapHistoricNestedBlockStartMarker5,
 262    :      kHeapHistoricNestedBlockStartMarker6,
 263    :      kHeapHistoricNestedBlockStartMarker7,
 264    :  };
 265    :  
 266    :  static const ShadowMarker kActiveBlockEndShadowMarkers[] = {
 267    :    kHeapBlockEndMarker,
 268    :    kHeapNestedBlockEndMarker,
 269    :  };
 270    :  
 271    :  static const ShadowMarker kHistoricBlockEndShadowMarkers[] = {
 272    :    kHeapHistoricBlockEndMarker,
 273    :    kHeapHistoricNestedBlockEndMarker,
 274    :  };
 275    :  
 276    :  static const ShadowMarker kBlockEndShadowMarkers[] = {
 277    :    kHeapHistoricBlockEndMarker,
 278    :    kHeapHistoricNestedBlockEndMarker,
 279    :    kHeapBlockEndMarker,
 280    :    kHeapNestedBlockEndMarker,
 281    :  };
 282    :  
 283    :  static const ShadowMarker kNestedBlockEndShadowMarkers[] = {
 284    :    kHeapHistoricNestedBlockEndMarker,
 285    :    kHeapNestedBlockEndMarker,
 286    :  };
 287    :  
 288    :  static const ShadowMarker kHistoricLeftRedzoneShadowMarkers[] = {
 289    :      kHeapHistoricBlockStartMarker0,
 290    :      kHeapHistoricBlockStartMarker1,
 291    :      kHeapHistoricBlockStartMarker2,
 292    :      kHeapHistoricBlockStartMarker3,
 293    :      kHeapHistoricBlockStartMarker4,
 294    :      kHeapHistoricBlockStartMarker5,
 295    :      kHeapHistoricBlockStartMarker6,
 296    :      kHeapHistoricBlockStartMarker7,
 297    :      kHeapHistoricNestedBlockStartMarker0,
 298    :      kHeapHistoricNestedBlockStartMarker1,
 299    :      kHeapHistoricNestedBlockStartMarker2,
 300    :      kHeapHistoricNestedBlockStartMarker3,
 301    :      kHeapHistoricNestedBlockStartMarker4,
 302    :      kHeapHistoricNestedBlockStartMarker5,
 303    :      kHeapHistoricNestedBlockStartMarker6,
 304    :      kHeapHistoricNestedBlockStartMarker7,
 305    :      kHeapHistoricLeftPaddingMarker,
 306    :  };
 307    :  
 308    :  static const ShadowMarker kActiveLeftRedzoneShadowMarkers[] = {
 309    :      kHeapBlockStartMarker0,
 310    :      kHeapBlockStartMarker1,
 311    :      kHeapBlockStartMarker2,
 312    :      kHeapBlockStartMarker3,
 313    :      kHeapBlockStartMarker4,
 314    :      kHeapBlockStartMarker5,
 315    :      kHeapBlockStartMarker6,
 316    :      kHeapBlockStartMarker7,
 317    :      kHeapNestedBlockStartMarker0,
 318    :      kHeapNestedBlockStartMarker1,
 319    :      kHeapNestedBlockStartMarker2,
 320    :      kHeapNestedBlockStartMarker3,
 321    :      kHeapNestedBlockStartMarker4,
 322    :      kHeapNestedBlockStartMarker5,
 323    :      kHeapNestedBlockStartMarker6,
 324    :      kHeapNestedBlockStartMarker7,
 325    :      kHeapLeftPaddingMarker,
 326    :  };
 327    :  
 328    :  static const ShadowMarker kLeftRedzoneShadowMarkers[] = {
 329    :      kHeapHistoricBlockStartMarker0,
 330    :      kHeapHistoricBlockStartMarker1,
 331    :      kHeapHistoricBlockStartMarker2,
 332    :      kHeapHistoricBlockStartMarker3,
 333    :      kHeapHistoricBlockStartMarker4,
 334    :      kHeapHistoricBlockStartMarker5,
 335    :      kHeapHistoricBlockStartMarker6,
 336    :      kHeapHistoricBlockStartMarker7,
 337    :      kHeapHistoricNestedBlockStartMarker0,
 338    :      kHeapHistoricNestedBlockStartMarker1,
 339    :      kHeapHistoricNestedBlockStartMarker2,
 340    :      kHeapHistoricNestedBlockStartMarker3,
 341    :      kHeapHistoricNestedBlockStartMarker4,
 342    :      kHeapHistoricNestedBlockStartMarker5,
 343    :      kHeapHistoricNestedBlockStartMarker6,
 344    :      kHeapHistoricNestedBlockStartMarker7,
 345    :      kHeapHistoricLeftPaddingMarker,
 346    :      kHeapBlockStartMarker0,
 347    :      kHeapBlockStartMarker1,
 348    :      kHeapBlockStartMarker2,
 349    :      kHeapBlockStartMarker3,
 350    :      kHeapBlockStartMarker4,
 351    :      kHeapBlockStartMarker5,
 352    :      kHeapBlockStartMarker6,
 353    :      kHeapBlockStartMarker7,
 354    :      kHeapNestedBlockStartMarker0,
 355    :      kHeapNestedBlockStartMarker1,
 356    :      kHeapNestedBlockStartMarker2,
 357    :      kHeapNestedBlockStartMarker3,
 358    :      kHeapNestedBlockStartMarker4,
 359    :      kHeapNestedBlockStartMarker5,
 360    :      kHeapNestedBlockStartMarker6,
 361    :      kHeapNestedBlockStartMarker7,
 362    :      kHeapLeftPaddingMarker,
 363    :  };
 364    :  
 365    :  static const ShadowMarker kHistoricRightRedzoneShadowMarkers[] = {
 366    :    kHeapHistoricBlockEndMarker,
 367    :    kHeapHistoricNestedBlockEndMarker,
 368    :    kHeapHistoricRightPaddingMarker,
 369    :  };
 370    :  
 371    :  static const ShadowMarker kActiveRightRedzoneShadowMarkers[] = {
 372    :    kHeapBlockEndMarker,
 373    :    kHeapNestedBlockEndMarker,
 374    :    kHeapRightPaddingMarker,
 375    :  };
 376    :  
 377    :  static const ShadowMarker kRightRedzoneShadowMarkers[] = {
 378    :    kHeapHistoricBlockEndMarker,
 379    :    kHeapHistoricNestedBlockEndMarker,
 380    :    kHeapHistoricRightPaddingMarker,
 381    :    kHeapBlockEndMarker,
 382    :    kHeapNestedBlockEndMarker,
 383    :    kHeapRightPaddingMarker,
 384    :  };
 385    :  
 386    :  // Pointer to a query function.
 387    :  typedef bool (*ShadowMarkerQueryFunctionPtr)(ShadowMarkerValue marker);
 388    :  
 389    :  // Tests a shadow marker query function. Iterates over all markers defined in
 390    :  // both |shadow_markers_to_test| and |passing_shadow_markers|. Expects the
 391    :  // function to return true if the marker is in |passing_shadow_markers|, false
 392    :  // otherwise. Markers may be defined in both lists.
 393    :  //
 394    :  // Meant to be called via EXPECT_NO_FATAL_FAILURES or ASSERT_NO_FATAL_FAILURES.
 395    :  void TestShadowMarkerQueryFunction(
 396    :      const char* function_name,
 397    :      const ShadowMarker* shadow_markers_to_test,
 398    :      size_t num_shadow_markers_to_test,
 399    :      const ShadowMarker* passing_shadow_markers,
 400    :      size_t num_passing_shadow_markers,
 401  E :      ShadowMarkerQueryFunctionPtr function) {
 402  E :    std::set<ShadowMarker> expect_fail(
 403    :        shadow_markers_to_test,
 404    :        shadow_markers_to_test + num_shadow_markers_to_test);
 405    :  
 406  E :    char buffer[5] = {};
 407  E :    for (size_t i = 0; i < num_passing_shadow_markers; ++i) {
 408  E :      ShadowMarker marker = passing_shadow_markers[i];
 409  E :      if (!(*function)(marker)) {
 410  i :        ::_snprintf(buffer, arraysize(buffer), "0x%02X", marker);
 411  i :        ADD_FAILURE() << function_name << "(" << kShadowMarkerNames[marker]
 412    :                      << " = " << buffer << ") returned false, expected true.";
 413    :      }
 414  E :      expect_fail.erase(marker);
 415  E :    }
 416    :  
 417  E :    std::set<ShadowMarker>::const_iterator it = expect_fail.begin();
 418  E :    for (; it != expect_fail.end(); ++it) {
 419  E :      if ((*function)(*it)) {
 420  i :        ::_snprintf(buffer, arraysize(buffer), "0x%02X", *it);
 421  i :        ADD_FAILURE() << function_name << "(" << kShadowMarkerNames[*it]
 422    :                      << " = " << buffer << ") returned true, expected false.";
 423    :      }
 424  E :    }
 425  E :  }
 426    :  
 427    :  // A version of the function that explicitly tests against all shadow markers.
 428    :  void TestShadowMarkerQueryFunction(
 429    :      const char* function_name,
 430    :      const ShadowMarker* passing_shadow_markers,
 431    :      size_t num_passing_shadow_markers,
 432  E :      ShadowMarkerQueryFunctionPtr function) {
 433  E :    TestShadowMarkerQueryFunction(function_name,
 434    :                                  kValidShadowMarkers,
 435    :                                  arraysize(kValidShadowMarkers),
 436    :                                  passing_shadow_markers,
 437    :                                  num_passing_shadow_markers,
 438    :                                  function);
 439  E :  }
 440    :  
 441    :  }  // namespace
 442    :  
 443    :  #define TEST_SHADOW_MARKER_FUNCTION_COMPLETE(Name)  \
 444    :      TEST(ShadowMarkerHelperTest, Is ## Name) {  \
 445    :        EXPECT_NO_FATAL_FAILURE(TestShadowMarkerQueryFunction(  \
 446    :            "ShadowMarkerHerlp::Is" _STRINGIZE(Name),  \
 447    :            k ## Name ## ShadowMarkers,  \
 448    :            arraysize(k  ## Name ## ShadowMarkers),  \
 449    :            &ShadowMarkerHelper::Is ## Name));  \
 450    :      }
 451    :  
 452    :  // This tests the various shadow marker querying functions.
 453  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(Redzone);
 454  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(ActiveBlock);
 455  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(HistoricBlock);
 456  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(Block);
 457  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(ActiveBlockStart);
 458  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(HistoricBlockStart);
 459  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(BlockStart);
 460  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(NestedBlockStart);
 461  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(ActiveBlockEnd);
 462  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(HistoricBlockEnd);
 463  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(BlockEnd);
 464  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(NestedBlockEnd);
 465  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(HistoricLeftRedzone);
 466  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(ActiveLeftRedzone);
 467  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(LeftRedzone);
 468  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(HistoricRightRedzone);
 469  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(ActiveRightRedzone);
 470  E :  TEST_SHADOW_MARKER_FUNCTION_COMPLETE(RightRedzone);
 471    :  #undef TEST_SHADOW_MARKER_FUNCTION_COMPLETE
 472    :  
 473  E :  TEST(ShadowMarkerHelperTest, GetBlockStartData) {
 474  E :    EXPECT_EQ(0u, ShadowMarkerHelper::GetBlockStartData(
 475  E :        kHeapHistoricBlockStartMarker0));
 476  E :    EXPECT_EQ(1u, ShadowMarkerHelper::GetBlockStartData(
 477  E :        kHeapHistoricBlockStartMarker1));
 478  E :    EXPECT_EQ(2u, ShadowMarkerHelper::GetBlockStartData(
 479  E :        kHeapHistoricBlockStartMarker2));
 480  E :    EXPECT_EQ(3u, ShadowMarkerHelper::GetBlockStartData(
 481  E :        kHeapHistoricBlockStartMarker3));
 482  E :    EXPECT_EQ(4u, ShadowMarkerHelper::GetBlockStartData(
 483  E :        kHeapHistoricBlockStartMarker4));
 484  E :    EXPECT_EQ(5u, ShadowMarkerHelper::GetBlockStartData(
 485  E :        kHeapHistoricBlockStartMarker5));
 486  E :    EXPECT_EQ(6u, ShadowMarkerHelper::GetBlockStartData(
 487  E :        kHeapHistoricBlockStartMarker6));
 488  E :    EXPECT_EQ(7u, ShadowMarkerHelper::GetBlockStartData(
 489  E :        kHeapHistoricBlockStartMarker7));
 490  E :    EXPECT_EQ(0u, ShadowMarkerHelper::GetBlockStartData(
 491  E :        kHeapHistoricNestedBlockStartMarker0));
 492  E :    EXPECT_EQ(1u, ShadowMarkerHelper::GetBlockStartData(
 493  E :        kHeapHistoricNestedBlockStartMarker1));
 494  E :    EXPECT_EQ(2u, ShadowMarkerHelper::GetBlockStartData(
 495  E :        kHeapHistoricNestedBlockStartMarker2));
 496  E :    EXPECT_EQ(3u, ShadowMarkerHelper::GetBlockStartData(
 497  E :        kHeapHistoricNestedBlockStartMarker3));
 498  E :    EXPECT_EQ(4u, ShadowMarkerHelper::GetBlockStartData(
 499  E :        kHeapHistoricNestedBlockStartMarker4));
 500  E :    EXPECT_EQ(5u, ShadowMarkerHelper::GetBlockStartData(
 501  E :        kHeapHistoricNestedBlockStartMarker5));
 502  E :    EXPECT_EQ(6u, ShadowMarkerHelper::GetBlockStartData(
 503  E :        kHeapHistoricNestedBlockStartMarker6));
 504  E :    EXPECT_EQ(7u, ShadowMarkerHelper::GetBlockStartData(
 505  E :        kHeapHistoricNestedBlockStartMarker7));
 506  E :    EXPECT_EQ(0u, ShadowMarkerHelper::GetBlockStartData(
 507  E :        kHeapBlockStartMarker0));
 508  E :    EXPECT_EQ(1u, ShadowMarkerHelper::GetBlockStartData(
 509  E :        kHeapBlockStartMarker1));
 510  E :    EXPECT_EQ(2u, ShadowMarkerHelper::GetBlockStartData(
 511  E :        kHeapBlockStartMarker2));
 512  E :    EXPECT_EQ(3u, ShadowMarkerHelper::GetBlockStartData(
 513  E :        kHeapBlockStartMarker3));
 514  E :    EXPECT_EQ(4u, ShadowMarkerHelper::GetBlockStartData(
 515  E :        kHeapBlockStartMarker4));
 516  E :    EXPECT_EQ(5u, ShadowMarkerHelper::GetBlockStartData(
 517  E :        kHeapBlockStartMarker5));
 518  E :    EXPECT_EQ(6u, ShadowMarkerHelper::GetBlockStartData(
 519  E :        kHeapBlockStartMarker6));
 520  E :    EXPECT_EQ(7u, ShadowMarkerHelper::GetBlockStartData(
 521  E :        kHeapBlockStartMarker7));
 522  E :    EXPECT_EQ(0u, ShadowMarkerHelper::GetBlockStartData(
 523  E :        kHeapNestedBlockStartMarker0));
 524  E :    EXPECT_EQ(1u, ShadowMarkerHelper::GetBlockStartData(
 525  E :        kHeapNestedBlockStartMarker1));
 526  E :    EXPECT_EQ(2u, ShadowMarkerHelper::GetBlockStartData(
 527  E :        kHeapNestedBlockStartMarker2));
 528  E :    EXPECT_EQ(3u, ShadowMarkerHelper::GetBlockStartData(
 529  E :        kHeapNestedBlockStartMarker3));
 530  E :    EXPECT_EQ(4u, ShadowMarkerHelper::GetBlockStartData(
 531  E :        kHeapNestedBlockStartMarker4));
 532  E :    EXPECT_EQ(5u, ShadowMarkerHelper::GetBlockStartData(
 533  E :        kHeapNestedBlockStartMarker5));
 534  E :    EXPECT_EQ(6u, ShadowMarkerHelper::GetBlockStartData(
 535  E :        kHeapNestedBlockStartMarker6));
 536  E :    EXPECT_EQ(7u, ShadowMarkerHelper::GetBlockStartData(
 537  E :        kHeapNestedBlockStartMarker7));
 538  E :  }
 539    :  
 540  E :  TEST(ShadowMarkerHelper, ToHistoric) {
 541  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker0,
 542  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker0));
 543  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker1,
 544  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker1));
 545  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker2,
 546  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker2));
 547  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker3,
 548  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker3));
 549  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker4,
 550  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker4));
 551  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker5,
 552  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker5));
 553  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker6,
 554  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker6));
 555  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker7,
 556  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockStartMarker7));
 557  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker0,
 558  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker0));
 559  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker1,
 560  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker1));
 561  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker2,
 562  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker2));
 563  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker3,
 564  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker3));
 565  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker4,
 566  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker4));
 567  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker5,
 568  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker5));
 569  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker6,
 570  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker6));
 571  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker7,
 572  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockStartMarker7));
 573  E :    EXPECT_EQ(kHeapHistoricBlockEndMarker,
 574  E :              ShadowMarkerHelper::ToHistoric(kHeapBlockEndMarker));
 575  E :    EXPECT_EQ(kHeapHistoricNestedBlockEndMarker,
 576  E :              ShadowMarkerHelper::ToHistoric(kHeapNestedBlockEndMarker));
 577  E :    EXPECT_EQ(kHeapHistoricLeftPaddingMarker,
 578  E :              ShadowMarkerHelper::ToHistoric(kHeapLeftPaddingMarker));
 579  E :    EXPECT_EQ(kHeapHistoricRightPaddingMarker,
 580  E :              ShadowMarkerHelper::ToHistoric(kHeapRightPaddingMarker));
 581  E :    EXPECT_EQ(kHeapHistoricFreedMarker,
 582  E :              ShadowMarkerHelper::ToHistoric(kHeapFreedMarker));
 583  E :  }
 584    :  
 585  E :  TEST(ShadowMarkerHelper, BuildBlockStart) {
 586  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker0,
 587  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 0));
 588  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker1,
 589  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 1));
 590  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker2,
 591  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 2));
 592  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker3,
 593  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 3));
 594  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker4,
 595  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 4));
 596  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker5,
 597  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 5));
 598  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker6,
 599  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 6));
 600  E :    EXPECT_EQ(kHeapHistoricBlockStartMarker7,
 601  E :              ShadowMarkerHelper::BuildBlockStart(false, false, 7));
 602    :  
 603  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker0,
 604  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 0));
 605  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker1,
 606  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 1));
 607  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker2,
 608  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 2));
 609  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker3,
 610  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 3));
 611  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker4,
 612  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 4));
 613  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker5,
 614  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 5));
 615  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker6,
 616  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 6));
 617  E :    EXPECT_EQ(kHeapHistoricNestedBlockStartMarker7,
 618  E :              ShadowMarkerHelper::BuildBlockStart(false, true, 7));
 619    :  
 620  E :    EXPECT_EQ(kHeapBlockStartMarker0,
 621  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 0));
 622  E :    EXPECT_EQ(kHeapBlockStartMarker1,
 623  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 1));
 624  E :    EXPECT_EQ(kHeapBlockStartMarker2,
 625  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 2));
 626  E :    EXPECT_EQ(kHeapBlockStartMarker3,
 627  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 3));
 628  E :    EXPECT_EQ(kHeapBlockStartMarker4,
 629  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 4));
 630  E :    EXPECT_EQ(kHeapBlockStartMarker5,
 631  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 5));
 632  E :    EXPECT_EQ(kHeapBlockStartMarker6,
 633  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 6));
 634  E :    EXPECT_EQ(kHeapBlockStartMarker7,
 635  E :              ShadowMarkerHelper::BuildBlockStart(true, false, 7));
 636    :  
 637  E :    EXPECT_EQ(kHeapNestedBlockStartMarker0,
 638  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 0));
 639  E :    EXPECT_EQ(kHeapNestedBlockStartMarker1,
 640  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 1));
 641  E :    EXPECT_EQ(kHeapNestedBlockStartMarker2,
 642  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 2));
 643  E :    EXPECT_EQ(kHeapNestedBlockStartMarker3,
 644  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 3));
 645  E :    EXPECT_EQ(kHeapNestedBlockStartMarker4,
 646  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 4));
 647  E :    EXPECT_EQ(kHeapNestedBlockStartMarker5,
 648  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 5));
 649  E :    EXPECT_EQ(kHeapNestedBlockStartMarker6,
 650  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 6));
 651  E :    EXPECT_EQ(kHeapNestedBlockStartMarker7,
 652  E :              ShadowMarkerHelper::BuildBlockStart(true, true, 7));
 653  E :  }
 654    :  
 655  E :  TEST(ShadowMarkerHelper, BuildBlockEnd) {
 656  E :    EXPECT_EQ(kHeapHistoricBlockEndMarker,
 657  E :              ShadowMarkerHelper::BuildBlockEnd(false, false));
 658  E :    EXPECT_EQ(kHeapHistoricNestedBlockEndMarker,
 659  E :              ShadowMarkerHelper::BuildBlockEnd(false, true));
 660  E :    EXPECT_EQ(kHeapBlockEndMarker,
 661  E :              ShadowMarkerHelper::BuildBlockEnd(true, false));
 662  E :    EXPECT_EQ(kHeapNestedBlockEndMarker,
 663  E :              ShadowMarkerHelper::BuildBlockEnd(true, true));
 664  E :  }
 665    :  
 666    :  }  // namespace asan
 667    :  }  // namespace agent

Coverage information generated Fri Jul 29 11:00:21 2016.