[Lldb-commits] [lldb] 0c443e9 - Add some warnings when debugserver is running in translation
Jason Molenda via lldb-commits
lldb-commits at lists.llvm.org
Wed May 12 22:18:31 PDT 2021
Author: Jason Molenda
Date: 2021-05-12T22:18:24-07:00
New Revision: 0c443e92d3b9bc5a25214f2c8418b72501a15a00
URL: https://github.com/llvm/llvm-project/commit/0c443e92d3b9bc5a25214f2c8418b72501a15a00
DIFF: https://github.com/llvm/llvm-project/commit/0c443e92d3b9bc5a25214f2c8418b72501a15a00.diff
LOG: Add some warnings when debugserver is running in translation
A debugserver launched x86_64 cannot control an arm64/arm64e
process on an Apple Silicon system. Warn when this situation
has happened and return an error for the most common case of
attach. I think there will be refinements to this in the
future, but start out by making it easy to spot the problem
when it happens.
rdar://76630595
Added:
Modified:
lldb/tools/debugserver/source/DNB.cpp
lldb/tools/debugserver/source/DNB.h
lldb/tools/debugserver/source/RNBRemote.cpp
lldb/tools/debugserver/source/debugserver.cpp
Removed:
################################################################################
diff --git a/lldb/tools/debugserver/source/DNB.cpp b/lldb/tools/debugserver/source/DNB.cpp
index 7048bec4832a..37c8cf5e6542 100644
--- a/lldb/tools/debugserver/source/DNB.cpp
+++ b/lldb/tools/debugserver/source/DNB.cpp
@@ -1812,3 +1812,11 @@ nub_bool_t DNBSetArchitecture(const char *arch) {
}
return false;
}
+
+bool DNBDebugserverIsTranslated() {
+ int ret = 0;
+ size_t size = sizeof(ret);
+ if (sysctlbyname("sysctl.proc_translated", &ret, &size, NULL, 0) == -1)
+ return false;
+ return ret == 1;
+}
diff --git a/lldb/tools/debugserver/source/DNB.h b/lldb/tools/debugserver/source/DNB.h
index 069c62dc41d8..8763b0cae697 100644
--- a/lldb/tools/debugserver/source/DNB.h
+++ b/lldb/tools/debugserver/source/DNB.h
@@ -239,4 +239,8 @@ nub_bool_t DNBResolveExecutablePath(const char *path, char *resolved_path,
bool DNBGetOSVersionNumbers(uint64_t *major, uint64_t *minor, uint64_t *patch);
/// \return the iOSSupportVersion of the host OS.
std::string DNBGetMacCatalystVersionString();
+
+/// \return true if debugserver is running in translation
+/// (is an x86_64 process on arm64)
+bool DNBDebugserverIsTranslated();
#endif
diff --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp
index 586336a21b6b..876681aa5d6e 100644
--- a/lldb/tools/debugserver/source/RNBRemote.cpp
+++ b/lldb/tools/debugserver/source/RNBRemote.cpp
@@ -3920,6 +3920,17 @@ rnb_err_t RNBRemote::HandlePacket_v(const char *p) {
char err_str[1024] = {'\0'};
std::string attach_name;
+ if (DNBDebugserverIsTranslated()) {
+ DNBLogError("debugserver is x86_64 binary running in translation, attach "
+ "failed.");
+ std::string return_message = "E96;";
+ return_message +=
+ cstring_to_asciihex_string("debugserver is x86_64 binary running in "
+ "translation, attached failed.");
+ SendPacket(return_message.c_str());
+ return rnb_err;
+ }
+
if (strstr(p, "vAttachWait;") == p) {
p += strlen("vAttachWait;");
if (!GetProcessNameFrom_vAttach(p, attach_name)) {
diff --git a/lldb/tools/debugserver/source/debugserver.cpp b/lldb/tools/debugserver/source/debugserver.cpp
index d76f4f00aff8..a0a30473254a 100644
--- a/lldb/tools/debugserver/source/debugserver.cpp
+++ b/lldb/tools/debugserver/source/debugserver.cpp
@@ -809,8 +809,11 @@ void FileLogCallback(void *baton, uint32_t flags, const char *format,
}
void show_version_and_exit(int exit_code) {
- printf("%s-%s for %s.\n", DEBUGSERVER_PROGRAM_NAME, DEBUGSERVER_VERSION_STR,
- RNB_ARCH);
+ const char *in_translation = "";
+ if (DNBDebugserverIsTranslated())
+ in_translation = " (running under translation)";
+ printf("%s-%s for %s%s.\n", DEBUGSERVER_PROGRAM_NAME, DEBUGSERVER_VERSION_STR,
+ RNB_ARCH, in_translation);
exit(exit_code);
}
@@ -1353,8 +1356,12 @@ int main(int argc, char *argv[]) {
// as long as we're dropping remotenub in as a replacement for gdbserver,
// explicitly note that this is not gdbserver.
- RNBLogSTDOUT("%s-%s %sfor %s.\n", DEBUGSERVER_PROGRAM_NAME,
- DEBUGSERVER_VERSION_STR, compile_options.c_str(), RNB_ARCH);
+ const char *in_translation = "";
+ if (DNBDebugserverIsTranslated())
+ in_translation = " (running under translation)";
+ RNBLogSTDOUT("%s-%s %sfor %s%s.\n", DEBUGSERVER_PROGRAM_NAME,
+ DEBUGSERVER_VERSION_STR, compile_options.c_str(), RNB_ARCH,
+ in_translation);
std::string host;
int port = INT32_MAX;
More information about the lldb-commits
mailing list