If it gets to 0x0000 and there's a JMP there then how could it possibly fail to execute it? Are you saying that if you single step the JMP it doesn't then jump over the vector table to the start of the C pre-amble. That surely could only occur if the JMP was actually a "JMP 0x0000" so just keeps jumping back to itself? So what is the offset of the JMP shown in the disassembler?
124: asm("jmp 0"::);
+000104FA: 940C0000 JMP 0x00000000 Jump
That is what the disassembler shows. It jumps to that address. It follows all the commands in the vector and C pre-amble commands. What I am saying is that my program doesn't start running, unless I do a manual reset.