[Lldb-commits] [PATCH] D49685: LLDB does not respect platform sysroot when loading core on Linux
Leonard Mosescu via lldb-commits
lldb-commits at lists.llvm.org
Tue Jul 24 09:17:35 PDT 2018
>
> The problem is that shared libraries differ on these machines and
> LLDB either fails to load some libraries *or loads wrong ones*.
>
Not finding the modules is not surprising but the latter (loading the wrong
modules) is a bit concerning. Do you know why the module build-id is not
used when searching for the local binary?
On Tue, Jul 24, 2018 at 7:19 AM, Greg Clayton via Phabricator via
lldb-commits <lldb-commits at lists.llvm.org> wrote:
> clayborg requested changes to this revision.
> clayborg added a comment.
> This revision now requires changes to proceed.
>
> I think doing this in the module list is not the right place. Why? Some
> platforms might have multiple sysroot to check. iOS for instance has a
> directory for each device that Xcode has connected to which can be checked.
> I am fine with adding this ability to lldb_private::Platform, but I would
> just do it in there. Try GetRemoteSharedModule with the spec, if it fails,
> try again after modifying the spec to prepend the sysroot path. Possible
> even just check the sysroot path + path first if m_sdk_sysroot is filled
> in. I don't see the need to change ModuleList itself.
>
>
>
> ================
> Comment at: include/lldb/Core/ModuleList.h:544-545
> bool *did_create_ptr,
> - bool always_create = false);
> + bool always_create = false,
> + const char* sysroot = nullptr);
> static bool RemoveSharedModule(lldb::ModuleSP &module_sp);
> ----------------
> Revert this? See my main comment
>
>
> ================
> Comment at: source/Core/ModuleList.cpp:710-714
> + bool *did_create_ptr, bool
> always_create,
> + const char* sysroot) {
> + // Make sure no one else can try and get or create a module while this
> + // function is actively working on it by doing an extra lock on the
> + // global mutex list.
> ----------------
> Revert
>
>
> ================
> Comment at: source/Core/ModuleList.cpp:766-770
> + if (sysroot != nullptr)
> + resolved_module_spec.GetFileSpec().PrependPathComponent(sysroot);
> +
> + module_sp.reset(new Module(resolved_module_spec));
> // Make sure there are a module and an object file since we can specify
> ----------------
> Revert
>
>
> ================
> Comment at: source/Target/Platform.cpp:228
> module_spec, module_sp, module_search_paths_ptr,
> old_module_sp_ptr,
> - did_create_ptr, false);
> + did_create_ptr, false, m_sdk_sysroot.AsCString());
> return GetRemoteSharedModule(module_spec, process, module_sp,
> ----------------
> Revert
>
>
> ================
> Comment at: source/Target/Platform.cpp:230
> return GetRemoteSharedModule(module_spec, process, module_sp,
> [&](const ModuleSpec &spec) {
> Status error =
> ModuleList::GetSharedModule(
> ----------------
> Here just make a module spec that has m_sdk_sysroot prepended if
> m_sdk_sysroot is set, and check for that file first. If that succeeds,
> return that, else do the same code as before.
>
>
> Repository:
> rL LLVM
>
> https://reviews.llvm.org/D49685
>
>
>
> _______________________________________________
> 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/20180724/d056f57a/attachment-0001.html>
More information about the lldb-commits
mailing list