forked from qt-creator/qt-creator
ProcessStub: limit ptrace only to Linux
The current code tries to use Linux ptrace on any OSes different than Windows and macOS, leading to build failure on other non-Linux OSes. Fix this in a couple of places: - in onInferiorStarted(), create a new Linux block for the code not run on Windows and macOS - in onInferiorStarted(), add a new block for any other OS to do the needed sendPid() call - in setupUnixInferior(), drop the global !Q_OS_WIN, and limit the setChildProcessModifier() call with ptrace calls to Linux Change-Id: Idfde3ee890eb94c6972343b70d0fe639a36343ae Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
@@ -254,8 +254,7 @@ void onInferiorStarted()
|
||||
// In debug mode we use the poll timer to send the pid.
|
||||
if (!debugMode)
|
||||
sendPid(inferiorId);
|
||||
#else
|
||||
|
||||
#elif defined(Q_OS_LINUX)
|
||||
if (debugMode) {
|
||||
qCInfo(log) << "Waiting for SIGTRAP from inferiors execve ...";
|
||||
if (!waitFor(SIGTRAP))
|
||||
@@ -271,12 +270,13 @@ void onInferiorStarted()
|
||||
|
||||
qCInfo(log) << "Sending pid:" << inferiorId;
|
||||
sendPid(inferiorId);
|
||||
#else
|
||||
sendPid(inferiorId);
|
||||
#endif
|
||||
}
|
||||
|
||||
void setupUnixInferior()
|
||||
{
|
||||
#ifndef Q_OS_WIN
|
||||
if (debugMode) {
|
||||
qCInfo(log) << "Debug mode enabled";
|
||||
#ifdef Q_OS_DARWIN
|
||||
@@ -287,7 +287,7 @@ void setupUnixInferior()
|
||||
// Suspend ourselves ...
|
||||
raise(SIGSTOP);
|
||||
});
|
||||
#else
|
||||
#elif defined(Q_OS_LINUX)
|
||||
// PTRACE_TRACEME will stop execution of the child process as soon as execve is called.
|
||||
inferiorProcess.setChildProcessModifier([] {
|
||||
ptrace(PTRACE_TRACEME, 0, 0, 0);
|
||||
@@ -296,7 +296,6 @@ void setupUnixInferior()
|
||||
});
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void setupWindowsInferior()
|
||||
|
Reference in New Issue
Block a user