D/Objective-C 64bit

Iain Buclaw ibuclaw at gdcproject.org
Wed Mar 12 12:43:11 PDT 2014


On 12 March 2014 19:36, Michel Fortin <michel.fortin at michelf.ca> wrote:
> On 2014-03-12 19:02:10 +0000, Iain Buclaw <ibuclaw at gdcproject.org> said:
>
>> From my POV, I wouldn't want to support the ABI of a language that GCC
>> itself doesn't support.  So code compiled by GNU ObjC should be
>> compatible with extern(ObjC) code generated by GDC - even if it isn't
>> compatible with Clang ObjC.  But then, I'd be surprised if it wasn't
>> compatible.
>
>
> It all comes to how you integrate the thing with GCC. My guess is that you
> have three choices:
>
> 1. ignore Objective-C support: don't define DMD_OBJC in the code and the
> compiler will complain whenever it sees extern(Objective-C)
>
> 2. translate the calls to the DMD backend creating the various sections and
> segments to equivalent calls for creating sections and segments in GCC
>
> 3. replace the codegen for Objective-C data structures by what's already
> implemented in GCC for Objective-C
>
> This last option will support whatever ABI GCC has support for. That's
> probably the way to go if you want to make sure ABIs are compatible. All the
> Objective-C ABI DMD knows about is implemented in objc.c, so what you have
> to do is to rewrite objc.c to call the GCC equivalent implementation,
> probably getting rid of most of the code in there.
>
>
>
>> NeXT:
>> NSConstantString
>> objc_getClass
>> objc_getMetaClass
>> objc_msgSend
>> objc_msgSendSuper
>>
>> GNU:
>> NXConstantString
>> objc_get_class
>> objc_get_meta_class
>> objc_msg_lookup
>> objc_msg_lookup_super
>>
>> Some which greps for s(n)printf also show:
>>
>> NeXT:
>> ".objc_class_name_%s"
>> ".objc_category_name_%s_%s"
>>
>> GNU:
>> "__objc_class_name_%s"
>> "__objc_category_name_%s_%s"
>>
>>
>> Most others look the same?  Maybe you'll be able to find out more with
>> this information.
>
>
> My understanding is that the differences are pretty trivial. But regardless,
> we probably don't have to care about them if you can hook directly to the
> GCC Objective-C codegen.
>
>

Hooking to ObjC could be done, but requires patching GCC proper so
that ObjC mangling becomes common code, not front-end specific.


More information about the Digitalmars-d-announce mailing list