mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	2003-01-27 Martin Schwidefsky <schwidefsky@de.ibm.com> * elf/elf.h: Add new s390 relocs. * elf/tls-macros.h: Add s390 versions. * sysdeps/s390/Versions [GLIBC_2.3] (ld): Export __tls_get_offset. * sysdeps/s390/dl-tls.h: New file. * sysdeps/s390/libc-tls.c: New file. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_type_class): Add TLS relocs for class PLT. (elf_machine_rela): Handle TLS relocs. * sysdeps/s390/s390-64/dl-machine.h: Likewise. * sysdeps/s390/s390-32/elf/configure.in: Add TLS check. * sysdeps/s390/s390-64/elf/configure.in: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/clone.S: Add support for CLONE_CHILD_*TID flags. * sysdeps/unix/sysv/linux/s390/s390-64/clone.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/mmap.S: Use branch with 32 bit offset. * sysdeps/unix/sysv/linux/s390/s390-64/socket.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S (__syscall_error): Support USE___THREAD. Define RTLD_PRIVATE_ERRNO variant. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S (__syscall_error): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: (SYSCALL_ERROR_LABEL): Move define next to SYSCALL_ERROR_HANDLER. (SYSCALL_ERROR_HANDLER): Add USE___THREAD and RTLD_PRIVATE_ERRNO variants. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: (SYSCALL_ERROR_LABEL): Move define next to SYSCALL_ERROR_HANDLER. Use direct branch to syscall_error for !PIC and PIC && !_LIBC_REENTRANT. (SYSCALL_ERROR_HANDLER): Add USE___THREAD and RTLD_PRIVATE_ERRNO variants.
		
			
				
	
	
		
			50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
 | |
|    This file is part of the GNU C Library.
 | |
|    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 | |
| 
 | |
|    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; if not, write to the Free
 | |
|    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 | |
|    02111-1307 USA.  */
 | |
| 
 | |
| /* The "thread register" gets initialized from a segment descriptor.
 | |
|    Initialize such a descriptor first.  */
 | |
| #define PREPARE_CREATE \
 | |
|   union user_desc_init desc;						      \
 | |
| 									      \
 | |
|   /* Describe the thread-local storage segment.  */			      \
 | |
| 									      \
 | |
|   /* The 'entry_number' field.  The first three bits of the segment	      \
 | |
|      register value select the GDT, ignore them.  We get the index	      \
 | |
|      from the value of the %gs register in the current thread.  */	      \
 | |
|   desc.vals[0] = TLS_GET_GS () >> 3;					      \
 | |
|   /* The 'base_addr' field.  Pointer to the TCB.  */			      \
 | |
|   desc.vals[1] = (unsigned long int) pd;				      \
 | |
|   /* The 'limit' field.  We use 4GB which is 0xfffff pages.  */		      \
 | |
|   desc.vals[2] = 0xfffff;						      \
 | |
|   /* Collapsed value of the bitfield:					      \
 | |
|        .seg_32bit = 1							      \
 | |
|        .contents = 0							      \
 | |
|        .read_exec_only = 0						      \
 | |
|        .limit_in_pages = 1						      \
 | |
|        .seg_not_present = 0						      \
 | |
|        .useable = 1 */							      \
 | |
|   desc.vals[3] = 0x51
 | |
| 
 | |
| /* Value passed to 'clone' for initialization of the thread register.  */
 | |
| #define TLS_VALUE &desc.desc
 | |
| 
 | |
| 
 | |
| /* Get the real implementation.  */
 | |
| #include <nptl/sysdeps/pthread/createthread.c>
 |