I'm looking for a way of altering the default i386 ABI on Linux, namely
for the Darling project (running OS X apps on Linux).
There are at least two deal-breaking incompatibilities between the i386
Darwin and Linux ABIs:
- size_t on Linux is unsigned int, but unsigned long on Darwin.
- long double on Linux is 96 bits long, Darwin's is 128 bits long.
Trying the hack around the first one by defining size_t differently
doesn't end up very well:
error: 'operator new' takes type size_t ('unsigned int') as first parameter
I have tried to force the Darwin ABI (which forces Mach-O), but keep the
ELF output format, but that was very naive of me, apparently.
An easy way would be to extend clang with a new special descendant of
X86TargetInfo, but Darling surely doesn't meet the first Clang
contribution criterion ("Evidence of a significant user community"). (Or
would this extension be sufficiently small to be accepted?)
Please, do you have any advice how to go on?