OS X libphobos2.so

bitwise via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 9 09:30:52 PST 2015


On Monday, 9 November 2015 at 15:29:25 UTC, Jacob Carlborg wrote:
> On 2015-11-08 19:12, bitwise wrote:
>
>> So, since binaries will not be mapped to overlapping address 
>> spaces, I
>> can loop over all the binary images and find the range to 
>> which the
>> argument of ___tls_get_addr() belongs, and map the pointer to 
>> the
>> appropriate block of memory.
>>
>> I am concerned that looping over all binary images for each 
>> TLS access
>> will have performance implications, but for now, this solution 
>> is good
>> enough. Later, ___tls_get_addr() can be amended to pass a 
>> pointer to the
>> image from which the TLS originated, allowing constant time 
>> lookup. I
>> believe Martin has already done this for linux/fbsd, but I had 
>> time to
>> look at this specific issue.
>
> Not sure if this would be too much work for the first version. 
> But would it be possible to, for each loaded image, register 
> its memory range in an associative array. Where the key is the 
> range the value is the image?
>
> Hmm, when I think about, it might not help at all.

The AA is not needed. The offset of the TLS var is known at 
compile time. If you look at sections_elf_shared.d you can see 
the signature of __tls_get_addr, and that it takes a pointer to 
the struct tls_index or something. *if* I understand correctly, 
one of the two vars in that struct is the index of the image, and 
the other is the offset into the imag's tls section. Not sure 
where/hoe that struct is outputted though. So you would have to 
figure out how to get the backend to do the same thing for OSX. I 
think the image index may have to be assigned at load time, but 
I'm not sure. The amount of code to actually do it should be 
trivial, it's reading/interpreting the backend that will be the 
problem ;)

    Bit



More information about the Digitalmars-d mailing list