Skip to content

[ctxprof] don't inline weak symbols after instrumentation #128811

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

mtrofin
Copy link
Member

@mtrofin mtrofin commented Feb 26, 2025

Contextual profiling identifies functions by GUID. Functions that may get overridden by the linker with a prevailing copy may have, during instrumentation, different variants in different modules. If these variants get inlined before linking (here I assume thinlto), they will identify themselves to the ctxprof runtime as their GUID, leading to issues - they may have different counter counts, for instance.

If we block their inlining in the pre-thinlink compilation, only the prevailing copy will survive post-thinlink and the confusion is avoided.

The change introduces a small pass just for this purpose, which marks any symbols that could be affected by the above as noinline (even if they were alwaysinline). We already carried out some inlining (via the preinliner), before instrumenting, so technically the alwaysinline directives were honored.

We could later (different patch) choose to mark them back to their original attribute (none or alwaysinline) post-thinlink, if we want to - but experimentally that doesn't really change much of the performance of the instrumented binary.

Copy link
Member Author

mtrofin commented Feb 26, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

Copy link

github-actions bot commented Feb 26, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

@mtrofin mtrofin force-pushed the users/mtrofin/02-25-_ctxprof_don_t_inline_weak_symbols_after_instrumentation branch 2 times, most recently from 20b7123 to eda0f33 Compare February 26, 2025 04:05
@mtrofin mtrofin marked this pull request as ready for review February 26, 2025 04:06
@llvmbot llvmbot added PGO Profile Guided Optimizations llvm:ir llvm:transforms labels Feb 26, 2025
@llvmbot
Copy link
Member

llvmbot commented Feb 26, 2025

@llvm/pr-subscribers-llvm-ir
@llvm/pr-subscribers-pgo

@llvm/pr-subscribers-llvm-transforms

Author: Mircea Trofin (mtrofin)

Changes

Contextual profiling identifies functions by GUID. Functions that may get overridden by the linker with a prevailing copy may have, during instrumentation, different variants in different modules. If these variants get inlined before linking (here I assume thinlto), they will identify themselves to the ctxprof runtime as their GUID, leading to issues - they may have different counter counts, for instance.

If we block their inlining in the pre-thinlink compilation, only the prevailing copy will survive post-thinlink and the confusion is avoided.

The change introduces a small pass just for this purpose, which marks any symbols that could be affected by the above as noinline (even if they were alwaysinline). We already carried out some inlining (via the preinliner), before instrumenting, so technically the alwaysinline directives were honored.

We could later (different patch) choose to mark them back to their original attribute (none or alwaysinline) post-thinlink, if we want to - but experimentally that doesn't really change much of the performance of the instrumented binary.


Full diff: https://github.com/llvm/llvm-project/pull/128811.diff

6 Files Affected:

  • (modified) llvm/include/llvm/IR/GlobalValue.h (+7)
  • (modified) llvm/include/llvm/Transforms/Instrumentation/PGOCtxProfLowering.h (+15)
  • (modified) llvm/lib/Passes/PassBuilderPipelines.cpp (+7)
  • (modified) llvm/lib/Passes/PassRegistry.def (+1)
  • (modified) llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp (+20)
  • (added) llvm/test/Transforms/PGOProfile/ctx-instrumentation-block-inline.ll (+25)
diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h
index 2176e2c2cfbfc..c1d3cee636981 100644
--- a/llvm/include/llvm/IR/GlobalValue.h
+++ b/llvm/include/llvm/IR/GlobalValue.h
@@ -550,6 +550,13 @@ class GlobalValue : public Constant {
     return isDiscardableIfUnused(getLinkage());
   }
 
+  // the symbol in this module may be replaced by a prevailing copy.
+  bool mayBeReplacedByPrevailingCopy() const {
+    return getLinkage() != GlobalValue::ExternalLinkage &&
+           getLinkage() != GlobalValue::InternalLinkage &&
+           getLinkage() != GlobalValue::PrivateLinkage;
+  }
+
   bool isWeakForLinker() const { return isWeakForLinker(getLinkage()); }
 
 protected:
