Thread overview
How do I make LDC use the stack only?
Nov 11, 2021
Mateus
Nov 11, 2021
rikki cattermole
Nov 11, 2021
max haughton
Nov 11, 2021
Kagamin
Nov 11, 2021
Mateus
November 11, 2021

I'm creating a D operating system kernel. Thread local storage (TLS) is not available so it cannot be used. My D kernel compiles correctly with DMD but it fails with runtime errors on LDC. I guess LDC promotes some stack variables to TLS for example:

void f() {
    ubyte[15] a; // works
    ubyte[16] b; // does not work
    __gshared ubyte[16] c; // works
    MyStruct d; // does not work
}

How do I make LDC use the stack only? Should I file a bug report?

November 11, 2021
All of those examples should work. Apart from c which is a global, its all on the stack.
November 11, 2021

On Thursday, 11 November 2021 at 03:10:48 UTC, Mateus wrote:

>

I'm creating a D operating system kernel. Thread local storage (TLS) is not available so it cannot be used. My D kernel compiles correctly with DMD but it fails with runtime errors on LDC. I guess LDC promotes some stack variables to TLS for example:

void f() {
    ubyte[15] a; // works
    ubyte[16] b; // does not work
    __gshared ubyte[16] c; // works
    MyStruct d; // does not work
}

How do I make LDC use the stack only? Should I file a bug report?

I Need a definition of what "does not work" means i.e. with output of the error.

November 11, 2021

b is likely initialized with sse2 instructions, maybe your processor doesn't support sse2.

November 11, 2021

On Thursday, 11 November 2021 at 08:36:37 UTC, Kagamin wrote:

>

b is likely initialized with sse2 instructions, maybe your processor doesn't support sse2.

I was getting interrupt #6 (invalid opcode). I tried compiling the kernel with --march=x86 --mcpu=i386 and it worked!

Thank you very much!