Binding as the first object may work as good as you show, but the docs mention using the script linker and adding crt0.o as STARTUP () - I'm not very familiar with linker scripts, but you can find the linker by default script and possibly create it / configure:
Link syntax script: http://wiki.osdev.org/Linker_Scripts
http://sourceware.org/binutils/docs-2.19/ld/Scripts.html#Scripts
The linker always uses a linker script. If you do not supply one yourself, the linker will use a default script that is compiled into the linker executable. You can use the `--verbose' command line option to display the default linker script. Certain command line options, such as `-r' or `-N', will affect the default linker script.
The same can be done with other system libraries, which should always be part of the binding.
It's great to add everything on the command line, but a little tedious at the end.
Do you get any errors or incorrect results as you ask or what?
nicomen
source share