В icf-файле у вас есть такая строка? place at address mem:0x08000000 { readonly section .intvec };
Какой для M0+ должен быть адрес - не знаю, лень искать - подставьте правильный.
Можно еще воспользоваться директивой типа:
place at start of ROM_region { readonly section .intvec };
P.S. Хотя при ближайшем рассмотрении вашей фигни кажется, что у вас в программе определены две таблицы векторов, в вышеприведенных файлах. Одна из них в файле _vectors - длиннная, вторая из файла vector_table_M - короткая (на 16 слов). Одна из них лишняя.
Тогда и работоспособность в железе хорошо объясняется - работает первая таблица. А симулятор ловит предопределенное имя второй таблицы векторов.