<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Peter<div class=""><br class=""></div><div class="">This commit breaks darwin bot: <a href="http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_check/7056/testReport/junit/cfi/cfi/bad_signature_c/" class="">http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_check/7056/testReport/junit/cfi/cfi/bad_signature_c/</a></div><div class="">Can you investigate it?</div><div class=""><br class=""></div><div class="">Thanks</div><div class=""><br class=""></div><div class="">Steven</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Sep 9, 2015, at 7:18 PM, Peter Collingbourne via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Author: pcc<br class="">Date: Wed Sep  9 21:18:02 2015<br class="">New Revision: 247239<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=247239&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=247239&view=rev</a><br class="">Log:<br class="">CFI: Add diagnostic handler and tests for indirect call checker.<br class=""><br class="">Differential Revision: <a href="http://reviews.llvm.org/D11858" class="">http://reviews.llvm.org/D11858</a><br class=""><br class="">Added:<br class="">    compiler-rt/trunk/test/cfi/bad-signature.c<br class="">    compiler-rt/trunk/test/cfi/external-call.c<br class="">Modified:<br class="">    compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc<br class="">    compiler-rt/trunk/lib/ubsan/ubsan_handlers.h<br class="">    compiler-rt/trunk/test/cfi/lit.cfg<br class=""><br class="">Modified: compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc?rev=247239&r1=247238&r2=247239&view=diff" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc?rev=247239&r1=247238&r2=247239&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc (original)<br class="">+++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc Wed Sep  9 21:18:02 2015<br class="">@@ -473,4 +473,36 @@ void __ubsan::__ubsan_handle_nonnull_arg<br class="">   Die();<br class=""> }<br class=""><br class="">+static void handleCFIBadIcall(CFIBadIcallData *Data, ValueHandle Function,<br class="">+                              ReportOptions Opts) {<br class="">+  SourceLocation Loc = Data->Loc.acquire();<br class="">+  if (ignoreReport(Loc, Opts))<br class="">+    return;<br class="">+<br class="">+  ScopedReport R(Opts, Loc);<br class="">+<br class="">+  Diag(Loc, DL_Error, "control flow integrity check for type %0 failed during "<br class="">+                      "indirect function call")<br class="">+      << Data->Type;<br class="">+<br class="">+  SymbolizedStackHolder FLoc(getSymbolizedLocation(Function));<br class="">+  const char *FName = FLoc.get()->info.function;<br class="">+  if (!FName)<br class="">+    FName = "(unknown)";<br class="">+  Diag(FLoc, DL_Note, "%0 defined here") << FName;<br class="">+}<br class="">+<br class="">+void __ubsan::__ubsan_handle_cfi_bad_icall(CFIBadIcallData *Data,<br class="">+                                           ValueHandle Function) {<br class="">+  GET_REPORT_OPTIONS(false);<br class="">+  handleCFIBadIcall(Data, Function, Opts);<br class="">+}<br class="">+<br class="">+void __ubsan::__ubsan_handle_cfi_bad_icall_abort(CFIBadIcallData *Data,<br class="">+                                                 ValueHandle Function) {<br class="">+  GET_REPORT_OPTIONS(true);<br class="">+  handleCFIBadIcall(Data, Function, Opts);<br class="">+  Die();<br class="">+}<br class="">+<br class=""> #endif  // CAN_SANITIZE_UB<br class=""><br class="">Modified: compiler-rt/trunk/lib/ubsan/ubsan_handlers.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.h?rev=247239&r1=247238&r2=247239&view=diff" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.h?rev=247239&r1=247238&r2=247239&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/ubsan/ubsan_handlers.h (original)<br class="">+++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.h Wed Sep  9 21:18:02 2015<br class="">@@ -148,6 +148,14 @@ struct NonNullArgData {<br class=""> /// \brief Handle passing null pointer to function with nonnull attribute.<br class=""> RECOVERABLE(nonnull_arg, NonNullArgData *Data)<br class=""><br class="">+struct CFIBadIcallData {<br class="">+  SourceLocation Loc;<br class="">+  const TypeDescriptor &Type;<br class="">+};<br class="">+<br class="">+/// \brief Handle control flow integrity failure for indirect function calls.<br class="">+RECOVERABLE(cfi_bad_icall, CFIBadIcallData *Data, ValueHandle Function)<br class="">+<br class=""> }<br class=""><br class=""> #endif // UBSAN_HANDLERS_H<br class=""><br class="">Added: compiler-rt/trunk/test/cfi/bad-signature.c<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/cfi/bad-signature.c?rev=247239&view=auto" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/cfi/bad-signature.c?rev=247239&view=auto</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/test/cfi/bad-signature.c (added)<br class="">+++ compiler-rt/trunk/test/cfi/bad-signature.c Wed Sep  9 21:18:02 2015<br class="">@@ -0,0 +1,27 @@<br class="">+// RUN: %clangxx -o %t1 %s<br class="">+// RUN: %t1 2>&1 | FileCheck --check-prefix=NCFI %s<br class="">+<br class="">+// RUN: %clangxx_cfi -o %t2 %s<br class="">+// RUN: %expect_crash %t2 2>&1 | FileCheck --check-prefix=CFI %s<br class="">+<br class="">+// RUN: %clangxx_cfi_diag -g -o %t3 %s<br class="">+// RUN: %t3 2>&1 | FileCheck --check-prefix=CFI-DIAG %s<br class="">+<br class="">+#include <stdio.h><br class="">+<br class="">+void f() {<br class="">+}<br class="">+<br class="">+int main() {<br class="">+  // CFI: 1<br class="">+  // NCFI: 1<br class="">+  fprintf(stderr, "1\n");<br class="">+<br class="">+  // CFI-DIAG: runtime error: control flow integrity check for type 'void (int)' failed during indirect function call<br class="">+  // CFI-DIAG: f() defined here<br class="">+  ((void (*)(int))f)(42); // UB here<br class="">+<br class="">+  // CFI-NOT: 2<br class="">+  // NCFI: 2<br class="">+  fprintf(stderr, "2\n");<br class="">+}<br class=""><br class="">Added: compiler-rt/trunk/test/cfi/external-call.c<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/cfi/external-call.c?rev=247239&view=auto" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/cfi/external-call.c?rev=247239&view=auto</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/test/cfi/external-call.c (added)<br class="">+++ compiler-rt/trunk/test/cfi/external-call.c Wed Sep  9 21:18:02 2015<br class="">@@ -0,0 +1,23 @@<br class="">+// RUN: %clangxx_cfi -o %t1 %s<br class="">+// RUN: %t1 c 1 2>&1 | FileCheck --check-prefix=CFI %s<br class="">+// RUN: %t1 s 2 2>&1 | FileCheck --check-prefix=CFI %s<br class="">+<br class="">+#include <stdlib.h><br class="">+#include <stdio.h><br class="">+#include <math.h><br class="">+<br class="">+int main(int argc, char **argv) {<br class="">+  // CFI: 1<br class="">+  fprintf(stderr, "1\n");<br class="">+<br class="">+  double (*fn)(double);<br class="">+  if (argv[1][0] == 's')<br class="">+    fn = sin;<br class="">+  else<br class="">+    fn = cos;<br class="">+<br class="">+  fn(atof(argv[2]));<br class="">+<br class="">+  // CFI: 2<br class="">+  fprintf(stderr, "2\n");<br class="">+}<br class=""><br class="">Modified: compiler-rt/trunk/test/cfi/lit.cfg<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/cfi/lit.cfg?rev=247239&r1=247238&r2=247239&view=diff" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/cfi/lit.cfg?rev=247239&r1=247238&r2=247239&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/test/cfi/lit.cfg (original)<br class="">+++ compiler-rt/trunk/test/cfi/lit.cfg Wed Sep  9 21:18:02 2015<br class="">@@ -2,7 +2,7 @@ import lit.formats<br class=""> import os<br class=""><br class=""> config.name = 'cfi'<br class="">-config.suffixes = ['.cpp', '.test']<br class="">+config.suffixes = ['.c', '.cpp', '.test']<br class=""> config.test_source_root = os.path.dirname(__file__)<br class=""><br class=""> clangxx = ' '.join([config.clang] + config.cxx_mode_flags)<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></div></blockquote></div><br class=""></div></body></html>