Skip to content

Commit 1cbd1b8

Browse files
committed
Revert "[lldb] Don't dissasemble large functions by default"
This reverts commit f665e80. Reverting because it breaks TestFoundationDisassembly.py
1 parent 11d612a commit 1cbd1b8

File tree

6 files changed

+22
-142
lines changed

6 files changed

+22
-142
lines changed

lldb/source/Commands/CommandObjectDisassemble.cpp

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
#include "lldb/Target/StackFrame.h"
2222
#include "lldb/Target/Target.h"
2323

24-
static constexpr unsigned default_disasm_byte_size = 32;
25-
static constexpr unsigned default_disasm_num_ins = 4;
26-
static constexpr unsigned large_function_threshold = 4000;
24+
#define DEFAULT_DISASM_BYTE_SIZE 32
25+
#define DEFAULT_DISASM_NUM_INS 4
2726

2827
using namespace lldb;
2928
using namespace lldb_private;
@@ -144,10 +143,6 @@ Status CommandObjectDisassemble::CommandOptions::SetOptionValue(
144143
}
145144
} break;
146145

147-
case '\x01':
148-
force = true;
149-
break;
150-
151146
default:
152147
llvm_unreachable("Unimplemented option");
153148
}
@@ -191,7 +186,6 @@ void CommandObjectDisassemble::CommandOptions::OptionParsingStarting(
191186

192187
arch.Clear();
193188
some_location_specified = false;
194-
force = false;
195189
}
196190

197191
Status CommandObjectDisassemble::CommandOptions::OptionParsingFinished(
@@ -220,21 +214,6 @@ CommandObjectDisassemble::CommandObjectDisassemble(
220214

221215
CommandObjectDisassemble::~CommandObjectDisassemble() = default;
222216

223-
llvm::Error CommandObjectDisassemble::CheckRangeSize(const AddressRange &range,
224-
llvm::StringRef what) {
225-
if (m_options.num_instructions > 0 || m_options.force ||
226-
range.GetByteSize() < large_function_threshold)
227-
return llvm::Error::success();
228-
StreamString msg;
229-
msg << "Not disassembling " << what << " because it is very large ";
230-
range.Dump(&msg, &GetSelectedTarget(), Address::DumpStyleLoadAddress,
231-
Address::DumpStyleFileAddress);
232-
msg << ". To disassemble specify an instruction count limit, start/stop "
233-
"addresses or use the --force option.";
234-
return llvm::createStringError(llvm::inconvertibleErrorCode(),
235-
msg.GetString());
236-
}
237-
238217
llvm::Expected<std::vector<AddressRange>>
239218
CommandObjectDisassemble::GetContainingAddressRanges() {
240219
std::vector<AddressRange> ranges;
@@ -275,9 +254,6 @@ CommandObjectDisassemble::GetContainingAddressRanges() {
275254
"Could not find function bounds for address 0x%" PRIx64,
276255
m_options.symbol_containing_addr);
277256
}
278-
279-
if (llvm::Error err = CheckRangeSize(ranges[0], "the function"))
280-
return std::move(err);
281257
return ranges;
282258
}
283259

@@ -297,10 +273,8 @@ CommandObjectDisassemble::GetCurrentFunctionRanges() {
297273
else if (sc.symbol && sc.symbol->ValueIsAddress()) {
298274
range = {sc.symbol->GetAddress(), sc.symbol->GetByteSize()};
299275
} else
300-
range = {frame->GetFrameCodeAddress(), default_disasm_byte_size};
276+
range = {frame->GetFrameCodeAddress(), DEFAULT_DISASM_BYTE_SIZE};
301277

302-
if (llvm::Error err = CheckRangeSize(range, "the current function"))
303-
return std::move(err);
304278
return std::vector<AddressRange>{range};
305279
}
306280

@@ -324,7 +298,7 @@ CommandObjectDisassemble::GetCurrentLineRanges() {
324298
}
325299

326300
llvm::Expected<std::vector<AddressRange>>
327-
CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) {
301+
CommandObjectDisassemble::GetNameRanges() {
328302
ConstString name(m_options.func_name.c_str());
329303
const bool include_symbols = true;
330304
const bool include_inlines = true;
@@ -335,7 +309,6 @@ CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) {
335309
name, eFunctionNameTypeAuto, include_symbols, include_inlines, sc_list);
336310

337311
std::vector<AddressRange> ranges;
338-
llvm::Error range_errs = llvm::Error::success();
339312
AddressRange range;
340313
const uint32_t scope =
341314
eSymbolContextBlock | eSymbolContextFunction | eSymbolContextSymbol;
@@ -344,21 +317,14 @@ CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) {
344317
for (uint32_t range_idx = 0;
345318
sc.GetAddressRange(scope, range_idx, use_inline_block_range, range);
346319
++range_idx) {
347-
if (llvm::Error err = CheckRangeSize(range, "a range"))
348-
range_errs = joinErrors(std::move(range_errs), std::move(err));
349-
else
350-
ranges.push_back(range);
320+
ranges.push_back(range);
351321
}
352322
}
353323
if (ranges.empty()) {
354-
if (range_errs)
355-
return std::move(range_errs);
356324
return llvm::createStringError(llvm::inconvertibleErrorCode(),
357325
"Unable to find symbol with name '%s'.\n",
358326
name.GetCString());
359327
}
360-
if (range_errs)
361-
result.AppendWarning(toString(std::move(range_errs)));
362328
return ranges;
363329
}
364330

