From ecdd1a316035312a0565a64011520819ff36ae11 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 3 Apr 1998 12:07:01 +0000 Subject: Update. 1998-04-03 16:29 Philip Blundell Based on patch from Pat Beirne: * sysdeps/unix/sysv/linux/arm/sysdep.S (__syscall_error): Same for PIC and non-PIC now. Correctly negate error number. (errno): Use `%' not `@' in .type directives. 1998-04-03 Ulrich Drepper * sysdeps/i386/strtok.S: Change to use single exit point. * sysdeps/i386/i686/strtok.S: Likewise. --- ChangeLog | 12 ++++++++++++ sysdeps/i386/i686/strtok.S | 16 ++-------------- sysdeps/i386/strtok.S | 18 +++--------------- sysdeps/unix/sysv/linux/arm/sysdep.S | 22 +++++++--------------- 4 files changed, 24 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index f77a060..3351a17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +1998-04-03 16:29 Philip Blundell + + Based on patch from Pat Beirne: + * sysdeps/unix/sysv/linux/arm/sysdep.S (__syscall_error): Same for + PIC and non-PIC now. Correctly negate error number. + (errno): Use `%' not `@' in .type directives. + +1998-04-03 Ulrich Drepper + + * sysdeps/i386/strtok.S: Change to use single exit point. + * sysdeps/i386/i686/strtok.S: Likewise. + 1998-04-02 Andreas Schwab * sysdeps/generic/dl-procinfo.h (_dl_hwcap_string): Provide diff --git a/sysdeps/i386/i686/strtok.S b/sysdeps/i386/i686/strtok.S index 62d54c4..c7a058e 100644 --- a/sysdeps/i386/i686/strtok.S +++ b/sysdeps/i386/i686/strtok.S @@ -207,6 +207,7 @@ L(8): /* Remove the stopset table. */ leal 1(%edx), %ecx cmovne %ecx, %edx +L(return): /* Store the pointer to the next character. */ #ifdef USE_AS_STRTOK_R movl 12(%esp), %ecx @@ -223,18 +224,5 @@ L(8): /* Remove the stopset table. */ L(returnNULL): xorl %eax, %eax - - /* Store current pointer for next round. */ -#ifdef USE_AS_STRTOK_R - movl 12(%esp), %ecx - movl %edx, (%ecx) -#else -# ifndef PIC - movl %edx, save_ptr -# else - movl %edx, save_ptr@GOTOFF(%ebx) - popl %ebx -# endif -#endif - ret + jmp L(return) END (FUNCTION) diff --git a/sysdeps/i386/strtok.S b/sysdeps/i386/strtok.S index 3d09dd7..c6469e8 100644 --- a/sysdeps/i386/strtok.S +++ b/sysdeps/i386/strtok.S @@ -1,6 +1,6 @@ /* strtok (str, delim) -- Return next DELIM separated token from STR. For Intel 80x86, x>=3. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -254,6 +254,7 @@ L(8): /* Remove the stopset table. */ incl %edx L(11): +L(return): /* Store the pointer to the next character. */ #ifdef USE_AS_STRTOK_R movl 12(%esp), %ecx @@ -270,18 +271,5 @@ L(11): L(returnNULL): xorl %eax, %eax - - /* Store current pointer for next round. */ -#ifdef USE_AS_STRTOK_R - movl 12(%esp), %ecx - movl %edx, (%ecx) -#else -# ifndef PIC - movl %edx, save_ptr -# else - movl %edx, save_ptr@GOTOFF(%ebx) - popl %ebx -# endif -#endif - ret + jmp L(return) END (FUNCTION) diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.S b/sysdeps/unix/sysv/linux/arm/sysdep.S index a71181c..482535b 100644 --- a/sysdeps/unix/sysv/linux/arm/sysdep.S +++ b/sysdeps/unix/sysv/linux/arm/sysdep.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -21,31 +21,23 @@ /* We define errno here, to be consistent with Linux/i386. */ .bss .globl errno - .type errno,@object + .type errno,%object .size errno,4 errno: .zero 4 .globl _errno - .type _errno,@object + .type _errno,%object _errno = errno /* This name is expected by hj's libc.so.5 startup code. */ .text -/* The following code is only used in the shared library when we - compile the reentrant version. Otherwise each system call defines - each own version. */ - -#ifndef PIC - /* The syscall stubs jump here when they detect an error. - The code for Linux is almost identical to the canonical Unix/i386 - code, except that the error number in %eax is negated. */ + The code for Linux is almost identical to the canonical Unix + code, except that the error number in R0 is negated. */ #undef CALL_MCOUNT -#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %eax. */ +#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0. */ ENTRY (__syscall_error) - mvn r0, r0 + rsb r0, r0, $0 #define __syscall_error __syscall_error_1 #include - -#endif /* !PIC */ -- cgit v1.1