Hello Ulrich,
Thank you for a good explanation of the different variants.
2014-07-30 21:29 GMT+02:00 Ulrich Weigand <Ulrich.Weigand at
de.ibm.com>:> Hi David,
>
>> I'm trying to understand which ABIs are supported in the PowerPC
>> backend and I'm getting a bit confused. Here's what I've
gathered so
>> far alongside with some questions.
>
> Sorry for the confusion, this all should probably be cleaned up a bit.
> In general, LLVM today supports the following ABIs:
> - The Darwin ABI (32-bit and 64-bit flavors)
> - The 32-bit SVR4 ABI
> - Two variants of the 64-bit SVR4 ABI: ELFv1 and ELFv2
>
> The ELFv1 ABI is used on 64-bit big-endian Linux and AIX.
> The ELFv2 ABI is used on 64-bit little-endian Linux.
>
> Unfortunately, the term "SVR4" is quite overloaded, and applies
> both to the 32-bit and the 64-bit ABIs, even though they are
> quite different. "ELF ABI" is used interchangably with
"SVR4 ABI".
>
> ELFv1 is a recently introduced term to refer to what was previously
> just called the ELF ABI (or equivalently SVR4 ABI); it is now used
> to refer to the *old* variant of the ELF ABI as opposed to the new
> one (ELFv2).
>
>> - In PPCSubtarget.h there's DarwinABI, SVR4ABI and ELFv2ABI.
>> - The CodeGenerator documentation claims that the AIX PowerPC ABI is
>> followed (with some deviations). Is this refering to the DarwinABI?
>
> No, that's the ELFv1 ABI.
>
But it describes both 64-bit and 32-bit linkage areas. Doesn't that
imply that it isn't ELFv1?
Just to be clear the document I'm talking about is:
http://llvm.org/docs/CodeGenerator.html#llvm-powerpc-abi
- David
>> - In a recent commit a TargetABI value and enumeration was added to
>> PPCSubtarget which contains PPC_ABI_UNKNOWN, PPC_ABI_ELFv1 and
>> PPC_ABI_ELFv2. For 64-bit non-Darwin the TargetABI value is set to
>> either ELF-variant in resetSubtargetFeatures(...) based on endianess
>> (unless explicitly set previously). As I understand it ELFv2 is a new
>> ABI but which ABI does ELFv1 map to?
>
> I hope the above makes it clearer.
>
>> - Since isSVR4ABI() is defined as !isDarwin() it currently is possible
>> for SVR4 and ELFv2 to be true at the same time which doesn't seem
>> correct to me.
>
> isSVR4ABI is true for either ELFv1 or ELFv2, and also for the 32-bit
> SVR4 ABI. This should probably be cleaned up by having three separate
> predicates ...
>
>> - My understanding of SVR4ABI have been that it is the 32-bit PPC
>> processor supplement from Sun. Is this correct? If so, which ABI is
>> used for 64-bit non-Darwin?
>
> SVR4 has always been used for either the 32-bit or 64-bit ELF ABIs
> (*both* are processor supplement documents based on the original
> Sun ELF/SVR4 ABI).
>
>> I'm trying to implement the PPC EABI (which is based on the
SVR4ABI)
>> for an out-of-tree subtarget which means I need to understand the
>> current status a bit better.
>
> It's up to Hal, but I'd suggest to split up the isSVR4ABI predicate
> into three separate options, e.g. isSVR4ABI (or maybe isSVR4_32ABI),
> isELFv1ABI, and isELFv2ABI; and then add another one for your new
> ABI.
>
> Bye,
> Ulrich
>
>