<div dir="ltr">This change broke sanitizer-x86_64-linux: <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/17971/steps/ninja%20check-sanitizer/logs/stdio" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/17971/steps/ninja%20check-sanitizer/logs/stdio</a><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Dec 4, 2018 at 11:03 AM David Carlier via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: devnexen<br>
Date: Tue Dec  4 11:00:38 2018<br>
New Revision: 348293<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=348293&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=348293&view=rev</a><br>
Log:<br>
<br>
<br>
[Sanitizer] intercept part of sysctl Api<br>
<br>
- Distringuish what FreeBSD/NetBSD can and NetBSD specifics.<br>
- Fixing page size value collection.<br>
<br>
Reviewers: krytarowski, vitalybuka<br>
<br>
Reviewed By: krytarowski<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D55265" rel="noreferrer" target="_blank">https://reviews.llvm.org/D55265</a>  <br>
<br>
Added:<br>
    compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/sysctl.cc<br>
      - copied, changed from r348292, compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc<br>
Removed:<br>
    compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=348293&r1=348292&r2=348293&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=348293&r1=348292&r2=348293&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc Tue Dec  4 11:00:38 2018<br>
@@ -7568,36 +7568,6 @@ INTERCEPTOR(int, sysctlbyname, char *sna<br>
   return res;<br>
 }<br>
