Thanks for the suggestion.
I'm using KSDK-1.2.0. The startup code compile flags are located in lib/ksdk_startup_lib/armgcc/K63F12/CMakeLists.txt:
CMAKE_C_FLAGS_RELEASE. This is the default: "...-mcpu=cortex-m4 -mfloat-abi=soft..." so Freescale people have set it to emit softfloat instructions (doesn't make use of the FPU).
For K64F: lib/ksdk_startup_lib/armgcc/K64F12/CMakeLists.txt: CMAKE_C_FLAGS_RELEASE: "...-mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16...", so it emits FPU instructions by default.
SystemInit(...) for K63F is in platform/devices/MK63F12/startup/system_MK63F12.c. With KSDK's default settings __FPU_USED__ == 0. Why? For the answer see platform/CMSIS/Include/core_cm4.h:
#elif defined ( __GNUC__ )
#if defined (__VFP_FP__) && !defined(__SOFTFP__)
#if (__FPU_PRESENT == 1)
#define __FPU_USED 1
#else
#warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
#define __FPU_USED 0
#endif
#else
#define __FPU_USED 0
#endif
Since gcc is passed -mfloat-abi=soft, __SOFTFP__ is defined and thus __FPU_USED becomes 0, so the code in SystemInit(...) doesn't compile/execute.
I've modified KSDK to use -mfloat-abi=softfp, so the code in SystemInit(...) compiles and executes. Moreover I've recompiled my whole project with -mfloat-abi=softfp and the result is the same: freezes on startup.
It's little bit like that KSDK developers at Freescale know that K63F hasn't got an FPU (or it's simply non-functional), but they haven't notified the tech-writer guys about this. Somebody correct me if I'm wrong, please!