[lldb-dev] Multiple platforms with the same name

Pavel Labath via lldb-dev lldb-dev at lists.llvm.org
Mon Jan 17 08:18:23 PST 2022


Hello all,

currently our code treats platform name more-or-less as a unique 
identifier  (e.g. Platform::Find returns at most one platform instance 
--the first one it finds).

This is why I was surprised that the "platform select" CLI command 
always creates a new instance of the given platform, even if the 
platform of a given name already exists. This is because 
Platform::Create does not search the existing platform list before 
creating a new one. This might sound reasonable at first, but for 
example the Platform::Create overload which takes an ArchSpec first 
tries to look for a compatible platforms among the existing ones before 
creating a new one.

For this reason, I am tempted to call this a bug and fix the name-taking 
Create overload. This change passes the test suite, except for a single 
test, which now gets confused because some information gets leaked from 
one test to another. (although our coverage of the Platform class in the 
tests is fairly weak)

However, this test got me thinking. It happens to use the the SB way of 
manipulating platforms, and "creates" a new instance as 
lldb.SBPlatform("remote-linux"). For this kind of a command, it would be 
reasonable/expected to create a new instance, were it not for the fact 
that this platform would be very tricky to access from the command line, 
and even through some APIs -- SBDebugger::CreateTarget takes a platform 
_name_.

So, which one is it? Should we always have at most one instance of each 
platform, or are multiple instances ok?

cheers,
pl

PS: In case you're wondering about how I run into this, I was trying to 
create a pre-configured platform instance in (e.g.) an lldbinit file, 
without making it the default. That way it would get automatically 
selected when the user opens an executable of the appropriate type. This 
actually works, *except* for the case when the user selects the platform 
manually. That's because in that case, we would create an 
empty/unpopulated platform, and it would be the one being selected 
because it was the /current/ platform.


More information about the lldb-dev mailing list