Merge branch 'firefox-test' of /home/git/random-fuzzer into firefox-test
authorweiyu <weiyuluo1232@gmail.com>
Thu, 28 May 2020 20:02:55 +0000 (13:02 -0700)
committerweiyu <weiyuluo1232@gmail.com>
Thu, 28 May 2020 20:02:55 +0000 (13:02 -0700)
1  2 
datarace.cc

diff --combined datarace.cc
index d4d3d1c71a79f7d1d7f954f9ed72d7d4647233c1,cfbe94bff3553761f81069c40ed63739db578e7a..f988596f492343f7db2519cf5a83af3bce41821e
@@@ -16,16 -16,6 +16,16 @@@ static void *memory_base
  static void *memory_top;
  static RaceSet * raceset;
  
 +static unsigned int store8_count = 0;
 +static unsigned int store16_count = 0;
 +static unsigned int store32_count = 0;
 +static unsigned int store64_count = 0;
 +
 +static unsigned int load8_count = 0;
 +static unsigned int load16_count = 0;
 +static unsigned int load32_count = 0;
 +static unsigned int load64_count = 0;
 +
  static const ModelExecution * get_execution()
  {
        return model->get_execution();
@@@ -153,6 -143,8 +153,8 @@@ static void expandRecord(uint64_t *shad
                ASSERT(readThread >= 0);
                record->thread[0] = readThread;
                record->readClock[0] = readClock;
+       } else {
+               record->thread = NULL;
        }
        if (shadowval & ATOMICMASK)
                record->isAtomic = 1;
@@@ -183,7 -175,6 +185,7 @@@ bool race_equals(struct DataRace *r1, s
  /** This function is called when we detect a data race.*/
  static struct DataRace * reportDataRace(thread_id_t oldthread, modelclock_t oldclock, bool isoldwrite, ModelAction *newaction, bool isnewwrite, const void *address)
  {
 +#ifdef REPORT_DATA_RACES
        struct DataRace *race = (struct DataRace *)model_malloc(sizeof(struct DataRace));
        race->oldthread = oldthread;
        race->oldclock = oldclock;
        race->isnewwrite = isnewwrite;
        race->address = address;
        return race;
 +#else
 +      return NULL;
 +#endif
  }
  
  /**
@@@ -321,14 -309,10 +323,14 @@@ ShadowExit
  
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  }
  
@@@ -439,14 -423,10 +441,14 @@@ ShadowExit
  
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  }
  
@@@ -563,7 -543,7 +565,7 @@@ struct DataRace * fullRaceCheckRead(thr
        }
  
        if (__builtin_popcount(copytoindex) <= 1) {
-               if (copytoindex == 0) {
+               if (copytoindex == 0 && record->thread == NULL) {
                        int newCapacity = INITCAPACITY;
                        record->thread = (thread_id_t *)snapshot_malloc(sizeof(thread_id_t) * newCapacity);
                        record->readClock = (modelclock_t *)snapshot_malloc(sizeof(modelclock_t) * newCapacity);
@@@ -645,14 -625,10 +647,14 @@@ ShadowExit
        }
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  }
  
@@@ -711,14 -687,10 +713,14 @@@ void atomraceCheckRead(thread_id_t thre
        }
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  }
  
@@@ -780,14 -752,10 +782,14 @@@ static inline uint64_t * raceCheckRead_
        }
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  
        return shadow;
@@@ -848,14 -816,10 +850,14 @@@ static inline void raceCheckRead_otherI
        }
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  }
  
@@@ -863,9 -827,7 +865,9 @@@ void raceCheckRead64(thread_id_t thread
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 -
 +#ifdef COLLECT_STAT
 +      load64_count++;
 +#endif
        uint64_t * shadow = raceCheckRead_firstIt(thread, location, &old_shadowval, &new_shadowval);
        if (CHECKBOUNDARY(location, 7)) {
                if (shadow[1]==old_shadowval)
@@@ -912,9 -874,7 +914,9 @@@ void raceCheckRead32(thread_id_t thread
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 -
 +#ifdef COLLECT_STAT
 +      load32_count++;
 +#endif
        uint64_t * shadow = raceCheckRead_firstIt(thread, location, &old_shadowval, &new_shadowval);
        if (CHECKBOUNDARY(location, 3)) {
                if (shadow[1]==old_shadowval)
@@@ -941,9 -901,8 +943,9 @@@ void raceCheckRead16(thread_id_t thread
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 -
 -
 +#ifdef COLLECT_STAT
 +      load16_count++;
 +#endif
        uint64_t * shadow = raceCheckRead_firstIt(thread, location, &old_shadowval, &new_shadowval);
        if (CHECKBOUNDARY(location, 1)) {
                if (shadow[1]==old_shadowval) {
@@@ -958,9 -917,7 +960,9 @@@ void raceCheckRead8(thread_id_t thread
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 -
 +#ifdef COLLECT_STAT
 +      load8_count++;
 +#endif
        raceCheckRead_firstIt(thread, location, &old_shadowval, &new_shadowval);
  }
  
@@@ -1023,14 -980,10 +1025,14 @@@ ShadowExit
  
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  
        return shadow;
@@@ -1093,14 -1046,10 +1095,14 @@@ ShadowExit
  
  Exit:
        if (race) {
 +#ifdef REPORT_DATA_RACES
                race->numframes=backtrace(race->backtrace, sizeof(race->backtrace)/sizeof(void*));
                if (raceset->add(race))
                        assert_race(race);
                else model_free(race);
 +#else
 +              model_free(race);
 +#endif
        }
  }
  
@@@ -1108,9 -1057,7 +1110,9 @@@ void raceCheckWrite64(thread_id_t threa
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 -
 +#ifdef COLLECT_STAT
 +      store64_count++;
 +#endif
        uint64_t * shadow = raceCheckWrite_firstIt(thread, location, &old_shadowval, &new_shadowval);
        if (CHECKBOUNDARY(location, 7)) {
                if (shadow[1]==old_shadowval)
@@@ -1157,9 -1104,7 +1159,9 @@@ void raceCheckWrite32(thread_id_t threa
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 -
 +#ifdef COLLECT_STAT
 +      store32_count++;
 +#endif
        uint64_t * shadow = raceCheckWrite_firstIt(thread, location, &old_shadowval, &new_shadowval);
        if (CHECKBOUNDARY(location, 3)) {
                if (shadow[1]==old_shadowval)
@@@ -1186,9 -1131,6 +1188,9 @@@ void raceCheckWrite16(thread_id_t threa
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 +#ifdef COLLECT_STAT
 +      store16_count++;
 +#endif
  
        uint64_t * shadow = raceCheckWrite_firstIt(thread, location, &old_shadowval, &new_shadowval);
        if (CHECKBOUNDARY(location, 1)) {
@@@ -1204,21 -1146,6 +1206,21 @@@ void raceCheckWrite8(thread_id_t thread
  {
        uint64_t old_shadowval, new_shadowval;
        old_shadowval = new_shadowval = INVALIDSHADOWVAL;
 -
 +#ifdef COLLECT_STAT
 +      store8_count++;
 +#endif
        raceCheckWrite_firstIt(thread, location, &old_shadowval, &new_shadowval);
  }
 +
 +void print_normal_accesses()
 +{
 +      model_print("store 8  count: %u\n", store8_count);
 +      model_print("store 16 count: %u\n", store16_count);
 +      model_print("store 32 count: %u\n", store32_count);
 +      model_print("store 64 count: %u\n", store64_count);
 +
 +      model_print("load  8  count: %u\n", load8_count);
 +      model_print("load  16 count: %u\n", load16_count);
 +      model_print("load  32 count: %u\n", load32_count);
 +      model_print("load  64 count: %u\n", load64_count);
 +}