https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32667
--- Comment #68 from Richard Biener <rguenth at gcc dot gnu.org> ---
Quoting standards.texi:
Most of the compiler support routines used by GCC are present in
@file{libgcc}, but there are a few exceptions. GCC requires the
freestanding environment provide @code{memcpy}, @code{memmove},
@code{memset} and @code{memcmp}. Contrary to the standards
covering @code{memcpy} GCC expects the case of an exact overlap
of source and destination to work and not invoke undefined behavior.
Finally, if @code{__builtin_trap} is used, and the target does
not implement the @code{trap} pattern, then GCC emits a call
to @code{abort}.