mirror of git://sourceware.org/git/glibc.git
Replace BZERO_P/PIC with USE_AS_BZERO/SHARED
Replace BZERO_P with USE_AS_BZERO in i586/i686 memset.S to support i386 multi-arch memset. Also we should check SHARED not PIC for libc.so since libc.a may be compiled with PIC. * sysdeps/i386/i586/bzero.S (USE_AS_BZERO): New. * sysdeps/i386/i686/bzero.S (USE_AS_BZERO): Likewise. * sysdeps/i386/i586/memset.S (BZERO_P): Removed. Check USE_AS_BZERO/SHARED instead of BZERO_P/PIC. (__memset_zero_constant_len_parameter): New. * sysdeps/i386/i686/memset.S (BZERO_P): Removed. Check USE_AS_BZERO/SHARED instead of BZERO_P/PIC. (__memset_zero_constant_len_parameter): Don't define if __memset_chk or USE_AS_BZERO are defined.
This commit is contained in:
parent
b6e19c4bdc
commit
f6b71eada3
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2015-08-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/i386/i586/bzero.S (USE_AS_BZERO): New.
|
||||
* sysdeps/i386/i686/bzero.S (USE_AS_BZERO): Likewise.
|
||||
* sysdeps/i386/i586/memset.S (BZERO_P): Removed.
|
||||
Check USE_AS_BZERO/SHARED instead of BZERO_P/PIC.
|
||||
(__memset_zero_constant_len_parameter): New.
|
||||
* sysdeps/i386/i686/memset.S (BZERO_P): Removed.
|
||||
Check USE_AS_BZERO/SHARED instead of BZERO_P/PIC.
|
||||
(__memset_zero_constant_len_parameter): Don't define if
|
||||
__memset_chk or USE_AS_BZERO are defined.
|
||||
|
||||
2015-08-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/i386/i586/memcpy.S (MEMPCPY_P): Removed.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#define USE_AS_BZERO
|
||||
#define memset __bzero
|
||||
#include <sysdeps/i386/i586/memset.S>
|
||||
weak_alias (__bzero, bzero)
|
||||
|
|
|
@ -21,13 +21,10 @@
|
|||
#include <sysdep.h>
|
||||
#include "asm-syntax.h"
|
||||
|
||||
/* BEWARE: `#ifdef memset' means that memset is redefined as `bzero' */
|
||||
#define BZERO_P (defined memset)
|
||||
|
||||
#define PARMS 4+4 /* space for 1 saved reg */
|
||||
#define RTN PARMS
|
||||
#define DEST RTN
|
||||
#if BZERO_P
|
||||
#ifdef USE_AS_BZERO
|
||||
# define LEN DEST+4
|
||||
#else
|
||||
# define CHR DEST+4
|
||||
|
@ -35,7 +32,7 @@
|
|||
#endif
|
||||
|
||||
.text
|
||||
#if defined PIC && IS_IN (libc) && !BZERO_P
|
||||
#if defined SHARED && IS_IN (libc) && !defined USE_AS_BZERO
|
||||
ENTRY (__memset_chk)
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
|
@ -50,7 +47,7 @@ ENTRY (memset)
|
|||
movl DEST(%esp), %edi
|
||||
cfi_rel_offset (edi, 0)
|
||||
movl LEN(%esp), %edx
|
||||
#if BZERO_P
|
||||
#ifdef USE_AS_BZERO
|
||||
xorl %eax, %eax /* we fill with 0 */
|
||||
#else
|
||||
movb CHR(%esp), %al
|
||||
|
@ -104,7 +101,7 @@ L(2): shrl $2, %ecx /* convert byte count to longword count */
|
|||
rep
|
||||
stosb
|
||||
|
||||
#if !BZERO_P
|
||||
#ifndef USE_AS_BZERO
|
||||
/* Load result (only if used as memset). */
|
||||
movl DEST(%esp), %eax /* start address of destination is result */
|
||||
#endif
|
||||
|
@ -112,10 +109,13 @@ L(2): shrl $2, %ecx /* convert byte count to longword count */
|
|||
cfi_adjust_cfa_offset (-4)
|
||||
cfi_restore (edi)
|
||||
|
||||
#if BZERO_P
|
||||
ret
|
||||
#else
|
||||
ret
|
||||
#endif
|
||||
END (memset)
|
||||
libc_hidden_builtin_def (memset)
|
||||
|
||||
#if defined SHARED && IS_IN (libc) && !defined __memset_chk \
|
||||
&& !defined USE_AS_BZERO
|
||||
strong_alias (__memset_chk, __memset_zero_constant_len_parameter)
|
||||
.section .gnu.warning.__memset_zero_constant_len_parameter
|
||||
.string "memset used with constant zero length parameter; this could be due to transposed parameters"
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#define USE_AS_BZERO
|
||||
#define memset __bzero
|
||||
#include <sysdeps/i386/i686/memset.S>
|
||||
weak_alias (__bzero, bzero)
|
||||
|
|
|
@ -21,11 +21,8 @@
|
|||
#include <sysdep.h>
|
||||
#include "asm-syntax.h"
|
||||
|
||||
/* BEWARE: `#ifdef memset' means that memset is redefined as `bzero' */
|
||||
#define BZERO_P (defined memset)
|
||||
|
||||
#define PARMS 4+4 /* space for 1 saved reg */
|
||||
#if BZERO_P
|
||||
#ifdef USE_AS_BZERO
|
||||
# define DEST PARMS
|
||||
# define LEN DEST+4
|
||||
#else
|
||||
|
@ -36,7 +33,7 @@
|
|||
#endif
|
||||
|
||||
.text
|
||||
#if defined PIC && IS_IN (libc) && !BZERO_P
|
||||
#if defined SHARED && IS_IN (libc) && !defined USE_AS_BZERO
|
||||
ENTRY_CHK (__memset_chk)
|
||||
movl 12(%esp), %eax
|
||||
cmpl %eax, 16(%esp)
|
||||
|
@ -50,7 +47,7 @@ ENTRY (memset)
|
|||
cfi_adjust_cfa_offset (4)
|
||||
movl DEST(%esp), %edx
|
||||
movl LEN(%esp), %ecx
|
||||
#if BZERO_P
|
||||
#ifdef USE_AS_BZERO
|
||||
xorl %eax, %eax /* fill with 0 */
|
||||
#else
|
||||
movzbl CHR(%esp), %eax
|
||||
|
@ -74,7 +71,7 @@ ENTRY (memset)
|
|||
2: movl %ecx, %edx
|
||||
shrl $2, %ecx
|
||||
andl $3, %edx
|
||||
#if !BZERO_P
|
||||
#ifndef USE_AS_BZERO
|
||||
imul $0x01010101, %eax
|
||||
#endif
|
||||
rep
|
||||
|
@ -84,22 +81,19 @@ ENTRY (memset)
|
|||
stosb
|
||||
|
||||
1:
|
||||
#if !BZERO_P
|
||||
#ifndef USE_AS_BZERO
|
||||
movl DEST(%esp), %eax /* start address of destination is result */
|
||||
#endif
|
||||
popl %edi
|
||||
cfi_adjust_cfa_offset (-4)
|
||||
cfi_restore (edi)
|
||||
|
||||
#if BZERO_P
|
||||
ret
|
||||
#else
|
||||
ret
|
||||
#endif
|
||||
END (memset)
|
||||
libc_hidden_builtin_def (memset)
|
||||
|
||||
#if defined PIC && IS_IN (libc) && !BZERO_P
|
||||
#if defined SHARED && IS_IN (libc) && !defined __memset_chk \
|
||||
&& !defined USE_AS_BZERO
|
||||
strong_alias (__memset_chk, __memset_zero_constant_len_parameter)
|
||||
.section .gnu.warning.__memset_zero_constant_len_parameter
|
||||
.string "memset used with constant zero length parameter; this could be due to transposed parameters"
|
||||
|
|
Loading…
Reference in New Issue