Remove support for !USE___THREAD
This commit is contained in:
parent
3ce1f29594
commit
d063d16433
38
ChangeLog
38
ChangeLog
|
@ -1,5 +1,43 @@
|
|||
2011-09-10 Ulrich Drepper <drepper@gmail.com>
|
||||
|
||||
* include/tls.h: Removed. USE___THREAD must always be defined.
|
||||
* bits/libc-tsd.h: Don't handle !USE___THREAD.
|
||||
* elf/dl-libc.c: Likewise.
|
||||
* elf/dl-tsd.c: Likewise.
|
||||
* include/errno.h: Likewise.
|
||||
* include/netdb.h: Likewise.
|
||||
* include/resolv.h: Likewise.
|
||||
* inet/herrno-loc.c: Likewise.
|
||||
* inet/herrno.c: Likewise.
|
||||
* malloc/arena.c: Likewise.
|
||||
* malloc/hooks.c: Likewise.
|
||||
* malloc/malloc.c: Likewise.
|
||||
* resolv/res-state.c: Likewise.
|
||||
* resolv/res_libc.c: Likewise.
|
||||
* sysdeps/i386/dl-machine.h: Likewise.
|
||||
* sysdeps/ia64/dl-machine.h: Likewise.
|
||||
* sysdeps/powerpc/powerpc32/dl-machine.h: Likewise.
|
||||
* sysdeps/powerpc/powerpc64/dl-machine.h: Likewise.
|
||||
* sysdeps/s390/s390-32/dl-machine.h: Likewise.
|
||||
* sysdeps/s390/s390-64/dl-machine.h: Likewise.
|
||||
* sysdeps/sh/dl-machine.h: Likewise.
|
||||
* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
|
||||
* sysdeps/sparc/sparc64/dl-machine.h: Likewise.
|
||||
* sysdeps/unix/i386/sysdep.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/ia64/sysdep.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
|
||||
* sysdeps/unix/x86_64/sysdep.S: Likewise.
|
||||
* sysdeps/x86_64/dl-machine.h: Likewise.
|
||||
* tls.make.c: Likewise.
|
||||
|
||||
* configure.in: Remove --with-__thread option. Make tests for
|
||||
--no-whole-archive, __builtin_expect, symbol redirection, __thread,
|
||||
tls_model attribute fail if no support is available. Remove
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* libc-internal interface for thread-specific data. Stub or TLS version.
|
||||
Copyright (C) 1998,2001,2002,2008 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998,2001,2002,2008,2011 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
|
||||
|
@ -24,12 +24,12 @@
|
|||
set of thread-specific `void *' data used only internally by libc.
|
||||
|
||||
__libc_tsd_define(CLASS, TYPE, KEY) -- Define or declare a datum with TYPE
|
||||
for KEY. CLASS can be `static' for
|
||||
for KEY. CLASS can be `static' for
|
||||
keys used in only one source file,
|
||||
empty for global definitions, or
|
||||
`extern' for global declarations.
|
||||
__libc_tsd_address(TYPE, KEY) -- Return the `TYPE *' pointing to
|
||||
the current thread's datum for KEY.
|
||||
the current thread's datum for KEY.
|
||||
__libc_tsd_get(TYPE, KEY) -- Return the `TYPE' datum for KEY.
|
||||
__libc_tsd_set(TYPE, KEY, VALUE) -- Set the datum for KEY to VALUE.
|
||||
|
||||
|
@ -51,20 +51,11 @@
|
|||
We don't define an enum for the possible key values, because the KEYs
|
||||
translate directly into variables by macro magic. */
|
||||
|
||||
#if USE___THREAD
|
||||
# define __libc_tsd_define(CLASS, TYPE, KEY) \
|
||||
#define __libc_tsd_define(CLASS, TYPE, KEY) \
|
||||
CLASS __thread TYPE __libc_tsd_##KEY attribute_tls_model_ie;
|
||||
|
||||
# define __libc_tsd_address(TYPE, KEY) (&__libc_tsd_##KEY)
|
||||
# define __libc_tsd_get(TYPE, KEY) (__libc_tsd_##KEY)
|
||||
# define __libc_tsd_set(TYPE, KEY, VALUE) (__libc_tsd_##KEY = (VALUE))
|
||||
#else
|
||||
# define __libc_tsd_define(CLASS, TYPE, KEY) \
|
||||
CLASS TYPE __libc_tsd_##KEY##_data;
|
||||
|
||||
# define __libc_tsd_address(TYPE, KEY) (&__libc_tsd_##KEY##_data)
|
||||
# define __libc_tsd_get(TYPE, KEY) (__libc_tsd_##KEY##_data)
|
||||
# define __libc_tsd_set(TYPE, KEY, VALUE) (__libc_tsd_##KEY##_data = (VALUE))
|
||||
#endif
|
||||
#define __libc_tsd_address(TYPE, KEY) (&__libc_tsd_##KEY)
|
||||
#define __libc_tsd_get(TYPE, KEY) (__libc_tsd_##KEY)
|
||||
#define __libc_tsd_set(TYPE, KEY, VALUE) (__libc_tsd_##KEY = (VALUE))
|
||||
|
||||
#endif /* bits/libc-tsd.h */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* MT support function to get address of `errno' variable, non-threaded
|
||||
version.
|
||||
Copyright (C) 1996, 1998, 2002, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1998, 2002, 2004, 2011 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
|
||||
|
@ -21,15 +21,7 @@
|
|||
#include <errno.h>
|
||||
#include <tls.h>
|
||||
|
||||
#if ! USE___THREAD && !RTLD_PRIVATE_ERRNO
|
||||
#undef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
int *
|
||||
#if ! USE___THREAD
|
||||
weak_const_function
|
||||
#endif
|
||||
__errno_location (void)
|
||||
{
|
||||
return &errno;
|
||||
|
|
21
csu/errno.c
21
csu/errno.c
|
@ -1,5 +1,5 @@
|
|||
/* Definition of `errno' variable. Canonical version.
|
||||
Copyright (C) 2002, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002, 2004, 2011 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
|
||||
|
@ -27,27 +27,10 @@
|
|||
/* Code compiled for rtld refers only to this name. */
|
||||
int rtld_errno attribute_hidden;
|
||||
|
||||
#elif USE___THREAD
|
||||
#else
|
||||
|
||||
__thread int errno;
|
||||
extern __thread int __libc_errno __attribute__ ((alias ("errno")))
|
||||
attribute_hidden;
|
||||
|
||||
#else
|
||||
|
||||
/* This differs from plain `int errno;' in that it doesn't create
|
||||
a common definition, but a plain symbol that resides in .bss,
|
||||
which can have an alias. */
|
||||
int errno __attribute__ ((nocommon));
|
||||
strong_alias (errno, _errno)
|
||||
|
||||
/* We declare these with compat_symbol so that they are not visible at
|
||||
link time. Programs must use the accessor functions. RTLD is special,
|
||||
since it's not exported from there at any time. */
|
||||
# if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
|
||||
# include <shlib-compat.h>
|
||||
compat_symbol (libc, errno, errno, GLIBC_2_0);
|
||||
compat_symbol (libc, _errno, _errno, GLIBC_2_0);
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -307,22 +307,19 @@ libc_freeres_fn (free_mem)
|
|||
}
|
||||
}
|
||||
|
||||
if (USE___THREAD || GL(dl_tls_dtv_slotinfo_list) != NULL)
|
||||
{
|
||||
/* Free the memory allocated for the dtv slotinfo array. We can do
|
||||
this only if all modules which used this memory are unloaded. */
|
||||
/* Free the memory allocated for the dtv slotinfo array. We can do
|
||||
this only if all modules which used this memory are unloaded. */
|
||||
#ifdef SHARED
|
||||
if (GL(dl_initial_dtv) == NULL)
|
||||
/* There was no initial TLS setup, it was set up later when
|
||||
it used the normal malloc. */
|
||||
free_slotinfo (&GL(dl_tls_dtv_slotinfo_list));
|
||||
else
|
||||
if (GL(dl_initial_dtv) == NULL)
|
||||
/* There was no initial TLS setup, it was set up later when
|
||||
it used the normal malloc. */
|
||||
free_slotinfo (&GL(dl_tls_dtv_slotinfo_list));
|
||||
else
|
||||
#endif
|
||||
/* The first element of the list does not have to be deallocated.
|
||||
It was allocated in the dynamic linker (i.e., with a different
|
||||
malloc), and in the static library it's in .bss space. */
|
||||
free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)->next);
|
||||
}
|
||||
/* The first element of the list does not have to be deallocated.
|
||||
It was allocated in the dynamic linker (i.e., with a different
|
||||
malloc), and in the static library it's in .bss space. */
|
||||
free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)->next);
|
||||
|
||||
void *scope_free_list = GL(dl_scope_free_list);
|
||||
GL(dl_scope_free_list) = NULL;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Thread-local data used by error handling for runtime dynamic linker.
|
||||
Copyright (C) 2002, 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002, 2005, 2011 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
|
||||
|
@ -30,17 +30,13 @@
|
|||
void ** __attribute__ ((const))
|
||||
_dl_initial_error_catch_tsd (void)
|
||||
{
|
||||
# if USE___THREAD
|
||||
static __thread void *data;
|
||||
# else
|
||||
static void *data;
|
||||
# endif
|
||||
return &data;
|
||||
}
|
||||
void **(*_dl_error_catch_tsd) (void) __attribute__ ((const))
|
||||
= &_dl_initial_error_catch_tsd;
|
||||
|
||||
# elif USE___THREAD
|
||||
# else
|
||||
|
||||
/* libpthread sets _dl_error_catch_tsd to point to this function.
|
||||
We define it here instead of in libpthread so that it doesn't
|
||||
|
|
|
@ -21,15 +21,13 @@ extern int rtld_errno attribute_hidden;
|
|||
|
||||
# include <tls.h>
|
||||
|
||||
# if USE___THREAD
|
||||
# undef errno
|
||||
# ifndef NOT_IN_libc
|
||||
# define errno __libc_errno
|
||||
# else
|
||||
# define errno errno /* For #ifndef errno tests. */
|
||||
# endif
|
||||
extern __thread int errno attribute_tls_model_ie;
|
||||
# undef errno
|
||||
# ifndef NOT_IN_libc
|
||||
# define errno __libc_errno
|
||||
# else
|
||||
# define errno errno /* For #ifndef errno tests. */
|
||||
# endif
|
||||
extern __thread int errno attribute_tls_model_ie;
|
||||
|
||||
# endif /* RTLD_PRIVATE_ERRNO */
|
||||
|
||||
|
|
|
@ -2,29 +2,19 @@
|
|||
#include <resolv/netdb.h>
|
||||
|
||||
/* Macros for accessing h_errno from inside libc. */
|
||||
# undef h_errno
|
||||
# ifdef _LIBC_REENTRANT
|
||||
# include <tls.h>
|
||||
# if USE___THREAD
|
||||
# undef h_errno
|
||||
# ifndef NOT_IN_libc
|
||||
# define h_errno __libc_h_errno
|
||||
# else
|
||||
# define h_errno h_errno /* For #ifndef h_errno tests. */
|
||||
# endif
|
||||
extern __thread int h_errno attribute_tls_model_ie;
|
||||
# define __set_h_errno(x) (h_errno = (x))
|
||||
# ifndef NOT_IN_libc
|
||||
# define h_errno __libc_h_errno
|
||||
# else
|
||||
static inline int
|
||||
__set_h_errno (int __err)
|
||||
{
|
||||
return *__h_errno_location () = __err;
|
||||
}
|
||||
# define h_errno h_errno /* For #ifndef h_errno tests. */
|
||||
# endif
|
||||
extern __thread int h_errno attribute_tls_model_ie;
|
||||
# else
|
||||
# undef h_errno
|
||||
# define __set_h_errno(x) (h_errno = (x))
|
||||
extern int h_errno;
|
||||
# endif /* _LIBC_REENTRANT */
|
||||
# define __set_h_errno(x) (h_errno = (x))
|
||||
|
||||
libc_hidden_proto (hstrerror)
|
||||
libc_hidden_proto (innetgr)
|
||||
|
|
|
@ -15,14 +15,12 @@
|
|||
|
||||
# ifdef _LIBC_REENTRANT
|
||||
# include <tls.h>
|
||||
# if USE___THREAD
|
||||
# undef _res
|
||||
# ifndef NOT_IN_libc
|
||||
# define __resp __libc_resp
|
||||
# endif
|
||||
# define _res (*__resp)
|
||||
extern __thread struct __res_state *__resp attribute_tls_model_ie;
|
||||
# undef _res
|
||||
# ifndef NOT_IN_libc
|
||||
# define __resp __libc_resp
|
||||
# endif
|
||||
# define _res (*__resp)
|
||||
extern __thread struct __res_state *__resp attribute_tls_model_ie;
|
||||
# else
|
||||
# ifndef __BIND_NOSTATIC
|
||||
# undef _res
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
/* This file defines USE___THREAD to 1 or 0 to cut down on the #if mess. */
|
||||
|
||||
#ifndef _include_tls_h
|
||||
#define _include_tls_h 1
|
||||
|
||||
#include_next <tls.h>
|
||||
|
||||
#if !defined NOT_IN_libc || defined IS_IN_libpthread
|
||||
|
||||
# define USE___THREAD 1
|
||||
|
||||
#else
|
||||
|
||||
# define USE___THREAD 0
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1996, 97, 98, 2002 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996, 97, 98, 2002, 2011 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
|
||||
|
@ -19,10 +19,6 @@
|
|||
#include <netdb.h>
|
||||
#include <tls.h>
|
||||
|
||||
#if ! USE___THREAD
|
||||
# undef h_errno
|
||||
extern int h_errno;
|
||||
#endif
|
||||
|
||||
/* When threaded, h_errno may be a per-thread variable. */
|
||||
int *
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1996,97,98,2002,2003 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996,97,98,2002,2003,2011 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
|
||||
|
@ -25,23 +25,7 @@
|
|||
/* We need to have the error status variable of the resolver
|
||||
accessible in the libc. */
|
||||
|
||||
#if USE___THREAD
|
||||
__thread int h_errno;
|
||||
extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno")))
|
||||
attribute_hidden;
|
||||
# define h_errno __libc_h_errno
|
||||
#else
|
||||
/* This differs from plain `int h_errno;' in that it doesn't create
|
||||
a common definition, but a plain symbol that resides in .bss,
|
||||
which can have an alias. */
|
||||
int h_errno __attribute__((section (".bss")));
|
||||
weak_alias (h_errno, _h_errno)
|
||||
|
||||
/* We declare these with compat_symbol so that they are not
|
||||
visible at link time. Programs must use the accessor functions. */
|
||||
# if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
|
||||
# include <shlib-compat.h>
|
||||
compat_symbol (libc, h_errno, h_errno, GLIBC_2_0);
|
||||
compat_symbol (libc, _h_errno, _h_errno, GLIBC_2_0);
|
||||
# endif
|
||||
#endif
|
||||
#define h_errno __libc_h_errno
|
||||
|
|
|
@ -173,10 +173,6 @@ int __malloc_initialized = -1;
|
|||
|
||||
static __malloc_ptr_t (*save_malloc_hook) (size_t __size,
|
||||
__const __malloc_ptr_t);
|
||||
# if !defined _LIBC || (defined SHARED && !USE___THREAD)
|
||||
static __malloc_ptr_t (*save_memalign_hook) (size_t __align, size_t __size,
|
||||
__const __malloc_ptr_t);
|
||||
# endif
|
||||
static void (*save_free_hook) (__malloc_ptr_t __ptr,
|
||||
__const __malloc_ptr_t);
|
||||
static Void_t* save_arena;
|
||||
|
@ -432,34 +428,6 @@ __failing_morecore (ptrdiff_t d)
|
|||
extern struct dl_open_hook *_dl_open_hook;
|
||||
libc_hidden_proto (_dl_open_hook);
|
||||
# endif
|
||||
|
||||
# if defined SHARED && !USE___THREAD
|
||||
/* This is called by __pthread_initialize_minimal when it needs to use
|
||||
malloc to set up the TLS state. We cannot do the full work of
|
||||
ptmalloc_init (below) until __pthread_initialize_minimal has finished,
|
||||
so it has to switch to using the special startup-time hooks while doing
|
||||
those allocations. */
|
||||
void
|
||||
__libc_malloc_pthread_startup (bool first_time)
|
||||
{
|
||||
if (first_time)
|
||||
{
|
||||
ptmalloc_init_minimal ();
|
||||
save_malloc_hook = __malloc_hook;
|
||||
save_memalign_hook = __memalign_hook;
|
||||
save_free_hook = __free_hook;
|
||||
__malloc_hook = malloc_starter;
|
||||
__memalign_hook = memalign_starter;
|
||||
__free_hook = free_starter;
|
||||
}
|
||||
else
|
||||
{
|
||||
__malloc_hook = save_malloc_hook;
|
||||
__memalign_hook = save_memalign_hook;
|
||||
__free_hook = save_free_hook;
|
||||
}
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
static void
|
||||
|
@ -475,14 +443,7 @@ ptmalloc_init (void)
|
|||
if(__malloc_initialized >= 0) return;
|
||||
__malloc_initialized = 0;
|
||||
|
||||
#ifdef _LIBC
|
||||
# if defined SHARED && !USE___THREAD
|
||||
/* ptmalloc_init_minimal may already have been called via
|
||||
__libc_malloc_pthread_startup, above. */
|
||||
if (mp_.pagesize == 0)
|
||||
# endif
|
||||
#endif
|
||||
ptmalloc_init_minimal();
|
||||
ptmalloc_init_minimal();
|
||||
|
||||
mutex_init(&main_arena.mutex);
|
||||
main_arena.next = &main_arena;
|
||||
|
|
|
@ -417,7 +417,7 @@ memalign_check(alignment, bytes, caller)
|
|||
#ifndef NO_THREADS
|
||||
|
||||
# ifdef _LIBC
|
||||
# if USE___THREAD || !defined SHARED
|
||||
# ifndef SHARED
|
||||
/* These routines are never needed in this configuration. */
|
||||
# define NO_STARTER
|
||||
# endif
|
||||
|
|
|
@ -1649,19 +1649,7 @@ static Void_t* realloc_check(Void_t* oldmem, size_t bytes,
|
|||
static Void_t* memalign_check(size_t alignment, size_t bytes,
|
||||
const Void_t *caller);
|
||||
#ifndef NO_THREADS
|
||||
# ifdef _LIBC
|
||||
# if USE___THREAD || !defined SHARED
|
||||
/* These routines are never needed in this configuration. */
|
||||
# define NO_STARTER
|
||||
# endif
|
||||
# endif
|
||||
# ifdef NO_STARTER
|
||||
# undef NO_STARTER
|
||||
# else
|
||||
static Void_t* malloc_starter(size_t sz, const Void_t *caller);
|
||||
static Void_t* memalign_starter(size_t aln, size_t sz, const Void_t *caller);
|
||||
static void free_starter(Void_t* mem, const Void_t *caller);
|
||||
# endif
|
||||
/* These routines are never needed in this configuration. */
|
||||
static Void_t* malloc_atfork(size_t sz, const Void_t *caller);
|
||||
static void free_atfork(Void_t* mem, const Void_t *caller);
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,20 @@
|
|||
2011-09-10 Ulrich Drepper <drepper@gmail.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Don't handle
|
||||
!USE___THREAD.
|
||||
* sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sh/sem_post.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sh/sem_timedwait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sh/sem_trywait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sh/sem_wait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/sem_post.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Likewise.
|
||||
|
||||
* tst-tls1.c: Support for __thread is now mandatory.
|
||||
* tst-tls2.c: Likewise.
|
||||
* tst-tls3.c: Likewise.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002,2003,2005,2007,2008,2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
|
@ -81,18 +81,13 @@ __new_sem_post:
|
|||
4:
|
||||
#endif
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ebx
|
||||
#if USE___THREAD
|
||||
# ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
#ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
addl %gs:0, %edx
|
||||
movl $EINVAL, (%edx)
|
||||
# else
|
||||
#else
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
movl $EINVAL, %gs:(%edx)
|
||||
# endif
|
||||
#else
|
||||
call __errno_location@plt
|
||||
movl $EINVAL, (%eax)
|
||||
#endif
|
||||
|
||||
orl $-1, %eax
|
||||
|
@ -107,18 +102,13 @@ __new_sem_post:
|
|||
5:
|
||||
#endif
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ebx
|
||||
#if USE___THREAD
|
||||
# ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
#ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
addl %gs:0, %edx
|
||||
movl $EOVERFLOW, (%edx)
|
||||
# else
|
||||
#else
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
movl $EOVERFLOW, %gs:(%edx)
|
||||
# endif
|
||||
#else
|
||||
call __errno_location@plt
|
||||
movl $EOVERFLOW, (%eax)
|
||||
#endif
|
||||
|
||||
orl $-1, %eax
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002-2005, 2007, 2009, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
|
@ -154,18 +154,13 @@ sem_timedwait:
|
|||
4:
|
||||
#endif
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ebx
|
||||
#if USE___THREAD
|
||||
# ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
#ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
addl %gs:0, %edx
|
||||
movl %esi, (%edx)
|
||||
# else
|
||||
#else
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
movl %esi, %gs:(%edx)
|
||||
# endif
|
||||
#else
|
||||
call __errno_location@plt
|
||||
movl %esi, (%eax)
|
||||
#endif
|
||||
|
||||
movl 28(%esp), %ebx /* Load semaphore address. */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
|
@ -49,18 +49,13 @@ __new_sem_trywait:
|
|||
3:
|
||||
#endif
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ecx
|
||||
#if USE___THREAD
|
||||
# ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
#ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
movl errno@gotntpoff(%ecx), %edx
|
||||
addl %gs:0, %edx
|
||||
movl $EAGAIN, (%edx)
|
||||
# else
|
||||
#else
|
||||
movl errno@gotntpoff(%ecx), %edx
|
||||
movl $EAGAIN, %gs:(%edx)
|
||||
# endif
|
||||
#else
|
||||
call __errno_location@plt
|
||||
movl $EAGAIN, (%eax)
|
||||
#endif
|
||||
orl $-1, %eax
|
||||
ret
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
|
@ -114,18 +114,13 @@ __new_sem_wait:
|
|||
8:
|
||||
#endif
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ebx
|
||||
#if USE___THREAD
|
||||
# ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
#ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
addl %gs:0, %edx
|
||||
movl %esi, (%edx)
|
||||
# else
|
||||
#else
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
movl %esi, %gs:(%edx)
|
||||
# endif
|
||||
#else
|
||||
call __errno_location@plt
|
||||
movl %esi, (%eax)
|
||||
#endif
|
||||
orl $-1, %eax
|
||||
|
||||
|
@ -228,13 +223,13 @@ sem_wait_cleanup:
|
|||
.byte 14 # DW_CFA_def_cfa_offset
|
||||
.uleb128 8
|
||||
.byte 0x83 # DW_CFA_offset %ebx
|
||||
.uleb128 2
|
||||
.uleb128 2
|
||||
.byte 4 # DW_CFA_advance_loc4
|
||||
.long .Lpush_esi-.Lpush_ebx
|
||||
.byte 14 # DW_CFA_def_cfa_offset
|
||||
.uleb128 12
|
||||
.byte 0x86 # DW_CFA_offset %esi
|
||||
.uleb128 3
|
||||
.uleb128 3
|
||||
.byte 4 # DW_CFA_advance_loc4
|
||||
.long .Lsub_esp-.Lpush_esi
|
||||
.byte 14 # DW_CFA_def_cfa_offset
|
||||
|
@ -250,9 +245,9 @@ sem_wait_cleanup:
|
|||
.byte 14 # DW_CFA_def_cfa_offset
|
||||
.uleb128 16
|
||||
.byte 0x83 # DW_CFA_offset %ebx
|
||||
.uleb128 2
|
||||
.uleb128 2
|
||||
.byte 0x86 # DW_CFA_offset %esi
|
||||
.uleb128 3
|
||||
.uleb128 3
|
||||
.align 4
|
||||
.LENDFDE:
|
||||
|
||||
|
@ -333,18 +328,13 @@ __old_sem_wait:
|
|||
4:
|
||||
#endif
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ebx
|
||||
#if USE___THREAD
|
||||
# ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
#ifdef NO_TLS_DIRECT_SEG_REFS
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
addl %gs:0, %edx
|
||||
movl %esi, (%edx)
|
||||
# else
|
||||
#else
|
||||
movl errno@gotntpoff(%ebx), %edx
|
||||
movl %esi, %gs:(%edx)
|
||||
# endif
|
||||
#else
|
||||
call __errno_location@plt
|
||||
movl %esi, (%eax)
|
||||
#endif
|
||||
orl $-1, %eax
|
||||
jmp 5b
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2004, 2006, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
|
||||
|
||||
|
@ -27,13 +27,12 @@
|
|||
|
||||
# undef PSEUDO
|
||||
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSDEP_CANCEL_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSDEP_CANCEL_ERRNO errno
|
||||
# endif
|
||||
# define SYSDEP_CANCEL_ERROR(args) \
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSDEP_CANCEL_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSDEP_CANCEL_ERRNO errno
|
||||
# endif
|
||||
# define SYSDEP_CANCEL_ERROR(args) \
|
||||
.section .gnu.linkonce.t.__syscall_error_##args, "ax"; \
|
||||
.align 32; \
|
||||
.proc __syscall_error_##args; \
|
||||
|
@ -53,28 +52,6 @@ __syscall_error_##args: \
|
|||
add loc4 = loc4, r13;; \
|
||||
st4 [loc4] = loc3; \
|
||||
mov ar.pfs = loc0
|
||||
# else
|
||||
# define SYSDEP_CANCEL_ERROR(args) \
|
||||
.section .gnu.linkonce.t.__syscall_error_##args, "ax"; \
|
||||
.align 32; \
|
||||
.proc __syscall_error_##args; \
|
||||
.global __syscall_error_##args; \
|
||||
.hidden __syscall_error_##args; \
|
||||
.size __syscall_error_##args, 64; \
|
||||
__syscall_error_##args: \
|
||||
.prologue; \
|
||||
.regstk args, 5, args, 0; \
|
||||
.save ar.pfs, loc0; \
|
||||
.save rp, loc1; \
|
||||
.body; \
|
||||
mov loc4 = r1;; \
|
||||
br.call.sptk.many b0 = __errno_location;; \
|
||||
st4 [r8] = loc3; \
|
||||
mov r1 = loc4; \
|
||||
mov rp = loc1; \
|
||||
mov r8 = -1; \
|
||||
mov ar.pfs = loc0
|
||||
# endif
|
||||
|
||||
# ifndef USE_DL_SYSINFO
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003, 2004, 2007, 2008, 2011 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
|
||||
|
@ -65,7 +65,7 @@ __new_sem_post:
|
|||
|
||||
3:
|
||||
mov #EOVERFLOW, r2
|
||||
4:
|
||||
4:
|
||||
mov.l r12, @-r15
|
||||
mov.l r8, @-r15
|
||||
sts.l pr, @-r15
|
||||
|
@ -73,7 +73,6 @@ __new_sem_post:
|
|||
mov.l .Lgot3, r12
|
||||
add r0, r12
|
||||
|
||||
#if USE___THREAD
|
||||
mov.l .Lerrno3, r0
|
||||
stc gbr, r1
|
||||
mov.l @(r0, r12), r0
|
||||
|
@ -84,14 +83,6 @@ __new_sem_post:
|
|||
.long errno@GOTTPOFF
|
||||
.Lexit:
|
||||
mov.l r2, @r0
|
||||
#else
|
||||
mov r2, r8
|
||||
mov.l .Lerrloc3, r1
|
||||
bsrf r1
|
||||
nop
|
||||
.Lerrloc3b:
|
||||
mov r8, @r0
|
||||
#endif
|
||||
lds.l @r15+, pr
|
||||
mov.l @r15+, r8
|
||||
mov.l @r15+, r12
|
||||
|
@ -103,9 +94,5 @@ __new_sem_post:
|
|||
.long SEM_VALUE_MAX
|
||||
.Lgot3:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#if !USE___THREAD
|
||||
.Lerrloc3:
|
||||
.long __errno_location@PLT-(.Lerrloc3b-.)
|
||||
#endif
|
||||
.size __new_sem_post,.-__new_sem_post
|
||||
versioned_symbol(libpthread, __new_sem_post, sem_post, GLIBC_2_1)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003, 2004, 2007, 2011 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
|
||||
|
@ -131,7 +131,7 @@ sem_timedwait:
|
|||
mov r10, r4
|
||||
bsrf r1
|
||||
mov r0, r10
|
||||
.Ldisable0b:
|
||||
.Ldisable0b:
|
||||
mov r10, r0
|
||||
.LcleanupEND:
|
||||
|
||||
|
@ -173,7 +173,6 @@ sem_timedwait:
|
|||
mov.l .Lgot2, r12
|
||||
add r0, r12
|
||||
|
||||
#if USE___THREAD
|
||||
mov.l .Lerrno2, r0
|
||||
stc gbr, r1
|
||||
mov.l @(r0, r12), r0
|
||||
|
@ -181,14 +180,8 @@ sem_timedwait:
|
|||
add r1, r0
|
||||
.align 2
|
||||
.Lerrno2:
|
||||
.long errno@GOTTPOFF
|
||||
.long errno@GOTTPOFF
|
||||
.Lexit:
|
||||
#else
|
||||
mov.l .Lerrloc2, r1
|
||||
bsrf r1
|
||||
nop
|
||||
.Lerrloc2b:
|
||||
#endif
|
||||
mov.l r10, @r0
|
||||
DEC (@(NWAITERS,r8), r2)
|
||||
bra 10b
|
||||
|
@ -201,10 +194,6 @@ sem_timedwait:
|
|||
.long 1000000000
|
||||
.Lgot2:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#if !USE___THREAD
|
||||
.Lerrloc2:
|
||||
.long __errno_location@PLT-(.Lerrloc2b-.)
|
||||
#endif
|
||||
.Lenable0:
|
||||
.long __pthread_enable_asynccancel-.Lenable0b
|
||||
.Ldisable0:
|
||||
|
@ -213,7 +202,7 @@ sem_timedwait:
|
|||
|
||||
.type sem_wait_cleanup,@function
|
||||
sem_wait_cleanup:
|
||||
DEC (@(NWAITERS,r8), r2)
|
||||
DEC (@(NWAITERS,r8), r2)
|
||||
.LcallUR:
|
||||
mov.l .Lresume, r1
|
||||
#ifdef PIC
|
||||
|
@ -314,25 +303,25 @@ sem_wait_cleanup:
|
|||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 4
|
||||
.byte 0x88 ! DW_CFA_offset r8
|
||||
.uleb128 1
|
||||
.uleb128 1
|
||||
.byte 4 ! DW_CFA_advance_loc4
|
||||
.ualong .Lpush_r9-.Lpush_r8
|
||||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 8
|
||||
.byte 0x89 ! DW_CFA_offset r9
|
||||
.uleb128 2
|
||||
.uleb128 2
|
||||
.byte 4 ! DW_CFA_advance_loc4
|
||||
.ualong .Lpush_r10-.Lpush_r9
|
||||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 12
|
||||
.byte 0x8a ! DW_CFA_offset r10
|
||||
.uleb128 3
|
||||
.uleb128 3
|
||||
.byte 4 ! DW_CFA_advance_loc4
|
||||
.ualong .Lpush_r12-.Lpush_r10
|
||||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 16
|
||||
.byte 0x8c ! DW_CFA_offset r12
|
||||
.uleb128 4
|
||||
.uleb128 4
|
||||
.byte 4 ! DW_CFA_advance_loc4
|
||||
.ualong .Lpush_pr-.Lpush_r12
|
||||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003, 2004, 2007, 2011 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
|
||||
|
@ -57,7 +57,6 @@ __new_sem_trywait:
|
|||
mov.l .Lgot1, r12
|
||||
add r0, r12
|
||||
|
||||
#if USE___THREAD
|
||||
mov.l .Lerrno1, r0
|
||||
stc gbr, r1
|
||||
mov.l @(r0, r12), r0
|
||||
|
@ -67,12 +66,6 @@ __new_sem_trywait:
|
|||
.Lerrno1:
|
||||
.long errno@GOTTPOFF
|
||||
.Lexit:
|
||||
#else
|
||||
mov.l .Lerrloc1, r1
|
||||
bsrf r1
|
||||
nop
|
||||
.Lerrloc1b:
|
||||
#endif
|
||||
mov.l r8, @r0
|
||||
lds.l @r15+, pr
|
||||
mov.l @r15+, r8
|
||||
|
@ -83,9 +76,5 @@ __new_sem_trywait:
|
|||
.align 2
|
||||
.Lgot1:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#if !USE___THREAD
|
||||
.Lerrloc1:
|
||||
.long __errno_location@PLT-(.Lerrloc1b-.)
|
||||
#endif
|
||||
.size __new_sem_trywait,.-__new_sem_trywait
|
||||
versioned_symbol(libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003, 2004, 2007, 2011 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
|
||||
|
@ -68,7 +68,7 @@ __new_sem_wait:
|
|||
.Lafter_ret:
|
||||
1:
|
||||
INC (@(NWAITERS,r8),r2)
|
||||
|
||||
|
||||
.LcleanupSTART:
|
||||
6:
|
||||
mov.l .Lenable0, r1
|
||||
|
@ -96,7 +96,7 @@ __new_sem_wait:
|
|||
mov r10, r4
|
||||
bsrf r1
|
||||
mov r0, r10
|
||||
.Ldisable0b:
|
||||
.Ldisable0b:
|
||||
mov r10, r0
|
||||
.LcleanupEND:
|
||||
|
||||
|
@ -131,7 +131,6 @@ __new_sem_wait:
|
|||
mov.l .Lgot0, r12
|
||||
add r0, r12
|
||||
|
||||
#if USE___THREAD
|
||||
mov.l .Lerrno0, r0
|
||||
stc gbr, r1
|
||||
mov.l @(r0, r12), r0
|
||||
|
@ -141,12 +140,6 @@ __new_sem_wait:
|
|||
.Lerrno0:
|
||||
.long errno@GOTTPOFF
|
||||
.Lexit:
|
||||
#else
|
||||
mov.l .Lerrloc0, r1
|
||||
bsrf r1
|
||||
nop
|
||||
.Lerrloc0b:
|
||||
#endif
|
||||
mov.l r8, @r0
|
||||
bra 9b
|
||||
mov #-1, r0
|
||||
|
@ -154,10 +147,6 @@ __new_sem_wait:
|
|||
.align 2
|
||||
.Lgot0:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#if !USE___THREAD
|
||||
.Lerrloc0:
|
||||
.long __errno_location@PLT-(.Lerrloc0b-.)
|
||||
#endif
|
||||
.Lenable0:
|
||||
.long __pthread_enable_asynccancel-.Lenable0b
|
||||
.Ldisable0:
|
||||
|
@ -168,7 +157,7 @@ __new_sem_wait:
|
|||
|
||||
.type sem_wait_cleanup,@function
|
||||
sem_wait_cleanup:
|
||||
DEC (@(NWAITERS,r8), r2)
|
||||
DEC (@(NWAITERS,r8), r2)
|
||||
.LcallUR:
|
||||
mov.l .Lresume, r1
|
||||
#ifdef PIC
|
||||
|
@ -269,25 +258,25 @@ sem_wait_cleanup:
|
|||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 4
|
||||
.byte 0x88 ! DW_CFA_offset r8
|
||||
.uleb128 1
|
||||
.uleb128 1
|
||||
.byte 4 ! DW_CFA_advance_loc4
|
||||
.ualong .Lpush_r10-.Lpush_r8
|
||||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 8
|
||||
.byte 0x8a ! DW_CFA_offset r10
|
||||
.uleb128 2
|
||||
.uleb128 2
|
||||
.byte 4 ! DW_CFA_advance_loc4
|
||||
.ualong .Lpush_r12-.Lpush_r10
|
||||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 12
|
||||
.byte 0x8c ! DW_CFA_offset r12
|
||||
.uleb128 3
|
||||
.uleb128 3
|
||||
.byte 4 ! DW_CFA_advance_loc4
|
||||
.ualong .Lpush_pr-.Lpush_r12
|
||||
.byte 14 ! DW_CFA_def_cfa_offset
|
||||
.uleb128 16
|
||||
.byte 0x91 ! DW_CFA_offset pr
|
||||
.uleb128 4
|
||||
.uleb128 4
|
||||
.align 4
|
||||
.LENDFDE:
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002,2003,2005,2007,2008,2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
|
@ -62,29 +62,15 @@ sem_post:
|
|||
retq
|
||||
|
||||
1:
|
||||
#if USE___THREAD
|
||||
movl $EINVAL, %eax
|
||||
#else
|
||||
callq __errno_location@plt
|
||||
movl $EINVAL, %edx
|
||||
#endif
|
||||
jmp 4f
|
||||
|
||||
3:
|
||||
#if USE___THREAD
|
||||
movl $EOVERFLOW, %eax
|
||||
#else
|
||||
callq __errno_location@plt
|
||||
movl $EOVERFLOW, %edx
|
||||
#endif
|
||||
|
||||
4:
|
||||
#if USE___THREAD
|
||||
movq errno@gottpoff(%rip), %rdx
|
||||
movl %eax, %fs:(%rdx)
|
||||
#else
|
||||
movl %edx, (%rax)
|
||||
#endif
|
||||
orl $-1, %eax
|
||||
retq
|
||||
.size sem_post,.-sem_post
|
||||
|
|
|
@ -143,39 +143,24 @@ sem_timedwait:
|
|||
|
||||
cfi_adjust_cfa_offset(8)
|
||||
3: negq %r9
|
||||
#if USE___THREAD
|
||||
movq errno@gottpoff(%rip), %rdx
|
||||
movl %r9d, %fs:(%rdx)
|
||||
#else
|
||||
callq __errno_location@plt
|
||||
movl %r9d, (%rax)
|
||||
#endif
|
||||
|
||||
orl $-1, %eax
|
||||
jmp 15b
|
||||
|
||||
cfi_adjust_cfa_offset(-8)
|
||||
6:
|
||||
#if USE___THREAD
|
||||
movq errno@gottpoff(%rip), %rdx
|
||||
movl $EINVAL, %fs:(%rdx)
|
||||
#else
|
||||
callq __errno_location@plt
|
||||
movl $EINVAL, (%rax)
|
||||
#endif
|
||||
|
||||
orl $-1, %eax
|
||||
|
||||
retq
|
||||
|
||||
16:
|
||||
#if USE___THREAD
|
||||
movq errno@gottpoff(%rip), %rdx
|
||||
movl $ETIMEDOUT, %fs:(%rdx)
|
||||
#else
|
||||
callq __errno_location@plt
|
||||
movl $ETIMEDOUT, (%rax)
|
||||
#endif
|
||||
|
||||
orl $-1, %eax
|
||||
|
||||
|
@ -303,13 +288,8 @@ sem_timedwait:
|
|||
cfi_rel_offset(%r14, STACKFRAME)
|
||||
33: negq %r14
|
||||
36:
|
||||
#if USE___THREAD
|
||||
movq errno@gottpoff(%rip), %rdx
|
||||
movl %r14d, %fs:(%rdx)
|
||||
#else
|
||||
callq __errno_location@plt
|
||||
movl %r14d, (%rax)
|
||||
#endif
|
||||
|
||||
orl $-1, %eax
|
||||
jmp 45b
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
|
@ -41,13 +41,8 @@ sem_trywait:
|
|||
retq
|
||||
|
||||
1:
|
||||
#if USE___THREAD
|
||||
movq errno@gottpoff(%rip), %rdx
|
||||
movl $EAGAIN, %fs:(%rdx)
|
||||
#else
|
||||
callq __errno_location@plt
|
||||
movl $EAGAIN, (%rax)
|
||||
#endif
|
||||
orl $-1, %eax
|
||||
retq
|
||||
.size sem_trywait,.-sem_trywait
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2005, 2007, 2009, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
|
@ -125,14 +125,8 @@ sem_wait:
|
|||
|
||||
cfi_adjust_cfa_offset(8)
|
||||
4: negq %rcx
|
||||
#if USE___THREAD
|
||||
movq errno@gottpoff(%rip), %rdx
|
||||
movl %ecx, %fs:(%rdx)
|
||||
#else
|
||||
# error "not supported. %rcx and %rdi must be preserved"
|
||||
callq __errno_location@plt
|
||||
movl %ecx, (%rax)
|
||||
#endif
|
||||
orl $-1, %eax
|
||||
|
||||
jmp 9b
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1996, 97, 98, 2002, 2003 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996, 97, 98, 2002, 2003, 2011 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
|
||||
|
@ -19,27 +19,10 @@
|
|||
#include <resolv.h>
|
||||
#include <tls.h>
|
||||
|
||||
#if ! USE___THREAD
|
||||
|
||||
# undef _res
|
||||
extern struct __res_state _res;
|
||||
|
||||
/* When threaded, _res may be a per-thread variable. */
|
||||
struct __res_state *
|
||||
weak_const_function
|
||||
__res_state (void)
|
||||
{
|
||||
return &_res;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
struct __res_state *
|
||||
__res_state (void)
|
||||
{
|
||||
return __resp;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
libc_hidden_def (__res_state)
|
||||
|
|
|
@ -126,12 +126,10 @@ struct __res_state _res __attribute__((section (".bss")));
|
|||
|
||||
#include <tls.h>
|
||||
|
||||
#if USE___THREAD
|
||||
#undef __resp
|
||||
__thread struct __res_state *__resp = &_res;
|
||||
extern __thread struct __res_state *__libc_resp
|
||||
__attribute__ ((alias ("__resp"))) attribute_hidden;
|
||||
#endif
|
||||
|
||||
/* We declare this with compat_symbol so that it's not
|
||||
visible at link time. Programs must use the accessor functions. */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions. i386 version.
|
||||
Copyright (C) 1995-2005, 2006, 2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2005, 2006, 2009, 2011 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
|
||||
|
@ -243,18 +243,12 @@ _dl_start_user:\n\
|
|||
define the value.
|
||||
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
|
||||
of the main executable's symbols, as for a COPY reloc. */
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
# define elf_machine_type_class(type) \
|
||||
((((type) == R_386_JMP_SLOT || (type) == R_386_TLS_DTPMOD32 \
|
||||
|| (type) == R_386_TLS_DTPOFF32 || (type) == R_386_TLS_TPOFF32 \
|
||||
|| (type) == R_386_TLS_TPOFF || (type) == R_386_TLS_DESC) \
|
||||
* ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_386_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#else
|
||||
# define elf_machine_type_class(type) \
|
||||
((((type) == R_386_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_386_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
#define ELF_MACHINE_JMP_SLOT R_386_JMP_SLOT
|
||||
|
@ -357,44 +351,43 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
|
|||
*reloc_addr = value;
|
||||
break;
|
||||
|
||||
# if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
case R_386_TLS_DTPMOD32:
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
/* During startup the dynamic linker is always the module
|
||||
with index 1.
|
||||
XXX If this relocation is necessary move before RESOLVE
|
||||
call. */
|
||||
*reloc_addr = 1;
|
||||
# else
|
||||
# else
|
||||
/* Get the information from the link map returned by the
|
||||
resolv function. */
|
||||
if (sym_map != NULL)
|
||||
*reloc_addr = sym_map->l_tls_modid;
|
||||
# endif
|
||||
# endif
|
||||
break;
|
||||
case R_386_TLS_DTPOFF32:
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
/* During relocation all TLS symbols are defined and used.
|
||||
Therefore the offset is already correct. */
|
||||
if (sym != NULL)
|
||||
*reloc_addr = sym->st_value;
|
||||
# endif
|
||||
# endif
|
||||
break;
|
||||
case R_386_TLS_DESC:
|
||||
{
|
||||
struct tlsdesc volatile *td =
|
||||
(struct tlsdesc volatile *)reloc_addr;
|
||||
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
if (! sym)
|
||||
td->entry = _dl_tlsdesc_undefweak;
|
||||
else
|
||||
# endif
|
||||
# endif
|
||||
{
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
# ifndef SHARED
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
# ifndef SHARED
|
||||
CHECK_STATIC_TLS (map, sym_map);
|
||||
# else
|
||||
# else
|
||||
if (!TRY_STATIC_TLS (map, sym_map))
|
||||
{
|
||||
td->arg = _dl_make_tlsdesc_dynamic
|
||||
|
@ -402,8 +395,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
|
|||
td->entry = _dl_tlsdesc_dynamic;
|
||||
}
|
||||
else
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
{
|
||||
td->arg = (void*)(sym->st_value - sym_map->l_tls_offset
|
||||
+ (ElfW(Word))td->arg);
|
||||
|
@ -426,13 +419,13 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
|
|||
CHECK_STATIC_TLS (map, sym_map);
|
||||
*reloc_addr += sym_map->l_tls_offset - sym->st_value;
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
break;
|
||||
case R_386_TLS_TPOFF:
|
||||
/* The offset is negative, forward from the thread pointer. */
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
*reloc_addr += sym->st_value - map->l_tls_offset;
|
||||
# else
|
||||
# else
|
||||
/* We know the offset of object the symbol is contained in.
|
||||
It is a negative value which will be added to the
|
||||
thread pointer. */
|
||||
|
@ -441,9 +434,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
|
|||
CHECK_STATIC_TLS (map, sym_map);
|
||||
*reloc_addr += sym->st_value - sym_map->l_tls_offset;
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
break;
|
||||
# endif /* use TLS */
|
||||
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
case R_386_32:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions. IA-64 version.
|
||||
Copyright (C) 1995-1997, 2000-2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-1997, 2000-2006, 2011 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
|
||||
|
@ -311,15 +311,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
|||
of the main executable's symbols, as for a COPY reloc, which we don't
|
||||
use. */
|
||||
/* ??? Ignore *MSB for now. */
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
#define elf_machine_type_class(type) \
|
||||
(((type) == R_IA64_IPLTLSB || (type) == R_IA64_DTPMOD64LSB \
|
||||
|| (type) == R_IA64_DTPREL64LSB || (type) == R_IA64_TPREL64LSB) \
|
||||
* ELF_RTYPE_CLASS_PLT)
|
||||
#else
|
||||
#define elf_machine_type_class(type) \
|
||||
(((type) == R_IA64_IPLTLSB) * ELF_RTYPE_CLASS_PLT)
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
#define ELF_MACHINE_JMP_SLOT R_IA64_IPLTLSB
|
||||
|
@ -405,7 +400,7 @@ elf_machine_rela (struct link_map *map,
|
|||
/* Already done in dynamic linker. */
|
||||
if (map != &GL(dl_rtld_map))
|
||||
# endif
|
||||
value += map->l_addr;
|
||||
value += map->l_addr;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
@ -417,7 +412,7 @@ elf_machine_rela (struct link_map *map,
|
|||
|
||||
/* RESOLVE_MAP() will return NULL if it fail to locate the symbol. */
|
||||
if ((sym_map = RESOLVE_MAP (&sym, version, r_type)))
|
||||
{
|
||||
{
|
||||
value = sym_map->l_addr + sym->st_value + reloc->r_addend;
|
||||
|
||||
if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DIR64LSB))
|
||||
|
@ -432,26 +427,24 @@ elf_machine_rela (struct link_map *map,
|
|||
value = _dl_make_fptr (sym_map, sym, value);
|
||||
else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_PCREL64LSB))
|
||||
value -= (Elf64_Addr) reloc_addr & -16;
|
||||
#if !defined RTLD_BOOTSTRAP || defined USE___THREAD
|
||||
else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DTPMOD64LSB))
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
#ifdef RTLD_BOOTSTRAP
|
||||
/* During startup the dynamic linker is always index 1. */
|
||||
value = 1;
|
||||
# else
|
||||
#else
|
||||
/* Get the information from the link map returned by the
|
||||
resolv function. */
|
||||
value = sym_map->l_tls_modid;
|
||||
else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DTPREL64LSB))
|
||||
value -= sym_map->l_addr;
|
||||
# endif
|
||||
#endif
|
||||
else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_TPREL64LSB))
|
||||
{
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
CHECK_STATIC_TLS (map, sym_map);
|
||||
# endif
|
||||
#endif
|
||||
value += sym_map->l_tls_offset - sym_map->l_addr;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
_dl_reloc_bad_type (map, r_type, 0);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions. PowerPC version.
|
||||
Copyright (C) 1995-2002, 2003, 2005, 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2003, 2005, 2006, 2011 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
|
||||
|
@ -135,7 +135,6 @@ __elf_preferred_address(struct link_map *loader, size_t maplength,
|
|||
/* We never want to use a PLT entry as the destination of a
|
||||
reloc, when what is being relocated is a branch. This is
|
||||
partly for efficiency, but mostly so we avoid loops. */
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_PPC_JMP_SLOT \
|
||||
|| (type) == R_PPC_REL24 \
|
||||
|
@ -143,13 +142,6 @@ __elf_preferred_address(struct link_map *loader, size_t maplength,
|
|||
&& (type) <= R_PPC_DTPREL32) \
|
||||
|| (type) == R_PPC_ADDR24) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_PPC_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#else
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_PPC_JMP_SLOT \
|
||||
|| (type) == R_PPC_REL24 \
|
||||
|| (type) == R_PPC_ADDR24) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_PPC_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
#define ELF_MACHINE_JMP_SLOT R_PPC_JMP_SLOT
|
||||
|
@ -331,8 +323,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
|||
*reloc_addr = value;
|
||||
break;
|
||||
|
||||
#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
|
||||
&& !defined RESOLVE_CONFLICT_FIND_MAP
|
||||
#ifndef RESOLVE_CONFLICT_FIND_MAP
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
# define NOT_BOOTSTRAP 0
|
||||
# else
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions.
|
||||
PowerPC64 version.
|
||||
Copyright 1995-2005, 2006, 2008, 2010 Free Software Foundation, Inc.
|
||||
Copyright 1995-2005, 2006, 2008, 2010, 2011 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
|
||||
|
@ -376,9 +376,9 @@ elf_machine_runtime_setup (struct link_map *map, int lazy, int profile)
|
|||
branch using two instructions; Past that point,
|
||||
glink uses three instructions. */
|
||||
if (i < 0x8000)
|
||||
glink_offset += 2;
|
||||
glink_offset += 2;
|
||||
else
|
||||
glink_offset += 3;
|
||||
glink_offset += 3;
|
||||
}
|
||||
|
||||
/* Now, we've modified data. We need to write the changes from
|
||||
|
@ -492,10 +492,10 @@ elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
|
|||
#define dont_expect(X) __builtin_expect ((X), 0)
|
||||
|
||||
extern void _dl_reloc_overflow (struct link_map *map,
|
||||
const char *name,
|
||||
Elf64_Addr *const reloc_addr,
|
||||
const Elf64_Sym *refsym)
|
||||
attribute_hidden;
|
||||
const char *name,
|
||||
Elf64_Addr *const reloc_addr,
|
||||
const Elf64_Sym *refsym)
|
||||
attribute_hidden;
|
||||
|
||||
auto inline void __attribute__ ((always_inline))
|
||||
elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
|
||||
|
@ -505,7 +505,6 @@ elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
|
|||
*reloc_addr = l_addr + reloc->r_addend;
|
||||
}
|
||||
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
/* This computes the value used by TPREL* relocs. */
|
||||
auto inline Elf64_Addr __attribute__ ((always_inline, const))
|
||||
elf_machine_tprel (struct link_map *map,
|
||||
|
@ -513,18 +512,17 @@ elf_machine_tprel (struct link_map *map,
|
|||
const Elf64_Sym *sym,
|
||||
const Elf64_Rela *reloc)
|
||||
{
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
if (sym_map)
|
||||
{
|
||||
CHECK_STATIC_TLS (map, sym_map);
|
||||
# endif
|
||||
#endif
|
||||
return TLS_TPREL_VALUE (sym_map, sym, reloc);
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Call function at address VALUE (an OPD entry) to resolve ifunc relocs. */
|
||||
auto inline Elf64_Addr __attribute__ ((always_inline))
|
||||
|
@ -611,26 +609,25 @@ elf_machine_rela (struct link_map *map,
|
|||
#endif
|
||||
return;
|
||||
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
case R_PPC64_DTPMOD64:
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
#ifdef RTLD_BOOTSTRAP
|
||||
/* During startup the dynamic linker is always index 1. */
|
||||
*reloc_addr = 1;
|
||||
# else
|
||||
#else
|
||||
/* Get the information from the link map returned by the
|
||||
resolve function. */
|
||||
if (sym_map != NULL)
|
||||
*reloc_addr = sym_map->l_tls_modid;
|
||||
# endif
|
||||
*reloc_addr = sym_map->l_tls_modid;
|
||||
#endif
|
||||
return;
|
||||
|
||||
case R_PPC64_DTPREL64:
|
||||
/* During relocation all TLS symbols are defined and used.
|
||||
Therefore the offset is already correct. */
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
Therefore the offset is already correct. */
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
if (sym_map != NULL)
|
||||
*reloc_addr = TLS_DTPREL_VALUE (sym, reloc);
|
||||
# endif
|
||||
#endif
|
||||
return;
|
||||
|
||||
case R_PPC64_TPREL64:
|
||||
|
@ -640,21 +637,21 @@ elf_machine_rela (struct link_map *map,
|
|||
case R_PPC64_TPREL16_LO_DS:
|
||||
value = elf_machine_tprel (map, sym_map, sym, reloc);
|
||||
if (dont_expect ((value & 3) != 0))
|
||||
_dl_reloc_overflow (map, "R_PPC64_TPREL16_LO_DS", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_TPREL16_LO_DS", reloc_addr, refsym);
|
||||
BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc);
|
||||
break;
|
||||
|
||||
case R_PPC64_TPREL16_DS:
|
||||
value = elf_machine_tprel (map, sym_map, sym, reloc);
|
||||
if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
|
||||
_dl_reloc_overflow (map, "R_PPC64_TPREL16_DS", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_TPREL16_DS", reloc_addr, refsym);
|
||||
BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc);
|
||||
break;
|
||||
|
||||
case R_PPC64_TPREL16:
|
||||
value = elf_machine_tprel (map, sym_map, sym, reloc);
|
||||
if (dont_expect ((value + 0x8000) >= 0x10000))
|
||||
_dl_reloc_overflow (map, "R_PPC64_TPREL16", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_TPREL16", reloc_addr, refsym);
|
||||
*(Elf64_Half *) reloc_addr = PPC_LO (value);
|
||||
break;
|
||||
|
||||
|
@ -692,12 +689,11 @@ elf_machine_rela (struct link_map *map,
|
|||
value = elf_machine_tprel (map, sym_map, sym, reloc);
|
||||
*(Elf64_Half *) reloc_addr = PPC_HIGHESTA (value);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifndef RTLD_BOOTSTRAP /* None of the following appear in ld.so */
|
||||
case R_PPC64_ADDR16_LO_DS:
|
||||
if (dont_expect ((value & 3) != 0))
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR16_LO_DS", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR16_LO_DS", reloc_addr, refsym);
|
||||
BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc);
|
||||
break;
|
||||
|
||||
|
@ -715,29 +711,29 @@ elf_machine_rela (struct link_map *map,
|
|||
|
||||
case R_PPC64_ADDR30:
|
||||
{
|
||||
Elf64_Addr delta = value - (Elf64_Xword) reloc_addr;
|
||||
if (dont_expect ((delta + 0x80000000) >= 0x10000000
|
||||
Elf64_Addr delta = value - (Elf64_Xword) reloc_addr;
|
||||
if (dont_expect ((delta + 0x80000000) >= 0x10000000
|
||||
|| (delta & 3) != 0))
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR30", reloc_addr, refsym);
|
||||
BIT_INSERT (*(Elf64_Word *) reloc_addr, delta, 0xfffffffc);
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR30", reloc_addr, refsym);
|
||||
BIT_INSERT (*(Elf64_Word *) reloc_addr, delta, 0xfffffffc);
|
||||
}
|
||||
break;
|
||||
|
||||
case R_PPC64_COPY:
|
||||
if (dont_expect (sym == NULL))
|
||||
/* This can happen in trace mode when an object could not be found. */
|
||||
return;
|
||||
return;
|
||||
if (dont_expect (sym->st_size > refsym->st_size
|
||||
|| (GLRO(dl_verbose)
|
||||
&& sym->st_size < refsym->st_size)))
|
||||
{
|
||||
const char *strtab;
|
||||
const char *strtab;
|
||||
|
||||
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
|
||||
_dl_error_printf ("%s: Symbol `%s' has different size" \
|
||||
" in shared object," \
|
||||
" consider re-linking\n",
|
||||
_dl_argv[0] ?: "<program name unknown>",
|
||||
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
|
||||
_dl_error_printf ("%s: Symbol `%s' has different size" \
|
||||
" in shared object," \
|
||||
" consider re-linking\n",
|
||||
_dl_argv[0] ?: "<program name unknown>",
|
||||
strtab + refsym->st_name);
|
||||
}
|
||||
memcpy (reloc_addr_arg, (char *) value,
|
||||
|
@ -766,25 +762,25 @@ elf_machine_rela (struct link_map *map,
|
|||
|
||||
case R_PPC64_ADDR32:
|
||||
if (dont_expect ((value + 0x80000000) >= 0x10000000))
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR32", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR32", reloc_addr, refsym);
|
||||
*(Elf64_Word *) reloc_addr = value;
|
||||
return;
|
||||
|
||||
case R_PPC64_ADDR24:
|
||||
if (dont_expect ((value + 0x2000000) >= 0x4000000 || (value & 3) != 0))
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR24", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR24", reloc_addr, refsym);
|
||||
BIT_INSERT (*(Elf64_Word *) reloc_addr, value, 0x3fffffc);
|
||||
break;
|
||||
|
||||
case R_PPC64_ADDR16:
|
||||
if (dont_expect ((value + 0x8000) >= 0x10000))
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR16", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR16", reloc_addr, refsym);
|
||||
*(Elf64_Half *) reloc_addr = value;
|
||||
break;
|
||||
|
||||
case R_PPC64_UADDR16:
|
||||
if (dont_expect ((value + 0x8000) >= 0x10000))
|
||||
_dl_reloc_overflow (map, "R_PPC64_UADDR16", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_UADDR16", reloc_addr, refsym);
|
||||
/* We are big-endian. */
|
||||
((char *) reloc_addr_arg)[0] = (value >> 8) & 0xff;
|
||||
((char *) reloc_addr_arg)[1] = (value >> 0) & 0xff;
|
||||
|
@ -792,7 +788,7 @@ elf_machine_rela (struct link_map *map,
|
|||
|
||||
case R_PPC64_ADDR16_DS:
|
||||
if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR16_DS", reloc_addr, refsym);
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR16_DS", reloc_addr, refsym);
|
||||
BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc);
|
||||
break;
|
||||
|
||||
|
@ -816,11 +812,11 @@ elf_machine_rela (struct link_map *map,
|
|||
case R_PPC64_ADDR14_BRTAKEN:
|
||||
case R_PPC64_ADDR14_BRNTAKEN:
|
||||
{
|
||||
if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
|
||||
if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
|
||||
_dl_reloc_overflow (map, "R_PPC64_ADDR14", reloc_addr, refsym);
|
||||
Elf64_Word insn = *(Elf64_Word *) reloc_addr;
|
||||
BIT_INSERT (insn, value, 0xfffc);
|
||||
if (r_type != R_PPC64_ADDR14)
|
||||
Elf64_Word insn = *(Elf64_Word *) reloc_addr;
|
||||
BIT_INSERT (insn, value, 0xfffc);
|
||||
if (r_type != R_PPC64_ADDR14)
|
||||
{
|
||||
insn &= ~(1 << 21);
|
||||
if (r_type == R_PPC64_ADDR14_BRTAKEN)
|
||||
|
@ -830,7 +826,7 @@ elf_machine_rela (struct link_map *map,
|
|||
else if ((insn & (0x14 << 21)) == (0x10 << 21))
|
||||
insn |= 0x08 << 21;
|
||||
}
|
||||
*(Elf64_Word *) reloc_addr = insn;
|
||||
*(Elf64_Word *) reloc_addr = insn;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions. S390 Version.
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2011
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Carl Pederson & Martin Schwidefsky.
|
||||
This file is part of the GNU C Library.
|
||||
|
@ -43,7 +43,7 @@ elf_machine_matches_host (const Elf32_Ehdr *ehdr)
|
|||
return 0;
|
||||
|
||||
return (ehdr->e_machine == EM_S390 || ehdr->e_machine == EM_S390_OLD)
|
||||
&& ehdr->e_ident[EI_CLASS] == ELFCLASS32;
|
||||
&& ehdr->e_ident[EI_CLASS] == ELFCLASS32;
|
||||
}
|
||||
|
||||
|
||||
|
@ -316,8 +316,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
|||
*reloc_addr = value + reloc->r_addend;
|
||||
break;
|
||||
|
||||
#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
|
||||
&& !defined RESOLVE_CONFLICT_FIND_MAP
|
||||
#ifndef RESOLVE_CONFLICT_FIND_MAP
|
||||
case R_390_TLS_DTPMOD:
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
/* During startup the dynamic linker is always the module
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions.
|
||||
64 bit S/390 Version.
|
||||
Copyright (C) 2001-2005, 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 2001-2005, 2006, 2011 Free Software Foundation, Inc.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
|
@ -288,8 +288,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
|
|||
*reloc_addr = value + reloc->r_addend;
|
||||
break;
|
||||
|
||||
#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
|
||||
&& !defined RESOLVE_CONFLICT_FIND_MAP
|
||||
#ifndef RESOLVE_CONFLICT_FIND_MAP
|
||||
case R_390_TLS_DTPMOD:
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
/* During startup the dynamic linker is always the module
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions. SH version.
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2011
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
|
@ -208,17 +208,11 @@ __fpscr_values:\n\
|
|||
define the value.
|
||||
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
|
||||
of the main executable's symbols, as for a COPY reloc. */
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
# define elf_machine_type_class(type) \
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_SH_JMP_SLOT || (type) == R_SH_TLS_DTPMOD32 \
|
||||
|| (type) == R_SH_TLS_DTPOFF32 || (type) == R_SH_TLS_TPOFF32) \
|
||||
* ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_SH_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#else
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_SH_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_SH_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
#define ELF_MACHINE_JMP_SLOT R_SH_JMP_SLOT
|
||||
|
@ -354,35 +348,34 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
|||
/* These addresses are always aligned. */
|
||||
*reloc_addr = value;
|
||||
break;
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
/* XXX Remove TLS relocations which are not needed. */
|
||||
case R_SH_TLS_DTPMOD32:
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
#ifdef RTLD_BOOTSTRAP
|
||||
/* During startup the dynamic linker is always the module
|
||||
with index 1.
|
||||
XXX If this relocation is necessary move before RESOLVE
|
||||
call. */
|
||||
*reloc_addr = 1;
|
||||
# else
|
||||
#else
|
||||
/* Get the information from the link map returned by the
|
||||
resolv function. */
|
||||
if (sym_map != NULL)
|
||||
*reloc_addr = sym_map->l_tls_modid;
|
||||
# endif
|
||||
#endif
|
||||
break;
|
||||
case R_SH_TLS_DTPOFF32:
|
||||
# ifndef RTLD_BOOTSTRAP
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
/* During relocation all TLS symbols are defined and used.
|
||||
Therefore the offset is already correct. */
|
||||
if (sym != NULL)
|
||||
*reloc_addr = sym->st_value;
|
||||
# endif
|
||||
#endif
|
||||
break;
|
||||
case R_SH_TLS_TPOFF32:
|
||||
/* The offset is positive, afterward from the thread pointer. */
|
||||
# ifdef RTLD_BOOTSTRAP
|
||||
#ifdef RTLD_BOOTSTRAP
|
||||
*reloc_addr = map->l_tls_offset + sym->st_value + reloc->r_addend;
|
||||
# else
|
||||
#else
|
||||
/* We know the offset of object the symbol is contained in.
|
||||
It is a positive value which will be added to the thread
|
||||
pointer. To get the variable position in the TLS block
|
||||
|
@ -393,9 +386,8 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
|||
*reloc_addr = sym_map->l_tls_offset + sym->st_value
|
||||
+ reloc->r_addend;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
break;
|
||||
#endif /* use TLS */
|
||||
case R_SH_DIR32:
|
||||
{
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
|
|
|
@ -139,7 +139,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
|||
nop
|
||||
.word MAP
|
||||
|
||||
The PC value (pltpc) saved in %g2 by the jmpl points near the
|
||||
The PC value (pltpc) saved in %g2 by the jmpl points near the
|
||||
location where we store the link_map pointer for this object. */
|
||||
|
||||
plt[0] = 0x05000000 | ((rfunc >> 10) & 0x003fffff);
|
||||
|
@ -193,17 +193,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
|||
PLT entries should not be allowed to define the value.
|
||||
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
|
||||
of the main executable's symbols, as for a COPY reloc. */
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
# define elf_machine_type_class(type) \
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_SPARC_JMP_SLOT \
|
||||
|| ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \
|
||||
* ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#else
|
||||
# define elf_machine_type_class(type) \
|
||||
((((type) == R_SPARC_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
#define ELF_MACHINE_JMP_SLOT R_SPARC_JMP_SLOT
|
||||
|
@ -454,8 +448,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
|||
sparc_fixup_plt (reloc, reloc_addr, value, 0, do_flush);
|
||||
}
|
||||
break;
|
||||
#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
|
||||
&& !defined RESOLVE_CONFLICT_FIND_MAP
|
||||
#ifndef RESOLVE_CONFLICT_FIND_MAP
|
||||
case R_SPARC_TLS_DTPMOD32:
|
||||
/* Get the information from the link map returned by the
|
||||
resolv function. */
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions. Sparc64 version.
|
||||
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
2009, 2010 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997-2006, 2009, 2010, 2011 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
|
||||
|
@ -77,11 +76,11 @@ elf_machine_load_address (void)
|
|||
register Elf64_Addr *got __asm ("%l7");
|
||||
|
||||
__asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t"
|
||||
"call 1f\n\t"
|
||||
" add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t"
|
||||
"call _DYNAMIC\n\t"
|
||||
"call _GLOBAL_OFFSET_TABLE_\n"
|
||||
"1:\tadd %1, %0, %1\n\t" : "=r" (pc), "=r" (got));
|
||||
"call 1f\n\t"
|
||||
" add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t"
|
||||
"call _DYNAMIC\n\t"
|
||||
"call _GLOBAL_OFFSET_TABLE_\n"
|
||||
"1:\tadd %1, %0, %1\n\t" : "=r" (pc), "=r" (got));
|
||||
|
||||
/* got is now l_addr + _GLOBAL_OFFSET_TABLE_
|
||||
*got is _DYNAMIC
|
||||
|
@ -115,17 +114,11 @@ elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
|
|||
PLT entries should not be allowed to define the value.
|
||||
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
|
||||
of the main executable's symbols, as for a COPY reloc. */
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
# define elf_machine_type_class(type) \
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_SPARC_JMP_SLOT \
|
||||
|| ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \
|
||||
* ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#else
|
||||
# define elf_machine_type_class(type) \
|
||||
((((type) == R_SPARC_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
#define ELF_MACHINE_JMP_SLOT R_SPARC_JMP_SLOT
|
||||
|
@ -168,7 +161,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
|||
|
||||
/* PLT0 looks like:
|
||||
|
||||
sethi %uhi(_dl_runtime_{resolve,profile}_0), %g4
|
||||
sethi %uhi(_dl_runtime_{resolve,profile}_0), %g4
|
||||
sethi %hi(_dl_runtime_{resolve,profile}_0), %g5
|
||||
or %g4, %ulo(_dl_runtime_{resolve,profile}_0), %g4
|
||||
or %g5, %lo(_dl_runtime_{resolve,profile}_0), %g5
|
||||
|
@ -189,7 +182,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
|||
|
||||
/* PLT1 looks like:
|
||||
|
||||
sethi %uhi(_dl_runtime_{resolve,profile}_1), %g4
|
||||
sethi %uhi(_dl_runtime_{resolve,profile}_1), %g4
|
||||
sethi %hi(_dl_runtime_{resolve,profile}_1), %g5
|
||||
or %g4, %ulo(_dl_runtime_{resolve,profile}_1), %g4
|
||||
or %g5, %lo(_dl_runtime_{resolve,profile}_1), %g5
|
||||
|
@ -479,8 +472,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
|
|||
sparc64_fixup_plt (map, reloc, reloc_addr, value, reloc->r_addend, 0);
|
||||
#endif
|
||||
break;
|
||||
#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
|
||||
&& !defined RESOLVE_CONFLICT_FIND_MAP
|
||||
#ifndef RESOLVE_CONFLICT_FIND_MAP
|
||||
case R_SPARC_TLS_DTPMOD64:
|
||||
/* Get the information from the link map returned by the
|
||||
resolv function. */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1991,1992,1993,1994,1995,1996,1997,2000,2002,2004,2005
|
||||
/* Copyright (C) 1991-1997,2000,2002,2004,2005,2011
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
|
@ -46,57 +46,24 @@ syscall_error:
|
|||
notb:
|
||||
#endif
|
||||
#ifndef PIC
|
||||
# if USE___THREAD
|
||||
# ifndef NO_TLS_DIRECT_SEG_REFS
|
||||
# ifndef NO_TLS_DIRECT_SEG_REFS
|
||||
movl %eax, %gs:C_SYMBOL_NAME(errno@NTPOFF)
|
||||
# else
|
||||
# else
|
||||
movl %gs:0, %ecx
|
||||
movl %eax, C_SYMBOL_NAME(errno@NTPOFF)(%ecx)
|
||||
# endif
|
||||
# elif !defined _LIBC_REENTRANT
|
||||
movl %eax, C_SYMBOL_NAME(errno)
|
||||
# else
|
||||
pushl %eax
|
||||
PUSH_ERRNO_LOCATION_RETURN
|
||||
call BP_SYM (__errno_location)
|
||||
POP_ERRNO_LOCATION_RETURN
|
||||
popl %ecx
|
||||
movl %ecx, (%eax)
|
||||
# endif
|
||||
#else
|
||||
/* The caller has pushed %ebx and then set it up to
|
||||
point to the GOT before calling us through the PLT. */
|
||||
# if USE___THREAD
|
||||
movl C_SYMBOL_NAME(errno@GOTNTPOFF)(%ebx), %ecx
|
||||
|
||||
/* Pop %ebx value saved before jumping here. */
|
||||
popl %ebx
|
||||
# ifndef NO_TLS_DIRECT_SEG_REFS
|
||||
# ifndef NO_TLS_DIRECT_SEG_REFS
|
||||
addl %gs:0, %ecx
|
||||
movl %eax, (%ecx)
|
||||
# else
|
||||
movl %eax, %gs:0(%ecx)
|
||||
# endif
|
||||
# elif RTLD_PRIVATE_ERRNO
|
||||
movl %eax, C_SYMBOL_NAME(rtld_errno@GOTOFF)(%ebx)
|
||||
|
||||
/* Pop %ebx value saved before jumping here. */
|
||||
popl %ebx
|
||||
# elif !defined _LIBC_REENTRANT
|
||||
movl C_SYMBOL_NAME(errno@GOT)(%ebx), %ecx
|
||||
|
||||
/* Pop %ebx value saved before jumping here. */
|
||||
popl %ebx
|
||||
movl %eax, (%ecx)
|
||||
# else
|
||||
pushl %eax
|
||||
PUSH_ERRNO_LOCATION_RETURN
|
||||
call C_SYMBOL_NAME (BP_SYM (__errno_location)@PLT)
|
||||
POP_ERRNO_LOCATION_RETURN
|
||||
popl %ecx
|
||||
/* Pop %ebx value saved before jumping here. */
|
||||
popl %ebx
|
||||
movl %ecx, (%eax)
|
||||
movl %eax, %gs:0(%ecx)
|
||||
# endif
|
||||
#endif
|
||||
movl $-1, %eax
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (C) 1992,1993,1995-2000,2002-2006,2007
|
||||
Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992,1993,1995-2000,2002-2006,2007,2011
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.org>, August 1995.
|
||||
|
||||
|
@ -121,13 +121,12 @@
|
|||
|
||||
# elif defined _LIBC_REENTRANT
|
||||
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0:SETUP_PIC_REG (cx); \
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ecx; \
|
||||
movl SYSCALL_ERROR_ERRNO@GOTNTPOFF(%ecx), %ecx; \
|
||||
|
@ -136,38 +135,13 @@
|
|||
SYSCALL_ERROR_HANDLER_TLS_STORE (%edx, %ecx); \
|
||||
orl $-1, %eax; \
|
||||
jmp L(pseudo_end);
|
||||
# ifndef NO_TLS_DIRECT_SEG_REFS
|
||||
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
||||
# ifndef NO_TLS_DIRECT_SEG_REFS
|
||||
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
||||
movl src, %gs:(destoff)
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \
|
||||
addl %gs:0, destoff; \
|
||||
movl src, (destoff)
|
||||
# endif
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0:pushl %ebx; \
|
||||
cfi_adjust_cfa_offset (4); \
|
||||
cfi_rel_offset (ebx, 0); \
|
||||
SETUP_PIC_REG (bx); \
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ebx; \
|
||||
xorl %edx, %edx; \
|
||||
subl %eax, %edx; \
|
||||
pushl %edx; \
|
||||
cfi_adjust_cfa_offset (4); \
|
||||
PUSH_ERRNO_LOCATION_RETURN; \
|
||||
call BP_SYM (__errno_location)@PLT; \
|
||||
POP_ERRNO_LOCATION_RETURN; \
|
||||
popl %ecx; \
|
||||
cfi_adjust_cfa_offset (-4); \
|
||||
popl %ebx; \
|
||||
cfi_adjust_cfa_offset (-4); \
|
||||
cfi_restore (ebx); \
|
||||
movl %ecx, (%eax); \
|
||||
orl $-1, %eax; \
|
||||
jmp L(pseudo_end);
|
||||
/* A quick note: it is assumed that the call to `__errno_location' does
|
||||
not modify the stack! */
|
||||
# endif
|
||||
# else
|
||||
/* Store (- %eax) into errno through the GOT. */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1999-2001, 2003, 2004, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>.
|
||||
|
||||
|
@ -34,7 +34,7 @@ ENTRY(__syscall_error)
|
|||
;;
|
||||
st4 [r2]=r8
|
||||
mov r8=-1
|
||||
#elif USE___THREAD
|
||||
#else
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
|
@ -46,37 +46,7 @@ ENTRY(__syscall_error)
|
|||
mov r8=-1
|
||||
add r2=r2,r13;;
|
||||
st4 [r2]=r3
|
||||
#elif defined _LIBC_REENTRANT
|
||||
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(0)
|
||||
alloc r33=ar.pfs, 0, 4, 0, 0
|
||||
mov r32=rp
|
||||
.body
|
||||
mov r35=r8
|
||||
mov r34=r1
|
||||
;;
|
||||
br.call.sptk.many b0 = __errno_location
|
||||
.Lret0: /* force new bundle */
|
||||
st4 [r8]=r35
|
||||
mov r1=r34
|
||||
mov rp=r32
|
||||
mov r8=-1
|
||||
mov ar.pfs=r33
|
||||
#else /* _LIBC_REENTRANT */
|
||||
/*
|
||||
* Note that the gp has to be set properly for this to work.
|
||||
* As long as all syscalls are in the same load unit
|
||||
* (executable or shared library) as this routine, we should
|
||||
* be fine. Otherwise, we would have to first load the global
|
||||
* pointer register from __gp.
|
||||
*/
|
||||
addl r2=@ltoff(errno),gp
|
||||
;;
|
||||
ld8 r2=[r2]
|
||||
mov r3=r8
|
||||
mov r8=-1
|
||||
;;
|
||||
st4 [r2]=r3
|
||||
#endif /* _LIBC_REENTRANT */
|
||||
#endif
|
||||
ret // ret is #define'd in syscall.h!
|
||||
END(__syscall_error)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2011 Free Software Foundation, Inc.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
|
@ -32,12 +32,11 @@
|
|||
.text
|
||||
ENTRY(__syscall_error)
|
||||
#ifndef PIC
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
basr %r1,0
|
||||
0: l %r1,1f-0b(%r1)
|
||||
ear %r3,%a0
|
||||
|
@ -46,34 +45,6 @@ ENTRY(__syscall_error)
|
|||
lhi %r2,-1
|
||||
br %r14
|
||||
1: .long SYSCALL_ERROR_ERRNO@ntpoff
|
||||
# elif !defined _LIBC_REENTRANT
|
||||
basr %r1,0
|
||||
0: l %r1,1f-0b(%r1)
|
||||
lcr %r2,%r2
|
||||
st %r2,0(%r1)
|
||||
lhi %r2,-1
|
||||
br %r14
|
||||
1: .long errno
|
||||
# else
|
||||
stm %r13,%r15,52(%r15)
|
||||
cfi_offset (%r15, -36)
|
||||
cfi_offset (%r14, -40)
|
||||
cfi_offset (%r13, -44)
|
||||
lr %r0,%r15
|
||||
ahi %r15,-96
|
||||
cfi_adjust_cfa_offset (96)
|
||||
lcr %r13,%r2
|
||||
st %r0,0(%r15)
|
||||
basr %r1,0
|
||||
0: l %r1,1f-0b(%r1)
|
||||
basr %r14,%r1
|
||||
st %r13,0(%r2)
|
||||
lm %r13,%r15,148(%r15)
|
||||
cfi_adjust_cfa_offset (-96)
|
||||
lhi %r2,-1
|
||||
br %r14
|
||||
1: .long __errno_location
|
||||
#endif
|
||||
#else
|
||||
# if RTLD_PRIVATE_ERRNO
|
||||
basr %r1,0
|
||||
|
@ -83,7 +54,7 @@ ENTRY(__syscall_error)
|
|||
lhi %r2,-1
|
||||
br %r14
|
||||
1: .long rtld_errno - 0b
|
||||
# elif USE___THREAD
|
||||
# else
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
|
@ -98,39 +69,6 @@ ENTRY(__syscall_error)
|
|||
lhi %r2,-1
|
||||
br %r14
|
||||
1: .long _GLOBAL_OFFSET_TABLE_-0b
|
||||
# elif !defined _LIBC_REENTRANT
|
||||
basr %r1,0
|
||||
0: al %r1,1f-0b(%r1)
|
||||
l %r1,errno@GOT(%r1)
|
||||
lcr %r2,%r2
|
||||
st %r2,0(0,%r1)
|
||||
lhi %r2,-1
|
||||
br %r14
|
||||
1: .long _GLOBAL_OFFSET_TABLE_-0b
|
||||
# else
|
||||
stm %r11,%r15,44(%r15)
|
||||
cfi_offset (%r15, -36)
|
||||
cfi_offset (%r14, -40)
|
||||
cfi_offset (%r13, -44)
|
||||
cfi_offset (%r12, -48)
|
||||
cfi_offset (%r11, -52)
|
||||
lr %r0,%r15
|
||||
ahi %r15,-96
|
||||
cfi_adjust_cfa_offset (96)
|
||||
lcr %r11,%r2
|
||||
st %r0,0(%r15)
|
||||
basr %r13,0
|
||||
0: l %r12,1f-0b(%r13)
|
||||
l %r1,2f-0b(%r13)
|
||||
la %r12,0(%r12,%r13)
|
||||
bas %r14,0(%r1,%r13)
|
||||
st %r11,0(%r2)
|
||||
lm %r11,%r15,140(%r15)
|
||||
cfi_adjust_cfa_offset (-96)
|
||||
lhi %r2,-1
|
||||
br %r14
|
||||
1: .long _GLOBAL_OFFSET_TABLE_-0b
|
||||
2: .long __errno_location@PLT-0b
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008
|
||||
/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2011
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
This file is part of the GNU C Library.
|
||||
|
@ -56,10 +56,10 @@
|
|||
#undef PSEUDO
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name) \
|
||||
ENTRY (name) \
|
||||
DO_CALL (syscall_name, args); \
|
||||
lhi %r4,-4095 ; \
|
||||
clr %r2,%r4 ; \
|
||||
clr %r2,%r4 ; \
|
||||
jnl SYSCALL_ERROR_LABEL
|
||||
|
||||
#undef PSEUDO_END
|
||||
|
@ -70,7 +70,7 @@
|
|||
#undef PSEUDO_NOERRNO
|
||||
#define PSEUDO_NOERRNO(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name) \
|
||||
ENTRY (name) \
|
||||
DO_CALL (syscall_name, args)
|
||||
|
||||
#undef PSEUDO_END_NOERRNO
|
||||
|
@ -80,7 +80,7 @@
|
|||
#undef PSEUDO_ERRVAL
|
||||
#define PSEUDO_ERRVAL(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name) \
|
||||
ENTRY (name) \
|
||||
DO_CALL (syscall_name, args); \
|
||||
lcr %r2,%r2
|
||||
|
||||
|
@ -107,14 +107,13 @@
|
|||
br %r14; \
|
||||
2: .long rtld_errno-1b
|
||||
# elif defined _LIBC_REENTRANT
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: lcr %r0,%r2; \
|
||||
basr %r1,0; \
|
||||
1: al %r1,2f-1b(%r1); \
|
||||
|
@ -124,14 +123,6 @@
|
|||
lhi %r2,-1; \
|
||||
br %r14; \
|
||||
2: .long _GLOBAL_OFFSET_TABLE_-1b
|
||||
# else
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: basr %r1,0; \
|
||||
1: al %r1,2f-1b(%r1); \
|
||||
br %r1; \
|
||||
2: .long syscall_error@plt-1b
|
||||
# endif
|
||||
# else
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
|
@ -317,8 +308,8 @@
|
|||
if (INTERNAL_SYSCALL_ERROR_P (_ret, )) \
|
||||
{ \
|
||||
iserr: \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \
|
||||
_ret = -1L; \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \
|
||||
_ret = -1L; \
|
||||
} \
|
||||
out: \
|
||||
(int) _ret; \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2001, 2002, 2003, 2004, 2011 Free Software Foundation, Inc.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
|
@ -33,12 +33,11 @@
|
|||
.text
|
||||
ENTRY(__syscall_error)
|
||||
#ifndef PIC
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
basr %r1,0
|
||||
0: lg %r1,1f-0b(%r1)
|
||||
ear %r3,%a0
|
||||
|
@ -49,29 +48,6 @@ ENTRY(__syscall_error)
|
|||
lghi %r2,-1
|
||||
br %r14
|
||||
1: .quad SYSCALL_ERROR_ERRNO@ntpoff
|
||||
# elif !defined _LIBC_REENTRANT
|
||||
larl %r1,errno
|
||||
lcr %r2,%r2
|
||||
st %r2,0(%r1)
|
||||
lghi %r2,-1
|
||||
br %r14
|
||||
# else
|
||||
stmg %r13,%r15,104(%r15)
|
||||
cfi_offset (%r15,-40)
|
||||
cfi_offset (%r14,-48)
|
||||
cfi_offset (%r13,-56)
|
||||
lgr %r0,%r15
|
||||
aghi %r15,-160
|
||||
cfi_adjust_cfa_offset (160)
|
||||
lcr %r13,%r2
|
||||
stg %r0,0(%r15)
|
||||
brasl %r14,__errno_location
|
||||
st %r13,0(%r2)
|
||||
lmg %r13,%r15,264(%r15)
|
||||
cfi_adjust_cfa_offset (-160)
|
||||
lghi %r2,-1
|
||||
br %r14
|
||||
#endif
|
||||
#else
|
||||
# if RTLD_PRIVATE_ERRNO
|
||||
larl %r1,rtld_errno
|
||||
|
@ -79,7 +55,7 @@ ENTRY(__syscall_error)
|
|||
st %r2,0(%r1)
|
||||
lghi %r2,-1
|
||||
br %r14
|
||||
# elif USE___THREAD
|
||||
# else
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
|
@ -94,29 +70,6 @@ ENTRY(__syscall_error)
|
|||
st %r2,0(%r1,%r3)
|
||||
lghi %r2,-1
|
||||
br %r14
|
||||
# elif !defined _LIBC_REENTRANT
|
||||
larl %r1,_GLOBAL_OFFSET_TABLE_
|
||||
lg %r1,errno@GOT(%r1)
|
||||
lcr %r2,%r2
|
||||
st %r2,0(%r1)
|
||||
lghi %r2,-1
|
||||
br %r14
|
||||
# else
|
||||
stmg %r13,%r15,104(%r15)
|
||||
cfi_offset (%r15,-40)
|
||||
cfi_offset (%r14,-48)
|
||||
cfi_offset (%r13,-56)
|
||||
lgr %r0,%r15
|
||||
aghi %r15,-160
|
||||
cfi_adjust_cfa_offset (160)
|
||||
lcr %r13,%r2
|
||||
stg %r0,0(%r15)
|
||||
brasl %r14,__errno_location@PLT
|
||||
st %r13,0(%r2)
|
||||
lmg %r13,%r15,264(%r15)
|
||||
cfi_adjust_cfa_offset (-160)
|
||||
lghi %r2,-1
|
||||
br %r14
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Assembler macros for 64 bit S/390.
|
||||
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008
|
||||
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2011
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
This file is part of the GNU C Library.
|
||||
|
@ -115,14 +115,13 @@
|
|||
lghi %r2,-1; \
|
||||
br %r14
|
||||
# elif defined _LIBC_REENTRANT
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: lcr %r0,%r2; \
|
||||
larl %r1,SYSCALL_ERROR_ERRNO@indntpoff; \
|
||||
lg %r1,0(%r1); \
|
||||
|
@ -132,10 +131,6 @@
|
|||
st %r0,0(%r1,%r2); \
|
||||
lghi %r2,-1; \
|
||||
br %r14
|
||||
# else
|
||||
# define SYSCALL_ERROR_LABEL syscall_error@plt
|
||||
# define SYSCALL_ERROR_HANDLER
|
||||
# endif
|
||||
# else
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
|
@ -319,8 +314,8 @@
|
|||
if (INTERNAL_SYSCALL_ERROR_P (_ret, )) \
|
||||
{ \
|
||||
iserr: \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \
|
||||
_ret = -1L; \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \
|
||||
_ret = -1L; \
|
||||
} \
|
||||
out: \
|
||||
(int) _ret; \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (C) 1992,1993,1995,1996,1997,1998,1999,2000,2002,2003,2004,
|
||||
2005,2006,2009 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992,1993,1995-2000,2002-2006,2009,2011
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
|
||||
Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
|
||||
|
@ -114,13 +114,12 @@
|
|||
|
||||
# elif defined _LIBC_REENTRANT
|
||||
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
neg r0,r1; \
|
||||
mov r12,r2; \
|
||||
mov.l 0f,r12; \
|
||||
|
@ -137,43 +136,6 @@
|
|||
.align 2; \
|
||||
0: .long _GLOBAL_OFFSET_TABLE_; \
|
||||
1: .long SYSCALL_ERROR_ERRNO@GOTTPOFF
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
neg r0,r1; \
|
||||
mov.l r14,@-r15; \
|
||||
cfi_adjust_cfa_offset (4); \
|
||||
cfi_rel_offset (r14, 0); \
|
||||
mov.l r12,@-r15; \
|
||||
cfi_adjust_cfa_offset (4); \
|
||||
cfi_rel_offset (r12, 0); \
|
||||
mov.l r1,@-r15; \
|
||||
cfi_adjust_cfa_offset (4); \
|
||||
cfi_rel_offset (r1, 0); \
|
||||
mov.l 0f,r12; \
|
||||
mova 0f,r0; \
|
||||
add r0,r12; \
|
||||
sts.l pr,@-r15; \
|
||||
cfi_adjust_cfa_offset (4); \
|
||||
cfi_rel_offset (pr, 0); \
|
||||
mov r15,r14; \
|
||||
cfi_def_cfa_register (r14); \
|
||||
mov.l 1f,r1; \
|
||||
bsrf r1; \
|
||||
nop; \
|
||||
2: mov r14,r15; \
|
||||
lds.l @r15+,pr; \
|
||||
mov.l @r15+,r1; \
|
||||
mov.l r1,@r0; \
|
||||
mov.l @r15+,r12; \
|
||||
mov.l @r15+,r14; \
|
||||
bra .Lpseudo_end; \
|
||||
mov _IMM1,r0; \
|
||||
.align 2; \
|
||||
0: .long _GLOBAL_OFFSET_TABLE_; \
|
||||
1: .long PLTJMP(C_SYMBOL_NAME(__errno_location))-(2b-.)
|
||||
/* A quick note: it is assumed that the call to `__errno_location' does
|
||||
not modify the stack! */
|
||||
# endif
|
||||
# else
|
||||
/* Store (-r0) into errno through the GOT. */
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
|
@ -324,8 +286,8 @@
|
|||
unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args); \
|
||||
if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, ), 0)) \
|
||||
{ \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \
|
||||
resultvar = 0xffffffff; \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \
|
||||
resultvar = 0xffffffff; \
|
||||
} \
|
||||
(int) resultvar; })
|
||||
|
||||
|
@ -347,7 +309,7 @@
|
|||
#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
|
||||
({ \
|
||||
unsigned long int resultvar; \
|
||||
register long int r3 asm ("%r3") = (name); \
|
||||
register long int r3 asm ("%r3") = (name); \
|
||||
SUBSTITUTE_ARGS_##nr(args); \
|
||||
\
|
||||
asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1997, 2002, 2003, 2004, 2006, 2008
|
||||
/* Copyright (C) 1997, 2002, 2003, 2004, 2006, 2008, 2011
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, January 1997.
|
||||
|
@ -99,32 +99,19 @@ ENTRY(name); \
|
|||
mov -1, %o0;
|
||||
# elif defined _LIBC_REENTRANT
|
||||
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG(o2,g1) \
|
||||
sethi %tie_hi22(SYSCALL_ERROR_ERRNO), %g1; \
|
||||
add %g1, %tie_lo10(SYSCALL_ERROR_ERRNO), %g1; \
|
||||
ld [%o2 + %g1], %g1, %tie_ld(SYSCALL_ERROR_ERRNO); \
|
||||
st %o0, [%g7 + %g1]; \
|
||||
jmp %o7 + 8; \
|
||||
st %o0, [%g7 + %g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: save %sp, -96, %sp; \
|
||||
cfi_def_cfa_register(%fp); \
|
||||
cfi_window_save; \
|
||||
cfi_register (%o7, %i7); \
|
||||
call __errno_location; \
|
||||
nop; \
|
||||
st %i0, [%o0]; \
|
||||
jmp %i7 + 8; \
|
||||
restore %g0, -1, %o0;
|
||||
# endif
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG(o2,g1) \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1997, 2000, 2002, 2003, 2004, 2006, 2008
|
||||
/* Copyright (C) 1997, 2000, 2002, 2003, 2004, 2006, 2008, 2011
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
|
||||
|
@ -106,32 +106,19 @@ ENTRY(name); \
|
|||
mov -1, %o0;
|
||||
# elif defined _LIBC_REENTRANT
|
||||
|
||||
# if USE___THREAD
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
# define SYSCALL_ERROR_ERRNO errno
|
||||
# endif
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG(o2,g1) \
|
||||
sethi %tie_hi22(SYSCALL_ERROR_ERRNO), %g1; \
|
||||
add %g1, %tie_lo10(SYSCALL_ERROR_ERRNO), %g1; \
|
||||
ldx [%o2 + %g1], %g1, %tie_ldx(SYSCALL_ERROR_ERRNO);\
|
||||
st %o0, [%g7 + %g1]; \
|
||||
jmp %o7 + 8; \
|
||||
st %o0, [%g7 + %g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: save %sp, -176, %sp; \
|
||||
cfi_def_cfa_register(%fp); \
|
||||
cfi_window_save; \
|
||||
cfi_register (%o7, %i7); \
|
||||
call __errno_location; \
|
||||
nop; \
|
||||
st %i0, [%o0]; \
|
||||
jmp %i7 + 8; \
|
||||
restore %g0, -1, %o0;
|
||||
# endif
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG(o2,g1) \
|
||||
|
|
|
@ -124,7 +124,7 @@
|
|||
movl %edx, (%rcx); \
|
||||
orq $-1, %rax; \
|
||||
jmp L(pseudo_end);
|
||||
# elif USE___THREAD
|
||||
# else
|
||||
# ifndef NOT_IN_libc
|
||||
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||
# else
|
||||
|
@ -138,34 +138,6 @@
|
|||
movl %edx, %fs:(%rcx); \
|
||||
orq $-1, %rax; \
|
||||
jmp L(pseudo_end);
|
||||
# elif defined _LIBC_REENTRANT
|
||||
/* Store (- %rax) into errno through the GOT.
|
||||
Note that errno occupies only 4 bytes. */
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: \
|
||||
xorl %edx, %edx; \
|
||||
subq %rax, %rdx; \
|
||||
pushq %rdx; \
|
||||
cfi_adjust_cfa_offset(8); \
|
||||
PUSH_ERRNO_LOCATION_RETURN; \
|
||||
call BP_SYM (__errno_location)@PLT; \
|
||||
POP_ERRNO_LOCATION_RETURN; \
|
||||
popq %rdx; \
|
||||
cfi_adjust_cfa_offset(-8); \
|
||||
movl %edx, (%rax); \
|
||||
orq $-1, %rax; \
|
||||
jmp L(pseudo_end);
|
||||
|
||||
/* A quick note: it is assumed that the call to `__errno_location' does
|
||||
not modify the stack! */
|
||||
# else /* Not _LIBC_REENTRANT. */
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0:movq errno@GOTPCREL(%RIP), %rcx; \
|
||||
xorl %edx, %edx; \
|
||||
subq %rax, %rdx; \
|
||||
movl %edx, (%rcx); \
|
||||
orq $-1, %rax; \
|
||||
jmp L(pseudo_end);
|
||||
# endif /* PIC */
|
||||
|
||||
/* The Linux/x86-64 kernel expects the system call parameters in
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2001, 2002, 2004, 2005, 2011 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
|
||||
|
@ -45,43 +45,11 @@ syscall_error:
|
|||
movl $EAGAIN, %eax /* Yes; translate it to EAGAIN. */
|
||||
notb:
|
||||
#endif
|
||||
#if USE___THREAD
|
||||
# ifdef PIC
|
||||
#ifdef PIC
|
||||
movq C_SYMBOL_NAME(errno@GOTTPOFF)(%rip), %rcx
|
||||
movl %eax, %fs:0(%rcx)
|
||||
# else
|
||||
movl %eax, %fs:C_SYMBOL_NAME(errno@TPOFF)
|
||||
# endif
|
||||
#elif !defined PIC
|
||||
# ifndef _LIBC_REENTRANT
|
||||
movl %eax, C_SYMBOL_NAME(errno)
|
||||
# else
|
||||
pushq %rax
|
||||
cfi_adjust_cfa_offset(8)
|
||||
PUSH_ERRNO_LOCATION_RETURN
|
||||
call BP_SYM (__errno_location)
|
||||
POP_ERRNO_LOCATION_RETURN
|
||||
popq %rcx
|
||||
cfi_adjust_cfa_offset(-8)
|
||||
movl %ecx, (%rax)
|
||||
# endif
|
||||
#else
|
||||
# if RTLD_PRIVATE_ERRNO
|
||||
leaq rtld_errno(%rip), %rcx
|
||||
movl %eax, (%rcx)
|
||||
# elif !defined _LIBC_REENTRANT
|
||||
movq C_SYMBOL_NAME(errno)@GOTPCREL(%rip), %rcx
|
||||
movl %eax, (%rcx)
|
||||
# else
|
||||
pushq %rax
|
||||
cfi_adjust_cfa_offset(8)
|
||||
PUSH_ERRNO_LOCATION_RETURN
|
||||
call C_SYMBOL_NAME (BP_SYM (__errno_location)@PLT)
|
||||
POP_ERRNO_LOCATION_RETURN
|
||||
popq %rcx
|
||||
cfi_adjust_cfa_offset(-8)
|
||||
movl %ecx, (%rax)
|
||||
# endif
|
||||
movl %eax, %fs:C_SYMBOL_NAME(errno@TPOFF)
|
||||
#endif
|
||||
movq $-1, %rax
|
||||
ret
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Machine-dependent ELF dynamic relocation inline functions. x86-64 version.
|
||||
Copyright (C) 2001-2006, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
Copyright (C) 2001-2006, 2008-2010, 2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Jaeger <aj@suse.de>.
|
||||
|
||||
|
@ -195,8 +195,7 @@ _dl_start_user:\n\
|
|||
define the value.
|
||||
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
|
||||
of the main executable's symbols, as for a COPY reloc. */
|
||||
#if !defined RTLD_BOOTSTRAP || USE___THREAD
|
||||
# define elf_machine_type_class(type) \
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_X86_64_JUMP_SLOT \
|
||||
|| (type) == R_X86_64_DTPMOD64 \
|
||||
|| (type) == R_X86_64_DTPOFF64 \
|
||||
|
@ -204,11 +203,6 @@ _dl_start_user:\n\
|
|||
|| (type) == R_X86_64_TLSDESC) \
|
||||
* ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_X86_64_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#else
|
||||
# define elf_machine_type_class(type) \
|
||||
((((type) == R_X86_64_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_X86_64_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
#define ELF_MACHINE_JMP_SLOT R_X86_64_JUMP_SLOT
|
||||
|
@ -302,10 +296,6 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
|
|||
&& __builtin_expect (sym->st_shndx != SHN_UNDEF, 1))
|
||||
value = ((Elf64_Addr (*) (void)) value) ();
|
||||
|
||||
# if defined RTLD_BOOTSTRAP && !USE___THREAD
|
||||
assert (r_type == R_X86_64_GLOB_DAT || r_type == R_X86_64_JUMP_SLOT);
|
||||
*reloc_addr = value + reloc->r_addend;
|
||||
# else
|
||||
switch (r_type)
|
||||
{
|
||||
case R_X86_64_GLOB_DAT:
|
||||
|
@ -453,7 +443,6 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
|
|||
break;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,8 +2,4 @@
|
|||
|
||||
#include <tls.h>
|
||||
|
||||
#if USE___THREAD
|
||||
@@@ use-thread = yes @@@
|
||||
#else
|
||||
@@@ use-thread = no @@@
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue