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

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

Coverage information generated Thu Jan 14 17:40:38 2016.