mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
* cancellation.c (__pthread_disable_asynccancel): Use THREAD_ATOMIC_AND
is available. * libc-cancellation.c (__libc_disable_asynccancel): Likewise. * sysdeps/x86_64/tls.h: Define THREAD_ATOMIC_AND. * sysdeps/i386/tls.h: Likewise. (tcbhead_t): Add __private_tm member.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/* Definition for thread-local data handling. nptl/i386 version.
|
||||
Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002-2007, 2009 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
|
||||
@@ -56,7 +56,11 @@ typedef struct
|
||||
int gscope_flag;
|
||||
#ifndef __ASSUME_PRIVATE_FUTEX
|
||||
int private_futex;
|
||||
#else
|
||||
int __unused1;
|
||||
#endif
|
||||
/* Reservation of some values for the TM ABI. */
|
||||
void *__private_tm[5];
|
||||
} tcbhead_t;
|
||||
|
||||
# define TLS_MULTIPLE_THREADS_IN_TCB 1
|
||||
@@ -394,6 +398,17 @@ union user_desc_init
|
||||
__ret; })
|
||||
|
||||
|
||||
/* Atomic logical and. */
|
||||
#define THREAD_ATOMIC_AND(descr, member, val) \
|
||||
(void) ({ if (sizeof ((descr)->member) == 4) \
|
||||
asm volatile (LOCK_PREFIX "andl %1, %%gs:%P0" \
|
||||
:: "i" (offsetof (struct pthread, member)), \
|
||||
"ir" (val)); \
|
||||
else \
|
||||
/* Not necessary for other sizes in the moment. */ \
|
||||
abort (); })
|
||||
|
||||
|
||||
/* Atomic set bit. */
|
||||
#define THREAD_ATOMIC_BIT_SET(descr, member, bit) \
|
||||
(void) ({ if (sizeof ((descr)->member) == 4) \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Definition for thread-local data handling. nptl/x86_64 version.
|
||||
Copyright (C) 2002-2007, 2008 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002-2007, 2008, 2009 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
|
||||
@@ -312,6 +312,17 @@ typedef struct
|
||||
__ret; })
|
||||
|
||||
|
||||
/* Atomic logical and. */
|
||||
#define THREAD_ATOMIC_AND(descr, member, val) \
|
||||
(void) ({ if (sizeof ((descr)->member) == 4) \
|
||||
asm volatile (LOCK_PREFIX "andl %1, %%fs:%P0" \
|
||||
:: "i" (offsetof (struct pthread, member)), \
|
||||
"ir" (val)); \
|
||||
else \
|
||||
/* Not necessary for other sizes in the moment. */ \
|
||||
abort (); })
|
||||
|
||||
|
||||
/* Atomic set bit. */
|
||||
#define THREAD_ATOMIC_BIT_SET(descr, member, bit) \
|
||||
(void) ({ if (sizeof ((descr)->member) == 4) \
|
||||
|
||||
Reference in New Issue
Block a user