[llvm-commits] [compiler-rt] r150398 - in /compiler-rt/trunk/lib/asan: asan_internal.h asan_linux.cc asan_mac.cc asan_rtl.cc asan_win.cc

David Dean david_dean at apple.com
Mon Feb 13 09:30:46 PST 2012


Alexander,
	I think you missed something in this commit:

  COMPILE:   clang_darwin/asan_osx/i386: /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-gcc42-RA/llvm/projects/compiler-rt/lib/asan/asan_thread.cc

/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-gcc42-RA/llvm/projects/compiler-rt/lib/asan/asan_mac.cc:106:31: error: use of undeclared identifier 'kLowShadowBeg'
                              kLowShadowBeg - kMmapGranularity,
                              ^


On 13 Feb 2012, at 9:09 AM, Alexander Potapenko wrote:

> Author: glider
> Date: Mon Feb 13 11:09:40 2012
> New Revision: 150398
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=150398&view=rev
> Log:
> Move the non-trivial implementation of AsanShadowRangeIsAvailable to asan_mac.cc
> to avoid crashes on Linux and Win.
> 
> Modified:
>    compiler-rt/trunk/lib/asan/asan_internal.h
>    compiler-rt/trunk/lib/asan/asan_linux.cc
>    compiler-rt/trunk/lib/asan/asan_mac.cc
>    compiler-rt/trunk/lib/asan/asan_rtl.cc
>    compiler-rt/trunk/lib/asan/asan_win.cc
> 
> Modified: compiler-rt/trunk/lib/asan/asan_internal.h
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_internal.h?rev=150398&r1=150397&r2=150398&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_internal.h (original)
> +++ compiler-rt/trunk/lib/asan/asan_internal.h Mon Feb 13 11:09:40 2012
> @@ -125,8 +125,9 @@
> 
> void OutOfMemoryMessageAndDie(const char *mem_type, size_t size);
> 
> -// asan_linux.cc / asan_mac.cc
> +// asan_linux.cc / asan_mac.cc / asan_win.cc
> void *AsanDoesNotSupportStaticLinkage();
> +bool AsanShadowRangeIsAvailable();
> int AsanOpenReadonly(const char* filename);
> const char *AsanGetEnv(const char *name);
> 
> 
> Modified: compiler-rt/trunk/lib/asan/asan_linux.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_linux.cc?rev=150398&r1=150397&r2=150398&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_linux.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_linux.cc Mon Feb 13 11:09:40 2012
> @@ -43,6 +43,11 @@
>   return &_DYNAMIC;  // defined in link.h
> }
> 
> +bool AsanShadowRangeIsAvailable() {
> +  // FIXME: shall we need anything here on Linux?
> +  return true;
> +}
> +
> void GetPcSpBp(void *context, uintptr_t *pc, uintptr_t *sp, uintptr_t *bp) {
> #ifdef ANDROID
>   *pc = *sp = *bp = 0;
> 
> Modified: compiler-rt/trunk/lib/asan/asan_mac.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.cc?rev=150398&r1=150397&r2=150398&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_mac.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_mac.cc Mon Feb 13 11:09:40 2012
> @@ -76,6 +76,42 @@
>   return NULL;
> }
> 
> +inline bool IntervalsAreSeparate(uintptr_t start1, uintptr_t end1,
> +                                 uintptr_t start2, uintptr_t end2) {
> +  CHECK(start1 <= end1);
> +  CHECK(start2 <= end2);
> +  if (start1 == start2) {
> +    return false;
> +  } else {
> +    if (start1 < start2) {
> +      return (end1 < start2);
> +    } else {
> +      return (end2 < start1);
> +    }
> +  }
> +  return false;
> +}
> +
> +// FIXME: this is thread-unsafe, but should not cause problems most of the time.
> +// When the shadow is mapped only a single thread usually exists (plus maybe
> +// several worker threads on Mac, which aren't expected to map big chunks of
> +// memory).
> +bool AsanShadowRangeIsAvailable() {
> +  AsanProcMaps procmaps;
> +  uintptr_t start, end;
> +  bool available = true;
> +  while (procmaps.Next(&start, &end,
> +                       /*offset*/NULL, /*filename*/NULL, /*size*/NULL)) {
> +    if (!IntervalsAreSeparate(start, end,
> +                              kLowShadowBeg - kMmapGranularity,
> +                              kHighShadowEnd)) {
> +      available = false;
> +      break;
> +    }
> +  }
> +  return available;
> +}
> +
> bool AsanInterceptsSignal(int signum) {
>   return (signum == SIGSEGV || signum == SIGBUS) && FLAG_handle_segv;
> }
> 
> Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=150398&r1=150397&r2=150398&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_rtl.cc Mon Feb 13 11:09:40 2012
> @@ -118,42 +118,6 @@
>   CHECK(res == (void*)beg && "ReserveShadowMemoryRange failed");
> }
> 
> -inline bool IntervalsAreSeparate(uintptr_t start1, uintptr_t end1,
> -                                 uintptr_t start2, uintptr_t end2) {
> -  CHECK(start1 <= end1);
> -  CHECK(start2 <= end2);
> -  if (start1 == start2) {
> -    return false;
> -  } else {
> -    if (start1 < start2) {
> -      return (end1 < start2);
> -    } else {
> -      return (end2 < start1);
> -    }
> -  }
> -  return false;
> -}
> -
> -// FIXME: this is thread-unsafe, but should not cause problems most of the time.
> -// When the shadow is mapped only a single thread usually exists (plus maybe
> -// several worker threads on Mac, which aren't expected to map big chunks of
> -// memory.
> -bool AsanShadowRangeIsAvailable() {
> -  AsanProcMaps procmaps;
> -  uintptr_t start, end;
> -  bool available = true;
> -  while (procmaps.Next(&start, &end,
> -                       /*offset*/NULL, /*filename*/NULL, /*size*/NULL)) {
> -    if (!IntervalsAreSeparate(start, end,
> -                              kLowShadowBeg - kMmapGranularity,
> -                              kHighShadowEnd)) {
> -      available = false;
> -      break;
> -    }
> -  }
> -  return available;
> -}
> -
> // ---------------------- LowLevelAllocator ------------- {{{1
> void *LowLevelAllocator::Allocate(size_t size) {
>   CHECK((size & (size - 1)) == 0 && "size must be a power of two");
> 
> Modified: compiler-rt/trunk/lib/asan/asan_win.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win.cc?rev=150398&r1=150397&r2=150398&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_win.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_win.cc Mon Feb 13 11:09:40 2012
> @@ -223,6 +223,11 @@
>   return NULL;
> }
> 
> +bool AsanShadowRangeIsAvailable() {
> +  // FIXME: shall we do anything here on Windows?
> +  return true;
> +}
> +
> int AtomicInc(int *a) {
>   return InterlockedExchangeAdd((LONG*)a, 1) + 1;
> }
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-David





More information about the llvm-commits mailing list