I need to make a startup procedure for my ARM Cortex-M platform. In C/C++ this includs copying the .data segment to RAM and initializing the .bss segment to 0.

If I declare global variables in D as...

__gshared int GlobalDataVar = 2;
__gshared int GlobalBssVar;

... these get put in .data and .bss respectively, and I know what to do in my startup procedure:

However if I declare thread local variables in D as...

int TLSDataVar = 1;
int TLSBssVar;

... two symbols for each variable are created: one in the section ".rodata.__emutls_t" and the other in section ".data.__emutls_v"

minlibd's linker script (https://bitbucket.org/timosi/minlibd/src/c4503befb556ff3edf04eeb63c384e0ea723a6aa/tools/ldscript4?at=default) does not deal with these sections, I'm assuming because my version of GDC (yesterday's 4.8.2 backport {Thanks Johannes}) has changes for supporting emulated TLS.

My GDC is configured with --disable-tls and --disable-threads, so I believe I could treat these the same as __gshared variables, but I need to first understand what these sections are and what they contain.

I know this may be more specific to GCC than GDC, but if you know something about these sections, please let me know, or point me to some resource that will help me understand them.

Thanks,
Mike

Reply via email to