Hi Ilia, I've reverted this change. r237479
Sincerely, Vince On Fri, May 15, 2015 at 2:17 PM, Vince Harron <vi...@nethacker.com> wrote: > 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