Fix unsafe compiler optimization

GCC 4.8 enables -ftree-loop-distribute-patterns at -O3 by default and
this optimization may transform loops into memset/memmove calls. Without
proper handling this may generate unexpected PLT calls on GLIBC.
This patch fixes by create memset/memmove alias to internal GLIBC
__GI_memset/__GI_memmove symbols.
This commit is contained in:
Adhemerval Zanella 2013-06-12 10:21:22 -05:00
parent 94f2c07669
commit 6a97b62a5b
3 changed files with 16 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2013-06-11 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
[BZ #15605]
* sysdeps/generic/symbol-hacks.h: Add workaround for memset/memmove calls
generated by the compiler on loop optimizations.
* sysdeps/wordsize-32/symbol-hacks.h: Include next symbol-hacks.h for
general definitions.
2013-06-12 Joseph Myers <joseph@codesourcery.com>
* math/bug-nextafter.c: Include <math-tests.h>.

View File

@ -1 +1,6 @@
/* Fortunately nothing to do. */
/* Some compiler optimizations may transform loops into memset/memmove
calls and without proper declaration it may generate PLT calls. */
#if !defined __ASSEMBLER__ && !defined NOT_IN_libc && defined SHARED
asm ("memmove = __GI_memmove");
asm ("memset = __GI_memset");
#endif

View File

@ -16,6 +16,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include_next "symbol-hacks.h"
/* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
__moddi3, and __umoddi3. These functions are exported and
therefore we get PLTs. Unnecessarily so. Changing gcc is a big