teemperor created this revision. teemperor added reviewers: labath, JDevlieghere. Herald added subscribers: lldb-commits, abidh. Herald added a project: LLDB.
For some reason the TestExec test on the macOS bots randomly fails with this error: output: * thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x108e66000) * frame #0: 0x0000000108e66000 [...] File "/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/lldb/test/API/functionalities/exec/TestExec.py", line 25, in test_hitting_exec self.do_test(False) File "/Users/buildslave/jenkins/workspace/lldb-cmake/llvm-project/lldb/test/API/functionalities/exec/TestExec.py", line 113, in do_test "Stopped at breakpoint in exec'ed process.") AssertionError: False is not True : Stopped at breakpoint in exec'ed process. Config=x86_64-/Users/buildslave/jenkins/workspace/lldb-cmake/lldb-build/bin/clang-11 I don't know why the test program is failing and I couldn't reproduce this problem on my own. This patch is a stab in the dark that just tries to make the test code more similar to code which we would expect in a user program to make whatever part of macOS happy that is currently not liking our code. The actual changes are: - We pass in argv[0] that is describing otherprog path instead of the current argv[0]. - We pass in a non-null envp (which anyway doesn't seem to be allowed on macOS man page). Repository: rLLDB LLDB https://reviews.llvm.org/D75241 Files: lldb/test/API/functionalities/exec/main.cpp Index: lldb/test/API/functionalities/exec/main.cpp =================================================================== --- lldb/test/API/functionalities/exec/main.cpp +++ lldb/test/API/functionalities/exec/main.cpp @@ -7,12 +7,15 @@ #include <string> #include <unistd.h> +extern char **environ; + int main(int argc, char const **argv) { char *buf = strdup(argv[0]); // Set breakpoint 1 here std::string directory_name(::dirname(buf)); std::string other_program = directory_name + "/secondprog"; - execve(other_program.c_str(), const_cast<char *const *>(argv), nullptr); + argv[0] = other_program.c_str(); + execve(argv[0], const_cast<char *const *>(argv), environ); perror("execve"); abort(); }
Index: lldb/test/API/functionalities/exec/main.cpp =================================================================== --- lldb/test/API/functionalities/exec/main.cpp +++ lldb/test/API/functionalities/exec/main.cpp @@ -7,12 +7,15 @@ #include <string> #include <unistd.h> +extern char **environ; + int main(int argc, char const **argv) { char *buf = strdup(argv[0]); // Set breakpoint 1 here std::string directory_name(::dirname(buf)); std::string other_program = directory_name + "/secondprog"; - execve(other_program.c_str(), const_cast<char *const *>(argv), nullptr); + argv[0] = other_program.c_str(); + execve(argv[0], const_cast<char *const *>(argv), environ); perror("execve"); abort(); }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits