summaryrefslogtreecommitdiff
path: root/sysdeps/i386/i686/memmove.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/i686/memmove.S')
-rw-r--r--sysdeps/i386/i686/memmove.S15
1 files changed, 14 insertions, 1 deletions
diff --git a/sysdeps/i386/i686/memmove.S b/sysdeps/i386/i686/memmove.S
index 951e139ad4..b93b5c729f 100644
--- a/sysdeps/i386/i686/memmove.S
+++ b/sysdeps/i386/i686/memmove.S
@@ -1,7 +1,7 @@
/* Copy memory block and return pointer to beginning of destination block
For Intel 80x86, x>=6.
This file is part of the GNU C Library.
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2003.
The GNU C Library is free software; you can redistribute it and/or
@@ -42,11 +42,14 @@ ENTRY (BP_SYM (memmove))
ENTER
pushl %edi
+ cfi_adjust_cfa_offset (4)
movl LEN(%esp), %ecx
movl DEST(%esp), %edi
+ cfi_rel_offset (edi, 0)
movl %esi, %edx
movl SRC(%esp), %esi
+ cfi_register (esi, edx)
CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %ecx)
CHECK_BOUNDS_BOTH_WIDE (%esi, SRC(%esp), %ecx)
@@ -65,14 +68,21 @@ ENTRY (BP_SYM (memmove))
2: rep
movsl
movl %edx, %esi
+ cfi_restore (esi)
movl DEST(%esp), %eax
RETURN_BOUNDED_POINTER (DEST(%esp))
popl %edi
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (edi)
LEAVE
RET_PTR
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (edi, 0)
+ cfi_register (esi, edx)
+
/* Backward copying. */
3: std
leal -1(%edi, %ecx), %edi
@@ -90,11 +100,14 @@ ENTRY (BP_SYM (memmove))
rep
movsl
movl %edx, %esi
+ cfi_restore (esi)
movl DEST(%esp), %eax
RETURN_BOUNDED_POINTER (DEST(%esp))
cld
popl %edi
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (edi)
LEAVE
RET_PTR