<div dir="ltr">I just noticed that you had already committed a fix at this point and I missed it, sorry about the false alarm.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Dec 4, 2018 at 1:17 PM Vlad Tsyrklevich <<a href="mailto:vlad@tsyrklevich.net">vlad@tsyrklevich.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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></div><div dir="ltr"><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></blockquote></div>