@@ -374,7 +340,7 @@ CommandObjectDisassemble::GetPCRanges() {
374340
if (m_options.num_instructions == 0) {
375341
// Disassembling at the PC always disassembles some number of
376342
// instructions (not the whole function).
377-
m_options.num_instructions = default_disasm_num_ins;
343+
m_options.num_instructions = DEFAULT_DISASM_NUM_INS;
378344
}
379345
return std::vector<AddressRange>{{frame->GetFrameCodeAddress(), 0}};
380346
}
@@ -393,16 +359,15 @@ CommandObjectDisassemble::GetStartEndAddressRanges() {
393359
}
394360

395361
llvm::Expected<std::vector<AddressRange>>
396-
CommandObjectDisassemble::GetRangesForSelectedMode(
397-
CommandReturnObject &result) {
362+
CommandObjectDisassemble::GetRangesForSelectedMode() {
398363
if (m_options.symbol_containing_addr != LLDB_INVALID_ADDRESS)
399364
return CommandObjectDisassemble::GetContainingAddressRanges();
400365
if (m_options.current_function)
401366
return CommandObjectDisassemble::GetCurrentFunctionRanges();
402367
if (m_options.frame_line)
403368
return CommandObjectDisassemble::GetCurrentLineRanges();
404369
if (!m_options.func_name.empty())
405-
return CommandObjectDisassemble::GetNameRanges(result);
370+
return CommandObjectDisassemble::GetNameRanges();
406371
if (m_options.start_addr != LLDB_INVALID_ADDRESS)
407372
return CommandObjectDisassemble::GetStartEndAddressRanges();
408373
return CommandObjectDisassemble::GetPCRanges();
@@ -475,8 +440,7 @@ bool CommandObjectDisassemble::DoExecute(Args &command,
475440
if (m_options.raw)
476441
options |= Disassembler::eOptionRawOuput;
477442

478-
llvm::Expected<std::vector<AddressRange>> ranges =
479-
GetRangesForSelectedMode(result);
443+
llvm::Expected<std::vector<AddressRange>> ranges = GetRangesForSelectedMode();
480444
if (!ranges) {
481445
result.AppendError(toString(ranges.takeError()));
482446
result.SetStatus(eReturnStatusFailed);
@@ -489,7 +453,7 @@ bool CommandObjectDisassemble::DoExecute(Args &command,
489453
if (m_options.num_instructions == 0) {
490454
limit = {Disassembler::Limit::Bytes, cur_range.GetByteSize()};
491455
if (limit.value == 0)
492-
limit.value = default_disasm_byte_size;
456+
limit.value = DEFAULT_DISASM_BYTE_SIZE;
493457
} else {
494458
limit = {Disassembler::Limit::Instructions, m_options.num_instructions};
495459
}
@@ -512,7 +476,7 @@ bool CommandObjectDisassemble::DoExecute(Args &command,
512476
result.SetStatus(eReturnStatusFailed);
513477
}
514478
if (print_sc_header)
515-
result.GetOutputStream() << "\n";
479+
result.AppendMessage("\n");
516480
}
517481

518482
return result.Succeeded();

lldb/source/Commands/CommandObjectDisassemble.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ class CommandObjectDisassemble : public CommandObjectParsed {
6262
// "at_pc". This should be set
6363
// in SetOptionValue if anything the selects a location is set.
6464
lldb::addr_t symbol_containing_addr;
65-
bool force = false;
6665
};
6766

6867
CommandObjectDisassemble(CommandInterpreter &interpreter);
@@ -74,19 +73,15 @@ class CommandObjectDisassemble : public CommandObjectParsed {
7473
protected:
7574
bool DoExecute(Args &command, CommandReturnObject &result) override;
7675

77-
llvm::Expected<std::vector<AddressRange>>
78-
GetRangesForSelectedMode(CommandReturnObject &result);
76+
llvm::Expected<std::vector<AddressRange>> GetRangesForSelectedMode();
7977

8078
llvm::Expected<std::vector<AddressRange>> GetContainingAddressRanges();
8179
llvm::Expected<std::vector<AddressRange>> GetCurrentFunctionRanges();
8280
llvm::Expected<std::vector<AddressRange>> GetCurrentLineRanges();
83-
llvm::Expected<std::vector<AddressRange>>
84-
GetNameRanges(CommandReturnObject &result);
81+
llvm::Expected<std::vector<AddressRange>> GetNameRanges();
8582
llvm::Expected<std::vector<AddressRange>> GetPCRanges();
8683
llvm::Expected<std::vector<AddressRange>> GetStartEndAddressRanges();
8784

88-
llvm::Error CheckRangeSize(const AddressRange &range, llvm::StringRef what);
89-
9085
CommandOptions m_options;
9186
};
9287

lldb/source/Commands/Options.td

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ let Command = "disassemble" in {
311311
Desc<"Address at which to start disassembling.">;
312312
def disassemble_options_end_address : Option<"end-address", "e">, Group<1>,
313313
Arg<"AddressOrExpression">, Desc<"Address at which to end disassembling.">;
314-
def disassemble_options_count : Option<"count", "c">, Groups<[2,3,4,5,7]>,
314+
def disassemble_options_count : Option<"count", "c">, Groups<[2,3,4,5]>,
315315
Arg<"NumLines">, Desc<"Number of instructions to display.">;
316316
def disassemble_options_name : Option<"name", "n">, Group<3>,
317317
Arg<"FunctionName">, Completion<"Symbol">,
@@ -326,8 +326,6 @@ let Command = "disassemble" in {
326326
def disassemble_options_address : Option<"address", "a">, Group<7>,
327327
Arg<"AddressOrExpression">,
328328
Desc<"Disassemble function containing this address.">;
329-
def disassemble_options_force : Option<"force", "\\x01">, Groups<[2,3,4,5,7]>,
330-
Desc<"Force dissasembly of large functions.">;
331329
}
332330

333331
let Command = "expression" in {

lldb/test/Shell/Commands/Inputs/command-disassemble.lldbinit

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@ disassemble --start-address 0x0
66
disassemble --start-address 0x4 --end-address 0x8
77
disassemble --start-address 0x8 --end-address 0x4
88
disassemble --address 0x0
9-
disassemble --address 0xdeadb
10-
disassemble --address 0x100
11-
disassemble --address 0x100 --count 3
12-
disassemble --address 0x100 --force
9+
disassemble --address 0xdead
1310
disassemble --start-address 0x0 --count 7
1411
disassemble --start-address 0x0 --end-address 0x20 --count 7
15-
disassemble --name case1
16-
disassemble --name case2
17-
disassemble --name case3
18-
disassemble --name case3 --count 3
12+
disassemble --address 0x0 --count 7

lldb/test/Shell/Commands/command-disassemble-process.yaml

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
# REQUIRES: x86
22

3-
# RUN: yaml2obj --docnum=1 -DMAIN_SIZE=8 %s > %T/command-disassemble-process.exe
4-
# RUN: yaml2obj --docnum=1 -DMAIN_SIZE=4000 %s > %T/command-disassemble-process.big.exe
3+
# RUN: yaml2obj --docnum=1 %s > %T/command-disassemble-process.exe
54
# RUN: yaml2obj --docnum=2 %s > %t
65

76
# RUN: %lldb -c %t %T/command-disassemble-process.exe \
87
# RUN: -o "settings set interpreter.stop-command-source-on-error false" \
98
# RUN: -s %S/Inputs/command-disassemble-process.lldbinit -o exit 2>&1 \
109
# RUN: | FileCheck %s
1110

12-
# RUN: %lldb -c %t %T/command-disassemble-process.big.exe \
13-
# RUN: -o disassemble -o exit 2>&1 | FileCheck %s --check-prefix=BIG
14-
1511
# CHECK: (lldb) disassemble
1612
# CHECK-NEXT: command-disassemble-process.exe`main:
1713
# CHECK-NEXT: 0x4002 <+0>: addb %al, (%rcx)
@@ -63,8 +59,6 @@
6359
# CHECK-NEXT: 0x400e: addb %cl, (%rcx)
6460
# CHECK-NEXT: 0x4010: addb %cl, (%rdx)
6561

66-
# BIG: error: Not disassembling the current function because it is very large [0x0000000000004002-0x0000000000004fa2). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
67-
6862
--- !ELF
6963
FileHeader:
7064
Class: ELFCLASS64
@@ -78,7 +72,6 @@ Sections:
7872
Address: 0x0000000000004000
7973
AddressAlign: 0x0000000000001000
8074
Content: 00000001000200030006000700080009000A000B000E000F00100011001200130016001700180019001A001B001E001F00200021002200230026002700280029002A002B002E002F
81-
Size: 0x10000
8275
- Name: .note.gnu.build-id
8376
Type: SHT_NOTE
8477
Flags: [ SHF_ALLOC ]
@@ -90,7 +83,7 @@ Symbols:
9083
Type: STT_FUNC
9184
Section: .text
9285
Value: 0x0000000000004002
93-
Size: [[MAIN_SIZE]]
86+
Size: 0x0000000000000008
9487
ProgramHeaders:
9588
- Type: PT_LOAD
9689
Flags: [ PF_X, PF_R ]

lldb/test/Shell/Commands/command-disassemble.s

Lines changed: 4 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,8 @@
5151
# CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>: int $0x14
5252
# CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>: int $0x15
5353
# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int $0x16
54-
# CHECK-NEXT: (lldb) disassemble --address 0xdeadb
55-
# CHECK-NEXT: error: Could not find function bounds for address 0xdeadb
56-
# CHECK-NEXT: (lldb) disassemble --address 0x100
57-
# CHECK-NEXT: error: Not disassembling the function because it is very large [0x0000000000000040-0x0000000000002040). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
58-
# CHECK-NEXT: (lldb) disassemble --address 0x100 --count 3
59-
# CHECK-NEXT: command-disassemble.s.tmp`very_long:
60-
# CHECK-NEXT: command-disassemble.s.tmp[0x40] <+0>: int $0x2a
61-
# CHECK-NEXT: command-disassemble.s.tmp[0x42] <+2>: int $0x2a
62-
# CHECK-NEXT: command-disassemble.s.tmp[0x44] <+4>: int $0x2a
63-
# CHECK-NEXT: (lldb) disassemble --address 0x100 --force
64-
# CHECK-NEXT: command-disassemble.s.tmp`very_long:
65-
# CHECK-NEXT: command-disassemble.s.tmp[0x40] <+0>: int $0x2a
66-
# CHECK: command-disassemble.s.tmp[0x203e] <+8190>: int $0x2a
54+
# CHECK-NEXT: (lldb) disassemble --address 0xdead
55+
# CHECK-NEXT: error: Could not find function bounds for address 0xdead
6756
# CHECK-NEXT: (lldb) disassemble --start-address 0x0 --count 7
6857
# CHECK-NEXT: command-disassemble.s.tmp`foo:
6958
# CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>: int $0x10
@@ -75,32 +64,8 @@
7564
# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int $0x16
7665
# CHECK-NEXT: (lldb) disassemble --start-address 0x0 --end-address 0x20 --count 7
7766
# CHECK-NEXT: error: invalid combination of options for the given command
78-
# CHECK-NEXT: (lldb) disassemble --name case1
79-
# CHECK-NEXT: command-disassemble.s.tmp`n1::case1:
80-
# CHECK-NEXT: command-disassemble.s.tmp[0x2040] <+0>: int $0x30
81-
# CHECK-EMPTY:
82-
# CHECK-NEXT: command-disassemble.s.tmp`n2::case1:
83-
# CHECK-NEXT: command-disassemble.s.tmp[0x2042] <+0>: int $0x31
84-
# CHECK-EMPTY:
85-
# CHECK-NEXT: (lldb) disassemble --name case2
86-
# CHECK-NEXT: command-disassemble.s.tmp`n1::case2:
87-
# CHECK-NEXT: command-disassemble.s.tmp[0x2044] <+0>: int $0x32
88-
# CHECK-NEXT: warning: Not disassembling a range because it is very large [0x0000000000002046-0x0000000000004046). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
89-
# CHECK-NEXT: (lldb) disassemble --name case3
90-
# CHECK-NEXT: error: Not disassembling a range because it is very large [0x0000000000004046-0x0000000000006046). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
91-
# CHECK-NEXT: Not disassembling a range because it is very large [0x0000000000006046-0x0000000000008046). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
92-
# CHECK-NEXT: (lldb) disassemble --name case3 --count 3
93-
# CHECK-NEXT: command-disassemble.s.tmp`n1::case3:
94-
# CHECK-NEXT: command-disassemble.s.tmp[0x4046] <+0>: int $0x2a
95-
# CHECK-NEXT: command-disassemble.s.tmp[0x4048] <+2>: int $0x2a
96-
# CHECK-NEXT: command-disassemble.s.tmp[0x404a] <+4>: int $0x2a
97-
# CHECK-EMPTY:
98-
# CHECK-NEXT: command-disassemble.s.tmp`n2::case3:
99-
# CHECK-NEXT: command-disassemble.s.tmp[0x6046] <+0>: int $0x2a
100-
# CHECK-NEXT: command-disassemble.s.tmp[0x6048] <+2>: int $0x2a
101-
# CHECK-NEXT: command-disassemble.s.tmp[0x604a] <+4>: int $0x2a
102-
# CHECK-EMPTY:
103-
67+
# CHECK-NEXT: (lldb) disassemble --address 0x0 --count 7
68+
# CHECK-NEXT: error: invalid combination of options for the given command
10469

10570
.text
10671
foo:
@@ -137,32 +102,3 @@ bar:
137102
int $0x2d
138103
int $0x2e
139104
int $0x2f
140-
141-
very_long:
142-
.rept 0x1000
143-
int $42
144-
.endr
145-
146-
_ZN2n15case1Ev:
147-
int $0x30
148-
149-
_ZN2n25case1Ev:
150-
int $0x31
151-
152-
_ZN2n15case2Ev:
153-
int $0x32
154-
155-
_ZN2n25case2Ev:
156-
.rept 0x1000
157-
int $42
158-
.endr
159-
160-
_ZN2n15case3Ev:
161-
.rept 0x1000
162-
int $42
163-
.endr
164-
165-
_ZN2n25case3Ev:
166-
.rept 0x1000
167-
int $42
168-
.endr

0 commit comments

Comments
 (0)