<br>
-INTERCEPTOR(int, sysctlgetmibinfo, char *sname, int *name,<br>
-            unsigned int *namelenp, char *cname, SIZE_T *csz, void **rnode,<br>
-            int v) {<br>
-  void *ctx;<br>
-  COMMON_INTERCEPTOR_ENTER(ctx, sysctlgetmibinfo, sname, name, namelenp, cname,<br>
-                           csz, rnode, v);<br>
-  if (sname)<br>
-    COMMON_INTERCEPTOR_READ_RANGE(ctx, sname, REAL(strlen)(sname) + 1);<br>
-  if (namelenp)<br>
-    COMMON_INTERCEPTOR_READ_RANGE(ctx, namelenp, sizeof(*namelenp));<br>
-  if (csz)<br>
-    COMMON_INTERCEPTOR_READ_RANGE(ctx, csz, sizeof(*csz));<br>
-  // Skip rnode, it's rarely used and not trivial to sanitize<br>
-  // It's also used mostly internally<br>
-  int res = REAL(sysctlgetmibinfo)(sname, name, namelenp, cname, csz, rnode, v);<br>
-  if (!res) {<br>
-    if (namelenp) {<br>
-      COMMON_INTERCEPTOR_WRITE_RANGE(ctx, namelenp, sizeof(*namelenp));<br>
-      if (name)<br>
-        COMMON_INTERCEPTOR_WRITE_RANGE(ctx, name, *namelenp * sizeof(*name));<br>
-    }<br>
-    if (csz) {<br>
-      COMMON_INTERCEPTOR_WRITE_RANGE(ctx, csz, sizeof(*csz));<br>
-      if (cname)<br>
-        COMMON_INTERCEPTOR_WRITE_RANGE(ctx, cname, *csz);<br>
-    }<br>
-  }<br>
-  return res;<br>
-}<br>
-<br>
 INTERCEPTOR(int, sysctlnametomib, const char *sname, int *name,<br>
             SIZE_T *namelenp) {<br>
   void *ctx;<br>
@@ -7617,6 +7587,15 @@ INTERCEPTOR(int, sysctlnametomib, const<br>
   return res;<br>
 }<br>
<br>
+#define INIT_SYSCTL                        \<br>
+  COMMON_INTERCEPT_FUNCTION(sysctl);       \<br>
+  COMMON_INTERCEPT_FUNCTION(sysctlbyname); \<br>
+  COMMON_INTERCEPT_FUNCTION(sysctlnametomib);<br>
+#else<br>
+#define INIT_SYSCTL<br>
+#endif<br>
+<br>
+#if SANITIZER_INTERCEPT_ASYSCTL<br>
 INTERCEPTOR(void *, asysctl, const int *name, SIZE_T namelen, SIZE_T *len) {<br>
   void *ctx;<br>
   COMMON_INTERCEPTOR_ENTER(ctx, asysctl, name, namelen, len);<br>
@@ -7642,17 +7621,50 @@ INTERCEPTOR(void *, asysctlbyname, const<br>
   }<br>
   return res;<br>
 }<br>
-#define INIT_SYSCTL                                                            \<br>
-  COMMON_INTERCEPT_FUNCTION(sysctl);                                           \<br>
-  COMMON_INTERCEPT_FUNCTION(sysctlbyname);                                     \<br>
-  COMMON_INTERCEPT_FUNCTION(sysctlgetmibinfo);                                 \<br>
-  COMMON_INTERCEPT_FUNCTION(sysctlnametomib);                                  \<br>
-  COMMON_INTERCEPT_FUNCTION(asysctl);                                          \<br>
+#define INIT_ASYSCTL                           \<br>
+  COMMON_INTERCEPT_FUNCTION(asysctl);          \<br>
   COMMON_INTERCEPT_FUNCTION(asysctlbyname);<br>
 #else<br>
-#define INIT_SYSCTL<br>
+#define INIT_ASYSCTL<br>
+#endif<br>
+<br>
+#if SANITIZER_INTERCEPT_SYSCTLGETMIBINFO<br>
+INTERCEPTOR(int, sysctlgetmibinfo, char *sname, int *name,<br>
+            unsigned int *namelenp, char *cname, SIZE_T *csz, void **rnode,<br>
+            int v) {<br>
+  void *ctx;<br>
+  COMMON_INTERCEPTOR_ENTER(ctx, sysctlgetmibinfo, sname, name, namelenp, cname,<br>
+                           csz, rnode, v);<br>
+  if (sname)<br>
+    COMMON_INTERCEPTOR_READ_RANGE(ctx, sname, REAL(strlen)(sname) + 1);<br>
+  if (namelenp)<br>
+    COMMON_INTERCEPTOR_READ_RANGE(ctx, namelenp, sizeof(*namelenp));<br>
+  if (csz)<br>
+    COMMON_INTERCEPTOR_READ_RANGE(ctx, csz, sizeof(*csz));<br>
+  // Skip rnode, it's rarely used and not trivial to sanitize<br>
+  // It's also used mostly internally<br>
+  int res = REAL(sysctlgetmibinfo)(sname, name, namelenp, cname, csz, rnode, v);<br>
+  if (!res) {<br>
+    if (namelenp) {<br>
+      COMMON_INTERCEPTOR_WRITE_RANGE(ctx, namelenp, sizeof(*namelenp));<br>
+      if (name)<br>
+        COMMON_INTERCEPTOR_WRITE_RANGE(ctx, name, *namelenp * sizeof(*name));<br>
+    }<br>
+    if (csz) {<br>
+      COMMON_INTERCEPTOR_WRITE_RANGE(ctx, csz, sizeof(*csz));<br>
+      if (cname)<br>
+        COMMON_INTERCEPTOR_WRITE_RANGE(ctx, cname, *csz);<br>
+    }<br>
+  }<br>
+  return res;<br>
+}<br>
+#define INIT_SYSCTLGETMIBINFO                  \<br>
+  COMMON_INTERCEPT_FUNCTION(sysctlgetmibinfo);<br>
+#else<br>
+#define INIT_SYSCTLGETMIBINFO<br>
 #endif<br>
<br>
+<br>
 static void InitializeCommonInterceptors() {<br>
   static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1];<br>
   interceptor_metadata_map = new((void *)&metadata_mem) MetadataHashMap();<br>
@@ -7913,6 +7925,8 @@ static void InitializeCommonInterceptors<br>
   INIT_REGEX;<br>
   INIT_FTS;<br>
   INIT_SYSCTL;<br>
+  INIT_ASYSCTL;<br>
+  INIT_SYSCTLGETMIBINFO;<br>
<br>
   INIT___PRINTF_CHK;<br>
 }<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=348293&r1=348292&r2=348293&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=348293&r1=348292&r2=348293&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Tue Dec  4 11:00:38 2018<br>
