Under Cygwin, ld still produces Win32 executables.

ld != GCC. It's a separate program, developed totally separately.