[Lldb-commits] [lldb] r237460 - Add --move-to-nearest-code / target.move-to-nearest-code options
Vince Harron
vince at nethacker.com
Fri May 15 14:17:57 PDT 2015
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.stfu at 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 at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150515/7d306083/attachment.html>
More information about the lldb-commits
mailing list