The GCC Ride7 STM32 startup script does not jump into SystemInit function
Did you check the value of your stack pointer? 

I also had this problem once and it was due to the init script of my JTAG debugger setting the stack pointer to an address which was invalid for the microcontroller used. Especially in your case this seems to be a possible problem since the STM32F103 has less RAM than some STM32F105 microcontrollers, meaning that if your JTAG debugger sets the Stack pointer to for example 0x2000fffc it could perfectly work on the STM32F105 and crash on the STM32F103. You would have the exact same effect if your linker script does not set the stack size correctly (this should be 6 or 10 kbytes on the STM32F103C4).

Normally (running without debugger) the stack pointer value should be the first value of your reset vectors, which is also equal to "_estack" (this value is set in your linker script, check the file link.ld). When the function SystemInit is entered the parameters are pushed on the stack. The push instruction will cause a hard fault if the stack pointer is pointing at some address which can not be dereferenced.

To investigate this possibility with gdb you should use "stepi" instead of step to execute only one assembly instruction at a time, you can also check the stack pointer value with "info register".

Good luck/Bonne chance ;-)