What is the state of D with Android/iOS

Joakim via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 4 22:29:54 PST 2015


On Wednesday, 4 March 2015 at 17:31:49 UTC, Dan Olson wrote:
> Dan Olson <zans.is.for.cans at yahoo.com> writes:
>>
>> For Android, LDC generates the usual .tbss/.tdata sections for 
>> TLS vars
>> and __aeabi_read_tp() when needed to lookup the base address.
>>
>>   ldc2 -mtriple=thumbv7-linux-anrdoideabi -output-s test.d
>>
>>   tlsvar = 42;
>>
>> 	ldr	r1, .LCPI1_0
>> 	movs	r2, #42
>> 	bl	__aeabi_read_tp
>> 	str	r2, [r0, r1]
>>
>> For iOS, I then added what was missing from the OS loader to 
>> find TLS
>> sections and provide the lookup function to lazy init TLS 
>> block and
>> return address.  These are just linked in with the app instead 
>> being
>> provided by OS libs and kernel.  At that point, it looked to
>> ldc_sections.d like normal OSX TLS.
>>
>> I would guess you could do the same for Android/ARM with LDC 
>> and make it
>> look like linux to ld_sections.
>
> As PIC:
>   ldc2 -mtriple=thumbv7-linux-androideabi -output-s 
> -relocation-model=pic -O tls1.d
>
> 	ldr	r0, .LCPI1_0
> .LPC1_0:
> 	add	r0, pc
> 	bl	__tls_get_addr(PLT)
> 	movs	r1, #42
> 	str	r1, [r0]
>
> Shouldn't that work?

Maybe the inserted function call will work- I'm not familiar with 
ARM assembly, so I can't say for sure- but I'm guessing it's 
passing a different pointer to the function, which I noted above. 
  Some modifications will likely need to be made to llvm to 
support the packed TLS scheme used so far, with dmd for 
Android/x86.


More information about the Digitalmars-d mailing list