I’m pretty sure all you need to do is add a —force to the disassemble command in TestFoundationDisassembly.py.
Jim > On May 14, 2020, at 2:16 PM, via lldb-commits <lldb-commits@lists.llvm.org> > wrote: > > > Author: shafik > Date: 2020-05-14T14:15:51-07:00 > New Revision: 1cbd1b8f692df7742efb9114510688045d901f96 > > URL: > https://github.com/llvm/llvm-project/commit/1cbd1b8f692df7742efb9114510688045d901f96 > DIFF: > https://github.com/llvm/llvm-project/commit/1cbd1b8f692df7742efb9114510688045d901f96.diff > > LOG: Revert "[lldb] Don't dissasemble large functions by default" > > This reverts commit f665e80c023ec52557f55d7eeaf34471e4c6fa0d. > > Reverting because it breaks TestFoundationDisassembly.py > > Added: > > > Modified: > lldb/source/Commands/CommandObjectDisassemble.cpp > lldb/source/Commands/CommandObjectDisassemble.h > lldb/source/Commands/Options.td > lldb/test/Shell/Commands/Inputs/command-disassemble.lldbinit > lldb/test/Shell/Commands/command-disassemble-process.yaml > lldb/test/Shell/Commands/command-disassemble.s > > Removed: > > > > ################################################################################ > diff --git a/lldb/source/Commands/CommandObjectDisassemble.cpp > b/lldb/source/Commands/CommandObjectDisassemble.cpp > index d522d63b6d0d..511cd6995404 100644 > --- a/lldb/source/Commands/CommandObjectDisassemble.cpp > +++ b/lldb/source/Commands/CommandObjectDisassemble.cpp > @@ -21,9 +21,8 @@ > #include "lldb/Target/StackFrame.h" > #include "lldb/Target/Target.h" > > -static constexpr unsigned default_disasm_byte_size = 32; > -static constexpr unsigned default_disasm_num_ins = 4; > -static constexpr unsigned large_function_threshold = 4000; > +#define DEFAULT_DISASM_BYTE_SIZE 32 > +#define DEFAULT_DISASM_NUM_INS 4 > > using namespace lldb; > using namespace lldb_private; > @@ -144,10 +143,6 @@ Status > CommandObjectDisassemble::CommandOptions::SetOptionValue( > } > } break; > > - case '\x01': > - force = true; > - break; > - > default: > llvm_unreachable("Unimplemented option"); > } > @@ -191,7 +186,6 @@ void > CommandObjectDisassemble::CommandOptions::OptionParsingStarting( > > arch.Clear(); > some_location_specified = false; > - force = false; > } > > Status CommandObjectDisassemble::CommandOptions::OptionParsingFinished( > @@ -220,21 +214,6 @@ CommandObjectDisassemble::CommandObjectDisassemble( > > CommandObjectDisassemble::~CommandObjectDisassemble() = default; > > -llvm::Error CommandObjectDisassemble::CheckRangeSize(const AddressRange > &range, > - llvm::StringRef what) { > - if (m_options.num_instructions > 0 || m_options.force || > - range.GetByteSize() < large_function_threshold) > - return llvm::Error::success(); > - StreamString msg; > - msg << "Not disassembling " << what << " because it is very large "; > - range.Dump(&msg, &GetSelectedTarget(), Address::DumpStyleLoadAddress, > - Address::DumpStyleFileAddress); > - msg << ". To disassemble specify an instruction count limit, start/stop " > - "addresses or use the --force option."; > - return llvm::createStringError(llvm::inconvertibleErrorCode(), > - msg.GetString()); > -} > - > llvm::Expected<std::vector<AddressRange>> > CommandObjectDisassemble::GetContainingAddressRanges() { > std::vector<AddressRange> ranges; > @@ -275,9 +254,6 @@ CommandObjectDisassemble::GetContainingAddressRanges() { > "Could not find function bounds for address 0x%" PRIx64, > m_options.symbol_containing_addr); > } > - > - if (llvm::Error err = CheckRangeSize(ranges[0], "the function")) > - return std::move(err); > return ranges; > } > > @@ -297,10 +273,8 @@ CommandObjectDisassemble::GetCurrentFunctionRanges() { > else if (sc.symbol && sc.symbol->ValueIsAddress()) { > range = {sc.symbol->GetAddress(), sc.symbol->GetByteSize()}; > } else > - range = {frame->GetFrameCodeAddress(), default_disasm_byte_size}; > + range = {frame->GetFrameCodeAddress(), DEFAULT_DISASM_BYTE_SIZE}; > > - if (llvm::Error err = CheckRangeSize(range, "the current function")) > - return std::move(err); > return std::vector<AddressRange>{range}; > } > > @@ -324,7 +298,7 @@ CommandObjectDisassemble::GetCurrentLineRanges() { > } > > llvm::Expected<std::vector<AddressRange>> > -CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) { > +CommandObjectDisassemble::GetNameRanges() { > ConstString name(m_options.func_name.c_str()); > const bool include_symbols = true; > const bool include_inlines = true; > @@ -335,7 +309,6 @@ > CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) { > name, eFunctionNameTypeAuto, include_symbols, include_inlines, sc_list); > > std::vector<AddressRange> ranges; > - llvm::Error range_errs = llvm::Error::success(); > AddressRange range; > const uint32_t scope = > eSymbolContextBlock | eSymbolContextFunction | eSymbolContextSymbol; > @@ -344,21 +317,14 @@ > CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) { > for (uint32_t range_idx = 0; > sc.GetAddressRange(scope, range_idx, use_inline_block_range, range); > ++range_idx) { > - if (llvm::Error err = CheckRangeSize(range, "a range")) > - range_errs = joinErrors(std::move(range_errs), std::move(err)); > - else > - ranges.push_back(range); > + ranges.push_back(range); > } > } > if (ranges.empty()) { > - if (range_errs) > - return std::move(range_errs); > return llvm::createStringError(llvm::inconvertibleErrorCode(), > "Unable to find symbol with name '%s'.\n", > name.GetCString()); > } > - if (range_errs) > - result.AppendWarning(toString(std::move(range_errs))); > return ranges; > } > > @@ -374,7 +340,7 @@ CommandObjectDisassemble::GetPCRanges() { > if (m_options.num_instructions == 0) { > // Disassembling at the PC always disassembles some number of > // instructions (not the whole function). > - m_options.num_instructions = default_disasm_num_ins; > + m_options.num_instructions = DEFAULT_DISASM_NUM_INS; > } > return std::vector<AddressRange>{{frame->GetFrameCodeAddress(), 0}}; > } > @@ -393,8 +359,7 @@ CommandObjectDisassemble::GetStartEndAddressRanges() { > } > > llvm::Expected<std::vector<AddressRange>> > -CommandObjectDisassemble::GetRangesForSelectedMode( > - CommandReturnObject &result) { > +CommandObjectDisassemble::GetRangesForSelectedMode() { > if (m_options.symbol_containing_addr != LLDB_INVALID_ADDRESS) > return CommandObjectDisassemble::GetContainingAddressRanges(); > if (m_options.current_function) > @@ -402,7 +367,7 @@ CommandObjectDisassemble::GetRangesForSelectedMode( > if (m_options.frame_line) > return CommandObjectDisassemble::GetCurrentLineRanges(); > if (!m_options.func_name.empty()) > - return CommandObjectDisassemble::GetNameRanges(result); > + return CommandObjectDisassemble::GetNameRanges(); > if (m_options.start_addr != LLDB_INVALID_ADDRESS) > return CommandObjectDisassemble::GetStartEndAddressRanges(); > return CommandObjectDisassemble::GetPCRanges(); > @@ -475,8 +440,7 @@ bool CommandObjectDisassemble::DoExecute(Args &command, > if (m_options.raw) > options |= Disassembler::eOptionRawOuput; > > - llvm::Expected<std::vector<AddressRange>> ranges = > - GetRangesForSelectedMode(result); > + llvm::Expected<std::vector<AddressRange>> ranges = > GetRangesForSelectedMode(); > if (!ranges) { > result.AppendError(toString(ranges.takeError())); > result.SetStatus(eReturnStatusFailed); > @@ -489,7 +453,7 @@ bool CommandObjectDisassemble::DoExecute(Args &command, > if (m_options.num_instructions == 0) { > limit = {Disassembler::Limit::Bytes, cur_range.GetByteSize()}; > if (limit.value == 0) > - limit.value = default_disasm_byte_size; > + limit.value = DEFAULT_DISASM_BYTE_SIZE; > } else { > limit = {Disassembler::Limit::Instructions, m_options.num_instructions}; > } > @@ -512,7 +476,7 @@ bool CommandObjectDisassemble::DoExecute(Args &command, > result.SetStatus(eReturnStatusFailed); > } > if (print_sc_header) > - result.GetOutputStream() << "\n"; > + result.AppendMessage("\n"); > } > > return result.Succeeded(); > > diff --git a/lldb/source/Commands/CommandObjectDisassemble.h > b/lldb/source/Commands/CommandObjectDisassemble.h > index 340bf648de17..bdcb9a1b6edb 100644 > --- a/lldb/source/Commands/CommandObjectDisassemble.h > +++ b/lldb/source/Commands/CommandObjectDisassemble.h > @@ -62,7 +62,6 @@ class CommandObjectDisassemble : public CommandObjectParsed > { > // "at_pc". This should be set > // in SetOptionValue if anything the selects a location is set. > lldb::addr_t symbol_containing_addr; > - bool force = false; > }; > > CommandObjectDisassemble(CommandInterpreter &interpreter); > @@ -74,19 +73,15 @@ class CommandObjectDisassemble : public > CommandObjectParsed { > protected: > bool DoExecute(Args &command, CommandReturnObject &result) override; > > - llvm::Expected<std::vector<AddressRange>> > - GetRangesForSelectedMode(CommandReturnObject &result); > + llvm::Expected<std::vector<AddressRange>> GetRangesForSelectedMode(); > > llvm::Expected<std::vector<AddressRange>> GetContainingAddressRanges(); > llvm::Expected<std::vector<AddressRange>> GetCurrentFunctionRanges(); > llvm::Expected<std::vector<AddressRange>> GetCurrentLineRanges(); > - llvm::Expected<std::vector<AddressRange>> > - GetNameRanges(CommandReturnObject &result); > + llvm::Expected<std::vector<AddressRange>> GetNameRanges(); > llvm::Expected<std::vector<AddressRange>> GetPCRanges(); > llvm::Expected<std::vector<AddressRange>> GetStartEndAddressRanges(); > > - llvm::Error CheckRangeSize(const AddressRange &range, llvm::StringRef > what); > - > CommandOptions m_options; > }; > > > diff --git a/lldb/source/Commands/Options.td > b/lldb/source/Commands/Options.td > index addfec53b39c..05c7b3213e2a 100644 > --- a/lldb/source/Commands/Options.td > +++ b/lldb/source/Commands/Options.td > @@ -311,7 +311,7 @@ let Command = "disassemble" in { > Desc<"Address at which to start disassembling.">; > def disassemble_options_end_address : Option<"end-address", "e">, Group<1>, > Arg<"AddressOrExpression">, Desc<"Address at which to end > disassembling.">; > - def disassemble_options_count : Option<"count", "c">, Groups<[2,3,4,5,7]>, > + def disassemble_options_count : Option<"count", "c">, Groups<[2,3,4,5]>, > Arg<"NumLines">, Desc<"Number of instructions to display.">; > def disassemble_options_name : Option<"name", "n">, Group<3>, > Arg<"FunctionName">, Completion<"Symbol">, > @@ -326,8 +326,6 @@ let Command = "disassemble" in { > def disassemble_options_address : Option<"address", "a">, Group<7>, > Arg<"AddressOrExpression">, > Desc<"Disassemble function containing this address.">; > - def disassemble_options_force : Option<"force", "\\x01">, > Groups<[2,3,4,5,7]>, > - Desc<"Force dissasembly of large functions.">; > } > > let Command = "expression" in { > > diff --git a/lldb/test/Shell/Commands/Inputs/command-disassemble.lldbinit > b/lldb/test/Shell/Commands/Inputs/command-disassemble.lldbinit > index 9174b34bd4a9..6a328ffc7c32 100644 > --- a/lldb/test/Shell/Commands/Inputs/command-disassemble.lldbinit > +++ b/lldb/test/Shell/Commands/Inputs/command-disassemble.lldbinit > @@ -6,13 +6,7 @@ disassemble --start-address 0x0 > disassemble --start-address 0x4 --end-address 0x8 > disassemble --start-address 0x8 --end-address 0x4 > disassemble --address 0x0 > -disassemble --address 0xdeadb > -disassemble --address 0x100 > -disassemble --address 0x100 --count 3 > -disassemble --address 0x100 --force > +disassemble --address 0xdead > disassemble --start-address 0x0 --count 7 > disassemble --start-address 0x0 --end-address 0x20 --count 7 > -disassemble --name case1 > -disassemble --name case2 > -disassemble --name case3 > -disassemble --name case3 --count 3 > +disassemble --address 0x0 --count 7 > > diff --git a/lldb/test/Shell/Commands/command-disassemble-process.yaml > b/lldb/test/Shell/Commands/command-disassemble-process.yaml > index e9db8e8e64b2..7dc14517c24c 100644 > --- a/lldb/test/Shell/Commands/command-disassemble-process.yaml > +++ b/lldb/test/Shell/Commands/command-disassemble-process.yaml > @@ -1,7 +1,6 @@ > # REQUIRES: x86 > > -# RUN: yaml2obj --docnum=1 -DMAIN_SIZE=8 %s > > %T/command-disassemble-process.exe > -# RUN: yaml2obj --docnum=1 -DMAIN_SIZE=4000 %s > > %T/command-disassemble-process.big.exe > +# RUN: yaml2obj --docnum=1 %s > %T/command-disassemble-process.exe > # RUN: yaml2obj --docnum=2 %s > %t > > # RUN: %lldb -c %t %T/command-disassemble-process.exe \ > @@ -9,9 +8,6 @@ > # RUN: -s %S/Inputs/command-disassemble-process.lldbinit -o exit 2>&1 \ > # RUN: | FileCheck %s > > -# RUN: %lldb -c %t %T/command-disassemble-process.big.exe \ > -# RUN: -o disassemble -o exit 2>&1 | FileCheck %s --check-prefix=BIG > - > # CHECK: (lldb) disassemble > # CHECK-NEXT: command-disassemble-process.exe`main: > # CHECK-NEXT: 0x4002 <+0>: addb %al, (%rcx) > @@ -63,8 +59,6 @@ > # CHECK-NEXT: 0x400e: addb %cl, (%rcx) > # CHECK-NEXT: 0x4010: addb %cl, (%rdx) > > -# 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. > - > --- !ELF > FileHeader: > Class: ELFCLASS64 > @@ -78,7 +72,6 @@ Sections: > Address: 0x0000000000004000 > AddressAlign: 0x0000000000001000 > Content: > 00000001000200030006000700080009000A000B000E000F00100011001200130016001700180019001A001B001E001F00200021002200230026002700280029002A002B002E002F > - Size: 0x10000 > - Name: .note.gnu.build-id > Type: SHT_NOTE > Flags: [ SHF_ALLOC ] > @@ -90,7 +83,7 @@ Symbols: > Type: STT_FUNC > Section: .text > Value: 0x0000000000004002 > - Size: [[MAIN_SIZE]] > + Size: 0x0000000000000008 > ProgramHeaders: > - Type: PT_LOAD > Flags: [ PF_X, PF_R ] > > diff --git a/lldb/test/Shell/Commands/command-disassemble.s > b/lldb/test/Shell/Commands/command-disassemble.s > index e43c4e373998..aa47131c7ebd 100644 > --- a/lldb/test/Shell/Commands/command-disassemble.s > +++ b/lldb/test/Shell/Commands/command-disassemble.s > @@ -51,19 +51,8 @@ > # CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>: int $0x14 > # CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>: int $0x15 > # CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int $0x16 > -# CHECK-NEXT: (lldb) disassemble --address 0xdeadb > -# CHECK-NEXT: error: Could not find function bounds for address 0xdeadb > -# CHECK-NEXT: (lldb) disassemble --address 0x100 > -# 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. > -# CHECK-NEXT: (lldb) disassemble --address 0x100 --count 3 > -# CHECK-NEXT: command-disassemble.s.tmp`very_long: > -# CHECK-NEXT: command-disassemble.s.tmp[0x40] <+0>: int $0x2a > -# CHECK-NEXT: command-disassemble.s.tmp[0x42] <+2>: int $0x2a > -# CHECK-NEXT: command-disassemble.s.tmp[0x44] <+4>: int $0x2a > -# CHECK-NEXT: (lldb) disassemble --address 0x100 --force > -# CHECK-NEXT: command-disassemble.s.tmp`very_long: > -# CHECK-NEXT: command-disassemble.s.tmp[0x40] <+0>: int $0x2a > -# CHECK: command-disassemble.s.tmp[0x203e] <+8190>: int $0x2a > +# CHECK-NEXT: (lldb) disassemble --address 0xdead > +# CHECK-NEXT: error: Could not find function bounds for address 0xdead > # CHECK-NEXT: (lldb) disassemble --start-address 0x0 --count 7 > # CHECK-NEXT: command-disassemble.s.tmp`foo: > # CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>: int $0x10 > @@ -75,32 +64,8 @@ > # CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int $0x16 > # CHECK-NEXT: (lldb) disassemble --start-address 0x0 --end-address 0x20 > --count 7 > # CHECK-NEXT: error: invalid combination of options for the given command > -# CHECK-NEXT: (lldb) disassemble --name case1 > -# CHECK-NEXT: command-disassemble.s.tmp`n1::case1: > -# CHECK-NEXT: command-disassemble.s.tmp[0x2040] <+0>: int $0x30 > -# CHECK-EMPTY: > -# CHECK-NEXT: command-disassemble.s.tmp`n2::case1: > -# CHECK-NEXT: command-disassemble.s.tmp[0x2042] <+0>: int $0x31 > -# CHECK-EMPTY: > -# CHECK-NEXT: (lldb) disassemble --name case2 > -# CHECK-NEXT: command-disassemble.s.tmp`n1::case2: > -# CHECK-NEXT: command-disassemble.s.tmp[0x2044] <+0>: int $0x32 > -# 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. > -# CHECK-NEXT: (lldb) disassemble --name case3 > -# 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. > -# 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. > -# CHECK-NEXT: (lldb) disassemble --name case3 --count 3 > -# CHECK-NEXT: command-disassemble.s.tmp`n1::case3: > -# CHECK-NEXT: command-disassemble.s.tmp[0x4046] <+0>: int $0x2a > -# CHECK-NEXT: command-disassemble.s.tmp[0x4048] <+2>: int $0x2a > -# CHECK-NEXT: command-disassemble.s.tmp[0x404a] <+4>: int $0x2a > -# CHECK-EMPTY: > -# CHECK-NEXT: command-disassemble.s.tmp`n2::case3: > -# CHECK-NEXT: command-disassemble.s.tmp[0x6046] <+0>: int $0x2a > -# CHECK-NEXT: command-disassemble.s.tmp[0x6048] <+2>: int $0x2a > -# CHECK-NEXT: command-disassemble.s.tmp[0x604a] <+4>: int $0x2a > -# CHECK-EMPTY: > - > +# CHECK-NEXT: (lldb) disassemble --address 0x0 --count 7 > +# CHECK-NEXT: error: invalid combination of options for the given command > > .text > foo: > @@ -137,32 +102,3 @@ bar: > int $0x2d > int $0x2e > int $0x2f > - > -very_long: > - .rept 0x1000 > - int $42 > - .endr > - > -_ZN2n15case1Ev: > - int $0x30 > - > -_ZN2n25case1Ev: > - int $0x31 > - > -_ZN2n15case2Ev: > - int $0x32 > - > -_ZN2n25case2Ev: > - .rept 0x1000 > - int $42 > - .endr > - > -_ZN2n15case3Ev: > - .rept 0x1000 > - int $42 > - .endr > - > -_ZN2n25case3Ev: > - .rept 0x1000 > - int $42 > - .endr > > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits