you are rigth, at least partially.
At last I found time for a complete series of tests about your solution; these are the results:
Context: IDE 1.6.3, Windows XP SP3, Arduino Uno
Test 1: files ld.exe and ld.bfd.exe copied from a previous IDE version
Test 2: file ld.exe copied from a previous IDE version and original ld.bfd.exe
Test 3: only file ld.exe copied from a previous IDE without ld.bfd.exe
- Files from IDE 1.6.0, tests 1, 2 and 3
result: "collect2.exe: error: ld returned 53 exit status", without Windows crash
- Files from IDE 1.5.8, tests 1, 2 and 3
result: "collect2.exe: error: ld returned 53 exit status", without Windows crash
- Files from IDE 1.0.6, tests 2 and 3
result: SUCCESS ! The sketch compiles fine
Note 1: I remind that using IDE 1.6.1, 1.6.2 or 1.6.3, the result is a Windows crash message followed by "collect2.exe: error: ld returned 5 exit status".
Note 2: using file ld.exe copied from IDE 1.0.6, there is no need to rename original ld.bfd.exe, because in 1.0.6 it doesn't exist.
Finally, your solution is OK:
- in IDE 1.6.1, 1.6.2 or 1.6.3, rename the file ld.exe (i.e. OLD-ld.exe) in directory C:\Programs\Arduino\hardware\tools\avr\avr\bin;
- copy another file ld.exe from IDE 1.0.6.