<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/95107>95107</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LLDB][Linux]Can not load the right module when loading a module having same name but different path with a loaded module
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
LeoJialiang
</td>
</tr>
</table>
<pre>
Some dynamic linker support to load module with the same name under different directories, like bionic.
When debugging a program which will link /PathA/liba.so by default, and it will dlopen /PathB/liba.so during runtime, the /PathB/liba.so can not be loaded correctly. LLDB will use /PathA/liba.so as the module of /PathB/liba.so. But /PathA/liba.so and /PathB/liba.so are different.
I find that, in [Status NativeProcessLinux::GetLoadedModuleFileSpec](https://github.com/llvm/llvm-project/blob/3cc2710e0dd53bb82742904fa13014018a1137ed/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp#L1840) , lldb will look for the module_path in the m_mem_region_cache, and just check the Filename without checking directory. This logic let lldb think two different so with same name the same.
Shall we change the NativeProcessLinux::GetLoadedModuleFileSpe to:
`Status NativeProcessLinux::GetLoadedModuleFileSpec(const char *module_path,
FileSpec &file_spec) {
Status error = PopulateMemoryRegionCache();
if (error.Fail())
return error;
FileSpec module_file_spec(module_path);
FileSystem::Instance().Resolve(module_file_spec);
file_spec.Clear();
for (const auto &it : m_mem_region_cache) {
if (it.second.GetFilename() == module_file_spec.GetFilename() &&
it.second.GetDirectory() == module_file_spec.GetDirectory()) {
file_spec = it.second;
return Status();
}
}
return Status("Module file (%s) not found in /proc/%" PRIu64 "/maps file!",
module_file_spec.GetFilename().AsCString(), GetID());
}`
I am not sure whether this change will make some other bug. Please take a look.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVttu4zYQ_Rr6ZVBBomzLfvCDL_AiRbYINgX6GFDkWOKGIgVe4vrvC1KS4yQGFtsgsC1xLmcOD2fInJONRtyQxY4sDjMWfGvs5hHNn5IpyXQzq424bJ5NhyAumnWSg5L6FS240PfGevAGlGECOiOCQjhL34JvERzrEHT8CFqgBSFPJ7SoPQhpkXtjJTpC96DkK0ItjZY8I_mB5Nvh858WNQisQ9NI3QCD3prGsg7OreQtnKVSCQsQenxivt0SelSyZpkzUF9A4IkF5WMGpgVIP3gIZXrUk8_uxkcEG_PYoL3sMPrFMu4YcqZBGw81pspRADc2lqQuGTw-HnZDpuDwHjTmUtyRLnO6kyGDXfB3fbW4B4hZfKf3A4cPcJJagG9ZIkJqIIvds2c-OPiLefmGT9ZwdO5R6vAvKbek3H5D_5jK-p4gHqXC5x45WRwIXbXe9y7a0SOhx0b6NtQZN11Eo96mrz96a34i94Qea2VqQo8l57QqcsyFWJR1vaLVnK7z-YkVZV7M82LFiqKsUKQAIno4EyzHWK0KjdQu_hqwEnoc4NLj1xoy3veElo_Fap4TuoakMCXqUS_GvMLJ2JsteOmZbyMz6dVLh92LxUYa_cIZb3HSz8_gPPAW-WsyjKwkcUe9mzAuRf1M6r5k8HcrHSjTxEODfoDh2yhZfzY3B8KZ4di8H5npAH3YzOeWKQVnBN4y3QxGv7eJ4E1cHmIu8_8pBLriRic2mAVCtzc8ErofosNkDYQuT1Lhi0uuayDVbjQZ06O1xgIpD_Bk-qCYx-_YGXv5kXZhP2zCitA1KSdPkPHYrJJndmRSjQZ0PRpY9MHqIfTVbXK-QhuB38BbfajlJmPyuTiP3cDNg3aeaT4iy36gM-oN3wPclvwZwHUt2ytk9ktxUZ9XklnwJnIoPZBye1egt5zCxI30mUNutMi-oZ_UOqSKXEe6P0O9Z0mX8X-I_SHkYZL5r2N-Mv0I-GqZFHBNcUNH_Bv3c1DMF8IASHWYHm5-fvWig5RTVkhvFi7iie38ZEKcE2k29Nbw1OIWhFJ4-vEQlnMglBJ67Fjvkj-hRXozKf7XdGZbt3_2ccpMTOzhG_qHw7t8r1KpDmSZf2zlrEs4XbAI5xZ9i7GPSTf1g9ThOvaK4OK8NsmgDk0GTwqZQ_BxjaUmODaWmdiUYl2u2Qw3RVWsiqKgtJq1m2LO1nklVpjTU1VjmWNBKcU1X4lqVbDTTG5oTuf5siiKMq_yRXZaVsWS83Kx5CVivSTzHDsmVRYHQmZsM5POBdysF0VezRSrUbl076BU4xnSYuRzcZjZTRoidWgcmedKOu_eo3jpVbqwxEkbh9JiN_SsxWE_DuZ0H4nd0cqm9debSbxPxKXhNjG-bdlbfH5vvXXwN605DYfUnNk07AfHWbBq89vTMFUZB9jAwtuG_hcAAP__jzIN8w">