When it comes to free and open source software (FOSS) tools for ARM, a typical user is best served by a ready-to-use, pre-packaged toolset, as you don't want to waste time on building your tools. Good packages include not just the GNU compiler and linker, but also the startup code, standard library, linker scripts, and of course, debugger support (which traditionally has been the Achilles' heel of the FOSS tools).
One excellent FOSS toolset for ARM7/9/11/Cortex not mentioned in any previous posts is the devkitPro project on SourceForge.net. The devkitARM component of the devktiPro project provides one of the best GNU-ARM toolsets on the market. The devkitARM package contains the latest GCC, GDB, libraries, and binutils for ARM-EABI (bare-metal). The devkitPro project has an excellent track record of keeping the toolset current with the latest version of the GCC compiler suite and the GDB debugger. For debugging, devkitPro offers the Insight GDB frontend, which again is the best Insight distro available. To round up the development suite, you will also need GNU-make and some UNIX-style file utilities commonly used in Makefiles. The collection of links to all these tools is available at state-machine.com/arm.
Perhaps I should note that all these tools run natively on Windows, without Cygwin or other extra DLLs.
To get up to speed quickly you need well documented example projects. Some of such complete projects are available from state-machine.com/arm. Among others, you'll find examples C++ projects (with the right startup code and linker scripts for calling static constructors) as well as reducing the overhead of C++ to make it suitable for small MCUs.
Finally, I'd like to mention my article "Building Bare Metal ARM Systems with GNU", which describes in detail how to use the GNU toolchain to build real-life embedded systems based on ARM7/ARM9 microcontrollers. This big, 10-part article has been originally published on Embedded.com.