diff --git a/llvm/include/llvm/Transforms/Instrumentation/PGOCtxProfLowering.h b/llvm/include/llvm/Transforms/Instrumentation/PGOCtxProfLowering.h
index f127d16b8de12..8010c1c091e40 100644
--- a/llvm/include/llvm/Transforms/Instrumentation/PGOCtxProfLowering.h
+++ b/llvm/include/llvm/Transforms/Instrumentation/PGOCtxProfLowering.h
@@ -24,5 +24,20 @@ class PGOCtxProfLoweringPass : public PassInfoMixin<PGOCtxProfLoweringPass> {
 
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
 };
+
+// Utility pass blocking inlining for any function that may be overridden during
+// linking by a prevailing copy.
+// This avoids confusingly collecting profiles for the same GUID corresponding
+// to different variants of the function. We could do like PGO and identify
+// functions by a (GUID, Hash) tuple, but since the ctxprof "use" waits for
+// thinlto to happen before performing any further optimizations, it's
+// unnecessary to collect profiles for non-prevailing copies.
+class NoinlineNonPrevailing : public PassInfoMixin<NoinlineNonPrevailing> {
+public:
+  explicit NoinlineNonPrevailing() = default;
+
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
 } // namespace llvm
 #endif
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp
index 6ca2f90aa0668..f0541dbfe3597 100644
--- a/llvm/lib/Passes/PassBuilderPipelines.cpp
+++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -1249,6 +1249,13 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
     MPM.addPass(AssignGUIDPass());
     if (IsCtxProfUse)
       return MPM;
+    // Block further inlining in the instrumented ctxprof case. This avoids
+    // confusingly collecting profiles for the same GUID corresponding to
+    // different variants of the function. We could do like PGO and identify
+    // functions by a (GUID, Hash) tuple, but since the ctxprof "use" waits for
+    // thinlto to happen before performing any further optimizations, it's
+    // unnecessary to collect profiles for non-prevailing copies.
+    MPM.addPass(NoinlineNonPrevailing());
     addPostPGOLoopRotation(MPM, Level);
     MPM.addPass(PGOCtxProfLoweringPass());
   } else if (IsColdFuncOnlyInstrGen) {
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index a664d6fd7085f..bfd952df25e98 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -62,6 +62,7 @@ MODULE_PASS("cross-dso-cfi", CrossDSOCFIPass())
 MODULE_PASS("ctx-instr-gen",
             PGOInstrumentationGen(PGOInstrumentationType::CTXPROF))
 MODULE_PASS("ctx-prof-flatten", PGOCtxProfFlatteningPass())
+MODULE_PASS("noinline-nonprevailing", NoinlineNonPrevailing())
 MODULE_PASS("deadargelim", DeadArgumentEliminationPass())
 MODULE_PASS("debugify", NewPMDebugifyPass())
 MODULE_PASS("dfsan", DataFlowSanitizerPass())
diff --git a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
index e7b7c26c493e5..19d899b08150e 100644
--- a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
+++ b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
@@ -351,3 +351,23 @@ bool CtxInstrumentationLowerer::lowerFunction(Function &F) {
         F.getName());
   return true;
 }
