Hi Illia, This appears to have broken both OSX and Linux builders.
http://lab.llvm.org:8011/builders/lldb-x86_64-darwin-13.4/builds/2941 http://lab.llvm.org:8011/builders/lldb-x86_64-ubuntu-14.04-cmake/builds/2421 Is it a quick fix? If not, can you roll back? Thanks, Vince On Fri, May 15, 2015 at 11:16 AM, Ilia K <ki.s...@gmail.com> wrote: > Author: ki.stfu > Date: Fri May 15 13:16:15 2015 > New Revision: 237460 > > URL: http://llvm.org/viewvc/llvm-project?rev=237460&view=rev > Log: > Add --move-to-nearest-code / target.move-to-nearest-code options > > Summary: > This option forces to only set a source line breakpoint when there is an > exact-match > > This patch includes the following commits: > # Add the -m/--exact-match option in "breakpoint set" command > ## Add exact_match arg in BreakpointResolverFileLine ctor > ## Add m_exact_match field in BreakpointResolverFileLine > ## Add exact_match arg in BreakpointResolverFileRegex ctor > ## Add m_exact_match field in BreakpointResolverFileRegex > ## Add exact_match arg in Target::CreateSourceRegexBreakpoint > ## Add exact_match arg in Target::CreateBreakpoint > ## Add -m/--exact-match option in "breakpoint set" command > # Add target.exact-match option to skip BP if source line doesn't match > ## Add target.exact-match global option > ## Add Target::GetExactMatch > ## Refactor Target::CreateSourceRegexBreakpoint to accept LazyBool > exact_match (was bool) > ## Refactor Target::CreateBreakpoint to accept LazyBool exact_match (was > bool) > # Add target.exact-match test in SettingsCommandTestCase > # Add BreakpointOptionsTestCase tests to test > --skip-prologue/--exact-match options > # Fix a few typos in lldbutil.check_breakpoint_result func > # Rename --exact-match/m_exact_match/exact_match/GetExactMatch to > --move-to-nearest-code/m_move_to_nearest_code/move_to_nearest_code/GetMoveToNearestCode > # Add exact_match field in BreakpointResolverFileLine::GetDescription and > BreakpointResolverFileRegex::GetDescription, for example: > was: > ``` > 1: file = > '/Users/IliaK/p/llvm/tools/lldb/test/functionalities/breakpoint/breakpoint_command/main.c', > line = 12, locations = 1, resolved = 1, hit count = 2 > 1.1: where = a.out`main + 20 at main.c:12, address = 0x0000000100000eb4, > resolved, hit count = 2 > ``` > now: > ``` > 1: file = > '/Users/IliaK/p/llvm/tools/lldb/test/functionalities/breakpoint/breakpoint_command/main.c', > line = 12, exact_match = 0, locations = 1, resolved = 1, hit count = 2 > 1.1: where = a.out`main + 20 at main.c:12, address = 0x0000000100000eb4, > resolved, hit count = 2 > ``` > > Test Plan: > ./dotest.py -v --executable $BUILDDIR/bin/lldb functionalities/breakpoint/ > ./dotest.py -v --executable $BUILDDIR/bin/lldb settings/ > ./dotest.py -v --executable $BUILDDIR/bin/lldb tools/lldb-mi/breakpoint/ > > Reviewers: jingham, clayborg > > Reviewed By: clayborg > > Subscribers: lldb-commits, clayborg, jingham > > Differential Revision: http://reviews.llvm.org/D9273 > > Added: > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/ > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/Makefile > > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/main.c > Modified: > lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileLine.h > lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileRegex.h > lldb/trunk/include/lldb/Target/Target.h > lldb/trunk/source/API/SBTarget.cpp > lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp > lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp > lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp > lldb/trunk/source/Core/IOHandler.cpp > lldb/trunk/source/Target/Target.cpp > > lldb/trunk/test/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py > > lldb/trunk/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py > > lldb/trunk/test/functionalities/breakpoint/dummy_target_breakpoints/TestBreakpointsWithNoTargets.py > lldb/trunk/test/lldbutil.py > lldb/trunk/test/settings/TestSettings.py > lldb/trunk/test/tools/lldb-mi/breakpoint/TestMiBreak.py > lldb/trunk/test/tools/lldb-mi/breakpoint/main.cpp > > Modified: lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileLine.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileLine.h?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileLine.h > (original) > +++ lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileLine.h Fri > May 15 13:16:15 2015 > @@ -32,7 +32,8 @@ public: > const FileSpec &resolver, > uint32_t line_no, > bool check_inlines, > - bool skip_prologue); > + bool skip_prologue, > + bool exact_match); > > virtual > ~BreakpointResolverFileLine (); > @@ -67,6 +68,7 @@ protected: > uint32_t m_line_number; // This is the line number that we are > looking for. > bool m_inlines; // This determines whether the resolver looks for > inlined functions or not. > bool m_skip_prologue; > + bool m_exact_match; > > private: > DISALLOW_COPY_AND_ASSIGN(BreakpointResolverFileLine); > > Modified: lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileRegex.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileRegex.h?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileRegex.h > (original) > +++ lldb/trunk/include/lldb/Breakpoint/BreakpointResolverFileRegex.h Fri > May 15 13:16:15 2015 > @@ -29,7 +29,8 @@ class BreakpointResolverFileRegex : > { > public: > BreakpointResolverFileRegex (Breakpoint *bkpt, > - RegularExpression ®ex); > + RegularExpression ®ex, > + bool exact_match); > > virtual > ~BreakpointResolverFileRegex (); > @@ -61,6 +62,7 @@ public: > protected: > friend class Breakpoint; > RegularExpression m_regex; // This is the line expression that we are > looking for. > + bool m_exact_match; > > private: > DISALLOW_COPY_AND_ASSIGN(BreakpointResolverFileRegex); > > Modified: lldb/trunk/include/lldb/Target/Target.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/include/lldb/Target/Target.h (original) > +++ lldb/trunk/include/lldb/Target/Target.h Fri May 15 13:16:15 2015 > @@ -64,6 +64,9 @@ public: > void > SetDefaultArchitecture (const ArchSpec& arch); > > + bool > + GetMoveToNearestCode () const; > + > lldb::DynamicValueType > GetPreferDynamicValue() const; > > @@ -698,7 +701,8 @@ public: > LazyBool check_inlines, > LazyBool skip_prologue, > bool internal, > - bool request_hardware); > + bool request_hardware, > + LazyBool move_to_nearest_code); > > // Use this to create breakpoint that matches regex against the > source lines in files given in source_file_list: > lldb::BreakpointSP > @@ -706,7 +710,8 @@ public: > const FileSpecList *source_file_list, > RegularExpression &source_regex, > bool internal, > - bool request_hardware); > + bool request_hardware, > + LazyBool move_to_nearest_code); > > // Use this to create a breakpoint from a load address > lldb::BreakpointSP > > Modified: lldb/trunk/source/API/SBTarget.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBTarget.cpp?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/source/API/SBTarget.cpp (original) > +++ lldb/trunk/source/API/SBTarget.cpp Fri May 15 13:16:15 2015 > @@ -808,7 +808,8 @@ SBTarget::BreakpointCreateByLocation (co > const LazyBool skip_prologue = eLazyBoolCalculate; > const bool internal = false; > const bool hardware = false; > - *sb_bp = target_sp->CreateBreakpoint (NULL, *sb_file_spec, line, > check_inlines, skip_prologue, internal, hardware); > + const LazyBool move_to_nearest_code = eLazyBoolCalculate; > + *sb_bp = target_sp->CreateBreakpoint (NULL, *sb_file_spec, line, > check_inlines, skip_prologue, internal, hardware, move_to_nearest_code); > } > > if (log) > @@ -1055,6 +1056,7 @@ SBTarget::BreakpointCreateBySourceRegex > RegularExpression regexp(source_regex); > FileSpecList source_file_spec_list; > const bool hardware = false; > + const LazyBool move_to_nearest_code = eLazyBoolCalculate; > source_file_spec_list.Append (source_file.ref()); > > if (module_name && module_name[0]) > @@ -1062,11 +1064,11 @@ SBTarget::BreakpointCreateBySourceRegex > FileSpecList module_spec_list; > module_spec_list.Append (FileSpec (module_name, false)); > > - *sb_bp = target_sp->CreateSourceRegexBreakpoint > (&module_spec_list, &source_file_spec_list, regexp, false, hardware); > + *sb_bp = target_sp->CreateSourceRegexBreakpoint > (&module_spec_list, &source_file_spec_list, regexp, false, hardware, > move_to_nearest_code); > } > else > { > - *sb_bp = target_sp->CreateSourceRegexBreakpoint (NULL, > &source_file_spec_list, regexp, false, hardware); > + *sb_bp = target_sp->CreateSourceRegexBreakpoint (NULL, > &source_file_spec_list, regexp, false, hardware, move_to_nearest_code); > } > } > > @@ -1095,8 +1097,9 @@ SBTarget::BreakpointCreateBySourceRegex > { > Mutex::Locker api_locker (target_sp->GetAPIMutex()); > const bool hardware = false; > + const LazyBool move_to_nearest_code = eLazyBoolCalculate; > RegularExpression regexp(source_regex); > - *sb_bp = target_sp->CreateSourceRegexBreakpoint > (module_list.get(), source_file_list.get(), regexp, false, hardware); > + *sb_bp = target_sp->CreateSourceRegexBreakpoint > (module_list.get(), source_file_list.get(), regexp, false, hardware, > move_to_nearest_code); > } > > if (log) > > Modified: lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp (original) > +++ lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp Fri May 15 > 13:16:15 2015 > @@ -32,13 +32,15 @@ BreakpointResolverFileLine::BreakpointRe > const FileSpec &file_spec, > uint32_t line_no, > bool check_inlines, > - bool skip_prologue > + bool skip_prologue, > + bool exact_match > ) : > BreakpointResolver (bkpt, BreakpointResolver::FileLineResolver), > m_file_spec (file_spec), > m_line_number (line_no), > m_inlines (check_inlines), > - m_skip_prologue(skip_prologue) > + m_skip_prologue(skip_prologue), > + m_exact_match(exact_match) > { > } > > @@ -78,7 +80,7 @@ BreakpointResolverFileLine::SearchCallba > if (cu_sp) > { > if (filter.CompUnitPasses(*cu_sp)) > - cu_sp->ResolveSymbolContext (m_file_spec, m_line_number, > m_inlines, false, eSymbolContextEverything, sc_list); > + cu_sp->ResolveSymbolContext (m_file_spec, m_line_number, > m_inlines, m_exact_match, eSymbolContextEverything, sc_list); > } > } > StreamString s; > @@ -100,7 +102,7 @@ BreakpointResolverFileLine::GetDepth() > void > BreakpointResolverFileLine::GetDescription (Stream *s) > { > - s->Printf ("file = '%s', line = %u", m_file_spec.GetPath().c_str(), > m_line_number); > + s->Printf ("file = '%s', line = %u, exact_match = %d", > m_file_spec.GetPath().c_str(), m_line_number, m_exact_match); > } > > void > @@ -116,7 +118,8 @@ BreakpointResolverFileLine::CopyForBreak > > m_file_spec, > > m_line_number, > > m_inlines, > - > m_skip_prologue)); > + > m_skip_prologue, > + > m_exact_match)); > > return ret_sp; > } > > Modified: lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp (original) > +++ lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp Fri May > 15 13:16:15 2015 > @@ -29,10 +29,12 @@ using namespace lldb_private; > BreakpointResolverFileRegex::BreakpointResolverFileRegex > ( > Breakpoint *bkpt, > - RegularExpression ®ex > + RegularExpression ®ex, > + bool exact_match > ) : > BreakpointResolver (bkpt, BreakpointResolver::FileLineResolver), > - m_regex (regex) > + m_regex (regex), > + m_exact_match (exact_match) > { > } > > @@ -64,9 +66,8 @@ BreakpointResolverFileRegex::SearchCallb > { > SymbolContextList sc_list; > const bool search_inlines = false; > - const bool exact = false; > > - cu->ResolveSymbolContext (cu_file_spec, line_matches[i], > search_inlines, exact, eSymbolContextEverything, sc_list); > + cu->ResolveSymbolContext (cu_file_spec, line_matches[i], > search_inlines, m_exact_match, eSymbolContextEverything, sc_list); > const bool skip_prologue = true; > > BreakpointResolver::SetSCMatchesByLine (filter, sc_list, > skip_prologue, m_regex.GetText()); > @@ -85,7 +86,7 @@ BreakpointResolverFileRegex::GetDepth() > void > BreakpointResolverFileRegex::GetDescription (Stream *s) > { > - s->Printf ("source regex = \"%s\"", m_regex.GetText()); > + s->Printf ("source regex = \"%s\", exact_match = %d", > m_regex.GetText(), m_exact_match); > } > > void > @@ -97,7 +98,7 @@ BreakpointResolverFileRegex::Dump (Strea > lldb::BreakpointResolverSP > BreakpointResolverFileRegex::CopyForBreakpoint (Breakpoint &breakpoint) > { > - lldb::BreakpointResolverSP ret_sp(new > BreakpointResolverFileRegex(&breakpoint, m_regex)); > + lldb::BreakpointResolverSP ret_sp(new > BreakpointResolverFileRegex(&breakpoint, m_regex, m_exact_match)); > return ret_sp; > } > > > Modified: lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp (original) > +++ lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp Fri May 15 > 13:16:15 2015 > @@ -115,7 +115,8 @@ public: > m_exception_language (eLanguageTypeUnknown), > m_skip_prologue (eLazyBoolCalculate), > m_one_shot (false), > - m_all_files (false) > + m_all_files (false), > + m_move_to_nearest_code (eLazyBoolCalculate) > { > } > > @@ -249,6 +250,22 @@ public: > error.SetErrorStringWithFormat ("invalid line > number: %s.", option_arg); > break; > } > + > + case 'm': > + { > + bool success; > + bool value; > + value = Args::StringToBoolean (option_arg, true, > &success); > + if (value) > + m_move_to_nearest_code = eLazyBoolYes; > + else > + m_move_to_nearest_code = eLazyBoolNo; > + > + if (!success) > + error.SetErrorStringWithFormat ("Invalid boolean > value for move-to-nearest-code option: '%s'", option_arg); > + break; > + } > + > case 'M': > m_func_names.push_back (option_arg); > m_func_name_type_mask |= eFunctionNameTypeMethod; > @@ -361,6 +378,7 @@ public: > m_breakpoint_names.clear(); > m_all_files = false; > m_exception_extra_args.Clear(); > + m_move_to_nearest_code = eLazyBoolCalculate; > } > > const OptionDefinition* > @@ -400,6 +418,7 @@ public: > bool m_use_dummy; > bool m_all_files; > Args m_exception_extra_args; > + LazyBool m_move_to_nearest_code; > > }; > > @@ -477,7 +496,8 @@ protected: > check_inlines, > > m_options.m_skip_prologue, > internal, > - > m_options.m_hardware).get(); > + m_options.m_hardware, > + > m_options.m_move_to_nearest_code).get(); > } > break; > > @@ -558,7 +578,8 @@ protected: > > &(m_options.m_filenames), > regexp, > internal, > - > m_options.m_hardware).get(); > + > m_options.m_hardware, > + > m_options.m_move_to_nearest_code).get(); > } > break; > case eSetTypeException: > @@ -689,6 +710,7 @@ private: > #define LLDB_OPT_FILE ( LLDB_OPT_SET_FROM_TO(1, 9) & ~LLDB_OPT_SET_2 ) > #define LLDB_OPT_NOT_10 ( LLDB_OPT_SET_FROM_TO(1, 10) & ~LLDB_OPT_SET_10 ) > #define LLDB_OPT_SKIP_PROLOGUE ( LLDB_OPT_SET_1 | > LLDB_OPT_SET_FROM_TO(3,8) ) > +#define LLDB_OPT_MOVE_TO_NEAREST_CODE ( LLDB_OPT_SET_1 | LLDB_OPT_SET_9 ) > > OptionDefinition > CommandObjectBreakpointSet::CommandOptions::g_option_table[] = > @@ -789,6 +811,9 @@ CommandObjectBreakpointSet::CommandOptio > { LLDB_OPT_SET_ALL, false, "breakpoint-name", 'N', > OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeBreakpointName, > "Adds this to the list of names for this breakopint."}, > > + { LLDB_OPT_MOVE_TO_NEAREST_CODE, false, "move-to-nearest-code", 'm', > OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeBoolean, > + "Move breakpoints to nearest code. If not set the > target.move-to-nearest-code setting is used." }, > + > { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL } > }; > > > Modified: lldb/trunk/source/Core/IOHandler.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/IOHandler.cpp?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/source/Core/IOHandler.cpp (original) > +++ lldb/trunk/source/Core/IOHandler.cpp Fri May 15 13:16:15 2015 > @@ -5326,7 +5326,8 @@ public: > > eLazyBoolCalculate, // Check inlines using global > setting > > eLazyBoolCalculate, // Skip prologue using global > setting, > > false, // internal > - > false); // request_hardware > + > false, // request_hardware > + > eLazyBoolCalculate); // move_to_nearest_code > // Make breakpoint one shot > bp_sp->GetOptions()->SetOneShot(true); > exe_ctx.GetProcessRef().Resume(); > @@ -5361,7 +5362,8 @@ public: > > eLazyBoolCalculate, // Check inlines using global > setting > > eLazyBoolCalculate, // Skip prologue using global > setting, > > false, // internal > - > false); // request_hardware > + > false, // request_hardware > + > eLazyBoolCalculate); // move_to_nearest_code > } > } > else if (m_selected_line < GetNumDisassemblyLines()) > > Modified: lldb/trunk/source/Target/Target.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/source/Target/Target.cpp (original) > +++ lldb/trunk/source/Target/Target.cpp Fri May 15 13:16:15 2015 > @@ -273,10 +273,13 @@ Target::CreateSourceRegexBreakpoint (con > const FileSpecList > *source_file_spec_list, > RegularExpression &source_regex, > bool internal, > - bool hardware) > + bool hardware, > + LazyBool move_to_nearest_code) > { > SearchFilterSP filter_sp(GetSearchFilterForModuleAndCUList > (containingModules, source_file_spec_list)); > - BreakpointResolverSP resolver_sp(new BreakpointResolverFileRegex > (NULL, source_regex)); > + if (move_to_nearest_code == eLazyBoolCalculate) > + move_to_nearest_code = GetMoveToNearestCode() ? eLazyBoolYes : > eLazyBoolNo; > + BreakpointResolverSP resolver_sp(new BreakpointResolverFileRegex > (NULL, source_regex, !static_cast<bool>(move_to_nearest_code))); > return CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, > true); > } > > @@ -288,7 +291,8 @@ Target::CreateBreakpoint (const FileSpec > LazyBool check_inlines, > LazyBool skip_prologue, > bool internal, > - bool hardware) > + bool hardware, > + LazyBool move_to_nearest_code) > { > if (check_inlines == eLazyBoolCalculate) > { > @@ -325,12 +329,15 @@ Target::CreateBreakpoint (const FileSpec > } > if (skip_prologue == eLazyBoolCalculate) > skip_prologue = GetSkipPrologue() ? eLazyBoolYes : eLazyBoolNo; > + if (move_to_nearest_code == eLazyBoolCalculate) > + move_to_nearest_code = GetMoveToNearestCode() ? eLazyBoolYes : > eLazyBoolNo; > > BreakpointResolverSP resolver_sp(new BreakpointResolverFileLine (NULL, > file, > > line_no, > > check_inlines, > - > skip_prologue)); > + > skip_prologue, > + > !static_cast<bool>(move_to_nearest_code))); > return CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, > true); > } > > @@ -2928,6 +2935,7 @@ static PropertyDefinition > g_properties[] = > { > { "default-arch" , OptionValue::eTypeArch > , true , 0 , NULL, NULL, "Default architecture to > choose, when there's a choice." }, > + { "move-to-nearest-code" , OptionValue::eTypeBoolean > , false, true , NULL, NULL, "Move breakpoints to > nearest code." }, > { "expr-prefix" , OptionValue::eTypeFileSpec > , false, 0 , NULL, NULL, "Path to a file containing > expressions to be prepended to all expressions." }, > { "prefer-dynamic-value" , OptionValue::eTypeEnum > , false, eDynamicDontRunTarget , NULL, g_dynamic_value_types, "Should > printed values be shown as their dynamic value." }, > { "enable-synthetic-value" , OptionValue::eTypeBoolean > , false, true , NULL, NULL, "Should synthetic values > be used by default whenever available." }, > @@ -2985,6 +2993,7 @@ g_properties[] = > enum > { > ePropertyDefaultArch, > + ePropertyMoveToNearestCode, > ePropertyExprPrefix, > ePropertyPreferDynamic, > ePropertyEnableSynthetic, > @@ -3193,6 +3202,13 @@ TargetProperties::SetDefaultArchitecture > return value->SetCurrentValue(arch, true); > } > > +bool > +TargetProperties::GetMoveToNearestCode() const > +{ > + const uint32_t idx = ePropertyMoveToNearestCode; > + return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, > g_properties[idx].default_uint_value != 0); > +} > + > lldb::DynamicValueType > TargetProperties::GetPreferDynamicValue() const > { > > Modified: > lldb/trunk/test/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- > lldb/trunk/test/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py > (original) > +++ > lldb/trunk/test/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py > Fri May 15 13:16:15 2015 > @@ -64,12 +64,12 @@ class BreakpointCommandTestCase(TestBase > > # The breakpoint list now only contains breakpoint 1. > self.expect("breakpoint list", "Breakpoints 1 & 2 created", > - substrs = ["2: file = 'main.c', line = %d, locations = 1" % > self.line], > - patterns = ["1: file = '.*main.c', line = %d, locations = 1" > % self.line] ) > + substrs = ["2: file = 'main.c', line = %d, exact_match = 0, > locations = 1" % self.line], > + patterns = ["1: file = '.*main.c', line = %d, exact_match = > 0, locations = 1" % self.line] ) > > self.expect("breakpoint list -f", "Breakpoints 1 & 2 created", > - substrs = ["2: file = 'main.c', line = %d, locations = 1" % > self.line], > - patterns = ["1: file = '.*main.c', line = %d, locations = 1" > % self.line, > + substrs = ["2: file = 'main.c', line = %d, exact_match = 0, > locations = 1" % self.line], > + patterns = ["1: file = '.*main.c', line = %d, exact_match = > 0, locations = 1" % self.line, > "1.1: .+at main.c:%d, .+unresolved, hit count = > 0" % self.line, > "2.1: .+at main.c:%d, .+unresolved, hit count = > 0" % self.line]) > > @@ -151,13 +151,13 @@ class BreakpointCommandTestCase(TestBase > > # The breakpoint list now only contains breakpoint 1. > self.expect("breakpoint list -f", "Breakpoint 1 exists", > - patterns = ["1: file = '.*main.c', line = %d, locations = 1, > resolved = 1" % > + patterns = ["1: file = '.*main.c', line = %d, exact_match = > 0, locations = 1, resolved = 1" % > self.line, > "hit count = 1"]) > > # Not breakpoint 2. > self.expect("breakpoint list -f", "No more breakpoint 2", > matching=False, > - substrs = ["2: file = 'main.c', line = %d, locations = 1, > resolved = 1" % > + substrs = ["2: file = 'main.c', line = %d, exact_match = 0, > locations = 1, resolved = 1" % > self.line]) > > # Run the program again, with breakpoint 1 remaining. > > Modified: > lldb/trunk/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- > lldb/trunk/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py > (original) > +++ > lldb/trunk/test/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py > Fri May 15 13:16:15 2015 > @@ -41,7 +41,7 @@ class BreakpointLocationsTestCase(TestBa > > # The breakpoint list should show 3 locations. > self.expect("breakpoint list -f", "Breakpoint locations shown > correctly", > - substrs = ["1: file = 'main.c', line = %d, locations = 3" % > self.line], > + substrs = ["1: file = 'main.c', line = %d, exact_match = 0, > locations = 3" % self.line], > patterns = ["where = a.out`func_inlined .+unresolved, hit > count = 0", > "where = a.out`main .+\[inlined\].+unresolved, > hit count = 0"]) > > > Added: > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/Makefile > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/breakpoint/breakpoint_options/Makefile?rev=237460&view=auto > > ============================================================================== > --- lldb/trunk/test/functionalities/breakpoint/breakpoint_options/Makefile > (added) > +++ lldb/trunk/test/functionalities/breakpoint/breakpoint_options/Makefile > Fri May 15 13:16:15 2015 > @@ -0,0 +1,5 @@ > +LEVEL = ../../../make > + > +C_SOURCES := main.c > + > +include $(LEVEL)/Makefile.rules > > Added: > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py?rev=237460&view=auto > > ============================================================================== > --- > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py > (added) > +++ > lldb/trunk/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py > Fri May 15 13:16:15 2015 > @@ -0,0 +1,77 @@ > +""" > +Test breakpoint command for different options. > +""" > + > +import os > +import unittest2 > +import lldb > +from lldbtest import * > +import lldbutil > + > +class BreakpointOptionsTestCase(TestBase): > + > + mydir = TestBase.compute_mydir(__file__) > + > + @skipUnlessDarwin > + @dsym_test > + def test_with_dsym(self): > + """Test breakpoint command for different options.""" > + self.buildDsym() > + self.breakpoint_options_test() > + > + @dwarf_test > + def test_with_dwarf(self): > + """Test breakpoint command for different options.""" > + self.buildDwarf() > + self.breakpoint_options_test() > + > + def setUp(self): > + # Call super's setUp(). > + TestBase.setUp(self) > + # Find the line number to break inside main(). > + self.line = line_number('main.c', '// Set break point at this > line.') > + > + def breakpoint_options_test(self): > + """Test breakpoint command for different options.""" > + exe = os.path.join(os.getcwd(), "a.out") > + self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) > + > + # This should create a breakpoint with 1 locations. > + lldbutil.run_break_set_by_file_and_line (self, "main.c", > self.line, extra_options = "-K 1", num_expected_locations = 1) > + lldbutil.run_break_set_by_file_and_line (self, "main.c", > self.line, extra_options = "-K 0", num_expected_locations = 1) > + > + # This should create a breakpoint 0 locations. > + lldbutil.run_break_set_by_file_and_line (self, "main.c", > self.line, extra_options = "-m 0", num_expected_locations = 0) > + > + # Run the program. > + self.runCmd("run", RUN_SUCCEEDED) > + > + # Stopped once. > + self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, > + substrs = ["stop reason = breakpoint 2."]) > + > + # Check the list of breakpoint. > + self.expect("breakpoint list -f", "Breakpoint locations shown > correctly", > + substrs = ["1: file = 'main.c', line = %d, exact_match = 0, > locations = 1" % self.line, > + "2: file = 'main.c', line = %d, exact_match = 0, > locations = 1" % self.line, > + "3: file = 'main.c', line = %d, exact_match = 1, > locations = 0" % self.line]) > + > + # Continue the program, there should be another stop. > + self.runCmd("process continue") > + > + # Stopped again. > + self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, > + substrs = ["stop reason = breakpoint 1."]) > + > + # Continue the program, we should exit. > + self.runCmd("process continue") > + > + # We should exit. > + self.expect("process status", "Process exited successfully", > + patterns = ["^Process [0-9]+ exited with status = 0"]) > + > +if __name__ == '__main__': > + import atexit > + lldb.SBDebugger.Initialize() > + atexit.register(lambda: lldb.SBDebugger.Terminate()) > + unittest2.main() > > Added: lldb/trunk/test/functionalities/breakpoint/breakpoint_options/main.c > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/breakpoint/breakpoint_options/main.c?rev=237460&view=auto > > ============================================================================== > --- lldb/trunk/test/functionalities/breakpoint/breakpoint_options/main.c > (added) > +++ lldb/trunk/test/functionalities/breakpoint/breakpoint_options/main.c > Fri May 15 13:16:15 2015 > @@ -0,0 +1,7 @@ > +// Set break point at this line. > + > +int > +main (int argc, char **argv) > +{ > + return 0; > +} > > Modified: > lldb/trunk/test/functionalities/breakpoint/dummy_target_breakpoints/TestBreakpointsWithNoTargets.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/breakpoint/dummy_target_breakpoints/TestBreakpointsWithNoTargets.py?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- > lldb/trunk/test/functionalities/breakpoint/dummy_target_breakpoints/TestBreakpointsWithNoTargets.py > (original) > +++ > lldb/trunk/test/functionalities/breakpoint/dummy_target_breakpoints/TestBreakpointsWithNoTargets.py > Fri May 15 13:16:15 2015 > @@ -54,8 +54,8 @@ class BreakpointInDummyTarget (TestBase) > > # The breakpoint list should show 3 locations. > self.expect("breakpoint list -f", "Breakpoint locations shown > correctly", > - substrs = ["1: file = 'main.c', line = %d, locations = 1" % > self.line, > - "2: file = 'main.c', line = %d, locations = 1" % > self.line2]) > + substrs = ["1: file = 'main.c', line = %d, exact_match = 0, > locations = 1" % self.line, > + "2: file = 'main.c', line = %d, exact_match = 0, > locations = 1" % self.line2]) > > # Run the program. > self.runCmd("run", RUN_SUCCEEDED) > > Modified: lldb/trunk/test/lldbutil.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbutil.py?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/test/lldbutil.py (original) > +++ lldb/trunk/test/lldbutil.py Fri May 15 13:16:15 2015 > @@ -466,7 +466,7 @@ def check_breakpoint_result (test, break > test.assertTrue (file_name == out_file_name, "Breakpoint file > name '%s' doesn't match resultant name '%s'."%(file_name, out_file_name)) > > if line_number != -1: > - out_file_line = -1 > + out_line_number = -1 > if 'line_no' in break_results: > out_line_number = break_results['line_no'] > > @@ -486,7 +486,7 @@ def check_breakpoint_result (test, break > test.assertTrue(out_symbol_name.find(symbol_name) != -1, > "Symbol name '%s' isn't in resultant symbol '%s'."%(symbol_name, > out_symbol_name)) > > if module_name: > - out_nodule_name = None > + out_module_name = None > if 'module' in break_results: > out_module_name = break_results['module'] > > > Modified: lldb/trunk/test/settings/TestSettings.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/settings/TestSettings.py?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/test/settings/TestSettings.py (original) > +++ lldb/trunk/test/settings/TestSettings.py Fri May 15 13:16:15 2015 > @@ -450,6 +450,7 @@ class SettingsCommandTestCase(TestBase): > "thread-format", > "use-external-editor", > "target.default-arch", > + "target.move-to-nearest-code", > "target.expr-prefix", > "target.prefer-dynamic-value", > "target.enable-synthetic-value", > > Modified: lldb/trunk/test/tools/lldb-mi/breakpoint/TestMiBreak.py > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-mi/breakpoint/TestMiBreak.py?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/test/tools/lldb-mi/breakpoint/TestMiBreak.py (original) > +++ lldb/trunk/test/tools/lldb-mi/breakpoint/TestMiBreak.py Fri May 15 > 13:16:15 2015 > @@ -159,5 +159,52 @@ class MiBreakTestCase(lldbmi_testcase.Mi > self.expect("\^running") > self.expect("\*stopped,reason=\"breakpoint-hit\"") > > + @lldbmi_test > + @expectedFailureWindows("llvm.org/pr22274: need a pexpect > replacement for windows") > + @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known > thread races > + def test_lldbmi_break_insert_settings(self): > + """Test that 'lldb-mi --interpreter' can set breakpoints > accoridng to global options.""" > + > + self.spawnLldbMi(args = None) > + > + # Load executable > + self.runCmd("-file-exec-and-symbols %s" % self.myexe) > + self.expect("\^done") > + > + # Set target.move-to-nearest-code=off and try to set BP #1 that > shouldn't be hit > + self.runCmd("-interpreter-exec console \"settings set > target.move-to-nearest-code off\"") > + self.expect("\^done") > + line = line_number('main.cpp', '// BP_before_main') > + self.runCmd("-break-insert -f main.cpp:%d" % line) > + self.expect("\^done,bkpt={number=\"1\"") > + > + # Set target.move-to-nearest-code=on and target.skip-prologue=on > and set BP #2 > + self.runCmd("-interpreter-exec console \"settings set > target.move-to-nearest-code on\"") > + self.runCmd("-interpreter-exec console \"settings set > target.skip-prologue on\"") > + self.expect("\^done") > + self.runCmd("-break-insert main.cpp:%d" % line) > + self.expect("\^done,bkpt={number=\"2\"") > + > + # Set target.skip-prologue=off and set BP #3 > + self.runCmd("-interpreter-exec console \"settings set > target.skip-prologue off\"") > + self.expect("\^done") > + self.runCmd("-break-insert main.cpp:%d" % line) > + self.expect("\^done,bkpt={number=\"3\"") > + > + # Test that BP #3 is located before BP #2 > + self.runCmd("-exec-run") > + self.expect("\^running") > + > self.expect("\*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"3\"") > + > + # Test that BP #2 is hit > + self.runCmd("-exec-continue") > + self.expect("\^running") > + > self.expect("\*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"2\"") > + > + # Test that BP #1 wasn't set > + self.runCmd("-exec-continue") > + self.expect("\^running") > + self.expect("\*stopped,reason=\"exited-normally\"") > + > if __name__ == '__main__': > unittest2.main() > > Modified: lldb/trunk/test/tools/lldb-mi/breakpoint/main.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-mi/breakpoint/main.cpp?rev=237460&r1=237459&r2=237460&view=diff > > ============================================================================== > --- lldb/trunk/test/tools/lldb-mi/breakpoint/main.cpp (original) > +++ lldb/trunk/test/tools/lldb-mi/breakpoint/main.cpp Fri May 15 13:16:15 > 2015 > @@ -9,6 +9,8 @@ > > #include <cstdio> > > +// BP_before_main > + > int > main(int argc, char const *argv[]) > { > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits >
_______________________________________________ lldb-commits mailing list lldb-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits