-nostartfiles eliminates linking in the crt*.o files, none of which are useful for our mcu's, and most likely not even executed. If using -nostartfiles and __libc_init_array, then an empty _init function will need to be provided as __libc_init_array will make a call _init, which is normally from crti.o (and also does nothing useful).
-nostdlib will still do what you think it will do.