@@ -772,7 +772,7 @@ int internal_sysctl(const int *name, uns<br>
   return sysctl(name, namelen, oldp, (size_t *)oldlenp, (void *)newp,<br>
                 (size_t)newlen);<br>
 #else<br>
-  return sysctl(name, namelen, oldp, (size_t *)oldlenp, newp, (size_t)newlen);<br>
+  return internal_syscall(SYSCALL(__sysctl), name, namelen, oldp, (size_t *)oldlenp, newp, (size_t)newlen);<br>
 #endif<br>
 }<br>
<br>
@@ -1076,6 +1076,14 @@ uptr GetPageSize() {<br>
   return EXEC_PAGESIZE;<br>
 #elif SANITIZER_USE_GETAUXVAL<br>
   return getauxval(AT_PAGESZ);<br>
+#elif SANITIZER_FREEBSD || SANITIZER_NETBSD<br>
+// Use sysctl as sysconf can trigger interceptors internally.<br>
+  int pz = 0;<br>
+  uptr pzl = sizeof(pz);<br>
+  int mib[2] = {CTL_HW, HW_PAGESIZE};<br>
+  int rv = internal_sysctl(mib, 2, &pz, &pzl, nullptr, 0);<br>
+  CHECK_EQ(rv, 0);<br>
+  return (uptr)pz;<br>
 #else<br>
   return sysconf(_SC_PAGESIZE);  // EXEC_PAGESIZE may not be trustworthy.<br>
 #endif<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h?rev=348293&r1=348292&r2=348293&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h?rev=348293&r1=348292&r2=348293&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h Tue Dec  4 11:00:38 2018<br>
@@ -523,6 +523,8 @@<br>
 #define SANITIZER_INTERCEPT_GETVFSSTAT SI_NETBSD<br>
 #define SANITIZER_INTERCEPT_REGEX SI_NETBSD<br>
 #define SANITIZER_INTERCEPT_FTS SI_NETBSD<br>
-#define SANITIZER_INTERCEPT_SYSCTL SI_NETBSD<br>
+#define SANITIZER_INTERCEPT_SYSCTL (SI_NETBSD || SI_FREEBSD)<br>
+#define SANITIZER_INTERCEPT_ASYSCTL SI_NETBSD<br>
+#define SANITIZER_INTERCEPT_SYSCTLGETMIBINFO SI_NETBSD<br>
<br>
 #endif  // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H<br>
<br>
Removed: compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc?rev=348292&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc?rev=348292&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc (original)<br>
+++ compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc (removed)<br>
@@ -1,101 +0,0 @@<br>
-// RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s<br>
-<br>
-#include <sys/param.h><br>
-#include <sys/types.h><br>
-<br>
-#include <sys/sysctl.h><br>
-<br>
-#include <assert.h><br>
-#include <stdio.h><br>
-#include <stdlib.h><br>
-<br>
-void test_sysctl() {<br>
-  char buf[100];<br>
-  size_t len = sizeof(buf);<br>
-  int mib[] = {CTL_KERN, KERN_OSTYPE};<br>
-  int rv = sysctl(mib, __arraycount(mib), buf, &len, NULL, 0);<br>
-  assert(!rv);<br>
-<br>
-  printf("sysctl: '%s' size: '%zu'\n", buf, len);<br>
-}<br>
-<br>
-void test_sysctlbyname() {<br>
-  char buf[100];<br>
-  size_t len = sizeof(buf);<br>
-  int mib[] = {CTL_KERN, KERN_OSTYPE};<br>
-  int rv = sysctlbyname("kern.ostype", buf, &len, NULL, 0);<br>
-  assert(!rv);<br>
-<br>
-  printf("sysctlbyname: '%s' size: '%zu'\n", buf, len);<br>
-}<br>
-<br>
-void test_sysctlgetmibinfo() {<br>
-  int mib[CTL_MAXNAME];<br>
-  unsigned int mib_len = __arraycount(mib);<br>
-  int rv = sysctlgetmibinfo("kern.ostype", &mib[0], &mib_len, NULL, NULL, NULL,<br>
-                       SYSCTL_VERSION);<br>
-  assert(!rv);<br>
-<br>
-  char buf[100];<br>
-  size_t len = sizeof(buf);<br>
-  rv = sysctl(mib, mib_len, buf, &len, NULL, 0);<br>
-  assert(!rv);<br>
-<br>
-  printf("sysctlgetmibinfo: '%s' size: '%zu'\n", buf, len);<br>
-}<br>
-<br>
-void test_sysctlnametomib() {<br>
-  int mib[CTL_MAXNAME];<br>
-  size_t mib_len = __arraycount(mib);<br>
-  int rv = sysctlnametomib("kern.ostype", &mib[0], &mib_len);<br>
-  assert(!rv);<br>
-<br>
-  char buf[100];<br>
-  size_t len = sizeof(buf);<br>
-  rv = sysctl(mib, mib_len, buf, &len, NULL, 0);<br>
-  assert(!rv);<br>
-<br>
-  printf("sysctlnametomib: '%s' size: '%zu'\n", buf, len);<br>
-}<br>
-<br>
-void test_asysctl() {<br>
-  int mib[] = {CTL_KERN, KERN_OSTYPE};<br>
-  size_t len;<br>
-  char *buf = (char *)asysctl(mib, __arraycount(mib), &len);<br>
-  assert(buf);<br>
-<br>
-  printf("asysctl: '%s' size: '%zu'\n", buf, len);<br>
-<br>
-  free(buf);<br>
-}<br>
-<br>
-void test_asysctlbyname() {<br>
-  size_t len;<br>
-  char *buf = (char *)asysctlbyname("kern.ostype", &len);<br>
-  assert(buf);<br>
-<br>
-  printf("asysctlbyname: '%s' size: '%zu'\n", buf, len);<br>
-<br>
-  free(buf);<br>
-}<br>
-<br>
-int main(void) {<br>
-  printf("sysctl\n");<br>
-<br>
-  test_sysctl();<br>
-  test_sysctlbyname();<br>
-  test_sysctlgetmibinfo();<br>
-  test_sysctlnametomib();<br>
-  test_asysctl();<br>
-  test_asysctlbyname();<br>
-<br>
-  // CHECK: sysctl<br>
-  // CHECK: sysctl: '{{.*}}' size: '{{.*}}'<br>
-  // CHECK: sysctlbyname: '{{.*}}' size: '{{.*}}'<br>
-  // CHECK: sysctlgetmibinfo: '{{.*}}' size: '{{.*}}'<br>
-  // CHECK: sysctlnametomib: '{{.*}}' size: '{{.*}}'<br>
-  // CHECK: asysctl: '{{.*}}' size: '{{.*}}'<br>
-  // CHECK: asysctlbyname: '{{.*}}' size: '{{.*}}'<br>
-<br>
-  return 0;<br>
-}<br>
<br>
Copied: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/sysctl.cc (from r348292, compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc)<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/sysctl.cc?p2=compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/sysctl.cc&p1=compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc&r1=348292&r2=348293&rev=348293&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/sysctl.cc?p2=compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/sysctl.cc&p1=compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc&r1=348292&r2=348293&rev=348293&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/sanitizer_common/TestCases/NetBSD/sysctl.cc (original)<br>
+++ compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/sysctl.cc Tue Dec  4 11:00:38 2018<br>
@@ -1,4 +1,6 @@<br>
 // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s<br>
+//<br>
+// UNSUPPORTED: linux darwin solaris<br>
<br>
 #include <sys/param.h><br>
 #include <sys/types.h><br>
@@ -9,6 +11,10 @@<br>
 #include <stdio.h><br>
 #include <stdlib.h><br>
<br>
+#ifndef __arraycount<br>
+#define __arraycount(a) (sizeof(a) / sizeof(a[0]))<br>
+#endif<br>
+<br>
 void test_sysctl() {<br>
   char buf[100];<br>
   size_t len = sizeof(buf);<br>
@@ -22,28 +28,12 @@ void test_sysctl() {<br>
 void test_sysctlbyname() {<br>
   char buf[100];<br>
   size_t len = sizeof(buf);<br>
-  int mib[] = {CTL_KERN, KERN_OSTYPE};<br>
   int rv = sysctlbyname("kern.ostype", buf, &len, NULL, 0);<br>
   assert(!rv);<br>
<br>
   printf("sysctlbyname: '%s' size: '%zu'\n", buf, len);<br>
 }<br>
<br>
-void test_sysctlgetmibinfo() {<br>
-  int mib[CTL_MAXNAME];<br>
-  unsigned int mib_len = __arraycount(mib);<br>
-  int rv = sysctlgetmibinfo("kern.ostype", &mib[0], &mib_len, NULL, NULL, NULL,<br>
-                       SYSCTL_VERSION);<br>
-  assert(!rv);<br>
-<br>
-  char buf[100];<br>
-  size_t len = sizeof(buf);<br>
-  rv = sysctl(mib, mib_len, buf, &len, NULL, 0);<br>
-  assert(!rv);<br>
-<br>
-  printf("sysctlgetmibinfo: '%s' size: '%zu'\n", buf, len);<br>
-}<br>
-<br>
 void test_sysctlnametomib() {<br>
   int mib[CTL_MAXNAME];<br>
   size_t mib_len = __arraycount(mib);<br>
@@ -58,6 +48,7 @@ void test_sysctlnametomib() {<br>
   printf("sysctlnametomib: '%s' size: '%zu'\n", buf, len);<br>
 }<br>
<br>
+#if defined(__NetBSD__)<br>
 void test_asysctl() {<br>
   int mib[] = {CTL_KERN, KERN_OSTYPE};<br>
   size_t len;<br>
@@ -79,23 +70,43 @@ void test_asysctlbyname() {<br>
   free(buf);<br>
 }<br>
<br>
+void test_sysctlgetmibinfo() {<br>
+  int mib[CTL_MAXNAME];<br>
+  unsigned int mib_len = __arraycount(mib);<br>
+  int rv = sysctlgetmibinfo("kern.ostype", &mib[0], &mib_len, NULL, NULL, NULL,<br>
+                       SYSCTL_VERSION);<br>
+  assert(!rv);<br>
+<br>
+  char buf[100];<br>
+  size_t len = sizeof(buf);<br>
+  rv = sysctl(mib, mib_len, buf, &len, NULL, 0);<br>
+  assert(!rv);<br>
+<br>
+  printf("sysctlgetmibinfo: '%s' size: '%zu'\n", buf, len);<br>
+}<br>
+#endif<br>
+<br>
 int main(void) {<br>
   printf("sysctl\n");<br>
<br>
   test_sysctl();<br>
   test_sysctlbyname();<br>
-  test_sysctlgetmibinfo();<br>
   test_sysctlnametomib();<br>
+#if defined(__NetBSD__)<br>
   test_asysctl();<br>
   test_asysctlbyname();<br>
+  test_sysctlgetmibinfo();<br>
+#endif<br>
<br>
   // CHECK: sysctl<br>
   // CHECK: sysctl: '{{.*}}' size: '{{.*}}'<br>
   // CHECK: sysctlbyname: '{{.*}}' size: '{{.*}}'<br>
-  // CHECK: sysctlgetmibinfo: '{{.*}}' size: '{{.*}}'<br>
   // CHECK: sysctlnametomib: '{{.*}}' size: '{{.*}}'<br>
+#if defined(__NetBSD__)<br>
   // CHECK: asysctl: '{{.*}}' size: '{{.*}}'<br>
   // CHECK: asysctlbyname: '{{.*}}' size: '{{.*}}'<br>
+  // CHECK: sysctlgetmibinfo: '{{.*}}' size: '{{.*}}'<br>
+#endif<br>
<br>
   return 0;<br>
 }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>