diff options
-rw-r--r-- | nptl/ChangeLog | 5 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S | 22 |
2 files changed, 27 insertions, 0 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index d65839fa6b..fdfcf7c580 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2002-12-25 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S: Implement + correct errno access for case that USE___THREAD is not defined. + 2002-12-24 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/i386/dl-sysdep.h: Add missing #endif. diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S index bfec6fa155..dd7d34e30f 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S @@ -80,9 +80,15 @@ __new_sem_wait: 4: #endif addl $_GLOBAL_OFFSET_TABLE_, %ebx +#if USE___THREAD movl %gs:0, %edx subl errno@gottpoff(%ebx), %edx movl %eax, (%edx) +#else + movl %eax, %edx + call __errno_location@plt + movl %edx, (%eax) +#endif orl $-1, %eax popl %esi popl %ebx @@ -121,9 +127,14 @@ __new_sem_trywait: 3: #endif addl $_GLOBAL_OFFSET_TABLE_, %ecx +#if USE___THREAD movl %gs:0, %edx subl errno@gottpoff(%ecx), %edx movl $EAGAIN, (%edx) +#else + call __errno_location@plt + movl $EAGAIN, (%eax) +#endif orl $-1, %eax ret .size __new_sem_trywait,.-__new_sem_trywait @@ -226,9 +237,15 @@ sem_timedwait: 4: #endif addl $_GLOBAL_OFFSET_TABLE_, %ebx +#if USE___THREAD movl %gs:0, %edx subl errno@gottpoff(%ebx), %edx movl %eax, (%edx) +#else + movl %eax, %edx + call __errno_location@plt + movl %edx, (%eax) +#endif addl $8, %esp orl $-1, %eax @@ -272,9 +289,14 @@ __new_sem_post: 4: #endif addl $_GLOBAL_OFFSET_TABLE_, %ebx +#if USE___THREAD movl %gs:0, %edx subl errno@gottpoff(%ebx), %edx movl $EINVAL, (%edx) +#else + call __errno_location@plt + movl $EAGAIN, (%eax) +#endif orl $-1, %eax popl %ebx |