[Lldb-commits] [lldb] r252583 - The other half of a change made by Enrico for trying to get a correct
Zachary Turner via lldb-commits
lldb-commits at lists.llvm.org
Mon Nov 9 21:46:07 PST 2015
This is really the kind of thing that would be good to write a unit test
for. There's a lot of institutional knowledge hidden away in these kinds
of deep low level stuff, and a unit test is good documentation for it.
I suspect this is almost guaranteed to break at some point in the future
without an explicit test (especially since it's not immediately obvious why
a Target should behave that way)
It should be really easy to write one for this. You'd need to make a
TargetUnitTests target, create an empty target, set the triple to one
thing, set it to another thing, and ensure it retains the original value.
+todd in case you're interested in trying, he can probably help
On Mon, Nov 9, 2015 at 8:14 PM Jason Molenda via lldb-commits <
lldb-commits at lists.llvm.org> wrote:
> Author: jmolenda
> Date: Mon Nov 9 22:11:37 2015
> New Revision: 252583
>
> URL: http://llvm.org/viewvc/llvm-project?rev=252583&view=rev
> Log:
> The other half of a change made by Enrico for trying to get a correct
> triple for a process. He writes, "Changes to the way setting the
> triple works on a target so that if the target has passed a fully
> specified triple, and the newly passed triple is not a revamp of
> the current one, and the current one is fully specified, then do
> not replace the existing triple."
>
> Triple handling got a bit more complicated on mac with the addition
> of ios/watchos/tvos and their simulators, and tracking the correct
> os versions for them so expressions are compiled with the expected
> APIs available to the user.
>
> <rdar://problem/19820698>
>
> Modified:
> lldb/trunk/source/Target/Target.cpp
>
> Modified: lldb/trunk/source/Target/Target.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=252583&r1=252582&r2=252583&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Target/Target.cpp (original)
> +++ lldb/trunk/source/Target/Target.cpp Mon Nov 9 22:11:37 2015
> @@ -1243,44 +1243,70 @@ bool
> Target::SetArchitecture (const ArchSpec &arch_spec)
> {
> Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TARGET));
> - if (m_arch.IsCompatibleMatch(arch_spec) || !m_arch.IsValid())
> + bool missing_local_arch = (false == m_arch.IsValid());
> + bool replace_local_arch = true;
> + bool compatible_local_arch = false;
> + ArchSpec other(arch_spec);
> +
> + if (!missing_local_arch)
> + {
> + if (m_arch.IsCompatibleMatch(arch_spec))
> + {
> + other.MergeFrom(m_arch);
> +
> + if (m_arch.IsCompatibleMatch(other))
> + {
> + compatible_local_arch = true;
> + bool arch_changed, vendor_changed, os_changed,
> os_ver_changed, env_changed;
> +
> + m_arch.PiecewiseTripleCompare(other,
> + arch_changed,
> + vendor_changed,
> + os_changed,
> + os_ver_changed,
> + env_changed);
> +
> + if (!arch_changed && !vendor_changed && !os_changed)
> + replace_local_arch = false;
> + }
> + }
> + }
> +
> + if (compatible_local_arch || missing_local_arch)
> {
> - // If we haven't got a valid arch spec, or the architectures are
> - // compatible, so just update the architecture. Architectures can
> be
> - // equal, yet the triple OS and vendor might change, so we need
> to do
> - // the assignment here just in case.
> - m_arch = arch_spec;
> + // If we haven't got a valid arch spec, or the architectures are
> compatible
> + // update the architecture, unless the one we already have is
> more specified
> + if (replace_local_arch)
> + m_arch = other;
> if (log)
> - log->Printf ("Target::SetArchitecture setting architecture to
> %s (%s)", arch_spec.GetArchitectureName(),
> arch_spec.GetTriple().getTriple().c_str());
> + log->Printf ("Target::SetArchitecture set architecture to %s
> (%s)", m_arch.GetArchitectureName(),
> m_arch.GetTriple().getTriple().c_str());
> return true;
> }
> - else
> +
> + // If we have an executable file, try to reset the executable to the
> desired architecture
> + if (log)
> + log->Printf ("Target::SetArchitecture changing architecture to %s
> (%s)", arch_spec.GetArchitectureName(),
> arch_spec.GetTriple().getTriple().c_str());
> + m_arch = other;
> + ModuleSP executable_sp = GetExecutableModule ();
> +
> + ClearModules(true);
> + // Need to do something about unsetting breakpoints.
> +
> + if (executable_sp)
> {
> - // If we have an executable file, try to reset the executable to
> the desired architecture
> if (log)
> - log->Printf ("Target::SetArchitecture changing architecture to
> %s (%s)", arch_spec.GetArchitectureName(),
> arch_spec.GetTriple().getTriple().c_str());
> - m_arch = arch_spec;
> - ModuleSP executable_sp = GetExecutableModule ();
> -
> - ClearModules(true);
> - // Need to do something about unsetting breakpoints.
> -
> - if (executable_sp)
> + log->Printf("Target::SetArchitecture Trying to select
> executable file architecture %s (%s)", arch_spec.GetArchitectureName(),
> arch_spec.GetTriple().getTriple().c_str());
> + ModuleSpec module_spec (executable_sp->GetFileSpec(), other);
> + Error error = ModuleList::GetSharedModule (module_spec,
> + executable_sp,
> +
> &GetExecutableSearchPaths(),
> + NULL,
> + NULL);
> +
> + if (!error.Fail() && executable_sp)
> {
> - if (log)
> - log->Printf("Target::SetArchitecture Trying to select
> executable file architecture %s (%s)", arch_spec.GetArchitectureName(),
> arch_spec.GetTriple().getTriple().c_str());
> - ModuleSpec module_spec (executable_sp->GetFileSpec(),
> arch_spec);
> - Error error = ModuleList::GetSharedModule (module_spec,
> - executable_sp,
> -
> &GetExecutableSearchPaths(),
> - NULL,
> - NULL);
> -
> - if (!error.Fail() && executable_sp)
> - {
> - SetExecutableModule (executable_sp, true);
> - return true;
> - }
> + SetExecutableModule (executable_sp, true);
> + return true;
> }
> }
> return false;
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151110/3e90c7db/attachment.html>
More information about the lldb-commits
mailing list