Cобираться-то оно должно. Другое дело, что не работает

Напишите тогда
Код
-mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref -Wl,--gc-sections
Или возьмите уже мейкфайл от 4й версии, просто поправьте линкер g++ на gcc, как я писал выше.
Нашёл в чём дело. В линкерном скрипте почему-то убраны KEEP от секций initX.
После исправления в файле MSPGCC\20110716\msp430\lib\ldscripts\msp430.x строчек
Код
KEEP(*(.init))
*(.init0) /* Start here after reset. */
*(.init1) /* User definable. */
*(.init2) /* Initialize stack. */
*(.init3) /* Initialize hardware, user definable. */
*(.init4) /* Copy data to .data, clear bss. */
*(.init5) /* User definable. */
*(.init6) /* C++ constructors. */
*(.init7) /* User definable. */
*(.init8) /* User definable. */
*(.init9) /* Call main(). */
на
Код
KEEP(*(.init))
KEEP(*(.init0)) /* Start here after reset. */
KEEP(*(.init1)) /* User definable. */
KEEP(*(.init2)) /* Initialize stack. */
KEEP(*(.init3)) /* Initialize hardware, user definable. */
KEEP(*(.init4)) /* Copy data to .data, clear bss. */
KEEP(*(.init5)) /* User definable. */
KEEP(*(.init6)) /* C++ constructors. */
KEEP(*(.init7)) /* User definable. */
KEEP(*(.init8)) /* User definable. */
KEEP(*(.init9)) /* Call main(). */
стало вроде всё нормально. (Проверить не смог, железку уже отдал

Ну ладно, вроде разобрались

На днях закоммичу изменения.
ЗЫ. Вспомнил! Возьмите map-файл в кавычки:
Код
ldflags := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref,--gc-sections