<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 3, 2014 at 7:32 PM, Alexander Potapenko <span dir="ltr"><<a href="mailto:glider@google.com" target="_blank">glider@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: glider<br>
Date: Mon Feb 3 09:32:19 2014<br>
New Revision: 200700<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=200700&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=200700&view=rev</a><br>
Log:<br>
[ASan] Move GetMacosVersion() to sanitizer_common.<br>
<br>
Added:<br>
compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.h (with props)<br>
Modified:<br>
compiler-rt/trunk/lib/asan/asan_mac.cc<br>
compiler-rt/trunk/lib/asan/asan_mac.h<br>
compiler-rt/trunk/lib/asan/asan_malloc_mac.cc<br>
compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.cc?rev=200700&r1=200699&r2=200700&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.cc?rev=200700&r1=200699&r2=200700&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_mac.cc Mon Feb 3 09:32:19 2014<br>
@@ -23,6 +23,7 @@<br>
#include "asan_thread.h"<br>
#include "sanitizer_common/sanitizer_atomic.h"<br>
#include "sanitizer_common/sanitizer_libc.h"<br>
+#include "sanitizer_common/sanitizer_mac.h"<br>
<br>
#include <crt_externs.h> // for _NSGetArgv<br>
#include <dlfcn.h> // for dladdr()<br>
@@ -53,43 +54,6 @@ void GetPcSpBp(void *context, uptr *pc,<br>
# endif // SANITIZER_WORDSIZE<br>
}<br>
<br>
-MacosVersion cached_macos_version = MACOS_VERSION_UNINITIALIZED;<br>
-<br>
-MacosVersion GetMacosVersionInternal() {<br>
- int mib[2] = { CTL_KERN, KERN_OSRELEASE };<br>
- char version[100];<br>
- uptr len = 0, maxlen = sizeof(version) / sizeof(version[0]);<br>
- for (uptr i = 0; i < maxlen; i++) version[i] = '\0';<br>
- // Get the version length.<br>
- CHECK_NE(sysctl(mib, 2, 0, &len, 0, 0), -1);<br>
- CHECK_LT(len, maxlen);<br>
- CHECK_NE(sysctl(mib, 2, version, &len, 0, 0), -1);<br>
- switch (version[0]) {<br>
- case '9': return MACOS_VERSION_LEOPARD;<br>
- case '1': {<br>
- switch (version[1]) {<br>
- case '0': return MACOS_VERSION_SNOW_LEOPARD;<br>
- case '1': return MACOS_VERSION_LION;<br>
- case '2': return MACOS_VERSION_MOUNTAIN_LION;<br>
- case '3': return MACOS_VERSION_MAVERICKS;<br>
- default: return MACOS_VERSION_UNKNOWN;<br>
- }<br>
- }<br>
- default: return MACOS_VERSION_UNKNOWN;<br>
- }<br>
-}<br>
-<br>
-MacosVersion GetMacosVersion() {<br>
- atomic_uint32_t *cache =<br>
- reinterpret_cast<atomic_uint32_t*>(&cached_macos_version);<br>
- MacosVersion result =<br>
- static_cast<MacosVersion>(atomic_load(cache, memory_order_acquire));<br>
- if (result == MACOS_VERSION_UNINITIALIZED) {<br>
- result = GetMacosVersionInternal();<br>
- atomic_store(cache, result, memory_order_release);<br>
- }<br>
- return result;<br>
-}<br>
<br>
bool PlatformHasDifferentMemcpyAndMemmove() {<br>
// On OS X 10.7 memcpy() and memmove() are both resolved<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_mac.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.h?rev=200700&r1=200699&r2=200700&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.h?rev=200700&r1=200699&r2=200700&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_mac.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_mac.h Mon Feb 3 09:32:19 2014<br>
@@ -36,22 +36,12 @@ typedef struct __CFRuntimeBase {<br>
#endif<br>
} CFRuntimeBase;<br>
<br>
-enum MacosVersion {<br>
- MACOS_VERSION_UNINITIALIZED = 0,<br>
- MACOS_VERSION_UNKNOWN,<br>
- MACOS_VERSION_LEOPARD,<br>
- MACOS_VERSION_SNOW_LEOPARD,<br>
- MACOS_VERSION_LION,<br>
- MACOS_VERSION_MOUNTAIN_LION,<br>
- MACOS_VERSION_MAVERICKS<br>
-};<br>
<br>
// Used by asan_malloc_mac.cc and asan_mac.cc<br>
extern "C" void __CFInitialize();<br>
<br>
namespace __asan {<br>
<br>
-MacosVersion GetMacosVersion();<br>
void MaybeReplaceCFAllocator();<br>
<br>
} // namespace __asan<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_malloc_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_mac.cc?rev=200700&r1=200699&r2=200700&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_mac.cc?rev=200700&r1=200699&r2=200700&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_malloc_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_malloc_mac.cc Mon Feb 3 09:32:19 2014<br>
@@ -28,6 +28,7 @@<br>
#include "asan_report.h"<br>
#include "asan_stack.h"<br>
#include "asan_stats.h"<br>
+#include "sanitizer_common/sanitizer_mac.h"<br>
<br>
// Similar code is used in Google Perftools,<br>
// <a href="http://code.google.com/p/google-perftools" target="_blank">http://code.google.com/p/google-perftools</a>.<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=200700&r1=200699&r2=200700&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=200700&r1=200699&r2=200700&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc Mon Feb 3 09:32:19 2014<br>
@@ -7,9 +7,8 @@<br>
//<br>
//===----------------------------------------------------------------------===//<br>
//<br>
-// This file is shared between AddressSanitizer and ThreadSanitizer<br>
-// run-time libraries and implements mac-specific functions from<br>
-// sanitizer_libc.h.<br>
+// This file is shared between various sanitizers' runtime libraries and<br>
+// implements OSX-specific functions.<br>
//===----------------------------------------------------------------------===//<br>
<br>
#include "sanitizer_platform.h"<br>
@@ -26,6 +25,7 @@<br>
#include "sanitizer_flags.h"<br>
#include "sanitizer_internal_defs.h"<br>
#include "sanitizer_libc.h"<br>
+#include "sanitizer_mac.h"<br>
#include "sanitizer_placement_new.h"<br>
#include "sanitizer_procmaps.h"<br>
<br>
@@ -37,6 +37,7 @@<br>
#include <sys/mman.h><br>
#include <sys/resource.h><br>
#include <sys/stat.h><br>
+#include <sys/sysctl.h><br>
#include <sys/types.h><br>
#include <unistd.h><br>
#include <libkern/OSAtomic.h><br>
@@ -249,6 +250,44 @@ bool IsDeadlySignal(int signum) {<br>
return (signum == SIGSEGV || signum == SIGBUS) && common_flags()->handle_segv;<br>
}<br>
<br>
+MacosVersion cached_macos_version = MACOS_VERSION_UNINITIALIZED;<br>
+<br>
+MacosVersion GetMacosVersionInternal() {<br>
+ int mib[2] = { CTL_KERN, KERN_OSRELEASE };<br>
+ char version[100];<br>
+ uptr len = 0, maxlen = sizeof(version) / sizeof(version[0]);<br>
+ for (uptr i = 0; i < maxlen; i++) version[i] = '\0';<br>
+ // Get the version length.<br>
+ CHECK_NE(sysctl(mib, 2, 0, &len, 0, 0), -1);<br>
+ CHECK_LT(len, maxlen);<br>
+ CHECK_NE(sysctl(mib, 2, version, &len, 0, 0), -1);<br>
+ switch (version[0]) {<br>
+ case '9': return MACOS_VERSION_LEOPARD;<br>
+ case '1': {<br>
+ switch (version[1]) {<br>
+ case '0': return MACOS_VERSION_SNOW_LEOPARD;<br>
+ case '1': return MACOS_VERSION_LION;<br>
+ case '2': return MACOS_VERSION_MOUNTAIN_LION;<br>
+ case '3': return MACOS_VERSION_MAVERICKS;<br>
+ default: return MACOS_VERSION_UNKNOWN;<br>
+ }<br>
+ }<br>
+ default: return MACOS_VERSION_UNKNOWN;<br>
+ }<br>
+}<br>
+<br>
+MacosVersion GetMacosVersion() {<br>
+ atomic_uint32_t *cache =<br>
+ reinterpret_cast<atomic_uint32_t*>(&cached_macos_version);<br>
+ MacosVersion result =<br>
+ static_cast<MacosVersion>(atomic_load(cache, memory_order_acquire));<br>
+ if (result == MACOS_VERSION_UNINITIALIZED) {<br>
+ result = GetMacosVersionInternal();<br>
+ atomic_store(cache, result, memory_order_release);<br>
+ }<br>
+ return result;<br>
+}<br>
+<br>
} // namespace __sanitizer<br>
<br>
#endif // SANITIZER_MAC<br>
<br>
Added: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.h?rev=200700&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.h?rev=200700&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.h (added)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.h Mon Feb 3 09:32:19 2014<br>
@@ -0,0 +1,32 @@<br>
+//===-- sanitizer_mac.h -----------------------------------------*- C++ -*-===//<br>
+//<br>
+// The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+//<br>
+// This file is shared between various sanitizers' runtime libraries and<br>
+// provides definitions for OSX-specific functions.<br>
+//===----------------------------------------------------------------------===//<br>
+#ifndef SANITIZER_MAC_H<br>
+#define SANITIZER_MAC_H<br></blockquote><div><br></div><div>Make this file empty on non-Mac platforms.</div><div>Add it to the list in compiler-rt/lib/sanitizer_common/CMakeLists.txt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
+namespace __sanitizer {<br>
+<br>
+enum MacosVersion {<br>
+ MACOS_VERSION_UNINITIALIZED = 0,<br>
+ MACOS_VERSION_UNKNOWN,<br>
+ MACOS_VERSION_LEOPARD,<br>
+ MACOS_VERSION_SNOW_LEOPARD,<br>
+ MACOS_VERSION_LION,<br>
+ MACOS_VERSION_MOUNTAIN_LION,<br>
+ MACOS_VERSION_MAVERICKS<br>
+};<br>
+<br>
+MacosVersion GetMacosVersion();<br>
+<br>
+} // namespace __sanitizer<br>
+<br>
+#endif // SANITIZER_MAC_H<br>
<br>
Propchange: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.h<br>
------------------------------------------------------------------------------<br>
svn:eol-style = LF<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>