Thread overview
How do I make LDC use the stack only?
Nov 11
Mateus
Nov 11
Kagamin
Nov 11
Mateus
November 11

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
All of those examples should work. Apart from c which is a global, its all on the stack.
November 11

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

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

November 11

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!