2
0
mirror of git://sourceware.org/git/glibc.git synced 2025-04-24 14:41:06 +08:00
2004-09-23  Kaz Kojima  <kkojima@rr.iij4u.or.jp>

	* sysdeps/unix/sysv/linux/sh/sysdep.h (INTERNAL_SYSCALL_NCS): Define.
This commit is contained in:
Ulrich Drepper 2004-09-24 07:18:48 +00:00
parent 8f1913a918
commit 362038b0ca
4 changed files with 34 additions and 5 deletions
ChangeLog
nptl
sysdeps/unix/sysv/linux/sh

@ -1,3 +1,7 @@
2004-09-23 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/sysdep.h (INTERNAL_SYSCALL_NCS): Define.
2004-09-23 Thorsten Kukuk <kukuk@suse.de>
* sysdeps/unix/sysv/linux/sys/mount.h: Sync MS_RMT_MASK flag

@ -1,3 +1,10 @@
2004-09-24 Ulrich Drepper <drepper@redhat.com>
* pthread_create.c (start_thread): Don't wait for scheduler data
etc to be set at the beginning of the function. The cancellation
infrastructure must have been set up. And enable async
cancellation before potentially going to sleep. [BZ #401]
2004-09-20 Ulrich Drepper <drepper@redhat.com>
* Versions: Remove exports for pthread_set*id_np functions.

@ -227,11 +227,6 @@ start_thread (void *arg)
struct pthread *pd = (struct pthread *) arg;
/* Get the lock the parent locked to force synchronization. */
lll_lock (pd->lock);
/* And give it up right away. */
lll_unlock (pd->lock);
#if HP_TIMING_AVAIL
/* Remember the time when the thread was started. */
hp_timing_t now;
@ -257,6 +252,15 @@ start_thread (void *arg)
/* Store the new cleanup handler info. */
THREAD_SETMEM (pd, cleanup_jmp_buf, &unwind_buf);
int oldtype = CANCEL_ASYNC ();
/* Get the lock the parent locked to force synchronization. */
lll_lock (pd->lock);
/* And give it up right away. */
lll_unlock (pd->lock);
CANCEL_RESET (oldtype);
/* Run the code the user provided. */
#ifdef CALL_THREAD_FCT
THREAD_SETMEM (pd, result, CALL_THREAD_FCT (pd));

@ -333,6 +333,20 @@
\
(int) resultvar; })
/* The _NCS variant allows non-constant syscall numbers. */
#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
({ \
unsigned long int resultvar; \
register long int r3 asm ("%r3") = (name); \
SUBSTITUTE_ARGS_##nr(args); \
\
asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \
: "=z" (resultvar) \
: "r" (r3) ASMFMT_##nr \
: "memory"); \
\
(int) resultvar; })
#undef INTERNAL_SYSCALL_DECL
#define INTERNAL_SYSCALL_DECL(err) do { } while (0)