-ffreestanding option

Mike Franklin slavo5150 at yahoo.com
Wed Jul 25 10:05:50 UTC 2018


On Wednesday, 25 July 2018 at 08:37:28 UTC, Zheng (Vic) Luo wrote:

> Current implementation of compilers assumes the existence of 
> some symbols from libc, which leads to an infinite loop if we 
> want to implement primitives like "memset" with our own code 
> because the compiler will optimize consecutive set with 
> "memset". This suggests that we cannot write a freestanding 
> program without supports from compiler. With "-betterC" flag, 
> dmd/gdc/ldc also come into this issue[5], which also applies to 
> C/C++[1] and rust [2][3][4].

GDC doesn't seem to be affected.  See 
https://explore.dgnu.org/g/ZJVjAu  i.e. no recursive calls to 
`memset`, but I don't know if I just got lucky with my 
implementation.

> It would be better to provide a standard flag like 
> "-ffreestanding" (or -fno-builtin?) to disable such 
> optimizations to facilitate freestanding programming instead of 
> forcing the developers to hack around different compiler 
> implementations, so I was wondering is there any progress on 
> this problem?

According to https://wiki.dlang.org/Using_GDC, `-fno-builtin` is 
already there.

 From my experience I haven't yet found a need for 
`-ffreestanding`, as GDC always seems to do the right thing for 
me.  It does generate calls for `memset`, `memcmp`, etc..., but 
as long as I provide my own implementation with the correct 
symbol name as it expects (i.e. `memset` with no name mangling, 
a.k.a `extern(C) void* memset(void*, int, size_t)`) it seems to 
work fine.

Mike





More information about the D.gnu mailing list