Target triplets

Adhemerval Zanella adhemerval.zanella@linaro.org
Fri Jan 11 12:40:00 GMT 2019



On 11/01/2019 09:59, Christer Solskogen wrote:
> On 11.01.2019 12:13, Florian Weimer wrote:
> 
>> I'm not aware of anyone building a distribution, but I don't follow
>> (32-bit) Arm developments.
>>
> 
> I was thinking more in the direction that it is not mentioned in the README file. binutils support it, but not gcc.

The arm-linux-gnu is usually referenced as 'old' arm ABI and it differs
on some points from new embedded ABI. AFAIK the main points are:

  1. OABI assumes underlying machine supports floating point support.
     It means that if the hardware does not have floating-point support
     (quite common on old ARM chips), an exception will be generated and 
     the kernel will emulate the instruction (incurring in a context switch 
     into the kernel).

     On Linux it is defined by CONFIG_FPE_NWFPE and it will add the code
     on arch/arm/nwfpe.

  2. The kernel interface is also different in some ways, which makes
     some syscalls incompatibles. First difference is eabi says 64-bit
     members should be 64-bit aligned instead of simply word aligned. 
     EABI also pads structures to the size of the largest member it 
     contains instead of the invariant 32-bit [1].

     It means that Linux need to provide this extra syscalls and
     handle it accordingly. This is defined by OABI_COMPAT.

  3. The syscall itself it done slight differently which complicates
     the libc code. OABI requires that system call number be encoded 
     into the swi/svc instruction, where EABI requires the system call 
     number to be on r7. For OABI this requires the kernel to actually
     fetch the instruction word and analyse to decode which syscall to
     issue.

[1] As described as arch/arm/kernel/sys_oabi-compat.c



More information about the Libc-help mailing list