diff options
Diffstat (limited to 'sysdeps/i386/i686/strtok.S')
-rw-r--r-- | sysdeps/i386/i686/strtok.S | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sysdeps/i386/i686/strtok.S b/sysdeps/i386/i686/strtok.S index 3d81fb6..fe225e5 100644 --- a/sysdeps/i386/i686/strtok.S +++ b/sysdeps/i386/i686/strtok.S @@ -1,6 +1,6 @@ /* strtok (str, delim) -- Return next DELIM separated token from STR. For Intel 80686. - Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2001, 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -86,6 +86,8 @@ ENTRY (BP_SYM (FUNCTION)) #if !defined USE_AS_STRTOK_R && defined PIC pushl %ebx /* Save PIC register. */ + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) call 0b addl $_GLOBAL_OFFSET_TABLE_, %ebx #endif @@ -97,6 +99,7 @@ ENTRY (BP_SYM (FUNCTION)) table. */ movl %edi, %edx subl $256, %esp + cfi_adjust_cfa_offset (256) movl $64, %ecx movl %esp, %edi xorl %eax, %eax @@ -247,9 +250,9 @@ L(8): cmpl %eax, %edx cmovne %ecx, %edx /* Store the pointer to the next character. */ -# ifdef USE_AS_STRTOK_R +#ifdef USE_AS_STRTOK_R movl SAVE(%esp), %ecx -# endif +#endif movl %edx, SAVE_PTR CHECK_BOUNDS_HIGH (%edx, SAVE_PTR, jb) RETURN_BOUNDED_POINTER (SAVE_PTR) @@ -257,14 +260,21 @@ L(8): cmpl %eax, %edx L(epilogue): /* Remove the stopset table. */ addl $256, %esp + cfi_adjust_cfa_offset (-256) #if !defined USE_AS_STRTOK_R && defined PIC popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) #endif LEAVE RET_PTR L(returnNULL): xorl %eax, %eax +#ifdef USE_AS_STRTOK_R + movl SAVE(%esp), %ecx +#endif + movl %edx, SAVE_PTR RETURN_NULL_BOUNDED_POINTER jmp L(epilogue) |