Erich, thanks for your reply.
Unfortunately we cannot afford to switch the whole project to C++, it has already been in mass production. I tried IDE 11.8 and got the same result (compiled as C).
However I doubt that this can only be done in C++, we keep both GCC build (for firmware release) and IDE build (for bug diagnosis) environments for the same project, in GCC environment it's also compiled as C and works well, that entry function get linked in elf and called from startup code with the help of crt0.o
Below are the build result from both map files, in IDE it's thrown into discarded section.
GCC:
.text.fipsEntry
0x0000000060105f28 0x58 ./fips.c.obj
IDE:
.text.fipsEntry
0x00000000 0x58 ./fips.o