Skip to content

Commit 6f676bb

Browse files
committed
[lldb][lldb-dap] Added support for "WriteMemory" request. #131820
Added separate utility function to send error response
2 parents f65902a + f5b7cf3 commit 6f676bb

File tree

3 files changed

+24
-19
lines changed

3 files changed

+24
-19
lines changed

lldb/tools/lldb-dap/DAP.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,4 +1173,10 @@ llvm::StringMap<bool> DAP::GetCapabilities() {
11731173
return capabilities;
11741174
}
11751175

1176+
void DAP::SendErrorResponse(llvm::json::Object &response, llvm::StringRef message) {
1177+
response["success"] = false;
1178+
EmplaceSafeString(response, "message", message);
1179+
SendJSON(llvm::json::Value(std::move(response)));
1180+
}
1181+
11761182
} // namespace lldb_dap

lldb/tools/lldb-dap/DAP.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,14 @@ struct DAP {
397397
InstructionBreakpoint *GetInstructionBreakpoint(const lldb::break_id_t bp_id);
398398

399399
InstructionBreakpoint *GetInstructionBPFromStopReason(lldb::SBThread &thread);
400+
401+
/// Sends an error response in DAP with success=false and an error message.
402+
///
403+
/// \param[out] response
404+
/// The response object to update.
405+
/// \param[in] message
406+
/// The error message.
407+
void SendErrorResponse(llvm::json::Object &response, llvm::StringRef message);
400408
};
401409

402410
} // namespace lldb_dap

lldb/tools/lldb-dap/Handler/WriteMemoryRequestHandler.cpp

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,8 @@ void WriteMemoryRequestHandler::operator()(
101101

102102
auto addr_opt = DecodeMemoryReference(memoryReference);
103103
if (!addr_opt.has_value()) {
104-
response["success"] = false;
105-
response["message"] =
106-
"Malformed memory reference: " + memoryReference.str();
107-
dap.SendJSON(llvm::json::Value(std::move(response)));
104+
dap.SendErrorResponse(response, "Malformed memory reference: " +
105+
memoryReference.str());
108106
return;
109107
}
110108

@@ -114,9 +112,8 @@ void WriteMemoryRequestHandler::operator()(
114112

115113
llvm::StringRef data64 = GetString(arguments, "data").value_or("");
116114
if (data64.empty()) {
117-
response["success"] = false;
118-
EmplaceSafeString(response, "message","Data cannot be empty value. Provide valid data");
119-
dap.SendJSON(llvm::json::Value(std::move(response)));
115+
dap.SendErrorResponse(response,
116+
"Data cannot be empty value. Provide valid data");
120117
return;
121118
}
122119

@@ -127,10 +124,8 @@ void WriteMemoryRequestHandler::operator()(
127124
auto decode_error = llvm::decodeBase64(data64, output);
128125

129126
if (decode_error) {
130-
response["success"] = false;
131-
EmpleceSafeErrorMessage(dap, response, "message",
132-
llvm::toString(std::move(decode_error)).c_str());
133-
dap.SendJSON(llvm::json::Value(std::move(response)));
127+
dap.SendErrorResponse(response,
128+
llvm::toString(std::move(decode_error)).c_str());
134129
return;
135130
}
136131

@@ -150,11 +145,9 @@ void WriteMemoryRequestHandler::operator()(
150145
lldb::SBError error =
151146
process.GetMemoryRegionInfo(address_offset, region_info);
152147
if (!error.Success() || !region_info.IsWritable()) {
153-
response["success"] = false;
154-
EmplaceSafeString(response, "message",
155-
"Memory 0x" + llvm::utohexstr(address_offset) +
156-
" region is not writable");
157-
dap.SendJSON(llvm::json::Value(std::move(response)));
148+
dap.SendErrorResponse(response, "Memory 0x" +
149+
llvm::utohexstr(address_offset) +
150+
" region is not writable");
158151
return;
159152
}
160153
}
@@ -165,9 +158,7 @@ void WriteMemoryRequestHandler::operator()(
165158
}
166159

167160
if (bytes_written == 0) {
168-
response["success"] = false;
169-
EmplaceSafeString(response, "message", write_error.GetCString());
170-
dap.SendJSON(llvm::json::Value(std::move(response)));
161+
dap.SendErrorResponse(response, write_error.GetCString());
171162
return;
172163
}
173164

0 commit comments

Comments
 (0)