mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	* crypt/crypt.c: Changed copying permission notice to Lesser GPL
        from Library GPL.
        * crypt/crypt_util.c: Likewise.
        * crypt/ufc.c: Likewise.
        * elf/dl-conflict.c: Likewise.
        * elf/dl-iteratephdr.c: Likewise.
        * iconv/iconvconfig.h: Likewise.
        * linuxthreads/Examples/ex10.c: Likewise.
        * linuxthreads/Examples/ex11.c: Likewise.
        * linuxthreads/Examples/ex13.c: Likewise.
        * linuxthreads/Examples/ex8.c: Likewise.
        * linuxthreads/Examples/ex9.c: Likewise.
        * linuxthreads/barrier.c: Likewise.
        * linuxthreads/events.c: Likewise.
        * linuxthreads/lockfile.c: Likewise.
        * linuxthreads/no-tsd.c: Likewise.
        * linuxthreads/pt-machine.c: Likewise.
        * linuxthreads/ptclock_gettime.c: Likewise.
        * linuxthreads/ptclock_settime.c: Likewise.
        * linuxthreads/rwlock.c: Likewise.
        * linuxthreads/sysdeps/alpha/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/alpha/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/arm/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/arm/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/cris/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/cris/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/hppa/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/hppa/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/i386/i686/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/i386/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/i386/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/i386/useldt.h: Likewise.
        * linuxthreads/sysdeps/ia64/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/ia64/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/m68k/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/m68k/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/mips/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/mips/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/powerpc/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/powerpc/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/pthread/bits/initspin.h: Likewise.
        * linuxthreads/sysdeps/pthread/bits/libc-lock.h: Likewise.
        * linuxthreads/sysdeps/pthread/bits/libc-tsd.h: Likewise.
        * linuxthreads/sysdeps/pthread/getcpuclockid.c: Likewise.
        * linuxthreads/sysdeps/pthread/posix-timer.h: Likewise.
        * linuxthreads/sysdeps/pthread/timer_create.c: Likewise.
        * linuxthreads/sysdeps/pthread/timer_delete.c: Likewise.
        * linuxthreads/sysdeps/pthread/timer_getoverr.c: Likewise.
        * linuxthreads/sysdeps/pthread/timer_gettime.c: Likewise.
        * linuxthreads/sysdeps/pthread/timer_routines.c: Likewise.
        * linuxthreads/sysdeps/pthread/timer_settime.c: Likewise.
        * linuxthreads/sysdeps/pthread/tst-timer.c: Likewise.
        * linuxthreads/sysdeps/s390/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/s390/s390-32/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/s390/s390-64/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/sh/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/sh/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/sparc/sparc32/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/sparc/sparc32/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/sparc/sparc64/pspinlock.c: Likewise.
        * linuxthreads/sysdeps/sparc/sparc64/pt-machine.h: Likewise.
        * linuxthreads/sysdeps/unix/sysv/linux/bits/local_lim.h: Likewise.
        * linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h: Likewise.
        * linuxthreads/sysdeps/unix/sysv/linux/bits/sigthread.h: Likewise.
        * linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h: Likewise.
        * linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h: Likewise.
        * linuxthreads/tststack.c: Likewise.
        * linuxthreads/unload.c: Likewise.
        * linuxthreads/weaks.c: Likewise.
        * linuxthreads/wrapsyscall.c: Likewise.
        * malloc/arena.c: Likewise.
        * malloc/hooks.c: Likewise.
        * malloc/malloc.c: Likewise.
        * posix/glob/Makefile.ami: Likewise.
        * posix/glob/Makefile.in: Likewise.
        * stdlib/gmp-impl.h: Likewise.
        * stdlib/gmp.h: Likewise.
        * sysdeps/generic/dl-iteratephdr-static.c: Likewise.
        * sysdeps/generic/strnlen.c: Likewise.
        * sysdeps/mach/hurd/powerpc/bits/sigcontext.h: Likewise.
        * sysdeps/mach/hurd/recvmsg.c: Likewise.
        * sysdeps/mach/hurd/sendmsg.c: Likewise.
        * sysdeps/mach/hurd/spawni.c: Likewise.
        * sysdeps/mach/powerpc/machine-sp.h: Likewise.
        * sysdeps/mach/powerpc/sysdep.h: Likewise.
        * sysdeps/mach/powerpc/thread_state.h: Likewise.
        * sysdeps/unix/bsd/bsd4.4/bits/socket.h: Likewise.
        * sysdeps/unix/sysv/linux/ia64/dl-iteratephdr-static.c: Likewise.
        * sysdeps/x86_64/gmp-mparam.h: Likewise.
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Machine-dependent pthreads configuration and inline functions.
 | 
						|
   i386 version.
 | 
						|
   Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
 | 
						|
   This file is part of the GNU C Library.
 | 
						|
   Contributed by Richard Henderson <rth@tamu.edu>.
 | 
						|
 | 
						|
   The GNU C Library is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU Lesser General Public License as
 | 
						|
   published by the Free Software Foundation; either version 2.1 of the
 | 
						|
   License, or (at your option) any later version.
 | 
						|
 | 
						|
   The GNU C Library is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
   Lesser General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Lesser General Public
 | 
						|
   License along with the GNU C Library; see the file COPYING.LIB.  If not,
 | 
						|
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
						|
   Boston, MA 02111-1307, USA.  */
 | 
						|
 | 
						|
