[Lldb-commits] [lldb] r316673 - Allow SysV-i386 ABI on everything other than Apple targets
Davide Italiano via lldb-commits
lldb-commits at lists.llvm.org
Thu Oct 26 15:12:03 PDT 2017
On Thu, Oct 26, 2017 at 3:04 PM, Jason Molenda <jmolenda at apple.com> wrote:
>
>
>> On Oct 26, 2017, at 10:24 AM, Davide Italiano via lldb-commits <lldb-commits at lists.llvm.org> wrote:
>>
>> On Thu, Oct 26, 2017 at 10:04 AM, Stephane Sezer via lldb-commits
>> <lldb-commits at lists.llvm.org> wrote:
>>> Author: sas
>>> Date: Thu Oct 26 10:04:20 2017
>>> New Revision: 316673
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=316673&view=rev
>>> Log:
>>> Allow SysV-i386 ABI on everything other than Apple targets
>>>
>>> Summary:
>>> This matches other SysV ABIs that are different on Apple and non-Apple targets,
>>> like `ABISysV_arm.cpp` for instance.
>>>
>>> Reviewers: clayborg, emaste
>>>
>>> Subscribers: aemerson, kristof.beyls, lldb-commits
>>>
>>> Differential Revision: https://reviews.llvm.org/D39335
>>>
>>> Modified:
>>> lldb/trunk/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp
>>>
>>> Modified: lldb/trunk/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp?rev=316673&r1=316672&r2=316673&view=diff
>>> ==============================================================================
>>> --- lldb/trunk/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp (original)
>>> +++ lldb/trunk/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp Thu Oct 26 10:04:20 2017
>>> @@ -205,11 +205,12 @@ ABISysV_i386::GetRegisterInfoArray(uint3
>>> ABISP
>>> ABISysV_i386::CreateInstance(lldb::ProcessSP process_sp, const ArchSpec &arch) {
>>> static ABISP g_abi_sp;
>>> - if ((arch.GetTriple().getArch() == llvm::Triple::x86) &&
>>> - (arch.GetTriple().isOSLinux() || arch.GetTriple().isOSFreeBSD())) {
>>> - if (!g_abi_sp)
>>> - g_abi_sp.reset(new ABISysV_i386(process_sp));
>>> - return g_abi_sp;
>>> + if (arch.GetTriple().getVendor() != llvm::Triple::Apple) {
>>> + if (arch.GetTriple().getArch() == llvm::Triple::x86) {
>>> + if (!g_abi_sp)
>>> + g_abi_sp.reset(new ABISysV_i386(process_sp));
>>> + return g_abi_sp;
>>> + }
>>> }
>>> return ABISP();
>>> }
>>>
>>
>> This seems to change a fairly fundamental function for lldb-i386.
>> I think we should have an unit-test for this. Sorry for being
>> pedantic, I promise I'll stop after this one.
>
>
> It's a good suggestion, and not something we test today. Right now there are two i386 ABIs that lldb supports: Darwin and SysV. This patch implements that correctly -- but the obvious problem is if a third i386 ABI is added in the future. Now it's a race to see whether SysV-i386 or CrazyOtherABI-i386 gets CreateInstance'd, depending on the order they're registered or something. And I'm not sure how you write a test today that would test a new target that uses CrazyOtherABI-i386 is getting the correct plugin activated.
>
>
Thanks for your reply, Jason. I'm not sure how to test this either,
but I'll take a look.
In theory, (or at lesat what I have in mind :)) you should be able to
have a unit test that just allocates an object and calls
createInstance() directly [if possible], then checks that the result
is of the right type? [ABISysV_i386 vs ABIDarwin_i386 or something
like that?]
That won't of course take care of the race, but the test will break in
case somebody deletes code from the function (and/or allocates an
object with the wrong ABI).
I think it's not testing this feature entirely (and I think testing
the lack of races might be hard, but at least should give us some
coverage [if nothing, to discriminate dead code VS non-dead code].
To be fair, I haven't looked into how hard this is to get working, but
I might. CC:ing Zachary, maybe he has some ideas.
Thanks!
--
Davide
More information about the lldb-commits
mailing list