Yes don't compile with -fPIC or compile with -ftls-model=local-exec .
Thanks,Andrew Pinski
From: linaro-toolchain-bounces@lists.linaro.org <linaro-toolchain-bounces@lists.linaro.org> on behalf of Vitali Sokhin <vitali.sokhin@gmail.com>
Sent: Sunday, July 14, 2013 12:21 AM
To: linaro-toolchain@lists.linaro.org
Subject: How to make gcc generate optimized code for statically linked TLSSince I have exactly one TLS block containing all thread-local variable gcc should be able to calculate the offset at link time.This assembly fits dynamically linked code, but in my case I have statically linked application that does not load any additional modules.gcc produces the following assembly to access my threaded variable: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;
}
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]
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