From: Brian Norris Date: Tue, 16 Apr 2013 01:46:18 +0000 (-0700) Subject: datarace: simplify raceCheck{Read,Write}() function interfaces X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=commitdiff_plain;h=c123ef2c7d98d23474d2d2b121b56b502d75665b datarace: simplify raceCheck{Read,Write}() function interfaces The user should not have to pass in a ClockVector. --- diff --git a/datarace.cc b/datarace.cc index 5f007f3..5174c04 100644 --- a/datarace.cc +++ b/datarace.cc @@ -201,10 +201,11 @@ void fullRaceCheckWrite(thread_id_t thread, void *location, uint64_t *shadow, Cl } /** This function does race detection on a write. */ -void raceCheckWrite(thread_id_t thread, void *location, ClockVector *currClock) +void raceCheckWrite(thread_id_t thread, void *location) { uint64_t *shadow = lookupAddressEntry(location); uint64_t shadowval = *shadow; + ClockVector *currClock = model->get_cv(thread); /* Do full record */ if (shadowval != 0 && !ISSHORTRECORD(shadowval)) { @@ -304,10 +305,11 @@ void fullRaceCheckRead(thread_id_t thread, const void *location, uint64_t *shado } /** This function does race detection on a read. */ -void raceCheckRead(thread_id_t thread, const void *location, ClockVector *currClock) +void raceCheckRead(thread_id_t thread, const void *location) { uint64_t *shadow = lookupAddressEntry(location); uint64_t shadowval = *shadow; + ClockVector *currClock = model->get_cv(thread); /* Do full record */ if (shadowval != 0 && !ISSHORTRECORD(shadowval)) { diff --git a/datarace.h b/datarace.h index 6c92203..78903d3 100644 --- a/datarace.h +++ b/datarace.h @@ -42,8 +42,8 @@ struct DataRace { #define MASK16BIT 0xffff void initRaceDetector(); -void raceCheckWrite(thread_id_t thread, void *location, ClockVector *currClock); -void raceCheckRead(thread_id_t thread, const void *location, ClockVector *currClock); +void raceCheckWrite(thread_id_t thread, void *location); +void raceCheckRead(thread_id_t thread, const void *location); bool checkDataRaces(); void assert_race(struct DataRace *race); diff --git a/librace.cc b/librace.cc index 5e775f3..2c36054 100644 --- a/librace.cc +++ b/librace.cc @@ -11,8 +11,7 @@ void store_8(void *addr, uint8_t val) { DEBUG("addr = %p, val = %" PRIu8 "\n", addr, val); thread_id_t tid = thread_current()->get_id(); - ClockVector *cv = model->get_cv(tid); - raceCheckWrite(tid, addr, cv); + raceCheckWrite(tid, addr); (*(uint8_t *)addr) = val; } @@ -20,9 +19,8 @@ void store_16(void *addr, uint16_t val) { DEBUG("addr = %p, val = %" PRIu16 "\n", addr, val); thread_id_t tid = thread_current()->get_id(); - ClockVector *cv = model->get_cv(tid); - raceCheckWrite(tid, addr, cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 1), cv); + raceCheckWrite(tid, addr); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 1)); (*(uint16_t *)addr) = val; } @@ -30,11 +28,10 @@ void store_32(void *addr, uint32_t val) { DEBUG("addr = %p, val = %" PRIu32 "\n", addr, val); thread_id_t tid = thread_current()->get_id(); - ClockVector *cv = model->get_cv(tid); - raceCheckWrite(tid, addr, cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 1), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 2), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 3), cv); + raceCheckWrite(tid, addr); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 1)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 2)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 3)); (*(uint32_t *)addr) = val; } @@ -42,15 +39,14 @@ void store_64(void *addr, uint64_t val) { DEBUG("addr = %p, val = %" PRIu64 "\n", addr, val); thread_id_t tid = thread_current()->get_id(); - ClockVector *cv = model->get_cv(tid); - raceCheckWrite(tid, addr, cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 1), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 2), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 3), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 4), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 5), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 6), cv); - raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 7), cv); + raceCheckWrite(tid, addr); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 1)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 2)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 3)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 4)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 5)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 6)); + raceCheckWrite(tid, (void *)(((uintptr_t)addr) + 7)); (*(uint64_t *)addr) = val; } @@ -58,8 +54,7 @@ uint8_t load_8(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, addr); return *((uint8_t *)addr); } @@ -67,9 +62,8 @@ 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, (const void *)(((uintptr_t)addr) + 1), cv); + raceCheckRead(tid, addr); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 1)); return *((uint16_t *)addr); } @@ -77,11 +71,10 @@ 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, (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, addr); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 1)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 2)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 3)); return *((uint32_t *)addr); } @@ -89,14 +82,13 @@ 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, (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); + raceCheckRead(tid, addr); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 1)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 2)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 3)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 4)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 5)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 6)); + raceCheckRead(tid, (const void *)(((uintptr_t)addr) + 7)); return *((uint64_t *)addr); }