For some targets __dso_handle will never be used, and its definition in crtstuff.c can cause a domino effect resulting in the size of the final executable increasing much more than just the size of this piece of data. For msp430, CRT functions to initialize global data are only included if there is global data to initialize and it is more than feasible to write functional programs which do not use any global data. In these cases, the definition of __dso_handle will cause code size to increase by around 100 bytes as library code to initialize data is linked into the executable. Removing __dso_handle can therefore save on code size. This does require the target to NOT use __cxa_atexit, so either TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT must return true or -fno-use-cxa-atexit must be used as a target flag when building GCC. This is because __cxa_atexit includes functionality to unload dynamic shared objects and so cp/decl.c will create a reference to __dso_handle to facilitate this in programs with static destructors.