Skip to content

Commit 65998ab

Browse files
authored
[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.
1 parent 9743b99 commit 65998ab

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

@@ -649,6 +645,14 @@ class Debugger : public std::enable_shared_from_this<Debugger>,
649645

650646
void PrintProgress(const ProgressEventData &data);
651647

648+
/// Except for Debugger and IOHandler, GetOutputStreamSP and GetErrorStreamSP
649+
/// should not be used directly. Use GetAsyncOutputStream and
650+
/// GetAsyncErrorStream instead.
651+
/// @{
652+
lldb::StreamFileSP GetOutputStreamSP() { return m_output_stream_sp; }
653+
lldb::StreamFileSP GetErrorStreamSP() { return m_error_stream_sp; }
654+
/// @}
655+
652656
void PushIOHandler(const lldb::IOHandlerSP &reader_sp,
653657
bool cancel_top_handler = true);
654658

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
@@ -509,30 +509,30 @@ SBFile SBDebugger::GetInputFile() {
509509
FILE *SBDebugger::GetOutputFileHandle() {
510510
LLDB_INSTRUMENT_VA(this);
511511
if (m_opaque_sp)
512-
return m_opaque_sp->GetOutputStreamSP()->GetFile().GetStream();
512+
return m_opaque_sp->GetOutputFileSP()->GetStream();
513513
return nullptr;
514514
}
515515

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

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

526526
if (m_opaque_sp)
527-
return m_opaque_sp->GetErrorStreamSP()->GetFile().GetStream();
527+
return m_opaque_sp->GetErrorFileSP()->GetStream();
528528
return nullptr;
529529
}
530530

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

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

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

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

579579
if (!m_opaque_sp->GetAsyncExecution()) {
580580
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()) {
@@ -1678,7 +1678,7 @@ bool Debugger::EnableLog(llvm::StringRef channel,
16781678
LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
16791679
} else if (log_file.empty()) {
16801680
log_handler_sp =
1681-
CreateLogHandler(log_handler_kind, GetOutputFile().GetDescriptor(),
1681+
CreateLogHandler(log_handler_kind, GetOutputFileSP()->GetDescriptor(),
16821682
/*should_close=*/false, buffer_size);
16831683
} else {
16841684
auto pos = m_stream_handlers.find(log_file);
@@ -2111,8 +2111,8 @@ void Debugger::HandleProgressEvent(const lldb::EventSP &event_sp) {
21112111
// Determine whether the current output file is an interactive terminal with
21122112
// color support. We assume that if we support ANSI escape codes we support
21132113
// vt100 escape codes.
2114-
File &file = GetOutputFile();
2115-
if (!file.GetIsInteractive() || !file.GetIsTerminalWithColors())
2114+
FileSP file_sp = GetOutputFileSP();
2115+
if (!file_sp->GetIsInteractive() || !file_sp->GetIsTerminalWithColors())
21162116
return;
21172117

21182118
StreamSP output = GetAsyncOutputStream();

lldb/source/Interpreter/CommandInterpreter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2837,8 +2837,8 @@ void CommandInterpreter::HandleCommandsFromFile(
28372837
}
28382838

28392839
if (flags & eHandleCommandFlagPrintResult) {
2840-
debugger.GetOutputFile().Printf("Executing commands in '%s'.\n",
2841-
cmd_file_path.c_str());
2840+
debugger.GetOutputFileSP()->Printf("Executing commands in '%s'.\n",
2841+
cmd_file_path.c_str());
28422842
}
28432843

28442844
// 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
@@ -245,8 +245,8 @@ ScriptInterpreterIORedirect::ScriptInterpreterIORedirect(
245245
if (outfile_handle)
246246
::setbuf(outfile_handle, nullptr);
247247

248-
result->SetImmediateOutputFile(debugger.GetOutputStreamSP()->GetFileSP());
249-
result->SetImmediateErrorFile(debugger.GetErrorStreamSP()->GetFileSP());
248+
result->SetImmediateOutputFile(debugger.GetOutputFileSP());
249+
result->SetImmediateErrorFile(debugger.GetErrorFileSP());
250250
}
251251
}
252252

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,7 +1193,7 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
11931193
m_kext_summary_header.version = data.GetU32(&offset);
11941194
if (m_kext_summary_header.version > 128) {
11951195
lldb::StreamSP s =
1196-
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1196+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
11971197
s->Printf("WARNING: Unable to read kext summary header, got "
11981198
"improbable version number %u\n",
11991199
m_kext_summary_header.version);
@@ -1208,7 +1208,7 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
12081208
// If we get an improbably large entry_size, we're probably
12091209
// getting bad memory.
12101210
lldb::StreamSP s =
1211-
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1211+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
12121212
s->Printf("WARNING: Unable to read kext summary header, got "
12131213
"improbable entry_size %u\n",
12141214
m_kext_summary_header.entry_size);
@@ -1226,7 +1226,7 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
12261226
// If we get an improbably large number of kexts, we're probably
12271227
// getting bad memory.
12281228
lldb::StreamSP s =
1229-
m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1229+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
12301230
s->Printf("WARNING: Unable to read kext summary header, got "
12311231
"improbable number of kexts %u\n",
12321232
m_kext_summary_header.entry_count);
@@ -1330,7 +1330,8 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
13301330
number_of_old_kexts_being_removed == 0)
13311331
return true;
13321332

1333-
lldb::StreamSP s = m_process->GetTarget().GetDebugger().GetOutputStreamSP();
1333+
lldb::StreamSP s =
1334+
m_process->GetTarget().GetDebugger().GetAsyncOutputStream();
13341335
if (load_kexts) {
13351336
if (number_of_new_kexts_being_added > 0 &&
13361337
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
@@ -210,8 +210,8 @@ bool ReportRetriever::NotifyBreakpointHit(ProcessSP process_sp,
210210
InstrumentationRuntimeStopInfo::CreateStopReasonWithInstrumentationData(
211211
*thread_sp, description, report));
212212

213-
if (StreamFileSP stream_sp = StreamFileSP(
214-
process_sp->GetTarget().GetDebugger().GetOutputStreamSP()))
213+
if (StreamSP stream_sp =
214+
process_sp->GetTarget().GetDebugger().GetAsyncOutputStream())
215215
stream_sp->Printf("AddressSanitizer report breakpoint hit. Use 'thread "
216216
"info -s' to get extended information about the "
217217
"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();
@@ -142,9 +142,10 @@ void ThreadPlanAssemblyTracer::Log() {
142142
uint8_t buffer[16] = {0}; // Must be big enough for any single instruction
143143
addr_valid = m_process.GetTarget().ResolveLoadAddress(pc, pc_addr);
144144

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

149150
Disassembler *disassembler = GetDisassembler();
150151
if (disassembler) {
@@ -175,7 +176,7 @@ void ThreadPlanAssemblyTracer::Log() {
175176
instruction_list.GetInstructionAtIndex(0).get();
176177
const FormatEntity::Entry *disassemble_format =
177178
m_process.GetTarget().GetDebugger().GetDisassemblyFormat();
178-
instruction->Dump(stream, max_opcode_byte_size, show_address,
179+
instruction->Dump(stream_sp.get(), max_opcode_byte_size, show_address,
179180
show_bytes, show_control_flow_kind, nullptr, nullptr,
180181
nullptr, disassemble_format, 0);
181182
}
@@ -198,12 +199,12 @@ void ThreadPlanAssemblyTracer::Log() {
198199

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

205206
if (arg_index + 1 < num_args)
206-
stream->PutCString(", ");
207+
stream_sp->PutCString(", ");
207208
}
208209
}
209210
}
@@ -222,14 +223,14 @@ void ThreadPlanAssemblyTracer::Log() {
222223
if (m_register_values[reg_num].GetType() == RegisterValue::eTypeInvalid ||
223224
reg_value != m_register_values[reg_num]) {
224225
if (reg_value.GetType() != RegisterValue::eTypeInvalid) {
225-
stream->PutCString("\n\t");
226-
DumpRegisterValue(reg_value, *stream, *reg_info, true, false,
226+
stream_sp->PutCString("\n\t");
227+
DumpRegisterValue(reg_value, *stream_sp, *reg_info, true, false,
227228
eFormatDefault);
228229
}
229230
}
230231
m_register_values[reg_num] = reg_value;
231232
}
232233
}
233-
stream->EOL();
234-
stream->Flush();
234+
stream_sp->EOL();
235+
stream_sp->Flush();
235236
}

0 commit comments

Comments
 (0)