On 22 January 2014 00:28, Mike <n...@none.com> wrote: > Hello again, > > I'm continuing my work on an ARM Cortex-M port of the D Runtime. I now have > a repository (https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study) and a > wiki > (https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study/wiki/1.0-Introduction) > for anyone interested. I'm doing my best to document the entire process. > > I tried playing with GDC/GCC optimizations recently, and noticed that it > breaks the following simple code from my "Hello World" experiment > (http://wiki.dlang.org/Extremely_minimal_semihosted_%22Hello_World%22) > > void OnReset() > { > while(true) > { > // Create semihosting message > uint[3] message = > [ > 2, //stderr > cast(uint)"hello\r\n".ptr, //ptr to string > 7 //size of string > ]; > > //Send semihosting command > SendCommand(0x05, &message); > } > } > > Compiling with... > arm-none-eabi-gdc -O1 start.d -o start.o > ... works fine, but compiling with... > arm-none-eabi-gdc -O2 start.d -o start.o > ... or ... > arm-none-eabi-gdc -O3 start.d -o start.o > ... does not. > > I traced this down to the -finline-small-functions and -fipa-cp-clone > options, so if I compile with... > arm-none-eabi-gdc -O2 -fno-inline-small-functions start.d -o start.o > ... or ... > arm-none-eabi-gdc -O3 -fno-inline-small-functions -fno-ipa-cp-clone > start.d -o start.o > ... it works fine. > > Comparing the assembly generated with... > arm-none-eabi-gdc -O1 start.d -o start.o > ... and ... > arm-none-eabi-gdc -O2 start.d -o start.o > ... I can see that the "hello\r\n" string constant vanishes from the > assembly file with the -O2 option. > > "So what's the question, Mike?" I hear you say: > 1. Is this just one of the consequences of using -O2/-O3, and I should just > suck it up and deal with it? > 2. Is this potentially a bug in the GCC backend? > 3. Is this potentially a bug in GDC or the DMD frontend? >
Personally, I would never use -O3 for low level start.o kernel stuff. As you are coding on a small board, wouldn't you instead use -Os ?