diff options
Diffstat (limited to 'lib/tsan/rtl/tsan_platform_linux.cc')
| -rw-r--r-- | lib/tsan/rtl/tsan_platform_linux.cc | 21 | 
1 files changed, 15 insertions, 6 deletions
diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc index e14d5f575a2e3..de989b7808835 100644 --- a/lib/tsan/rtl/tsan_platform_linux.cc +++ b/lib/tsan/rtl/tsan_platform_linux.cc @@ -168,11 +168,11 @@ static void MapRodata() {    fd_t fd = openrv;    // Fill the file with kShadowRodata.    const uptr kMarkerSize = 512 * 1024 / sizeof(u64); -  InternalScopedBuffer<u64> marker(kMarkerSize); +  InternalMmapVector<u64> marker(kMarkerSize);    // volatile to prevent insertion of memset    for (volatile u64 *p = marker.data(); p < marker.data() + kMarkerSize; p++)      *p = kShadowRodata; -  internal_write(fd, marker.data(), marker.size()); +  internal_write(fd, marker.data(), marker.size() * sizeof(u64));    // Map the file into memory.    uptr page = internal_mmap(0, GetPageSizeCached(), PROT_READ | PROT_WRITE,                              MAP_PRIVATE | MAP_ANONYMOUS, fd, 0); @@ -191,8 +191,9 @@ static void MapRodata() {        // Assume it's .rodata        char *shadow_start = (char *)MemToShadow(segment.start);        char *shadow_end = (char *)MemToShadow(segment.end); -      for (char *p = shadow_start; p < shadow_end; p += marker.size()) { -        internal_mmap(p, Min<uptr>(marker.size(), shadow_end - p), +      for (char *p = shadow_start; p < shadow_end; +           p += marker.size() * sizeof(u64)) { +        internal_mmap(p, Min<uptr>(marker.size() * sizeof(u64), shadow_end - p),                        PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, 0);        }      } @@ -213,15 +214,23 @@ void InitializePlatformEarly() {  #if defined(__aarch64__)    if (vmaSize != 39 && vmaSize != 42 && vmaSize != 48) {      Printf("FATAL: ThreadSanitizer: unsupported VMA range\n"); -    Printf("FATAL: Found %d - Supported 39, 42 and 48\n", vmaSize); +    Printf("FATAL: Found %zd - Supported 39, 42 and 48\n", vmaSize);      Die();    }  #elif defined(__powerpc64__) +# if !SANITIZER_GO    if (vmaSize != 44 && vmaSize != 46 && vmaSize != 47) {      Printf("FATAL: ThreadSanitizer: unsupported VMA range\n"); -    Printf("FATAL: Found %d - Supported 44, 46, and 47\n", vmaSize); +    Printf("FATAL: Found %zd - Supported 44, 46, and 47\n", vmaSize);      Die();    } +# else +  if (vmaSize != 46 && vmaSize != 47) { +    Printf("FATAL: ThreadSanitizer: unsupported VMA range\n"); +    Printf("FATAL: Found %zd - Supported 46, and 47\n", vmaSize); +    Die(); +  } +# endif  #endif  #endif  }  | 
