Attempting to use software serial anywhere in code causes freeze on startup.

An older verison of gcc doesn't work. An older version of binutils is impossible because any older than that and it doesn't support the necessary processor. There's one last thing I can try - grab the sources, manually apply every patch from the Windows distribution, give that a try. That's what I am going to do, starting with binutils as it's quickest to compile and I think most likely to be the problem.