Thank you,
with -ftls-model=local-exec gcc emits code that calculates offset at link
time:
threadedVar = 0xDEAD;
1125c: d53bd041 mrs x1, tpidr_el0
11260: 91401020 add x0, x1, #0x4, lsl #12
11264: 9105a000 add x0, x0, #0x168
11268: 529bd5a2 movz w2, #0xdead
1126c: b9000002 str w2, [x0]
On Sun, Jul 14, 2013 at 10:30 AM, Pinski, Andrew <
[email protected]> wrote:
> Yes don't compile with -fPIC or compile with -ftls-model=local-exec .
>
> Thanks,
> Andrew Pinski
> ------------------------------
> *From:* [email protected] <
> [email protected]> on behalf of Vitali Sokhin <
> [email protected]>
> *Sent:* Sunday, July 14, 2013 12:21 AM
> *To:* [email protected]
> *Subject:* How to make gcc generate optimized code for statically linked
> TLS
>
> Hello,
>
> I use gcc-linaro-aarch64-linux-gnu-4.8 to compile my C code with
> thread-local variables.
>
> Here is an example of my C code:
>
> __thread u32 threadedVar;
> void test(void)
> {
> threadedVar = 0xDEAD;
> }
>
> gcc produces the following assembly to access my threaded variable:
>
> threadedVar = 0xDEAD;
> 72b0: d00000c0 adrp x0, 21000
> 72b4: f945ac00 ldr x0, [x0,#2904]
> 72b8: d503201f nop
> 72bc: d503201f nop
> 72c0: d53bd041 mrs x1, tpidr_el0
> 72c4: 529bd5a2 movz w2, #0xdead
> 72c8: b8206822 str w2, [x1,x0]
>
> This assembly fits dynamically linked code, but in my case I have
> statically linked application that does not load any additional modules.
> Since I have exactly one TLS block containing all thread-local variable
> gcc should be able to calculate the offset at link time.
>
> Can I make gcc to produce the following assembly ?
>
> threadedVar = 0xDEAD;
> 72c0: d53bd041 mrs x1, tpidr_el0
> 72c4: 529bd5a2 movz w2, #0xdead
> 72c8: b8206822 str w2, [x1,#offset_to_threadedVar]
>
>
> Thank you,
> Vitali
>
_______________________________________________
linaro-toolchain mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/linaro-toolchain