Skip to content

Commit aa4666c

Browse files
committed
[lldb] Remove Debugger::Get{Output,Error}Stream (NFC) (llvm#126821)
Remove Debugger::GetOutputStream and Debugger::GetErrorStream in preparation for replacing both with a new variant that needs to be locked and hence can't be handed out like we do right now. The patch replaces most uses with GetAsyncOutputStream and GetAsyncErrorStream respectively. There methods return new StreamSP objects that automatically get flushed on destruction. See llvm#126630 for more details. (cherry picked from commit eff3c34)
1 parent 6f817b2 commit aa4666c

File tree

15 files changed

+95
-109
lines changed

15 files changed

+95
-109
lines changed

lldb/include/lldb/Core/Debugger.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,6 @@ class Debugger : public std::enable_shared_from_this<Debugger>,
143143

144144
File &GetErrorFile() { return m_error_stream_sp->GetFile(); }
145145

146-
StreamFile &GetOutputStream() { return *m_output_stream_sp; }
147-
148-
StreamFile &GetErrorStream() { return *m_error_stream_sp; }
149-
150146
repro::DataRecorder *GetInputRecorder();
151147

152148
Status SetInputString(const char *data);

lldb/source/API/SBDebugger.cpp

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -507,39 +507,31 @@ SBFile SBDebugger::GetInputFile() {
507507

508508
FILE *SBDebugger::GetOutputFileHandle() {
509509
LLDB_INSTRUMENT_VA(this);
510-
if (m_opaque_sp) {
511-
StreamFile &stream_file = m_opaque_sp->GetOutputStream();
512-
return stream_file.GetFile().GetStream();
513-
}
510+
if (m_opaque_sp)
511+
return m_opaque_sp->GetOutputStreamSP()->GetFile().GetStream();
514512
return nullptr;
515513
}
516514

517515
SBFile SBDebugger::GetOutputFile() {
518516
LLDB_INSTRUMENT_VA(this);
519-
if (m_opaque_sp) {
520-
SBFile file(m_opaque_sp->GetOutputStream().GetFileSP());
521-
return file;
522-
}
517+
if (m_opaque_sp)
518+
return SBFile(m_opaque_sp->GetOutputStreamSP()->GetFileSP());
523519
return SBFile();
524520
}
525521

526522
FILE *SBDebugger::GetErrorFileHandle() {
527523
LLDB_INSTRUMENT_VA(this);
528524

529-
if (m_opaque_sp) {
530-
StreamFile &stream_file = m_opaque_sp->GetErrorStream();
531-
return stream_file.GetFile().GetStream();
532-
}
525+
if (m_opaque_sp)
526+
return m_opaque_sp->GetErrorStreamSP()->GetFile().GetStream();
533527
return nullptr;
534528
}
535529

536530
SBFile SBDebugger::GetErrorFile() {
537531
LLDB_INSTRUMENT_VA(this);
538532
SBFile file;
539-
if (m_opaque_sp) {
540-
SBFile file(m_opaque_sp->GetErrorStream().GetFileSP());
541-
return file;
542-
}
533+
if (m_opaque_sp)
534+
return SBFile(m_opaque_sp->GetErrorStreamSP()->GetFileSP());
543535
return SBFile();
544536
}
545537

@@ -580,8 +572,8 @@ void SBDebugger::HandleCommand(const char *command) {
580572

581573
sb_interpreter.HandleCommand(command, result, false);
582574

583-
result.PutError(m_opaque_sp->GetErrorStream().GetFileSP());
584-
result.PutOutput(m_opaque_sp->GetOutputStream().GetFileSP());
575+
result.PutError(m_opaque_sp->GetErrorStreamSP()->GetFileSP());
576+
result.PutOutput(m_opaque_sp->GetOutputStreamSP()->GetFileSP());
585577

586578
if (!m_opaque_sp->GetAsyncExecution()) {
587579
SBProcess process(GetCommandInterpreter().GetProcess());

lldb/source/Core/Debugger.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,12 +257,11 @@ Status Debugger::SetPropertyValue(const ExecutionContext *exe_ctx,
257257
std::list<Status> errors;
258258
StreamString feedback_stream;
259259
if (!target_sp->LoadScriptingResources(errors, feedback_stream)) {
260-
Stream &s = GetErrorStream();
261-
for (auto &error : errors) {
262-
s.Printf("%s\n", error.AsCString());
263-
}
260+
lldb::StreamSP s = GetAsyncErrorStream();
261+
for (auto &error : errors)
262+
s->Printf("%s\n", error.AsCString());
264263
if (feedback_stream.GetSize())
265-
s.PutCString(feedback_stream.GetString());
264+
s->PutCString(feedback_stream.GetString());
266265
}
267266
}
268267
}

lldb/source/Core/DynamicLoader.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ ModuleSP DynamicLoader::LoadBinaryWithUUIDAndAddress(
255255
module_sp = std::make_shared<Module>(module_spec);
256256
} else if (force_symbol_search && error.AsCString("") &&
257257
error.AsCString("")[0] != '\0') {
258-
target.GetDebugger().GetErrorStream() << error.AsCString();
258+
*target.GetDebugger().GetAsyncErrorStream() << error.AsCString();
259259
}
260260
}
261261

@@ -320,19 +320,19 @@ ModuleSP DynamicLoader::LoadBinaryWithUUIDAndAddress(
320320
}
321321
} else {
322322
if (force_symbol_search) {
323-
Stream &s = target.GetDebugger().GetErrorStream();
324-
s.Printf("Unable to find file");
323+
lldb::StreamSP s = target.GetDebugger().GetAsyncErrorStream();
324+
s->Printf("Unable to find file");
325325
if (!name.empty())
326-
s.Printf(" %s", name.str().c_str());
326+
s->Printf(" %s", name.str().c_str());
327327
if (uuid.IsValid())
328-
s.Printf(" with UUID %s", uuid.GetAsString().c_str());
328+
s->Printf(" with UUID %s", uuid.GetAsString().c_str());
329329
if (value != LLDB_INVALID_ADDRESS) {
330330
if (value_is_offset)
331-
s.Printf(" with slide 0x%" PRIx64, value);
331+
s->Printf(" with slide 0x%" PRIx64, value);
332332
else
333-
s.Printf(" at address 0x%" PRIx64, value);
333+
s->Printf(" at address 0x%" PRIx64, value);
334334
}
335-
s.Printf("\n");
335+
s->Printf("\n");
336336
}
337337
LLDB_LOGF(log,
338338
"Unable to find binary %s with UUID %s and load it at "

lldb/source/Interpreter/ScriptInterpreter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ ScriptInterpreterIORedirect::ScriptInterpreterIORedirect(
239239
if (outfile_handle)
240240
::setbuf(outfile_handle, nullptr);
241241

242-
result->SetImmediateOutputFile(debugger.GetOutputStream().GetFileSP());
243-
result->SetImmediateErrorFile(debugger.GetErrorStream().GetFileSP());
242+
result->SetImmediateOutputFile(debugger.GetOutputStreamSP()->GetFileSP());
243+
result->SetImmediateErrorFile(debugger.GetErrorStreamSP()->GetFileSP());
244244
}
245245
}
246246

lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -736,9 +736,9 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(
736736
}
737737

738738
if (IsKernel() && m_uuid.IsValid()) {
739-
Stream &s = target.GetDebugger().GetOutputStream();
740-
s.Printf("Kernel UUID: %s\n", m_uuid.GetAsString().c_str());
741-
s.Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
739+
lldb::StreamSP s = target.GetDebugger().GetAsyncOutputStream();
740+
s->Printf("Kernel UUID: %s\n", m_uuid.GetAsString().c_str());
741+
s->Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
742742

743743
// Start of a kernel debug session, we have the UUID of the kernel.
744744
// Go through the target's list of modules and if there are any kernel
@@ -828,12 +828,12 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(
828828
}
829829

830830
if (IsKernel() && !m_module_sp) {
831-
Stream &s = target.GetDebugger().GetErrorStream();
832-
s.Printf("WARNING: Unable to locate kernel binary on the debugger "
833-
"system.\n");
831+
lldb::StreamSP s = target.GetDebugger().GetAsyncErrorStream();
832+
s->Printf("WARNING: Unable to locate kernel binary on the debugger "
833+
"system.\n");
834834
if (kernel_search_error.Fail() && kernel_search_error.AsCString("") &&
835835
kernel_search_error.AsCString("")[0] != '\0') {
836-
s << kernel_search_error.AsCString();
836+
*s << kernel_search_error.AsCString();
837837
}
838838
}
839839
}
@@ -972,22 +972,19 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(
972972
bool is_loaded = IsLoaded();
973973

974974
if (is_loaded && m_module_sp && IsKernel()) {
975-
Stream &s = target.GetDebugger().GetOutputStream();
975+
lldb::StreamSP s = target.GetDebugger().GetAsyncOutputStream();
976976
ObjectFile *kernel_object_file = m_module_sp->GetObjectFile();
977977
if (kernel_object_file) {
978978
addr_t file_address =
979979
kernel_object_file->GetBaseAddress().GetFileAddress();
980980
if (m_load_address != LLDB_INVALID_ADDRESS &&
981981
file_address != LLDB_INVALID_ADDRESS) {
982-
s.Printf("Kernel slid 0x%" PRIx64 " in memory.\n",
983-
m_load_address - file_address);
982+
s->Printf("Kernel slid 0x%" PRIx64 " in memory.\n",
983+
m_load_address - file_address);
984984
}
985985
}
986-
{
987-
s.Printf("Loaded kernel file %s\n",
988-
m_module_sp->GetFileSpec().GetPath().c_str());
989-
}
990-
s.Flush();
986+
s->Printf("Loaded kernel file %s\n",
987+
m_module_sp->GetFileSpec().GetPath().c_str());
991988
}
992989

993990
// Notify the target about the module being added;
@@ -1193,10 +1190,11 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
11931190
lldb::offset_t offset = 0;
11941191
m_kext_summary_header.version = data.GetU32(&offset);
11951192
if (m_kext_summary_header.version > 128) {
1196-
Stream &s = m_process->GetTarget().GetDebugger().GetOutputStream();
1197-
s.Printf("WARNING: Unable to read kext summary header, got "
1198-
"improbable version number %u\n",
1199-
m_kext_summary_header.version);
1193+
lldb::StreamSP s =
1194+
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1195+
s->Printf("WARNING: Unable to read kext summary header, got "
1196+
"improbable version number %u\n",
1197+
m_kext_summary_header.version);
12001198
// If we get an improbably large version number, we're probably
12011199
// getting bad memory.
12021200
m_kext_summary_header_addr.Clear();
@@ -1207,11 +1205,11 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
12071205
if (m_kext_summary_header.entry_size > 4096) {
12081206
// If we get an improbably large entry_size, we're probably
12091207
// getting bad memory.
1210-
Stream &s =
1211-
m_process->GetTarget().GetDebugger().GetOutputStream();
1212-
s.Printf("WARNING: Unable to read kext summary header, got "
1213-
"improbable entry_size %u\n",
1214-
m_kext_summary_header.entry_size);
1208+
lldb::StreamSP s =
1209+
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1210+
s->Printf("WARNING: Unable to read kext summary header, got "
1211+
"improbable entry_size %u\n",
1212+
m_kext_summary_header.entry_size);
12151213
m_kext_summary_header_addr.Clear();
12161214
return false;
12171215
}
@@ -1225,10 +1223,11 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
12251223
if (m_kext_summary_header.entry_count > 10000) {
12261224
// If we get an improbably large number of kexts, we're probably
12271225
// getting bad memory.
1228-
Stream &s = m_process->GetTarget().GetDebugger().GetOutputStream();
1229-
s.Printf("WARNING: Unable to read kext summary header, got "
1230-
"improbable number of kexts %u\n",
1231-
m_kext_summary_header.entry_count);
1226+
lldb::StreamSP s =
1227+
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1228+
s->Printf("WARNING: Unable to read kext summary header, got "
1229+
"improbable number of kexts %u\n",
1230+
m_kext_summary_header.entry_count);
12321231
m_kext_summary_header_addr.Clear();
12331232
return false;
12341233
}
@@ -1329,17 +1328,18 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
13291328
number_of_old_kexts_being_removed == 0)
13301329
return true;
13311330

1332-
Stream &s = m_process->GetTarget().GetDebugger().GetOutputStream();
1331+
lldb::StreamSP s = m_process->GetTarget().GetDebugger().GetOutputStreamSP();
13331332
if (load_kexts) {
13341333
if (number_of_new_kexts_being_added > 0 &&
13351334
number_of_old_kexts_being_removed > 0) {
1336-
s.Printf("Loading %d kext modules and unloading %d kext modules ",
1337-
number_of_new_kexts_being_added,
1338-
number_of_old_kexts_being_removed);
1335+
s->Printf("Loading %d kext modules and unloading %d kext modules ",
1336+
number_of_new_kexts_being_added,
1337+
number_of_old_kexts_being_removed);
13391338
} else if (number_of_new_kexts_being_added > 0) {
1340-
s.Printf("Loading %d kext modules ", number_of_new_kexts_being_added);
1339+
s->Printf("Loading %d kext modules ", number_of_new_kexts_being_added);
13411340
} else if (number_of_old_kexts_being_removed > 0) {
1342-
s.Printf("Unloading %d kext modules ", number_of_old_kexts_being_removed);
1341+
s->Printf("Unloading %d kext modules ",
1342+
number_of_old_kexts_being_removed);
13431343
}
13441344
}
13451345

@@ -1403,7 +1403,7 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
14031403
if (image_info.GetModule()) {
14041404
unloaded_module_list.AppendIfNeeded(image_info.GetModule());
14051405
}
1406-
s.Printf(".");
1406+
s->Printf(".");
14071407
image_info.Clear();
14081408
// should pull it out of the KextImageInfos vector but that would
14091409
// mutate the list and invalidate the to_be_removed bool vector;
@@ -1415,11 +1415,11 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
14151415
}
14161416

14171417
if (load_kexts) {
1418-
s.Printf(" done.\n");
1418+
s->Printf(" done.\n");
14191419
if (kexts_failed_to_load.size() > 0 && number_of_new_kexts_being_added > 0) {
1420-
s.Printf("Failed to load %d of %d kexts:\n",
1421-
(int)kexts_failed_to_load.size(),
1422-
number_of_new_kexts_being_added);
1420+
s->Printf("Failed to load %d of %d kexts:\n",
1421+
(int)kexts_failed_to_load.size(),
1422+
number_of_new_kexts_being_added);
14231423
// print a sorted list of <kext-name, uuid> kexts which failed to load
14241424
unsigned longest_name = 0;
14251425
std::sort(kexts_failed_to_load.begin(), kexts_failed_to_load.end());
@@ -1431,10 +1431,9 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
14311431
std::string uuid;
14321432
if (ku.second.IsValid())
14331433
uuid = ku.second.GetAsString();
1434-
s.Printf(" %-*s %s\n", longest_name, ku.first.c_str(), uuid.c_str());
1434+
s->Printf(" %-*s %s\n", longest_name, ku.first.c_str(), uuid.c_str());
14351435
}
14361436
}
1437-
s.Flush();
14381437
}
14391438

14401439
return true;

lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -327,9 +327,9 @@ bool DynamicLoaderFreeBSDKernel::KModImageInfo::LoadImageUsingMemoryModule(
327327
Target &target = process->GetTarget();
328328

329329
if (IsKernel() && m_uuid.IsValid()) {
330-
Stream &s = target.GetDebugger().GetOutputStream();
331-
s.Printf("Kernel UUID: %s\n", m_uuid.GetAsString().c_str());
332-
s.Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
330+
lldb::StreamSP s = target.GetDebugger().GetAsyncOutputStream();
331+
s->Printf("Kernel UUID: %s\n", m_uuid.GetAsString().c_str());
332+
s->Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
333333
}
334334

335335
// Test if the module is loaded into the taget,
@@ -355,9 +355,9 @@ bool DynamicLoaderFreeBSDKernel::KModImageInfo::LoadImageUsingMemoryModule(
355355
if (!m_module_sp)
356356
m_module_sp = target.GetOrCreateModule(module_spec, true);
357357
if (IsKernel() && !m_module_sp) {
358-
Stream &s = target.GetDebugger().GetOutputStream();
359-
s.Printf("WARNING: Unable to locate kernel binary on the debugger "
360-
"system.\n");
358+
lldb::StreamSP s = target.GetDebugger().GetAsyncOutputStream();
359+
s->Printf("WARNING: Unable to locate kernel binary on the debugger "
360+
"system.\n");
361361
}
362362
}
363363

@@ -464,20 +464,19 @@ bool DynamicLoaderFreeBSDKernel::KModImageInfo::LoadImageUsingMemoryModule(
464464
}
465465

466466
if (IsLoaded() && m_module_sp && IsKernel()) {
467-
Stream &s = target.GetDebugger().GetOutputStream();
467+
lldb::StreamSP s = target.GetDebugger().GetAsyncOutputStream();
468468
ObjectFile *kernel_object_file = m_module_sp->GetObjectFile();
469469
if (kernel_object_file) {
470470
addr_t file_address =
471471
kernel_object_file->GetBaseAddress().GetFileAddress();
472472
if (m_load_address != LLDB_INVALID_ADDRESS &&
473473
file_address != LLDB_INVALID_ADDRESS) {
474-
s.Printf("Kernel slide 0x%" PRIx64 " in memory.\n",
475-
m_load_address - file_address);
476-
s.Printf("Loaded kernel file %s\n",
477-
m_module_sp->GetFileSpec().GetPath().c_str());
474+
s->Printf("Kernel slide 0x%" PRIx64 " in memory.\n",
475+
m_load_address - file_address);
476+
s->Printf("Loaded kernel file %s\n",
477+
m_module_sp->GetFileSpec().GetPath().c_str());
478478
}
479479
}
480-
s.Flush();
481480
}
482481

483482
return IsLoaded();

lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -895,13 +895,14 @@ bool InstrumentationRuntimeTSan::NotifyBreakpointHit(
895895
CreateStopReasonWithInstrumentationData(
896896
*thread_sp, stop_reason_description, report));
897897

898-
StreamFile &s = process_sp->GetTarget().GetDebugger().GetOutputStream();
899-
s.Printf("ThreadSanitizer report breakpoint hit. Use 'thread "
900-
"info -s' to get extended information about the "
901-
"report.\n");
898+
lldb::StreamSP s =
899+
process_sp->GetTarget().GetDebugger().GetAsyncOutputStream();
900+
s->Printf("ThreadSanitizer report breakpoint hit. Use 'thread "
901+
"info -s' to get extended information about the "
902+
"report.\n");
902903

903904
return true; // Return true to stop the target
904-
} else
905+
}
905906
return false; // Let target run
906907
}
907908

lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,14 +622,14 @@ AppleObjCTrampolineHandler::AppleObjCTrampolineHandler(
622622
// step through any method dispatches. Warn to that effect and get out of
623623
// here.
624624
if (process_sp->CanJIT()) {
625-
process_sp->GetTarget().GetDebugger().GetErrorStream().Printf(
625+
process_sp->GetTarget().GetDebugger().GetAsyncErrorStream()->Printf(
626626
"Could not find implementation lookup function \"%s\""
627627
" step in through ObjC method dispatch will not work.\n",
628628
get_impl_name.AsCString());
629629
}
630630
return;
631631
}
632-
632+
633633
// We will either set the implementation to the _stret or non_stret version,
634634
// so either way it's safe to start filling the m_lookup_..._code here.
635635
m_lookup_implementation_function_code.assign(

0 commit comments

Comments
 (0)