https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117630
--- Comment #8 from R. Diez <rdiez-2006 at rd10 dot de> --- I am not sure yet why generic_category_instance and system_category_instance are not been discarded like they probably should. I haven't found any way to make the linker say why it is pulling certain symbols or object files. There does not seem to be an linker option in order to build a symbol dependency graph or the like. So I am trying to manually locate possible suspects. I have always tried to avoid using std:string, because the COW behaviour is not actually allowed in C++11, and my embedded targets do not have a lot of RAM, so I ended up implementing my own separate COW string routines anyway. But like I said, cow-stdexcept.cc turns up in my ELF, and it references system_error.cc, probably automatically via that method declaration. Is there a way to completely turn off these COW strings in GCC / libstdc++? So that file cow-stdexcept.cc is not compiled at all. I did a quick search but did not find any relevant hits. If still feels wrong that a utility file like cow-stdexcept.cc suddenly defines a member of class which is defined somewhere else. I heard that, just by pulling an object file in, you could then pull static objects and the like which you do not really need. I am not sure whether --gc-sections will always be able to optimise everything away.