But I've discovered now that I can't compile from an existing version of the SD950 firmware (100d) let alone a new one. I get the same error message (multiple definition of `_ExitFromCompensationEVF') in both cases. Is it worth trying an earlier version of the trunk?
No, you should find out why there are multiple definitions, and fix that problem. Given that the autobuild works, it's something in your tree or build environment.
This would normally be defined in stubs_entry.S, or stubs_entry_2.s
note that stubs_entry.S is auto generated and should always use NSTUB (which makes a weak symbol) and stubs_entry_2.S should always use NHSTUB.
You should make sure that all of your generated files have been completely re-generated since you fixed your sh.exe crash problem, and that you are doing a make clean before your build.