From 6777919d5ac2dfc9923bb5b0b366038ed7fa9621 Mon Sep 17 00:00:00 2001 From: Cameron Finucane Date: Wed, 28 Oct 2020 23:47:38 -0700 Subject: [PATCH] [libFuzzer] Remove InterruptHandler from Fuchsia implementation As implemented, the `InterruptHandler` thread was spinning trying to `select()` on a null "stdin", wasting a significant amount of CPU for no benefit. As Fuchsia does not have a native concept of stdin (or POSIX signals), this commit simply removes this feature entirely. Reviewed By: aarongreen Differential Revision: https://reviews.llvm.org/D89266 --- compiler-rt/lib/fuzzer/FuzzerUtilFuchsia.cpp | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/compiler-rt/lib/fuzzer/FuzzerUtilFuchsia.cpp b/compiler-rt/lib/fuzzer/FuzzerUtilFuchsia.cpp index 93fa2f5..af43946 100644 --- a/compiler-rt/lib/fuzzer/FuzzerUtilFuchsia.cpp +++ b/compiler-rt/lib/fuzzer/FuzzerUtilFuchsia.cpp @@ -68,17 +68,6 @@ void AlarmHandler(int Seconds) { } } -void InterruptHandler() { - fd_set readfds; - // Ctrl-C sends ETX in Zircon. - do { - FD_ZERO(&readfds); - FD_SET(STDIN_FILENO, &readfds); - select(STDIN_FILENO + 1, &readfds, nullptr, nullptr, nullptr); - } while(!FD_ISSET(STDIN_FILENO, &readfds) || getchar() != 0x03); - Fuzzer::StaticInterruptCallback(); -} - // CFAOffset is used to reference the stack pointer before entering the // trampoline (Stack Pointer + CFAOffset = prev Stack Pointer). Before jumping // to the trampoline we copy all the registers onto the stack. We need to make @@ -359,11 +348,7 @@ void SetSignalHandler(const FuzzingOptions &Options) { T.detach(); } - // Set up interrupt handler if needed. - if (Options.HandleInt || Options.HandleTerm) { - std::thread T(InterruptHandler); - T.detach(); - } + // Options.HandleInt and Options.HandleTerm are not supported on Fuchsia // Early exit if no crash handler needed. if (!Options.HandleSegv && !Options.HandleBus && !Options.HandleIll && -- 2.7.4