summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'libpthread/nptl/sysdeps')
-rw-r--r--libpthread/nptl/sysdeps/generic/unwind.h220
-rw-r--r--libpthread/nptl/sysdeps/pthread/Makefile.in44
-rw-r--r--libpthread/nptl/sysdeps/pthread/defs.awk24
-rw-r--r--libpthread/nptl/sysdeps/pthread/pt-initfini.c4
-rw-r--r--libpthread/nptl/sysdeps/pthread/pthread_once.c2
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind.h279
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h32
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h96
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h32
9 files changed, 120 insertions, 613 deletions
diff --git a/libpthread/nptl/sysdeps/generic/unwind.h b/libpthread/nptl/sysdeps/generic/unwind.h
deleted file mode 100644
index 81fc4db55..000000000
--- a/libpthread/nptl/sysdeps/generic/unwind.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Exception handling and frame unwind runtime interface routines.
- Copyright (C) 2001, 2003 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
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-/* This is derived from the C++ ABI for IA-64. Where we diverge
- for cross-architecture compatibility are noted with "@@@". */
-
-#ifndef _UNWIND_H
-#define _UNWIND_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Level 1: Base ABI */
-
-/* @@@ The IA-64 ABI uses uint64 throughout. Most places this is
- inefficient for 32-bit and smaller machines. */
-typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));
-typedef signed _Unwind_Sword __attribute__((__mode__(__word__)));
-#if defined(__ia64__) && defined(__hpux__)
-typedef unsigned _Unwind_Ptr __attribute__((__mode__(__word__)));
-#else
-typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
-#endif
-typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__)));
-
-/* @@@ The IA-64 ABI uses a 64-bit word to identify the producer and
- consumer of an exception. We'll go along with this for now even on
- 32-bit machines. We'll need to provide some other option for
- 16-bit machines and for machines with > 8 bits per byte. */
-typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
-
-/* The unwind interface uses reason codes in several contexts to
- identify the reasons for failures or other actions. */
-typedef enum
-{
- _URC_NO_REASON = 0,
- _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
- _URC_FATAL_PHASE2_ERROR = 2,
- _URC_FATAL_PHASE1_ERROR = 3,
- _URC_NORMAL_STOP = 4,
- _URC_END_OF_STACK = 5,
- _URC_HANDLER_FOUND = 6,
- _URC_INSTALL_CONTEXT = 7,
- _URC_CONTINUE_UNWIND = 8
-} _Unwind_Reason_Code;
-
-
-/* The unwind interface uses a pointer to an exception header object
- as its representation of an exception being thrown. In general, the
- full representation of an exception object is language- and
- implementation-specific, but it will be prefixed by a header
- understood by the unwind interface. */
-
-struct _Unwind_Exception;
-
-typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code,
- struct _Unwind_Exception *);
-
-struct _Unwind_Exception
-{
- _Unwind_Exception_Class exception_class;
- _Unwind_Exception_Cleanup_Fn exception_cleanup;
- _Unwind_Word private_1;
- _Unwind_Word private_2;
-
- /* @@@ The IA-64 ABI says that this structure must be double-word aligned.
- Taking that literally does not make much sense generically. Instead we
- provide the maximum alignment required by any type for the machine. */
-} __attribute__((__aligned__));
-
-
-/* The ACTIONS argument to the personality routine is a bitwise OR of one
- or more of the following constants. */
-typedef int _Unwind_Action;
-
-#define _UA_SEARCH_PHASE 1
-#define _UA_CLEANUP_PHASE 2
-#define _UA_HANDLER_FRAME 4
-#define _UA_FORCE_UNWIND 8
-#define _UA_END_OF_STACK 16
-
-/* This is an opaque type used to refer to a system-specific data
- structure used by the system unwinder. This context is created and
- destroyed by the system, and passed to the personality routine
- during unwinding. */
-struct _Unwind_Context;
-
-/* Raise an exception, passing along the given exception object. */
-extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *);
-
-/* Raise an exception for forced unwinding. */
-
-typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
- (int, _Unwind_Action, _Unwind_Exception_Class,
- struct _Unwind_Exception *, struct _Unwind_Context *, void *);
-
-extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
- _Unwind_Stop_Fn,
- void *);
-
-/* Helper to invoke the exception_cleanup routine. */
-extern void _Unwind_DeleteException (struct _Unwind_Exception *);
-
-/* Resume propagation of an existing exception. This is used after
- e.g. executing cleanup code, and not to implement rethrowing. */
-extern void _Unwind_Resume (struct _Unwind_Exception *);
-
-/* @@@ Use unwind data to perform a stack backtrace. The trace callback
- is called for every stack frame in the call chain, but no cleanup
- actions are performed. */
-typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)
- (struct _Unwind_Context *, void *);
-
-extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *);
-
-/* These functions are used for communicating information about the unwind
- context (i.e. the unwind descriptors and the user register state) between
- the unwind library and the personality routine and landing pad. Only
- selected registers maybe manipulated. */
-
-extern _Unwind_Word _Unwind_GetGR (struct _Unwind_Context *, int);
-extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word);
-
-extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
-extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
-
-/* @@@ Retrieve the CFA of the given context. */
-extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *);
-
-extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *);
-
-extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *);
-
-
-/* The personality routine is the function in the C++ (or other language)
- runtime library which serves as an interface between the system unwind
- library and language-specific exception handling semantics. It is
- specific to the code fragment described by an unwind info block, and
- it is always referenced via the pointer in the unwind info block, and
- hence it has no ABI-specified name.
-
- Note that this implies that two different C++ implementations can
- use different names, and have different contents in the language
- specific data area. Moreover, that the language specific data
- area contains no version info because name of the function invoked
- provides more effective versioning by detecting at link time the
- lack of code to handle the different data format. */
-
-typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)
- (int, _Unwind_Action, _Unwind_Exception_Class,
- struct _Unwind_Exception *, struct _Unwind_Context *);
-
-/* @@@ The following alternate entry points are for setjmp/longjmp
- based unwinding. */
-
-struct SjLj_Function_Context;
-extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *);
-extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *);
-
-extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException
- (struct _Unwind_Exception *);
-extern _Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind
- (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
-extern void _Unwind_SjLj_Resume (struct _Unwind_Exception *);
-
-/* @@@ The following provide access to the base addresses for text
- and data-relative addressing in the LDSA. In order to stay link
- compatible with the standard ABI for IA-64, we inline these. */
-
-#ifdef __ia64__
-#include <stdlib.h>
-
-static inline _Unwind_Ptr
-_Unwind_GetDataRelBase (struct _Unwind_Context *_C)
-{
- /* The GP is stored in R1. */
- return _Unwind_GetGR (_C, 1);
-}
-
-static inline _Unwind_Ptr
-_Unwind_GetTextRelBase (struct _Unwind_Context *_C)
-{
- abort ();
- return 0;
-}
-
-/* @@@ Retrieve the Backing Store Pointer of the given context. */
-extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
-#else
-extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
-extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
-#endif
-
-/* @@@ Given an address, return the entry point of the function that
- contains it. */
-extern void * _Unwind_FindEnclosingFunction (void *pc);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* unwind.h */
diff --git a/libpthread/nptl/sysdeps/pthread/Makefile.in b/libpthread/nptl/sysdeps/pthread/Makefile.in
index fc0c6ac3e..be5c022b1 100644
--- a/libpthread/nptl/sysdeps/pthread/Makefile.in
+++ b/libpthread/nptl/sysdeps/pthread/Makefile.in
@@ -67,22 +67,48 @@ librt-pt-shared-only-routines-y = rt-unwind-resume.c
ifeq ($(UCLIBC_CTOR_DTOR),y)
CFLAGS-OMIT-pt-initfini.c = $(CFLAGS-pthread)
-CFLAGS-pt-initfini.c = -S -g0 -fPIC -fno-inline-functions \
+CFLAGS-pt-initfini.c = -S -g0 $(PICFLAG) -fno-inline-functions \
$(call check_gcc,-fno-unit-at-a-time,) \
+ $(SSP_DISABLE_FLAGS) \
-finhibit-size-directive \
+ -fno-asynchronous-unwind-tables -fno-unwind-tables \
$(patsubst -f%,-fno-%,$(call check_gcc,-fexceptions,))
-ASFLAGS-crti.S = -g0
-ASFLAGS-crtn.S = -g0
-$(libpthread_pthread_OUT)/pt-initfini.s: $(libpthread_pthread_DIR)/pt-initfini.c
+#ASFLAGS += $(PICFLAG) -I$(top_srcdir)include -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)
+ifneq ($(wildcard $(libpthread_pthread_DIR)/../unix/sysv/linux/$(TARGET_ARCH)/pt-initfini.c),)
+PTHREAD_INITFINI := $(libpthread_pthread_DIR)/../unix/sysv/linux/$(TARGET_ARCH)/pt-initfini.c
+else
+PTHREAD_INITFINI := $(libpthread_pthread_DIR)/pt-initfini.c
+endif
+
+ASFLAGS-pt-crti.S = $(PICFLAG)
+ASFLAGS-pt-crtn.S = $(PICFLAG)
+
+$(libpthread_pthread_OUT)/pt-crti.o: $(libpthread_pthread_OUT)/pt-crti.S
+ $(compile.S)
+
+$(libpthread_pthread_OUT)/pt-crtn.o: $(libpthread_pthread_OUT)/pt-crtn.S
+ $(compile.S)
+
+$(libpthread_pthread_OUT)/pt-initfini.s: $(PTHREAD_INITFINI) | $(top_builddir)include/bits/uClibc_config.h
$(compile.c)
- $(do_sed) '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
- $(do_awk) $(libpthread_pthread_DIR)/defs.awk > $(libpthread_pthread_OUT)/defs.h
+$(libpthread_pthread_OUT)/defs.h: $(PTHREAD_INITFINI)
+ $(do_sed) -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
+ $(AWK) -f $(top_srcdir)extra/scripts/defs.awk > $@.tmp
+ $(Q)mv $@.tmp $@
-$(libpthread_pthread_OUT)/crti.S $(libpthread_pthread_OUT)/crtn.S: $(libpthread_pthread_OUT)/pt-initfini.s
- $(do_sed) -e '1,/@HEADER_ENDS/p' \
+$(libpthread_pthread_OUT)/pt-crti.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
+ $(do_sed) -n -e '/[ ]*\.file/d' \
+ -e '1,/@HEADER_ENDS/p' \
-e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
- -e '/@TRAILER_BEGINS/,$$p' $< > $@
+ -e '/@TRAILER_BEGINS/,$$p' $< > $@.tmp
+ $(Q)mv $@.tmp $@
+$(libpthread_pthread_OUT)/pt-crtn.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
+ $(do_sed) -n -e '/[ ]*\.file/d' \
+ -e '1,/@HEADER_ENDS/p' \
+ -e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \
+ -e '/@TRAILER_BEGINS/,$$p' $< > $@.tmp
+ $(Q)mv $@.tmp $@
endif
# It would have been easier to just add dummy files that include the real
# impl, but ok.
diff --git a/libpthread/nptl/sysdeps/pthread/defs.awk b/libpthread/nptl/sysdeps/pthread/defs.awk
deleted file mode 100644
index d41d57bd7..000000000
--- a/libpthread/nptl/sysdeps/pthread/defs.awk
+++ /dev/null
@@ -1,24 +0,0 @@
-/^[ ]*\.endp/ { need_endp = 1 }
-/^[ ]*\.end/ { need_end = 1 }
-/^[ ]*\.align/ { if($2 > max) max = $2; }
-
-END {
- if(need_endp)
- {
- print "#define END_INIT .endp _init";
- print "#define END_FINI .endp _fini";
- } else if(need_end)
- {
- print "#define END_INIT .end _init";
- print "#define END_FINI .end _fini";
- }
- else
- {
- print "#define END_INIT";
- print "#define END_FINI";
- }
- if(max)
- print "#define ALIGN .align", max;
- else
- print "#define ALIGN";
-}
diff --git a/libpthread/nptl/sysdeps/pthread/pt-initfini.c b/libpthread/nptl/sysdeps/pthread/pt-initfini.c
index 1f81144d0..ccdce3e22 100644
--- a/libpthread/nptl/sysdeps/pthread/pt-initfini.c
+++ b/libpthread/nptl/sysdeps/pthread/pt-initfini.c
@@ -44,6 +44,10 @@
/* Embed an #include to pull in the alignment and .end directives. */
__asm__ ("\n#include \"defs.h\"");
+__asm__ ("\n#if defined __i686 && defined __ASSEMBLER__");
+__asm__ ("\n#undef __i686");
+__asm__ ("\n#define __i686 __i686");
+__asm__ ("\n#endif");
/* The initial common code ends here. */
__asm__ ("\n/*@HEADER_ENDS*/");
diff --git a/libpthread/nptl/sysdeps/pthread/pthread_once.c b/libpthread/nptl/sysdeps/pthread/pthread_once.c
index 57bb6b977..55131091a 100644
--- a/libpthread/nptl/sysdeps/pthread/pthread_once.c
+++ b/libpthread/nptl/sysdeps/pthread/pthread_once.c
@@ -38,7 +38,7 @@ __pthread_once (
lll_lock (once_lock, LLL_PRIVATE);
/* XXX This implementation is not complete. It doesn't take
- cancelation and fork into account. */
+ cancellation and fork into account. */
if (*once_control == PTHREAD_ONCE_INIT)
{
init_routine ();
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind.h b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind.h
deleted file mode 100644
index eeb9cf8b6..000000000
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/* Header file for the ARM EABI unwinder
- Copyright (C) 2003, 2004, 2005, 2009 Free Software Foundation, Inc.
- Contributed by Paul Brook
-
- This file is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- In addition to the permissions in the GNU General Public License, the
- Free Software Foundation gives you unlimited permission to link the
- compiled version of this file into combinations with other programs,
- and to distribute those combinations without any restriction coming
- from the use of this file. (The General Public License restrictions
- do apply in other respects; for example, they cover modification of
- the file, and distribution when not linked into a combine
- executable.)
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING. If not, write to
- the Free Software Foundation, 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* Language-independent unwinder header public defines. This contains both
- ABI defined objects, and GNU support routines. */
-
-#ifndef UNWIND_ARM_H
-#define UNWIND_ARM_H
-
-#define __ARM_EABI_UNWINDER__ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));
- typedef signed _Unwind_Sword __attribute__((__mode__(__word__)));
- typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
- typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__)));
- typedef _Unwind_Word _uw;
- typedef unsigned _uw64 __attribute__((mode(__DI__)));
- typedef unsigned _uw16 __attribute__((mode(__HI__)));
- typedef unsigned _uw8 __attribute__((mode(__QI__)));
-
- typedef enum
- {
- _URC_OK = 0, /* operation completed successfully */
- _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
- _URC_END_OF_STACK = 5,
- _URC_HANDLER_FOUND = 6,
- _URC_INSTALL_CONTEXT = 7,
- _URC_CONTINUE_UNWIND = 8,
- _URC_FAILURE = 9 /* unspecified failure of some kind */
- }
- _Unwind_Reason_Code;
-
- typedef enum
- {
- _US_VIRTUAL_UNWIND_FRAME = 0,
- _US_UNWIND_FRAME_STARTING = 1,
- _US_UNWIND_FRAME_RESUME = 2,
- _US_ACTION_MASK = 3,
- _US_FORCE_UNWIND = 8,
- _US_END_OF_STACK = 16
- }
- _Unwind_State;
-
- /* Provided only for for compatibility with existing code. */
- typedef int _Unwind_Action;
-#define _UA_SEARCH_PHASE 1
-#define _UA_CLEANUP_PHASE 2
-#define _UA_HANDLER_FRAME 4
-#define _UA_FORCE_UNWIND 8
-#define _UA_END_OF_STACK 16
-#define _URC_NO_REASON _URC_OK
-
- typedef struct _Unwind_Control_Block _Unwind_Control_Block;
- typedef struct _Unwind_Context _Unwind_Context;
- typedef _uw _Unwind_EHT_Header;
-
-
- /* UCB: */
-
- struct _Unwind_Control_Block
- {
-#ifdef _LIBC
- /* For the benefit of code which assumes this is a scalar. All
- glibc ever does is clear it. */
- _uw64 exception_class;
-#else
- char exception_class[8];
-#endif
- void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *);
- /* Unwinder cache, private fields for the unwinder's use */
- struct
- {
- _uw reserved1; /* Forced unwind stop fn, 0 if not forced */
- _uw reserved2; /* Personality routine address */
- _uw reserved3; /* Saved callsite address */
- _uw reserved4; /* Forced unwind stop arg */
- _uw reserved5;
- }
- unwinder_cache;
- /* Propagation barrier cache (valid after phase 1): */
- struct
- {
- _uw sp;
- _uw bitpattern[5];
- }
- barrier_cache;
- /* Cleanup cache (preserved over cleanup): */
- struct
- {
- _uw bitpattern[4];
- }
- cleanup_cache;
- /* Pr cache (for pr's benefit): */
- struct
- {
- _uw fnstart; /* function start address */
- _Unwind_EHT_Header *ehtp; /* pointer to EHT entry header word */
- _uw additional; /* additional data */
- _uw reserved1;
- }
- pr_cache;
- long long int :0; /* Force alignment to 8-byte boundary */
- };
-
- /* Virtual Register Set*/
-
- typedef enum
- {
- _UVRSC_CORE = 0, /* integer register */
- _UVRSC_VFP = 1, /* vfp */
- _UVRSC_FPA = 2, /* fpa */
- _UVRSC_WMMXD = 3, /* Intel WMMX data register */
- _UVRSC_WMMXC = 4 /* Intel WMMX control register */
- }
- _Unwind_VRS_RegClass;
-
- typedef enum
- {
- _UVRSD_UINT32 = 0,
- _UVRSD_VFPX = 1,
- _UVRSD_FPAX = 2,
- _UVRSD_UINT64 = 3,
- _UVRSD_FLOAT = 4,
- _UVRSD_DOUBLE = 5
- }
- _Unwind_VRS_DataRepresentation;
-
- typedef enum
- {
- _UVRSR_OK = 0,
- _UVRSR_NOT_IMPLEMENTED = 1,
- _UVRSR_FAILED = 2
- }
- _Unwind_VRS_Result;
-
- /* Frame unwinding state. */
- typedef struct
- {
- /* The current word (bytes packed msb first). */
- _uw data;
- /* Pointer to the next word of data. */
- _uw *next;
- /* The number of bytes left in this word. */
- _uw8 bytes_left;
- /* The number of words pointed to by ptr. */
- _uw8 words_left;
- }
- __gnu_unwind_state;
-
- typedef _Unwind_Reason_Code (*personality_routine) (_Unwind_State,
- _Unwind_Control_Block *, _Unwind_Context *);
-
- _Unwind_VRS_Result _Unwind_VRS_Set(_Unwind_Context *, _Unwind_VRS_RegClass,
- _uw, _Unwind_VRS_DataRepresentation,
- void *);
-
- _Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *, _Unwind_VRS_RegClass,
- _uw, _Unwind_VRS_DataRepresentation,
- void *);
-
- _Unwind_VRS_Result _Unwind_VRS_Pop(_Unwind_Context *, _Unwind_VRS_RegClass,
- _uw, _Unwind_VRS_DataRepresentation);
-
-
- /* Support functions for the PR. */
-#define _Unwind_Exception _Unwind_Control_Block
- typedef char _Unwind_Exception_Class[8];
-
- void * _Unwind_GetLanguageSpecificData (_Unwind_Context *);
- _Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *);
-
- /* These two should never be used. */
- _Unwind_Ptr _Unwind_GetDataRelBase (_Unwind_Context *);
- _Unwind_Ptr _Unwind_GetTextRelBase (_Unwind_Context *);
-
- /* Interface functions: */
- _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Control_Block *ucbp);
- void __attribute__((noreturn)) _Unwind_Resume(_Unwind_Control_Block *ucbp);
- _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (_Unwind_Control_Block *ucbp);
-
- typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
- (int, _Unwind_Action, _Unwind_Exception_Class,
- _Unwind_Control_Block *, struct _Unwind_Context *, void *);
- _Unwind_Reason_Code _Unwind_ForcedUnwind (_Unwind_Control_Block *,
- _Unwind_Stop_Fn, void *);
- _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *);
- void _Unwind_Complete(_Unwind_Control_Block *ucbp);
- void _Unwind_DeleteException (_Unwind_Exception *);
-
- _Unwind_Reason_Code __gnu_unwind_frame (_Unwind_Control_Block *,
- _Unwind_Context *);
- _Unwind_Reason_Code __gnu_unwind_execute (_Unwind_Context *,
- __gnu_unwind_state *);
-
- /* Decode an R_ARM_TARGET2 relocation. */
- static inline _Unwind_Word
- _Unwind_decode_target2 (_Unwind_Word ptr)
- {
- _Unwind_Word tmp;
-
- tmp = *(_Unwind_Word *) ptr;
- /* Zero values are always NULL. */
- if (!tmp)
- return 0;
-
-#if defined(linux) || defined(__NetBSD__)
- /* Pc-relative indirect. */
- tmp += ptr;
- tmp = *(_Unwind_Word *) tmp;
-#elif defined(__symbian__)
- /* Absolute pointer. Nothing more to do. */
-#else
- /* Pc-relative pointer. */
- tmp += ptr;
-#endif
- return tmp;
- }
-
- static inline _Unwind_Word
- _Unwind_GetGR (_Unwind_Context *context, int regno)
- {
- _uw val;
- _Unwind_VRS_Get (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val);
- return val;
- }
-
- /* Return the address of the instruction, not the actual IP value. */
-#define _Unwind_GetIP(context) \
- (_Unwind_GetGR (context, 15) & ~(_Unwind_Word)1)
-
- static inline void
- _Unwind_SetGR (_Unwind_Context *context, int regno, _Unwind_Word val)
- {
- _Unwind_VRS_Set (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val);
- }
-
- /* The dwarf unwinder doesn't understand arm/thumb state. We assume the
- landing pad uses the same instruction set as the call site. */
-#define _Unwind_SetIP(context, val) \
- _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1))
-
-typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)
- (struct _Unwind_Context *, void *);
-
-extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* defined UNWIND_ARM_H */
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
index ab1a9395e..db951a10e 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
@@ -336,7 +336,7 @@ LLL_STUB_UNWIND_INFO_END
})
#define lll_robust_lock(futex, id, private) \
- ({ int __result, ignore1, ignore2; \
+ ({ int __ret, ignore1, ignore2; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %1, %2\n\t" \
"jnz _L_robust_lock_%=\n\t" \
".subsection 1\n\t" \
@@ -350,11 +350,11 @@ LLL_STUB_UNWIND_INFO_END
".previous\n" \
LLL_STUB_UNWIND_INFO_4 \
"18:" \
- : "=a" (__result), "=c" (ignore1), "=m" (futex), \
+ : "=a" (__ret), "=c" (ignore1), "=m" (futex), \
"=&d" (ignore2) \
: "0" (0), "1" (id), "m" (futex), "g" ((int) (private))\
: "memory"); \
- __result; })
+ __ret; })
/* Special version of lll_lock which causes the unlock function to
@@ -383,7 +383,7 @@ LLL_STUB_UNWIND_INFO_END
#define lll_robust_cond_lock(futex, id, private) \
- ({ int __result, ignore1, ignore2; \
+ ({ int __ret, ignore1, ignore2; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %1, %2\n\t" \
"jnz _L_robust_cond_lock_%=\n\t" \
".subsection 1\n\t" \
@@ -397,16 +397,16 @@ LLL_STUB_UNWIND_INFO_END
".previous\n" \
LLL_STUB_UNWIND_INFO_4 \
"18:" \
- : "=a" (__result), "=c" (ignore1), "=m" (futex), \
+ : "=a" (__ret), "=c" (ignore1), "=m" (futex), \
"=&d" (ignore2) \
: "0" (0), "1" (id | FUTEX_WAITERS), "m" (futex), \
"g" ((int) (private)) \
: "memory"); \
- __result; })
+ __ret; })
#define lll_timedlock(futex, timeout, private) \
- ({ int __result, ignore1, ignore2, ignore3; \
+ ({ int __ret, ignore1, ignore2, ignore3; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %1, %3\n\t" \
"jnz _L_timedlock_%=\n\t" \
".subsection 1\n\t" \
@@ -420,16 +420,16 @@ LLL_STUB_UNWIND_INFO_END
".previous\n" \
LLL_STUB_UNWIND_INFO_4 \
"18:" \
- : "=a" (__result), "=c" (ignore1), "=&d" (ignore2), \
+ : "=a" (__ret), "=c" (ignore1), "=&d" (ignore2), \
"=m" (futex), "=S" (ignore3) \
: "0" (0), "1" (1), "m" (futex), "m" (timeout), \
"4" ((int) (private)) \
: "memory"); \
- __result; })
+ __ret; })
#define lll_robust_timedlock(futex, timeout, id, private) \
- ({ int __result, ignore1, ignore2, ignore3; \
+ ({ int __ret, ignore1, ignore2, ignore3; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %1, %3\n\t" \
"jnz _L_robust_timedlock_%=\n\t" \
".subsection 1\n\t" \
@@ -443,12 +443,12 @@ LLL_STUB_UNWIND_INFO_END
".previous\n" \
LLL_STUB_UNWIND_INFO_4 \
"18:" \
- : "=a" (__result), "=c" (ignore1), "=&d" (ignore2), \
+ : "=a" (__ret), "=c" (ignore1), "=&d" (ignore2), \
"=m" (futex), "=S" (ignore3) \
: "0" (0), "1" (id), "m" (futex), "m" (timeout), \
"4" ((int) (private)) \
: "memory"); \
- __result; })
+ __ret; })
#if defined NOT_IN_libc || defined UP
# define __lll_unlock_asm LOCK_INSTR "subl $1, %0\n\t"
@@ -570,15 +570,15 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime)
__attribute__ ((regparm (2))) attribute_hidden;
#define lll_timedwait_tid(tid, abstime) \
({ \
- int __result = 0; \
+ int __ret = 0; \
if (tid != 0) \
{ \
if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) \
- __result = EINVAL; \
+ __ret = EINVAL; \
else \
- __result = __lll_timedwait_tid (&tid, abstime); \
+ __ret = __lll_timedwait_tid (&tid, abstime); \
} \
- __result; })
+ __ret; })
#endif /* !__ASSEMBLER__ */
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
index 0ea67e0ef..d10cd6116 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
@@ -98,7 +98,7 @@ extern int __lll_unlock_wake_private (int *__futex) attribute_hidden;
extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
#define lll_trylock(futex) \
- ({ unsigned char __result; \
+ ({ unsigned char __ret; \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -112,15 +112,15 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
1: mov r1,r15\n\
mov #-1,%0\n\
negc %0,%0"\
- : "=r" (__result) \
+ : "=r" (__ret) \
: "r" (&(futex)), \
"r" (LLL_LOCK_INITIALIZER_LOCKED), \
"r" (LLL_LOCK_INITIALIZER) \
: "r0", "r1", "r2", "t", "memory"); \
- __result; })
+ __ret; })
#define lll_robust_trylock(futex, id) \
- ({ unsigned char __result; \
+ ({ unsigned char __ret; \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -134,15 +134,15 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
1: mov r1,r15\n\
mov #-1,%0\n\
negc %0,%0"\
- : "=r" (__result) \
+ : "=r" (__ret) \
: "r" (&(futex)), \
"r" (id), \
"r" (LLL_LOCK_INITIALIZER) \
: "r0", "r1", "r2", "t", "memory"); \
- __result; })
+ __ret; })
#define lll_cond_trylock(futex) \
- ({ unsigned char __result; \
+ ({ unsigned char __ret; \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -156,15 +156,15 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
1: mov r1,r15\n\
mov #-1,%0\n\
negc %0,%0"\
- : "=r" (__result) \
+ : "=r" (__ret) \
: "r" (&(futex)), \
"r" (LLL_LOCK_INITIALIZER_WAITERS), \
"r" (LLL_LOCK_INITIALIZER) \
: "r0", "r1", "r2", "t", "memory"); \
- __result; })
+ __ret; })
#define lll_lock(futex, private) \
- (void) ({ int __result, *__futex = &(futex); \
+ (void) ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -176,20 +176,20 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
bf 1f\n\
mov.l %1,@%2\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (1), "r" (__futex) \
+ : "=&r" (__ret) : "r" (1), "r" (__futex) \
: "r0", "r1", "t", "memory"); \
- if (__result) \
+ if (__ret) \
{ \
if (__builtin_constant_p (private) \
&& (private) == LLL_PRIVATE) \
- __lll_lock_wait_private (__result, __futex); \
+ __lll_lock_wait_private (__ret, __futex); \
else \
- __lll_lock_wait (__result, __futex, (private)); \
+ __lll_lock_wait (__ret, __futex, (private)); \
} \
})
#define lll_robust_lock(futex, id, private) \
- ({ int __result, *__futex = &(futex); \
+ ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -201,16 +201,16 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
bf 1f\n\
mov.l %1,@%2\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (id), "r" (__futex) \
+ : "=&r" (__ret) : "r" (id), "r" (__futex) \
: "r0", "r1", "t", "memory"); \
- if (__result) \
- __result = __lll_robust_lock_wait (__result, __futex, private); \
- __result; })
+ if (__ret) \
+ __ret = __lll_robust_lock_wait (__ret, __futex, private); \
+ __ret; })
/* Special version of lll_mutex_lock which causes the unlock function to
always wakeup waiters. */
#define lll_cond_lock(futex, private) \
- (void) ({ int __result, *__futex = &(futex); \
+ (void) ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -222,13 +222,13 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
bf 1f\n\
mov.l %1,@%2\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (2), "r" (__futex) \
+ : "=&r" (__ret) : "r" (2), "r" (__futex) \
: "r0", "r1", "t", "memory"); \
- if (__result) \
- __lll_lock_wait (__result, __futex, private); })
+ if (__ret) \
+ __lll_lock_wait (__ret, __futex, private); })
#define lll_robust_cond_lock(futex, id, private) \
- ({ int __result, *__futex = &(futex); \
+ ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -240,14 +240,14 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
bf 1f\n\
mov.l %1,@%2\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (id | FUTEX_WAITERS), "r" (__futex) \
+ : "=&r" (__ret) : "r" (id | FUTEX_WAITERS), "r" (__futex) \
: "r0", "r1", "t", "memory"); \
- if (__result) \
- __result = __lll_robust_lock_wait (__result, __futex, private); \
- __result; })
+ if (__ret) \
+ __ret = __lll_robust_lock_wait (__ret, __futex, private); \
+ __ret; })
#define lll_timedlock(futex, timeout, private) \
- ({ int __result, *__futex = &(futex); \
+ ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -259,14 +259,14 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
bf 1f\n\
mov.l %1,@%2\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (1), "r" (__futex) \
+ : "=&r" (__ret) : "r" (1), "r" (__futex) \
: "r0", "r1", "t", "memory"); \
- if (__result) \
- __result = __lll_timedlock_wait (__result, __futex, timeout, private); \
- __result; })
+ if (__ret) \
+ __ret = __lll_timedlock_wait (__ret, __futex, timeout, private); \
+ __ret; })
#define lll_robust_timedlock(futex, timeout, id, private) \
- ({ int __result, *__futex = &(futex); \
+ ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -278,15 +278,15 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
bf 1f\n\
mov.l %1,@%2\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (id), "r" (__futex) \
+ : "=&r" (__ret) : "r" (id), "r" (__futex) \
: "r0", "r1", "t", "memory"); \
- if (__result) \
- __result = __lll_robust_timedlock_wait (__result, __futex, \
+ if (__ret) \
+ __ret = __lll_robust_timedlock_wait (__ret, __futex, \
timeout, private); \
- __result; })
+ __ret; })
#define lll_unlock(futex, private) \
- (void) ({ int __result, *__futex = &(futex); \
+ (void) ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -296,9 +296,9 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
add #-1,%0\n\
mov.l %0,@%1\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (__futex) \
+ : "=&r" (__ret) : "r" (__futex) \
: "r0", "r1", "memory"); \
- if (__result) \
+ if (__ret) \
{ \
if (__builtin_constant_p (private) \
&& (private) == LLL_PRIVATE) \
@@ -309,7 +309,7 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
})
#define lll_robust_unlock(futex, private) \
- (void) ({ int __result, *__futex = &(futex); \
+ (void) ({ int __ret, *__futex = &(futex); \
__asm__ __volatile__ ("\
.align 2\n\
mova 1f,r0\n\
@@ -319,9 +319,9 @@ extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden;
and %2,%0\n\
mov.l %0,@%1\n\
1: mov r1,r15"\
- : "=&r" (__result) : "r" (__futex), "r" (FUTEX_WAITERS) \
+ : "=&r" (__ret) : "r" (__futex), "r" (FUTEX_WAITERS) \
: "r0", "r1", "memory"); \
- if (__result) \
+ if (__ret) \
__lll_unlock_wake (__futex, private); })
#define lll_robust_dead(futex, private) \
@@ -405,15 +405,15 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime)
attribute_hidden;
#define lll_timedwait_tid(tid, abstime) \
({ \
- int __result = 0; \
+ int __ret = 0; \
if (tid != 0) \
{ \
if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) \
- __result = EINVAL; \
+ __ret = EINVAL; \
else \
- __result = __lll_timedwait_tid (&tid, abstime); \
+ __ret = __lll_timedwait_tid (&tid, abstime); \
} \
- __result; })
+ __ret; })
#endif /* !__ASSEMBLER__ */
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
index ffab81eb5..afc40133e 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
@@ -332,7 +332,7 @@ LLL_STUB_UNWIND_INFO_END
}) \
#define lll_robust_lock(futex, id, private) \
- ({ int result, ignore1, ignore2; \
+ ({ int __ret, ignore1, ignore2; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %4, %2\n\t" \
"jnz 1f\n\t" \
".subsection 1\n\t" \
@@ -348,10 +348,10 @@ LLL_STUB_UNWIND_INFO_END
LLL_STUB_UNWIND_INFO_5 \
"24:" \
: "=S" (ignore1), "=D" (ignore2), "=m" (futex), \
- "=a" (result) \
+ "=a" (__ret) \
: "1" (id), "m" (futex), "3" (0), "0" (private) \
: "cx", "r11", "cc", "memory"); \
- result; })
+ __ret; })
#define lll_cond_lock(futex, private) \
(void) \
@@ -377,7 +377,7 @@ LLL_STUB_UNWIND_INFO_END
})
#define lll_robust_cond_lock(futex, id, private) \
- ({ int result, ignore1, ignore2; \
+ ({ int __ret, ignore1, ignore2; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %4, %2\n\t" \
"jnz 1f\n\t" \
".subsection 1\n\t" \
@@ -393,14 +393,14 @@ LLL_STUB_UNWIND_INFO_END
LLL_STUB_UNWIND_INFO_5 \
"24:" \
: "=S" (ignore1), "=D" (ignore2), "=m" (futex), \
- "=a" (result) \
+ "=a" (__ret) \
: "1" (id | FUTEX_WAITERS), "m" (futex), "3" (0), \
"0" (private) \
: "cx", "r11", "cc", "memory"); \
- result; })
+ __ret; })
#define lll_timedlock(futex, timeout, private) \
- ({ int result, ignore1, ignore2, ignore3; \
+ ({ int __ret, ignore1, ignore2, ignore3; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %1, %4\n\t" \
"jnz 1f\n\t" \
".subsection 1\n\t" \
@@ -416,15 +416,15 @@ LLL_STUB_UNWIND_INFO_END
".previous\n" \
LLL_STUB_UNWIND_INFO_6 \
"24:" \
- : "=a" (result), "=D" (ignore1), "=S" (ignore2), \
+ : "=a" (__ret), "=D" (ignore1), "=S" (ignore2), \
"=&d" (ignore3), "=m" (futex) \
: "0" (0), "1" (1), "m" (futex), "m" (timeout), \
"2" (private) \
: "memory", "cx", "cc", "r10", "r11"); \
- result; })
+ __ret; })
#define lll_robust_timedlock(futex, timeout, id, private) \
- ({ int result, ignore1, ignore2, ignore3; \
+ ({ int __ret, ignore1, ignore2, ignore3; \
__asm__ __volatile__ (LOCK_INSTR "cmpxchgl %1, %4\n\t" \
"jnz 1f\n\t" \
".subsection 1\n\t" \
@@ -440,12 +440,12 @@ LLL_STUB_UNWIND_INFO_END
".previous\n" \
LLL_STUB_UNWIND_INFO_6 \
"24:" \
- : "=a" (result), "=D" (ignore1), "=S" (ignore2), \
+ : "=a" (__ret), "=D" (ignore1), "=S" (ignore2), \
"=&d" (ignore3), "=m" (futex) \
: "0" (0), "1" (id), "m" (futex), "m" (timeout), \
"2" (private) \
: "memory", "cx", "cc", "r10", "r11"); \
- result; })
+ __ret; })
#if defined NOT_IN_libc || defined UP
# define __lll_unlock_asm_start LOCK_INSTR "decl %0\n\t" \
@@ -583,15 +583,15 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime)
attribute_hidden;
#define lll_timedwait_tid(tid, abstime) \
({ \
- int __result = 0; \
+ int __ret = 0; \
if (tid != 0) \
{ \
if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) \
- __result = EINVAL; \
+ __ret = EINVAL; \
else \
- __result = __lll_timedwait_tid (&tid, abstime); \
+ __ret = __lll_timedwait_tid (&tid, abstime); \
} \
- __result; })
+ __ret; })
#endif /* !__ASSEMBLER__ */