mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
Revert "[lldb/test] Don't use preexec_fn for launching inferiors"
This reverts commit b15b1421bc because it
breaks GreenDragon [1]. The bot has been red for several days, so
reverting to green while I take a look.
[1] https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/45012/
This commit is contained in:
@@ -4,11 +4,12 @@ architecture and/or the platform dependent nature of the tests. """
|
||||
from __future__ import absolute_import
|
||||
|
||||
# System modules
|
||||
import ctypes
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Third-party modules
|
||||
import six
|
||||
@@ -191,3 +192,14 @@ def hasChattyStderr(test_case):
|
||||
if match_android_device(test_case.getArchitecture(), ['aarch64'], range(22, 25+1)):
|
||||
return True # The dynamic linker on the device will complain about unknown DT entries
|
||||
return False
|
||||
|
||||
if getHostPlatform() == "linux":
|
||||
def enable_attach():
|
||||
"""Enable attaching to _this_ process, if host requires such an action.
|
||||
Suitable for use as a preexec_fn in subprocess.Popen and similar."""
|
||||
c = ctypes.CDLL(None)
|
||||
PR_SET_PTRACER = ctypes.c_int(0x59616d61)
|
||||
PR_SET_PTRACER_ANY = ctypes.c_ulong(-1)
|
||||
c.prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY)
|
||||
else:
|
||||
enable_attach = None
|
||||
|
||||
@@ -393,6 +393,7 @@ class _LocalProcess(_BaseProcess):
|
||||
stdout=open(
|
||||
os.devnull) if not self._trace_on else None,
|
||||
stdin=PIPE,
|
||||
preexec_fn=lldbplatformutil.enable_attach,
|
||||
env=env)
|
||||
|
||||
def terminate(self):
|
||||
|
||||
@@ -14,12 +14,10 @@ class TestGdbRemoteAttachWait(gdbremote_testcase.GdbRemoteTestCaseBase):
|
||||
@skipIfWindows # This test is flaky on Windows
|
||||
def test_attach_with_vAttachWait(self):
|
||||
exe = '%s_%d' % (self.testMethodName, os.getpid())
|
||||
exe_to_attach = exe
|
||||
args = []
|
||||
|
||||
def launch_inferior():
|
||||
inferior = self.launch_process_for_attach(
|
||||
inferior_args=args,
|
||||
inferior_args=["sleep:60"],
|
||||
exe_path=self.getBuildArtifact(exe))
|
||||
self.assertIsNotNone(inferior)
|
||||
self.assertTrue(inferior.pid > 0)
|
||||
@@ -28,14 +26,7 @@ class TestGdbRemoteAttachWait(gdbremote_testcase.GdbRemoteTestCaseBase):
|
||||
inferior.pid, True))
|
||||
return inferior
|
||||
|
||||
self.build(dictionary={'EXE': exe, 'CXX_SOURCES': 'main.cpp'})
|
||||
if self.getPlatform() != "windows":
|
||||
# Use a shim to ensure that the process is ready to be attached from
|
||||
# the get-go.
|
||||
args = [self.getBuildArtifact(exe)]
|
||||
exe = "shim"
|
||||
self.build(dictionary={'EXE': exe, 'CXX_SOURCES': 'shim.cpp'})
|
||||
|
||||
self.build(dictionary={'EXE': exe})
|
||||
self.set_inferior_startup_attach_manually()
|
||||
|
||||
server = self.connect_to_debug_monitor()
|
||||
@@ -47,8 +38,7 @@ class TestGdbRemoteAttachWait(gdbremote_testcase.GdbRemoteTestCaseBase):
|
||||
self.do_handshake()
|
||||
self.test_sequence.add_log_lines([
|
||||
# Do the attach.
|
||||
"read packet: $vAttachWait;{}#00".format(
|
||||
lldbgdbserverutils.gdbremote_hex_encode_string(exe_to_attach)),
|
||||
"read packet: $vAttachWait;{}#00".format(lldbgdbserverutils.gdbremote_hex_encode_string(exe)),
|
||||
], True)
|
||||
# Run the stream until attachWait.
|
||||
context = self.expect_gdbremote_sequence()
|
||||
@@ -1 +0,0 @@
|
||||
include Makefile.rules
|
||||
@@ -1,8 +0,0 @@
|
||||
#include <thread>
|
||||
|
||||
int main()
|
||||
{
|
||||
// Wait to be attached.
|
||||
std::this_thread::sleep_for(std::chrono::minutes(1));
|
||||
return 0;
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
#include <unistd.h>
|
||||
#include <cstdio>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
lldb_enable_attach();
|
||||
execlp(argv[1], argv[1], nullptr);
|
||||
perror("execlp");
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user