+
+PreservedAnalyses NoinlineNonPrevailing::run(Module &M,
+                                             ModuleAnalysisManager &MAM) {
+  bool Changed = false;
+  for (auto &F : M) {
+    if (F.isDeclaration())
+      continue;
+    if (F.hasFnAttribute(Attribute::NoInline))
+      continue;
+    if (F.mayBeReplacedByPrevailingCopy()) {
+      F.addFnAttr(Attribute::NoInline);
+      if (F.hasFnAttribute(Attribute::AlwaysInline))
+        F.removeFnAttr(Attribute::AlwaysInline);
+      Changed = true;
+    }
+  }
+  if (Changed)
+    return PreservedAnalyses::none();
+  return PreservedAnalyses::all();
+}
diff --git a/llvm/test/Transforms/PGOProfile/ctx-instrumentation-block-inline.ll b/llvm/test/Transforms/PGOProfile/ctx-instrumentation-block-inline.ll
new file mode 100644
index 0000000000000..b455f327bf5a6
--- /dev/null
+++ b/llvm/test/Transforms/PGOProfile/ctx-instrumentation-block-inline.ll
@@ -0,0 +1,25 @@
+; RUN: opt -passes=noinline-nonprevailing -S < %s 2>&1 | FileCheck %s
+
+define void @a() {
+  ret void
+}
+
+define void @b() #0 {
+  ret void
+}
+
+define weak_odr void @c() {
+  ret void
+}
+
+define weak_odr void @d() #0{
+  ret void
+}
+
+attributes #0 = { alwaysinline }
+
+; CHECK: void @a() {
+; CHECK: void @b() #0
+; CHECK: void @c() #1
+; CHECK: void @d() #1
+; CHECK: attributes #1 = { noinline }

Copy link
Contributor

@teresajohnson teresajohnson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the performance hit for instrumentation as this seems like it could block a lot of linkonce_odr inlining of common functions in headers?

Copy link
Member Author

mtrofin commented Feb 26, 2025

It doesn't appear to take a hit. Not completely surprising: we already do some inlining before instrumentation.

If we ever want to avoid taking any hit, we can subsequently add some metadata to each such function capturing the original (if any) inline attribute; go through thinlto; then restore the original attribute from metadata after function import and let the backend inliner do its job (which, at this point, would be only working with prevailing copies)

@teresajohnson
Copy link
Contributor

If we ever want to avoid taking any hit, we can subsequently add some metadata to each such function capturing the original (if any) inline attribute; go through thinlto; then restore the original attribute from metadata after function import and let the backend inliner do its job (which, at this point, would be only working with prevailing copies)

The last part isn't quite true - non-prevailing linkonce_odr are converted to available_externally and kept around long enough to allow them to be inlined.

@mtrofin mtrofin force-pushed the users/mtrofin/02-25-_ctxprof_don_t_inline_weak_symbols_after_instrumentation branch from eda0f33 to 053d62c Compare February 26, 2025 15:35
Copy link
Member Author

mtrofin commented Feb 26, 2025

(from offline chat) indeed, we may need to do something more nuanced if we want to re-open inline-ability in the post-thinlink step for the instrumented build - but TBD if/when.

Copy link
Contributor

@teresajohnson teresajohnson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm with a minor suggestion below

@mtrofin mtrofin force-pushed the users/mtrofin/02-25-_ctxprof_don_t_inline_weak_symbols_after_instrumentation branch from 053d62c to 19d5ade Compare February 26, 2025 18:50
@mtrofin mtrofin merged commit f6703a4 into main Feb 26, 2025
6 of 9 checks passed
@mtrofin mtrofin deleted the users/mtrofin/02-25-_ctxprof_don_t_inline_weak_symbols_after_instrumentation branch February 26, 2025 19:01
@llvm-ci
Copy link
Collaborator

llvm-ci commented Feb 26, 2025

LLVM Buildbot has detected a new failure on builder sanitizer-x86_64-linux-fuzzer running on sanitizer-buildbot6 while building llvm at step 2 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/32/builds/13630

Here is the relevant piece of the build log for the reference
Step 2 (annotate) failure: 'python ../sanitizer_buildbot/sanitizers/zorg/buildbot/builders/sanitizers/buildbot_selector.py' (failure) (timed out)
...
SUMMARY: libFuzzer: deadly signal
MS: 5 EraseBytes-ChangeBinInt-EraseBytes-ChangeByte-ChangeByte-; base unit: 4387e5ad3199d73a55d5b24a363c95b18fd9b328
0xfa,0x91,0xbe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb9,0xf9,0xb9,0x7f,0x59,0xcb,0x1,0x0,0xff,0xff,0xff,0xff,
\372\221\276\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\271\371\271\177Y\313\001\000\377\377\377\377
artifact_prefix='CORPUS-openssl-1.0.2d-fsanitize_fuzzer/'; Test unit written to CORPUS-openssl-1.0.2d-fsanitize_fuzzer/crash-93c84520f831187776938cd6c879a967be392325
Base64: +pG+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAufm5f1nLAQD/////
+ grep 'Assertion `strcmp(openssl_results.exptmod, gcrypt_results.exptmod)==0. failed.' fuzz-0.log
openssl-1.0.2d-fsanitize_fuzzer: /home/b/sanitizer-x86_64-linux-fuzzer/build/fuzzer-test-suite/openssl-1.0.2d/target.cc:145: int LLVMFuzzerTestOneInput(const unsigned char *, size_t): Assertion `strcmp(openssl_results.exptmod, gcrypt_results.exptmod)==0' failed.
+ '[' -e openssl-1.0.2d-fsanitize_fuzzer ']'
+ ./openssl-1.0.2d-fsanitize_fuzzer /home/b/sanitizer-x86_64-linux-fuzzer/build/fuzzer-test-suite/openssl-1.0.2d/crash-12ae1af0c82252420b5f780bc9ed48d3ba05109e -minimize_crash=1 -runs=1000000
command timed out: 1200 seconds without output running [b'python', b'../sanitizer_buildbot/sanitizers/zorg/buildbot/builders/sanitizers/buildbot_selector.py'], attempting to kill
process killed by signal 9
program finished with exit code -1
elapsedTime=1609.031169
Step 15 (test openssl-1.0.2d fuzzer) failure: test openssl-1.0.2d fuzzer (failure)
...
#131072	pulse  cov: 713 ft: 3359 corp: 919/30Kb lim: 142 exec/s: 6553 rss: 619Mb
#131102	NEW    cov: 717 ft: 3380 corp: 920/30Kb lim: 142 exec/s: 6555 rss: 619Mb L: 140/141 MS: 4 CMP-ChangeASCIIInt-InsertByte-InsertByte- DE: "9\002\000\000\000\000\000\000"-
#131414	REDUCE cov: 717 ft: 3380 corp: 920/30Kb lim: 142 exec/s: 6570 rss: 619Mb L: 26/141 MS: 2 ShuffleBytes-EraseBytes-
#131720	NEW    cov: 718 ft: 3385 corp: 921/30Kb lim: 142 exec/s: 6586 rss: 619Mb L: 141/141 MS: 1 CrossOver-
#132348	NEW    cov: 718 ft: 3401 corp: 922/31Kb lim: 142 exec/s: 6617 rss: 619Mb L: 142/142 MS: 3 ChangeBinInt-InsertByte-CrossOver-
#132442	REDUCE cov: 718 ft: 3401 corp: 922/31Kb lim: 142 exec/s: 6622 rss: 619Mb L: 5/142 MS: 4 ChangeByte-ShuffleBytes-ChangeBit-EraseBytes-
#132787	NEW    cov: 718 ft: 3419 corp: 923/31Kb lim: 142 exec/s: 6639 rss: 619Mb L: 141/142 MS: 5 InsertByte-ChangeBinInt-CopyPart-ChangeASCIIInt-InsertRepeatedBytes-
#133319	NEW    cov: 718 ft: 3421 corp: 924/31Kb lim: 142 exec/s: 6665 rss: 619Mb L: 142/142 MS: 2 ShuffleBytes-InsertByte-
#134232	NEW    cov: 718 ft: 3433 corp: 925/31Kb lim: 149 exec/s: 6711 rss: 619Mb L: 142/142 MS: 3 ChangeBinInt-InsertByte-InsertRepeatedBytes-
#134386	NEW    cov: 718 ft: 3434 corp: 926/31Kb lim: 149 exec/s: 6719 rss: 619Mb L: 137/142 MS: 4 InsertRepeatedBytes-ShuffleBytes-ChangeByte-InsertByte-
#134488	REDUCE cov: 718 ft: 3434 corp: 926/31Kb lim: 149 exec/s: 6724 rss: 619Mb L: 5/142 MS: 2 EraseBytes-ChangeBinInt-
openssl-1.0.2d-fsanitize_fuzzer: /home/b/sanitizer-x86_64-linux-fuzzer/build/fuzzer-test-suite/openssl-1.0.2d/target.cc:145: int LLVMFuzzerTestOneInput(const unsigned char *, size_t): Assertion `strcmp(openssl_results.exptmod, gcrypt_results.exptmod)==0' failed.
==3558849== ERROR: libFuzzer: deadly signal
    #0 0x62c182b99351 in __sanitizer_print_stack_trace /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/asan/asan_stack.cpp:87:3
    #1 0x62c182a8a338 in fuzzer::PrintStackTrace() /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerUtil.cpp:210:5
    #2 0x62c182a6cee3 in fuzzer::Fuzzer::CrashCallback() /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:231:3
    #3 0x7e408b24524f  (/lib/x86_64-linux-gnu/libc.so.6+0x4524f) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #4 0x7e408b2a3f1b in pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0xa3f1b) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #5 0x7e408b24519d in raise (/lib/x86_64-linux-gnu/libc.so.6+0x4519d) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #6 0x7e408b228901 in abort (/lib/x86_64-linux-gnu/libc.so.6+0x28901) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #7 0x7e408b22881d  (/lib/x86_64-linux-gnu/libc.so.6+0x2881d) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #8 0x7e408b23b7c6 in __assert_fail (/lib/x86_64-linux-gnu/libc.so.6+0x3b7c6) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #9 0x62c182bd2477 in LLVMFuzzerTestOneInput /home/b/sanitizer-x86_64-linux-fuzzer/build/fuzzer-test-suite/openssl-1.0.2d/target.cc:145:2
    #10 0x62c182a6e64b in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:619:13
    #11 0x62c182a6dc75 in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool, bool*) /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:516:7
    #12 0x62c182a6db16 in fuzzer::Fuzzer::RereadOutputCorpus(unsigned long) /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:433:11
    #13 0x62c182a70546 in fuzzer::Fuzzer::Loop(std::__Fuzzer::vector<fuzzer::SizedFile, std::__Fuzzer::allocator<fuzzer::SizedFile>>&) /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:888:7
    #14 0x62c182a5df35 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:915:6
    #15 0x62c182a8acc2 in main /home/b/sanitizer-x86_64-linux-fuzzer/build/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10
    #16 0x7e408b22a3b7  (/lib/x86_64-linux-gnu/libc.so.6+0x2a3b7) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #17 0x7e408b22a47a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a47a) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
    #18 0x62c182a50664 in _start (/home/b/sanitizer-x86_64-linux-fuzzer/build/RUNDIR-openssl-1.0.2d/openssl-1.0.2d-fsanitize_fuzzer+0x102664)

NOTE: libFuzzer has rudimentary signal handlers.
      Combine libFuzzer with AddressSanitizer or similar for better crash reports.
SUMMARY: libFuzzer: deadly signal
MS: 5 EraseBytes-ChangeBinInt-EraseBytes-ChangeByte-ChangeByte-; base unit: 4387e5ad3199d73a55d5b24a363c95b18fd9b328
0xfa,0x91,0xbe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb9,0xf9,0xb9,0x7f,0x59,0xcb,0x1,0x0,0xff,0xff,0xff,0xff,
\372\221\276\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\271\371\271\177Y\313\001\000\377\377\377\377
artifact_prefix='CORPUS-openssl-1.0.2d-fsanitize_fuzzer/'; Test unit written to CORPUS-openssl-1.0.2d-fsanitize_fuzzer/crash-93c84520f831187776938cd6c879a967be392325
Base64: +pG+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAufm5f1nLAQD/////
+ grep 'Assertion `strcmp(openssl_results.exptmod, gcrypt_results.exptmod)==0. failed.' fuzz-0.log
openssl-1.0.2d-fsanitize_fuzzer: /home/b/sanitizer-x86_64-linux-fuzzer/build/fuzzer-test-suite/openssl-1.0.2d/target.cc:145: int LLVMFuzzerTestOneInput(const unsigned char *, size_t): Assertion `strcmp(openssl_results.exptmod, gcrypt_results.exptmod)==0' failed.
+ '[' -e openssl-1.0.2d-fsanitize_fuzzer ']'
+ ./openssl-1.0.2d-fsanitize_fuzzer /home/b/sanitizer-x86_64-linux-fuzzer/build/fuzzer-test-suite/openssl-1.0.2d/crash-12ae1af0c82252420b5f780bc9ed48d3ba05109e -minimize_crash=1 -runs=1000000

command timed out: 1200 seconds without output running [b'python', b'../sanitizer_buildbot/sanitizers/zorg/buildbot/builders/sanitizers/buildbot_selector.py'], attempting to kill
process killed by signal 9
program finished with exit code -1
elapsedTime=1609.031169

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
llvm:ir llvm:transforms PGO Profile Guided Optimizations
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants