merge
authorBrian Demsky <bdemsky@uci.edu>
Thu, 15 Nov 2012 02:15:04 +0000 (18:15 -0800)
committerBrian Demsky <bdemsky@uci.edu>
Thu, 15 Nov 2012 02:15:04 +0000 (18:15 -0800)
Merge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/model-checker

Conflicts:
config.h
model.cc

1  2 
config.h
datarace.cc

diff --combined config.h
index 94885427b3df46782b27ccb5ded48a6fac1e8c36,e064e39a4a2f3a742f7b02d1b1229fa98da2b684..aacbb81db38613e43e10ff5ab6c43751173c6d30
+++ b/config.h
  /* Size of stack to allocate for a thread. */
  #define STACK_SIZE (1024 * 1024)
  
++/** How many shadow tables of memory to preallocate for data race detector. */
 +#define SHADOWBASETABLES 4
 +
+ /** Enable debugging assertions (via ASSERT()) */
+ #define CONFIG_ASSERT
  #endif
diff --combined datarace.cc
index 732d6ff748b6e77187c10f0bf5dcd6b6b834b025,e6bbe05c29ddb2dd83e454751cab04ff8d201233..ac364d79f83976196fb3ac14695bffbcb0c79433
@@@ -5,45 -5,29 +5,45 @@@
  #include <cstring>
  #include "mymemory.h"
  #include "clockvector.h"
 +#include "config.h"
  
  struct ShadowTable *root;
  std::vector<struct DataRace *> unrealizedraces;
 +void *memory_base;
 +void *memory_top;
 +
  
  /** This function initialized the data race detector. */
  void initRaceDetector() {
        root = (struct ShadowTable *)snapshot_calloc(sizeof(struct ShadowTable), 1);
 +      memory_base = snapshot_calloc(sizeof(struct ShadowBaseTable)*SHADOWBASETABLES, 1);
 +      memory_top = ((char *)memory_base) + sizeof(struct ShadowBaseTable)*SHADOWBASETABLES;
 +}
 +
 +void * table_calloc(size_t size) {
 +      if ((((char *)memory_base)+size)>memory_top) {
 +              return snapshot_calloc(size, 1);
 +      } else {
 +              void *tmp=memory_base;
 +              memory_base=((char *)memory_base)+size;
 +              return tmp;
 +      }
  }
  
  /** This function looks up the entry in the shadow table corresponding to a
   * given address.*/
- static uint64_t * lookupAddressEntry(void * address) {
+ static uint64_t * lookupAddressEntry(const void * address) {
        struct ShadowTable *currtable=root;
  #if BIT48
        currtable=(struct ShadowTable *) currtable->array[(((uintptr_t)address)>>32)&MASK16BIT];
        if (currtable==NULL) {
 -              currtable = (struct ShadowTable *)(root->array[(((uintptr_t)address)>>32)&MASK16BIT] = snapshot_calloc(sizeof(struct ShadowTable), 1));
 +              currtable = (struct ShadowTable *)(root->array[(((uintptr_t)address)>>32)&MASK16BIT] = table_calloc(sizeof(struct ShadowTable)));
        }
  #endif
  
        struct ShadowBaseTable * basetable=(struct ShadowBaseTable *) currtable->array[(((uintptr_t)address)>>16)&MASK16BIT];
        if (basetable==NULL) {
 -              basetable = (struct ShadowBaseTable *)(currtable->array[(((uintptr_t)address)>>16)&MASK16BIT] = snapshot_calloc(sizeof(struct ShadowBaseTable), 1));
 +              basetable = (struct ShadowBaseTable *)(currtable->array[(((uintptr_t)address)>>16)&MASK16BIT] = table_calloc(sizeof(struct ShadowBaseTable)));
        }
        return &basetable->array[((uintptr_t)address)&MASK16BIT];
  }
@@@ -91,7 -75,7 +91,7 @@@ static void expandRecord(uint64_t * sha
  }
  
  /** This function is called when we detect a data race.*/
- static void reportDataRace(thread_id_t oldthread, modelclock_t oldclock, bool isoldwrite, ModelAction *newaction, bool isnewwrite, void *address) {
+ static void reportDataRace(thread_id_t oldthread, modelclock_t oldclock, bool isoldwrite, ModelAction *newaction, bool isnewwrite, const void *address) {
        struct DataRace *race = (struct DataRace *)snapshot_malloc(sizeof(struct DataRace));
        race->oldthread=oldthread;
        race->oldclock=oldclock;
@@@ -226,7 -210,7 +226,7 @@@ void raceCheckWrite(thread_id_t thread
  }
  
  /** This function does race detection on a read for an expanded record. */
- void fullRaceCheckRead(thread_id_t thread, void *location, uint64_t * shadow, ClockVector *currClock) {
+ void fullRaceCheckRead(thread_id_t thread, const void *location, uint64_t * shadow, ClockVector *currClock) {
        struct RaceRecord * record=(struct RaceRecord *) (*shadow);
  
        /* Check for datarace against last write. */
  }
  
  /** This function does race detection on a read. */
- void raceCheckRead(thread_id_t thread, void *location, ClockVector *currClock) {
+ void raceCheckRead(thread_id_t thread, const void *location, ClockVector *currClock) {
        uint64_t * shadow=lookupAddressEntry(location);
        uint64_t shadowval=*shadow;