#ifndef _PT_MACHINE_H
 | 
						|
#define _PT_MACHINE_H	1
 | 
						|
 | 
						|
#ifndef __ASSEMBLER__
 | 
						|
#ifndef PT_EI
 | 
						|
# define PT_EI extern inline
 | 
						|
#endif
 | 
						|
 | 
						|
extern long int testandset (int *spinlock);
 | 
						|
extern int __compare_and_swap (long int *p, long int oldval, long int newval);
 | 
						|
 | 
						|
/* Get some notion of the current stack.  Need not be exactly the top
 | 
						|
   of the stack, just something somewhere in the current frame.  */
 | 
						|
#define CURRENT_STACK_FRAME  __builtin_frame_address (0)
 | 
						|
 | 
						|
 | 
						|
/* Spinlock implementation; required.  */
 | 
						|
PT_EI long int
 | 
						|
testandset (int *spinlock)
 | 
						|
{
 | 
						|
  long int ret;
 | 
						|
 | 
						|
  __asm__ __volatile__(
 | 
						|
       "xchgl %0, %1"
 | 
						|
       : "=r"(ret), "=m"(*spinlock)
 | 
						|
       : "0"(1), "m"(*spinlock)
 | 
						|
       : "memory");
 | 
						|
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* Compare-and-swap for semaphores.
 | 
						|
   Available on the 486 and above, but not on the 386.
 | 
						|
   We test dynamically whether it's available or not. */
 | 
						|
 | 
						|
#define HAS_COMPARE_AND_SWAP
 | 
						|
#define TEST_FOR_COMPARE_AND_SWAP
 | 
						|
 | 
						|
PT_EI int
 | 
						|
__compare_and_swap (long int *p, long int oldval, long int newval)
 | 
						|
{
 | 
						|
  char ret;
 | 
						|
  long int readval;
 | 
						|
 | 
						|
  __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0"
 | 
						|
			: "=q" (ret), "=m" (*p), "=a" (readval)
 | 
						|
			: "r" (newval), "m" (*p), "a" (oldval)
 | 
						|
			: "memory");
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
PT_EI int
 | 
						|
get_eflags (void)
 | 
						|
{
 | 
						|
  int res;
 | 
						|
  __asm__ __volatile__ ("pushfl; popl %0" : "=r" (res) : );
 | 
						|
  return res;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
PT_EI void
 | 
						|
set_eflags (int newflags)
 | 
						|
{
 | 
						|
  __asm__ __volatile__ ("pushl %0; popfl" : : "r" (newflags) : "cc");
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
PT_EI int
 | 
						|
compare_and_swap_is_available (void)
 | 
						|
{
 | 
						|
  int oldflags = get_eflags ();
 | 
						|
  int changed;
 | 
						|
  /* Flip AC bit in EFLAGS.  */
 | 
						|
  set_eflags (oldflags ^ 0x40000);
 | 
						|
  /* See if bit changed.  */
 | 
						|
  changed = (get_eflags () ^ oldflags) & 0x40000;
 | 
						|
  /* Restore EFLAGS.  */
 | 
						|
  set_eflags (oldflags);
 | 
						|
  /* If the AC flag did not change, it's a 386 and it lacks cmpxchg.
 | 
						|
     Otherwise, it's a 486 or above and it has cmpxchg.  */
 | 
						|
  return changed != 0;
 | 
						|
}
 | 
						|
#endif /* __ASSEMBLER__ */
 | 
						|
 | 
						|
#endif /* pt-machine.h */
 |