[compiler-rt] r258713 - Revert "[sanitizers] extracted process management functions"
Mike Aizatsky via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 25 11:52:25 PST 2016
Author: aizatsky
Date: Mon Jan 25 13:52:25 2016
New Revision: 258713
URL: http://llvm.org/viewvc/llvm-project?rev=258713&view=rev
Log:
Revert "[sanitizers] extracted process management functions"
This reverts commit e5b34d5a2bf4c882bc647dd26a8cea2adc76f63c.
Modified:
compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h
compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc
compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Mon Jan 25 13:52:25 2016
@@ -423,10 +423,6 @@ bool TemplateMatch(const char *templ, co
static const char kPathSeparator = SANITIZER_WINDOWS ? ';' : ':';
char *FindPathToBinary(const char *name) {
- if (FileExists(name)) {
- return internal_strdup(name);
- }
-
const char *path = GetEnv("PATH");
if (!path)
return nullptr;
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Mon Jan 25 13:52:25 2016
@@ -279,15 +279,6 @@ const char *GetPwd();
char *FindPathToBinary(const char *name);
bool IsPathSeparator(const char c);
bool IsAbsolutePath(const char *path);
-// Starts a subprocess and returs its pid.
-// If *_fd parameters are >=0 their corresponding input/output
-// streams would be redirect to the file. The files would always be closed
-// in parent process even in case of an error.
-int StartSubprocess(const char *program, char *const argv[],
- fd_t std_in_fd = kInvalidFd, fd_t std_out_fd = kInvalidFd,
- fd_t std_err_fd = kInvalidFd);
-// Checks if specified process is still running
-bool IsProcessRunning(int pid);
u32 GetUid();
void ReExec();
@@ -757,20 +748,6 @@ void GetPcSpBp(void *context, uptr *pc,
void DisableReexec();
void MaybeReexec();
-template <typename Fn>
-struct AutoRunner {
- explicit AutoRunner(Fn fn) : fn_(fn) {}
- ~AutoRunner() { fn_(); }
- Fn fn_;
-};
-
-// A simple scope guard. Usage:
-// auto cleanup = at_scope_exit([]{ do_cleanup; });
-template <typename Fn>
-AutoRunner<Fn> at_scope_exit(Fn fn) {
- return AutoRunner<Fn>(fn);
-}
-
} // namespace __sanitizer
inline void *operator new(__sanitizer::operator_new_size_type size,
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h Mon Jan 25 13:52:25 2016
@@ -43,8 +43,6 @@ uptr internal_prctl(int option, uptr arg
// internal_sigaction instead.
int internal_sigaction_norestorer(int signum, const void *act, void *oldact);
void internal_sigdelset(__sanitizer_sigset_t *set, int signum);
-uptr internal_execve(const char *filename, char *const argv[],
- char *const envp[]);
#if defined(__x86_64__) || defined(__mips__) || defined(__aarch64__) \
|| defined(__powerpc64__)
uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc Mon Jan 25 13:52:25 2016
@@ -34,7 +34,6 @@
#include <pthread.h>
#include <signal.h>
#include <sys/resource.h>
-#include <sys/wait.h>
#if SANITIZER_FREEBSD
#include <pthread_np.h>
@@ -547,73 +546,6 @@ void LogMessageOnPrintf(const char *str)
WriteToSyslog(str);
}
-int StartSubprocess(const char *program, char *const argv[], fd_t std_in_fd,
- fd_t std_out_fd, fd_t std_err_fd) {
- auto file_closer = at_scope_exit([&] {
- if (std_in_fd >= 0) {
- internal_close(std_in_fd);
- }
- if (std_out_fd >= 0) {
- internal_close(std_out_fd);
- }
- if (std_err_fd >= 0) {
- internal_close(std_err_fd);
- }
- });
-
- if (!FileExists(program)) {
- Report("WARNING: Program %s not found!\n", program);
- return -1;
- }
-
- int pid = internal_fork();
-
- if (pid < 0) {
- int rverrno;
- if (internal_iserror(pid, &rverrno)) {
- Report("WARNING: failed to fork (errno %d)\n", rverrno);
- }
- return pid;
- }
-
- if (pid == 0) {
- // Child subprocess
- if (std_in_fd >= 0) {
- internal_close(STDIN_FILENO);
- internal_dup2(std_in_fd, STDIN_FILENO);
- internal_close(std_in_fd);
- }
- if (std_out_fd >= 0) {
- internal_close(STDOUT_FILENO);
- internal_dup2(std_out_fd, STDOUT_FILENO);
- internal_close(std_out_fd);
- }
- if (std_err_fd >= 0) {
- internal_close(STDERR_FILENO);
- internal_dup2(std_err_fd, STDERR_FILENO);
- internal_close(std_err_fd);
- }
-
- for (int fd = sysconf(_SC_OPEN_MAX); fd > 2; fd--) internal_close(fd);
-
- internal_execve(program, argv, nullptr);
- internal__exit(1);
- }
-
- return pid;
-}
-
-bool IsProcessRunning(int pid) {
- int process_status;
- uptr waitpid_status = internal_waitpid(pid, &process_status, WNOHANG);
- int local_errno;
- if (internal_iserror(waitpid_status, &local_errno)) {
- VReport(1, "Waiting on the process failed (errno %d).\n", local_errno);
- return false;
- }
- return waitpid_status == 0;
-}
-
#endif // SANITIZER_LINUX
} // namespace __sanitizer
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc Mon Jan 25 13:52:25 2016
@@ -670,18 +670,6 @@ char **GetArgv() {
return *_NSGetArgv();
}
-int StartSubprocess(const char *program, char *const argv[],
- fd_t std_in_fd = kInvalidFd, fd_t std_out_fd = kInvalidFd,
- fd_t std_err_fd = kInvalidFd) {
- // FIXME: implement on this platform.
- return -1;
-}
-
-bool IsProcessRunning(int pid) {
- // FIXME: implement on this platform.
- return false;
-}
-
} // namespace __sanitizer
#endif // SANITIZER_MAC
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc Mon Jan 25 13:52:25 2016
@@ -137,23 +137,47 @@ bool SymbolizerProcess::StartSymbolizerS
CHECK(infd);
CHECK(outfd);
- const char *argv[kArgVMax];
- GetArgV(path_, argv);
- pid = StartSubprocess(path_, const_cast<char **>(&argv[0]),
- outfd[0] /* stdin */, infd[1] /* stdout */);
- if (pid < 0) {
+ // Real fork() may call user callbacks registered with pthread_atfork().
+ pid = internal_fork();
+ if (pid == -1) {
+ // Fork() failed.
internal_close(infd[0]);
+ internal_close(infd[1]);
internal_close(outfd[0]);
+ internal_close(outfd[1]);
+ Report("WARNING: failed to fork external symbolizer "
+ " (errno: %d)\n", errno);
return false;
+ } else if (pid == 0) {
+ // Child subprocess.
+ internal_close(STDOUT_FILENO);
+ internal_close(STDIN_FILENO);
+ internal_dup2(outfd[0], STDIN_FILENO);
+ internal_dup2(infd[1], STDOUT_FILENO);
+ internal_close(outfd[0]);
+ internal_close(outfd[1]);
+ internal_close(infd[0]);
+ internal_close(infd[1]);
+ for (int fd = sysconf(_SC_OPEN_MAX); fd > 2; fd--)
+ internal_close(fd);
+ const char *argv[kArgVMax];
+ GetArgV(path_, argv);
+ execv(path_, const_cast<char **>(&argv[0]));
+ internal__exit(1);
}
+ // Continue execution in parent process.
+ internal_close(outfd[0]);
+ internal_close(infd[1]);
input_fd_ = infd[0];
output_fd_ = outfd[1];
}
// Check that symbolizer subprocess started successfully.
+ int pid_status;
SleepForMillis(kSymbolizerStartupTimeMillis);
- if (!IsProcessRunning(pid)) {
+ int exited_pid = waitpid(pid, &pid_status, WNOHANG);
+ if (exited_pid != 0) {
// Either waitpid failed, or child has already exited.
Report("WARNING: external symbolizer didn't start up correctly!\n");
return false;
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Mon Jan 25 13:52:25 2016
@@ -775,18 +775,6 @@ char **GetArgv() {
return 0;
}
-int StartSubprocess(const char *program, char *const argv[],
- fd_t std_in_fd = kInvalidFd, fd_t std_out_fd = kInvalidFd,
- fd_t std_err_fd = kInvalidFd) {
- // FIXME: implement on this platform.
- return -1;
-}
-
-bool IsProcessRunning(int pid) {
- // FIXME: implement on this platform.
- return false;
-}
-
} // namespace __sanitizer
#endif // _WIN32
Modified: compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc?rev=258713&r1=258712&r2=258713&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc Mon Jan 25 13:52:25 2016
@@ -263,29 +263,6 @@ TEST(SanitizerLinux, ThreadSelfTest) {
}
#endif
-TEST(SanitizerCommon, StartSubprocessTest) {
- int pipe_fds[2];
- ASSERT_EQ(0, pipe(pipe_fds));
- const char *argv[] = {"/bin/sh", "-c", "echo -n 'hello'"};
- int pid = StartSubprocess("/bin/sh", const_cast<char **>(&argv[0]),
- kInvalidFd /* stdin */, pipe_fds[1] /* stdout */);
- ASSERT_GT(pid, 0);
-
- // wait for process to finish.
- while (IsProcessRunning(pid)) {
- }
- ASSERT_FALSE(IsProcessRunning(pid));
-
- char buffer[256];
- char *ptr = buffer;
- uptr bytes_read;
- while (ReadFromFile(pipe_fds[0], ptr, 256, &bytes_read)) {
- ptr += bytes_read;
- }
- ASSERT_EQ(0, memcmp(buffer, "hello", 5)) << "Buffer: " << buffer;
- internal_close(pipe_fds[0]);
-}
-
} // namespace __sanitizer
#endif // SANITIZER_LINUX
More information about the llvm-commits
mailing list