race: where possible, use "const void *" for addresses
authorBrian Norris <banorris@uci.edu>
Tue, 13 Nov 2012 00:42:41 +0000 (16:42 -0800)
committerBrian Norris <banorris@uci.edu>
Wed, 14 Nov 2012 22:34:20 +0000 (14:34 -0800)
This allows more flexible use for read-only objects.

datarace.cc
datarace.h
include/librace.h
librace.cc

index 270e52310730febec1e97956c787a06c7b670b7e..e6bbe05c29ddb2dd83e454751cab04ff8d201233 100644 (file)
@@ -16,7 +16,7 @@ void initRaceDetector() {
 
 /** 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];
@@ -75,7 +75,7 @@ static void expandRecord(uint64_t * shadow) {
 }
 
 /** 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;
@@ -210,7 +210,7 @@ void raceCheckWrite(thread_id_t thread, void *location, ClockVector *currClock)
 }
 
 /** 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. */
@@ -268,7 +268,7 @@ void fullRaceCheckRead(thread_id_t thread, void *location, uint64_t * shadow, Cl
 }
 
 /** 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;
 
index 627b8cc88c7016b27cc2660bdebdf4693e674c40..2fb1a7f927f015628953fbf2504c20fdd133e65a 100644 (file)
@@ -36,14 +36,14 @@ struct DataRace {
        bool isnewwrite;
 
        /* Address of data race. */
-       void *address;
+       const void *address;
 };
 
 #define MASK16BIT 0xffff
 
 void initRaceDetector();
 void raceCheckWrite(thread_id_t thread, void *location, ClockVector *currClock);
-void raceCheckRead(thread_id_t thread, void *location, ClockVector *currClock);
+void raceCheckRead(thread_id_t thread, const void *location, ClockVector *currClock);
 bool checkDataRaces();
 void printRace(struct DataRace *race);
 
index 591b2925473b9ef608d533d70f2b3d2cf6a928a6..cabf0661ae32832efde74da04fe5ba6257552241 100644 (file)
@@ -16,10 +16,10 @@ extern "C" {
        void store_32(void *addr, uint32_t val);
        void store_64(void *addr, uint64_t val);
 
-       uint8_t load_8(void *addr);
-       uint16_t load_16(void *addr);
-       uint32_t load_32(void *addr);
-       uint64_t load_64(void *addr);
+       uint8_t load_8(const void *addr);
+       uint16_t load_16(const void *addr);
+       uint32_t load_32(const void *addr);
+       uint64_t load_64(const void *addr);
 
 #ifdef __cplusplus
 }
index 3c56d96925a6df6c4c8b54cd5e7a0f8e742e9764..95b97aa90fdba45e43b1bbe9f8b1dea849a50dd3 100644 (file)
@@ -54,7 +54,7 @@ void store_64(void *addr, uint64_t val)
        (*(uint64_t *)addr) = val;
 }
 
-uint8_t load_8(void *addr)
+uint8_t load_8(const void *addr)
 {
        DEBUG("addr = %p\n", addr);
        thread_id_t tid=thread_current()->get_id();
@@ -63,40 +63,40 @@ uint8_t load_8(void *addr)
        return *((uint8_t *)addr);
 }
 
-uint16_t load_16(void *addr)
+uint16_t load_16(const void *addr)
 {
        DEBUG("addr = %p\n", addr);
        thread_id_t tid=thread_current()->get_id();
        ClockVector * cv=model->get_cv(tid);
        raceCheckRead(tid, addr, cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+1), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+1), cv);
        return *((uint16_t *)addr);
 }
 
-uint32_t load_32(void *addr)
+uint32_t load_32(const void *addr)
 {
        DEBUG("addr = %p\n", addr);
        thread_id_t tid=thread_current()->get_id();
        ClockVector * cv=model->get_cv(tid);
        raceCheckRead(tid, addr, cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+1), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+2), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+3), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+1), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+2), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+3), cv);
        return *((uint32_t *)addr);
 }
 
-uint64_t load_64(void *addr)
+uint64_t load_64(const void *addr)
 {
        DEBUG("addr = %p\n", addr);
        thread_id_t tid=thread_current()->get_id();
        ClockVector * cv=model->get_cv(tid);
        raceCheckRead(tid, addr, cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+1), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+2), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+3), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+4), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+5), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+6), cv);
-       raceCheckRead(tid, (void *)(((uintptr_t)addr)+7), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+1), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+2), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+3), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+4), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+5), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+6), cv);
+       raceCheckRead(tid, (const void *)(((uintptr_t)addr)+7), cv);
        return *((uint64_t *)addr);
 }