Skip to content

Commit b5c553d

Browse files
committed
[lldb] Make GetOutputStreamSP and GetErrorStreamSP protected (llvm#127682)
This makes GetOutputStreamSP and GetErrorStreamSP protected members of Debugger. Users who want to print to the debugger's stream should use GetAsyncOutputStreamSP and GetAsyncErrorStreamSP instead and the few remaining stragglers have been migrated. (cherry picked from commit 65998ab)
1 parent 54ba702 commit b5c553d

File tree

13 files changed

+62
-57
lines changed

13 files changed

+62
-57
lines changed

lldb/include/lldb/Core/Debugger.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,17 +131,13 @@ class Debugger : public std::enable_shared_from_this<Debugger>,
131131

132132
void SetAsyncExecution(bool async);
133133

134-
lldb::FileSP GetInputFileSP() { return m_input_file_sp; }
135-
136-
lldb::StreamFileSP GetOutputStreamSP() { return m_output_stream_sp; }
137-
138-
lldb::StreamFileSP GetErrorStreamSP() { return m_error_stream_sp; }
139-
140134
File &GetInputFile() { return *m_input_file_sp; }
141135

142-
File &GetOutputFile() { return m_output_stream_sp->GetFile(); }
136+
lldb::FileSP GetInputFileSP() { return m_input_file_sp; }
137+
138+
lldb::FileSP GetOutputFileSP() { return m_output_stream_sp->GetFileSP(); }
143139

144-
File &GetErrorFile() { return m_error_stream_sp->GetFile(); }
140+
lldb::FileSP GetErrorFileSP() { return m_error_stream_sp->GetFileSP(); }
145141

146142
repro::DataRecorder *GetInputRecorder();
147143

@@ -658,6 +654,14 @@ class Debugger : public std::enable_shared_from_this<Debugger>,
658654

659655
void PrintProgress(const ProgressEventData &data);
660656

657+
/// Except for Debugger and IOHandler, GetOutputStreamSP and GetErrorStreamSP
658+
/// should not be used directly. Use GetAsyncOutputStream and
659+
/// GetAsyncErrorStream instead.
660+
/// @{
661+
lldb::StreamFileSP GetOutputStreamSP() { return m_output_stream_sp; }
662+
lldb::StreamFileSP GetErrorStreamSP() { return m_error_stream_sp; }
663+
/// @}
664+
661665
void PushIOHandler(const lldb::IOHandlerSP &reader_sp,
662666
bool cancel_top_handler = true);
663667

lldb/include/lldb/Target/ThreadPlanTracer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class ThreadPlanTracer {
5656
Process &m_process;
5757
lldb::tid_t m_tid;
5858

59-
Stream *GetLogStream();
59+
lldb::StreamSP GetLogStreamSP();
6060

6161
virtual void Log();
6262

lldb/source/API/SBDebugger.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -508,30 +508,30 @@ SBFile SBDebugger::GetInputFile() {
508508
FILE *SBDebugger::GetOutputFileHandle() {
509509
LLDB_INSTRUMENT_VA(this);
510510
if (m_opaque_sp)
511-
return m_opaque_sp->GetOutputStreamSP()->GetFile().GetStream();
511+
return m_opaque_sp->GetOutputFileSP()->GetStream();
512512
return nullptr;
513513
}
514514

515515
SBFile SBDebugger::GetOutputFile() {
516516
LLDB_INSTRUMENT_VA(this);
517517
if (m_opaque_sp)
518-
return SBFile(m_opaque_sp->GetOutputStreamSP()->GetFileSP());
518+
return SBFile(m_opaque_sp->GetOutputFileSP());
519519
return SBFile();
520520
}
521521

522522
FILE *SBDebugger::GetErrorFileHandle() {
523523
LLDB_INSTRUMENT_VA(this);
524524

525525
if (m_opaque_sp)
526-
return m_opaque_sp->GetErrorStreamSP()->GetFile().GetStream();
526+
return m_opaque_sp->GetErrorFileSP()->GetStream();
527527
return nullptr;
528528
}
529529

530530
SBFile SBDebugger::GetErrorFile() {
531531
LLDB_INSTRUMENT_VA(this);
532532
SBFile file;
533533
if (m_opaque_sp)
534-
return SBFile(m_opaque_sp->GetErrorStreamSP()->GetFileSP());
534+
return SBFile(m_opaque_sp->GetErrorFileSP());
535535
return SBFile();
536536
}
537537

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

573573
sb_interpreter.HandleCommand(command, result, false);
574574

575-
result.PutError(m_opaque_sp->GetErrorStreamSP()->GetFileSP());
576-
result.PutOutput(m_opaque_sp->GetOutputStreamSP()->GetFileSP());
575+
result.PutError(m_opaque_sp->GetErrorFileSP());
576+
result.PutOutput(m_opaque_sp->GetOutputFileSP());
577577

578578
if (!m_opaque_sp->GetAsyncExecution()) {
579579
SBProcess process(GetCommandInterpreter().GetProcess());

lldb/source/Commands/CommandObjectGUI.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ void CommandObjectGUI::DoExecute(Args &args, CommandReturnObject &result) {
2828
#if LLDB_ENABLE_CURSES
2929
Debugger &debugger = GetDebugger();
3030

31-
File &input = debugger.GetInputFile();
32-
File &output = debugger.GetOutputFile();
33-
if (input.GetStream() && output.GetStream() && input.GetIsRealTerminal() &&
34-
input.GetIsInteractive()) {
31+
FileSP input_sp = debugger.GetInputFileSP();
32+
FileSP output_sp = debugger.GetOutputFileSP();
33+
if (input_sp->GetStream() && output_sp->GetStream() &&
34+
input_sp->GetIsRealTerminal() && input_sp->GetIsInteractive()) {
3535
IOHandlerSP io_handler_sp(new IOHandlerCursesGUI(debugger));
3636
if (io_handler_sp)
3737
debugger.RunIOHandlerAsync(io_handler_sp);

lldb/source/Commands/CommandObjectLog.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,8 @@ class CommandObjectLogDump : public CommandObjectParsed {
394394
(*file)->GetDescriptor(), /*shouldClose=*/true);
395395
} else {
396396
stream_up = std::make_unique<llvm::raw_fd_ostream>(
397-
GetDebugger().GetOutputFile().GetDescriptor(), /*shouldClose=*/false);
397+
GetDebugger().GetOutputFileSP()->GetDescriptor(),
398+
/*shouldClose=*/false);
398399
}
399400

400401
const std::string channel = std::string(args[0].ref());

lldb/source/Core/Debugger.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ Debugger::Debugger(lldb::LogOutputCallback log_callback, void *baton)
947947
if (term && !strcmp(term, "dumb"))
948948
SetUseColor(false);
949949
// Turn off use-color if we don't write to a terminal with color support.
950-
if (!GetOutputFile().GetIsTerminalWithColors())
950+
if (!GetOutputFileSP()->GetIsTerminalWithColors())
951951
SetUseColor(false);
952952

953953
if (Diagnostics::Enabled()) {
@@ -1717,7 +1717,7 @@ bool Debugger::EnableLog(llvm::StringRef channel,
17171717
LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
17181718
} else if (log_file.empty()) {
17191719
log_handler_sp =
1720-
CreateLogHandler(log_handler_kind, GetOutputFile().GetDescriptor(),
1720+
CreateLogHandler(log_handler_kind, GetOutputFileSP()->GetDescriptor(),
17211721
/*should_close=*/false, buffer_size);
17221722
} else {
17231723
auto pos = m_stream_handlers.find(log_file);
@@ -2163,8 +2163,8 @@ void Debugger::HandleProgressEvent(const lldb::EventSP &event_sp) {
21632163
// Determine whether the current output file is an interactive terminal with
21642164
// color support. We assume that if we support ANSI escape codes we support
21652165
// vt100 escape codes.
2166-
File &file = GetOutputFile();
2167-
if (!file.GetIsInteractive() || !file.GetIsTerminalWithColors())
2166+
FileSP file_sp = GetOutputFileSP();
2167+
if (!file_sp->GetIsInteractive() || !file_sp->GetIsTerminalWithColors())
21682168
return;
21692169

21702170
StreamSP output = GetAsyncOutputStream();

lldb/source/Interpreter/CommandInterpreter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2849,8 +2849,8 @@ void CommandInterpreter::HandleCommandsFromFile(FileSpec &cmd_file,
28492849
}
28502850

28512851
if (flags & eHandleCommandFlagPrintResult) {
2852-
debugger.GetOutputFile().Printf("Executing commands in '%s'.\n",
2853-
cmd_file_path.c_str());
2852+
debugger.GetOutputFileSP()->Printf("Executing commands in '%s'.\n",
2853+
cmd_file_path.c_str());
28542854
}
28552855

28562856
// Used for inheriting the right settings when "command source" might

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.GetOutputStreamSP()->GetFileSP());
243-
result->SetImmediateErrorFile(debugger.GetErrorStreamSP()->GetFileSP());
242+
result->SetImmediateOutputFile(debugger.GetOutputFileSP());
243+
result->SetImmediateErrorFile(debugger.GetErrorFileSP());
244244
}
245245
}
246246

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,7 +1191,7 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
11911191
m_kext_summary_header.version = data.GetU32(&offset);
11921192
if (m_kext_summary_header.version > 128) {
11931193
lldb::StreamSP s =
1194-
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1194+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
11951195
s->Printf("WARNING: Unable to read kext summary header, got "
11961196
"improbable version number %u\n",
11971197
m_kext_summary_header.version);
@@ -1206,7 +1206,7 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
12061206
// If we get an improbably large entry_size, we're probably
12071207
// getting bad memory.
12081208
lldb::StreamSP s =
1209-
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1209+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
12101210
s->Printf("WARNING: Unable to read kext summary header, got "
12111211
"improbable entry_size %u\n",
12121212
m_kext_summary_header.entry_size);
@@ -1224,7 +1224,7 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
12241224
// If we get an improbably large number of kexts, we're probably
12251225
// getting bad memory.
12261226
lldb::StreamSP s =
1227-
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1227+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
12281228
s->Printf("WARNING: Unable to read kext summary header, got "
12291229
"improbable number of kexts %u\n",
12301230
m_kext_summary_header.entry_count);
@@ -1328,7 +1328,8 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
13281328
number_of_old_kexts_being_removed == 0)
13291329
return true;
13301330

1331-
lldb::StreamSP s = m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1331+
lldb::StreamSP s =
1332+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
13321333
if (load_kexts) {
13331334
if (number_of_new_kexts_being_added > 0 &&
13341335
number_of_old_kexts_being_removed > 0) {

lldb/source/Plugins/InstrumentationRuntime/UBSan/InstrumentationRuntimeUBSan.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,6 @@ StructuredData::ObjectSP InstrumentationRuntimeUBSan::RetrieveReportData(
116116
if (!frame_sp)
117117
return StructuredData::ObjectSP();
118118

119-
StreamFileSP Stream = target.GetDebugger().GetOutputStreamSP();
120-
121119
EvaluateExpressionOptions options;
122120
options.SetUnwindOnError(true);
123121
options.SetTryAllThreads(true);

lldb/source/Plugins/InstrumentationRuntime/Utility/ReportRetriever.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,8 @@ bool ReportRetriever::NotifyBreakpointHit(ProcessSP process_sp,
217217
InstrumentationRuntimeStopInfo::CreateStopReasonWithInstrumentationData(
218218
*thread_sp, description, report));
219219

220-
if (StreamFileSP stream_sp = StreamFileSP(
221-
process_sp->GetTarget().GetDebugger().GetOutputStreamSP()))
220+
if (StreamSP stream_sp =
221+
process_sp->GetTarget().GetDebugger().GetAsyncOutputStream())
222222
stream_sp->Printf("AddressSanitizer report breakpoint hit. Use 'thread "
223223
"info -s' to get extended information about the "
224224
"report.\n");

lldb/source/Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class IOHandlerLuaInterpreter : public IOHandlerDelegate,
4545
m_script_interpreter(script_interpreter),
4646
m_active_io_handler(active_io_handler) {
4747
llvm::cantFail(m_script_interpreter.GetLua().ChangeIO(
48-
debugger.GetOutputFile().GetStream(),
49-
debugger.GetErrorFile().GetStream()));
48+
debugger.GetOutputFileSP()->GetStream(),
49+
debugger.GetErrorFileSP()->GetStream()));
5050
llvm::cantFail(m_script_interpreter.EnterSession(debugger.GetID()));
5151
}
5252

lldb/source/Target/ThreadPlanTracer.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "lldb/Utility/LLDBLog.h"
2828
#include "lldb/Utility/Log.h"
2929
#include "lldb/Utility/State.h"
30+
#include "lldb/lldb-forward.h"
3031

3132
using namespace lldb;
3233
using namespace lldb_private;
@@ -41,13 +42,13 @@ ThreadPlanTracer::ThreadPlanTracer(Thread &thread)
4142
: m_process(*thread.GetProcess().get()), m_tid(thread.GetID()),
4243
m_enabled(false), m_stream_sp(), m_thread(nullptr) {}
4344

44-
Stream *ThreadPlanTracer::GetLogStream() {
45+
StreamSP ThreadPlanTracer::GetLogStreamSP() {
4546
if (m_stream_sp)
46-
return m_stream_sp.get();
47+
return m_stream_sp;
4748
else {
4849
TargetSP target_sp(GetThread().CalculateTarget());
4950
if (target_sp)
50-
return target_sp->GetDebugger().GetOutputStreamSP().get();
51+
return target_sp->GetDebugger().GetAsyncOutputStream();
5152
}
5253
return nullptr;
5354
}
@@ -65,12 +66,11 @@ void ThreadPlanTracer::Log() {
6566
bool show_frame_index = false;
6667
bool show_fullpaths = false;
6768

68-
Stream *stream = GetLogStream();
69-
if (stream) {
70-
GetThread().GetStackFrameAtIndex(0)->Dump(stream, show_frame_index,
69+
if (StreamSP stream_sp = GetLogStreamSP()) {
70+
GetThread().GetStackFrameAtIndex(0)->Dump(stream_sp.get(), show_frame_index,
7171
show_fullpaths);
72-
stream->Printf("\n");
73-
stream->Flush();
72+
stream_sp->Printf("\n");
73+
stream_sp->Flush();
7474
}
7575
}
7676

@@ -129,9 +129,9 @@ void ThreadPlanAssemblyTracer::TracingStarted() {
129129
void ThreadPlanAssemblyTracer::TracingEnded() { m_register_values.clear(); }
130130

131131
void ThreadPlanAssemblyTracer::Log() {
132-
Stream *stream = GetLogStream();
132+
StreamSP stream_sp = GetLogStreamSP();
133133

134-
if (!stream)
134+
if (!stream_sp)
135135
return;
136136

137137
RegisterContext *reg_ctx = GetThread().GetRegisterContext().get();
@@ -143,9 +143,10 @@ void ThreadPlanAssemblyTracer::Log() {
143143
addr_valid = m_process.GetTarget().GetSectionLoadList().ResolveLoadAddress(
144144
pc, pc_addr);
145145

146-
pc_addr.Dump(stream, &GetThread(), Address::DumpStyleResolvedDescription,
146+
pc_addr.Dump(stream_sp.get(), &GetThread(),
147+
Address::DumpStyleResolvedDescription,
147148
Address::DumpStyleModuleWithFileAddress);
148-
stream->PutCString(" ");
149+
stream_sp->PutCString(" ");
149150

150151
Disassembler *disassembler = GetDisassembler();
151152
if (disassembler) {
@@ -176,7 +177,7 @@ void ThreadPlanAssemblyTracer::Log() {
176177
instruction_list.GetInstructionAtIndex(0).get();
177178
const FormatEntity::Entry *disassemble_format =
178179
m_process.GetTarget().GetDebugger().GetDisassemblyFormat();
179-
instruction->Dump(stream, max_opcode_byte_size, show_address,
180+
instruction->Dump(stream_sp.get(), max_opcode_byte_size, show_address,
180181
show_bytes, show_control_flow_kind, nullptr, nullptr,
181182
nullptr, disassemble_format, 0);
182183
}
@@ -199,12 +200,12 @@ void ThreadPlanAssemblyTracer::Log() {
199200

200201
if (abi->GetArgumentValues(GetThread(), value_list)) {
201202
for (int arg_index = 0; arg_index < num_args; ++arg_index) {
202-
stream->Printf(
203+
stream_sp->Printf(
203204
"\n\targ[%d]=%llx", arg_index,
204205
value_list.GetValueAtIndex(arg_index)->GetScalar().ULongLong());
205206

206207
if (arg_index + 1 < num_args)
207-
stream->PutCString(", ");
208+
stream_sp->PutCString(", ");
208209
}
209210
}
210211
}
@@ -223,14 +224,14 @@ void ThreadPlanAssemblyTracer::Log() {
223224
if (m_register_values[reg_num].GetType() == RegisterValue::eTypeInvalid ||
224225
reg_value != m_register_values[reg_num]) {
225226
if (reg_value.GetType() != RegisterValue::eTypeInvalid) {
226-
stream->PutCString("\n\t");
227-
DumpRegisterValue(reg_value, *stream, *reg_info, true, false,
227+
stream_sp->PutCString("\n\t");
228+
DumpRegisterValue(reg_value, *stream_sp, *reg_info, true, false,
228229
eFormatDefault);
229230
}
230231
}
231232
m_register_values[reg_num] = reg_value;
232233
}
233234
}
234-
stream->EOL();
235-
stream->Flush();
235+
stream_sp->EOL();
236+
stream_sp->Flush();
236237
}

0 commit comments

Comments
 (0)