You forgot to link a couple of things - startup code, interrupt vectors and libraries. The proper linker command looks something like:
$ msp430-ld -m msp430x[arch] /usr/local/msp430/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/lib/crt430x[arch].o -L/usr/local/msp430/bin/../lib/gcc-lib/msp430/3.2.3/msp1 -L/usr/local/msp430/bin/../lib/gcc-lib/msp430/3.2.3 -L/usr/local/msp430/bin/../lib/gcc-lib -L/usr/local/msp430//lib/gcc-lib/msp430/3.2.3/msp1 -L/usr/local/msp430//lib/gcc-lib/msp430/3.2.3 -L/usr/local/msp430/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/lib/msp1 -L/usr/local/msp430/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/lib -L/usr/local/msp430//lib/gcc-lib/msp430/3.2.3/../../../../msp430/lib/msp1 -L/usr/local/msp430//lib/gcc-lib/msp430/3.2.3/../../../../msp430/lib -L/usr/local/msp430/bin/../lib/gcc-lib/msp430/3.2.3/../../.. [object file].o -lgcc -lc -lgcc
Of course, this is a pain to type, so don't! The simple way is to use msp430-gcc as a front end to the linker. Then you can just type:
$ msp430-gcc -mmcu=[arch] -L[extra lib path] -l[extra lib] obj1.o obj2.o ... -o outfile