I use the gcc's fixed point extensions, which have been present in the gcc for Cortex-M since 2011.
The toolchain which is included in the current version of KDS (4.8.4 20140725 (release)) gives me a segmentation fault during compilation.
The segmentation fault happens when a long _Accum variable retVal is divided by an element of a referenced struct:
retVal = retVal / filter->numberOfElements;
Building file: ../Sources/drivers/filters.c
Invoking: Cross ARM C Compiler
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O3 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -DKINETIS -DARM_MATH_CM4 -I"/opt/toolchain/CMSIS/CMSIS/Include" -I"/home/dominik/workspace.kds/test/Static_Code/PDD" -I"/home/dominik/workspace.kds/test/Static_Code/IO_Map" -I"/home/dominik/workspace.kds/test/Sources" -I"/home/dominik/workspace.kds/test/Generated_Code" -std=gnu99 -MMD -MP -MF"Sources/drivers/filters.d" -MT"Sources/drivers/filters.o" -c -o "Sources/drivers/filters.o" "../Sources/drivers/filters.c"
../Sources/drivers/filters.c: In function 'filters_updateMovingAverage':
../Sources/drivers/filters.c:172:1: internal compiler error: Segmentation fault
The current release of the toolchain (5.3.1 20160307 (release)) compiles without errors and works perfectly, hence it is not a big problem. It's still weird, though.
Compilation works flawlessly if I comment out the mentioned line.
I attached a c file, to be compiled with the following command:
/opt/Freescale/KDS_3.0.0/toolchain/bin/arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O3 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -D__FPU_PRESENT -DARM_MATH_CM4 -MMD -MP -std=gnu99 -c -o fixpoint.o fixpoint.c
KDS 3.1, updated from 3.0
Trying to compile the attached c file with the given command throws the following error message:
fixpoint.c: In function 'filters_updateMovingAverageAngularFlip':
fixpoint.c:67:1: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
Thanks for the information.
It seems like the problem is caused by the optimizations, was the same optimization level (-O3) used when you tested the code in the toolchain 5.3.1? It seems like the retVal variable is being optimized causing the segmentation fault, this error does not happen if using the optimization level -O0. Please try using the volatile qualifier for this variable to prevent the compiler from optimizing it.
volatile long _Accum retVal = 0.0;
Hope it helps!
Technical Support Engineer