Better watch out! D runs on watchOS!
Joakim via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Mon Dec 28 01:24:35 PST 2015
On Monday, 28 December 2015 at 08:45:46 UTC, Dan Olson wrote:
> Joakim <dlang at joakim.fea.st> writes:
>>
>> I don't understand how the bitcode requirement works on your
>> own device: I thought that was for an Apple-submitted app that
>> they then compiled to binary themselves? Do you have to go
>> through the same process even for test apps, ie no
>> sideloading? Or does the device itself take bitcode?
>
> This is all based on my experience and I don't know the full
> bitcode story. I may state erroneous info below.
>
> The device takes normal executables but there is a check to
> make sure that each object file has the appropriate bitcode
> sections. I think the linker does this, but did not check which
> tool in build chain spit out the error.
>
> The bitcode is actually two new sections in every object file:
>
> .section __LLVM,__bitcode
> .section __LLVM,__cmdline
>
> The __bitcode section seems to just be the LLVM IR for the
> object file
> in the .bc binary format. Some sources say it is a xar archive
> but in my
> investigation I used Apple's clang with -fembed-bitcode and
> inspected
> the IR or ARM assembly to see these two sections. Extracting
> and using
> llvm-dis on the __bitcode section gave back the containing
> module's
> IR in human readable format. It exactly matches the LLVM IR for
> its
> object file sans Apple's clang -fembed-bitcode. So not sure
> when xar is
> used yet.
>
> The __cmdline section appears to be some of the clang options
> used to compile the bitcode.
>
> The compile process becomes something like this:
> 1. Create IR for module as usual.
> 2. Generate the IR bitcode representation.
> 3. Add the two new sections, using bitcode from (2) as contents
> of
> __bitcode section and __cmdline options to compile it
> 4. Generate object from IR.
>
> But not wanting to figure all that out now, I tried simpler
> things and discovered that at least for testing, these sections
> only need to be present and the contents don't seem to matter.
> So for now I skip 2 and just put a zero in each.
Thanks for the detailed answer; I'm sure this will now become the
definitive answer online. I've gone googling for technical info
only to sometimes be directed back to a post in these D forums. :)
> On implication of Apple requiring bitcode: if Apple is
> compiling the bitcode with their clang or llc, then it means
> using a modifed LLVM like I do to support thread-locals on
> watchOS, tvOS, or iOS is only good for side loading. Probably
> going to have to work on plan B for thread-locals.
Time to get emulated TLS for Mach-O into llvm, as one google
engineer did with ELF for Android, which will be released in the
upcoming llvm 3.8:
https://code.google.com/p/android/issues/detail?id=78122
More information about the Digitalmars-d-announce
mailing list