diff options
| author | "Steven J. Hill" <sjhill@realitydiluted.com> | 2007-11-13 04:05:31 +0000 | 
|---|---|---|
| committer | "Steven J. Hill" <sjhill@realitydiluted.com> | 2007-11-13 04:05:31 +0000 | 
| commit | 5efcf07228a4532074784c85689dddcbb6b56c77 (patch) | |
| tree | 5991b8c3ee489b7c34221390007e3bd67a689d41 /libpthread/nptl/sysdeps/sh | |
| parent | 18b48698abe6cf957ec6ee5fa921b1a12f9bf914 (diff) | |
| download | uClibc-alpine-5efcf07228a4532074784c85689dddcbb6b56c77.tar.bz2 uClibc-alpine-5efcf07228a4532074784c85689dddcbb6b56c77.tar.xz  | |
Begin merging of SuperH NPTL port. See the mailing list for further information.
Diffstat (limited to 'libpthread/nptl/sysdeps/sh')
| -rw-r--r-- | libpthread/nptl/sysdeps/sh/Makefile.arch | 52 | ||||
| -rw-r--r-- | libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h | 2 | ||||
| -rw-r--r-- | libpthread/nptl/sysdeps/sh/sysdep.h | 82 | ||||
| -rw-r--r-- | libpthread/nptl/sysdeps/sh/tls.h | 9 | 
4 files changed, 140 insertions, 5 deletions
diff --git a/libpthread/nptl/sysdeps/sh/Makefile.arch b/libpthread/nptl/sysdeps/sh/Makefile.arch new file mode 100644 index 000000000..f0669dc3d --- /dev/null +++ b/libpthread/nptl/sysdeps/sh/Makefile.arch @@ -0,0 +1,52 @@ +# Makefile for uClibc NPTL +# +# Copyright (C) 2005 Steven J. Hill <sjhill@uclibc.org> +# +# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +# + +libpthread_SSRC = pthread_spin_unlock.S pthread_spin_trylock.S +libpthread_CSRC = pthread_spin_lock.c pthread_spin_init.c + +ASFLAGS-pthread_spin_unlock.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1 +ASFLAGS-pthread_spin_trylock.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1 + +CFLAGS-pthread_spin_lock.c += -D_GNU_SOURCE + +CFLAGS-sh = $(SSP_ALL_CFLAGS) +#CFLAGS:=$(CFLAGS:-O1=-O2) + +PTHREAD_ARCH_DIR := $(top_srcdir)libpthread/nptl/sysdeps/sh +PTHREAD_ARCH_OUT := $(top_builddir)libpthread/nptl/sysdeps/sh +PTHREAD_ARCH_OBJ := $(patsubst %.S,$(PTHREAD_ARCH_OUT)/%.o,$(libpthread_SSRC)) +PTHREAD_ARCH_OBJ += $(patsubst %.c,$(PTHREAD_ARCH_OUT)/%.o,$(libpthread_CSRC)) + +libpthread-a-y += $(PTHREAD_ARCH_OBJ) +libpthread-so-y += $(PTHREAD_ARCH_OBJ:.o=.oS) + +libpthread-nomulti-y += $(PTHREAD_ARCH_OBJ) + +objclean-y += nptl_arch_objclean +headers_clean-y += nptl_arch_headers_clean + +# +# Create 'tcb-offsets.h' header file. +# +CFLAGS-tcb-offsets.c = -S + +$(PTHREAD_ARCH_OUT)/tcb-offsets.c: $(PTHREAD_ARCH_DIR)/tcb-offsets.sym +	awk -f $(top_srcdir)extra/scripts/gen-as-const.awk $< > $@ + +$(PTHREAD_ARCH_OUT)/tcb-offsets.s: $(PTHREAD_ARCH_OUT)/tcb-offsets.c +	$(compile.c) + +nptl_arch_headers: $(PTHREAD_ARCH_OUT)/tcb-offsets.s +	@sed -n "s/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$\/#define \1 \2/p" $< > $(PTHREAD_ARCH_OUT)/tcb-offsets.h + +nptl_arch_headers_clean: +	$(RM) $(PTHREAD_ARCH_OUT)/tcb-offsets.c		\ +	      $(PTHREAD_ARCH_OUT)/tcb-offsets.s		\ +	      $(PTHREAD_ARCH_OUT)/tcb-offsets.h + +nptl_arch_objclean: +	$(RM) $(PTHREAD_ARCH_OUT)/*.{o,os,oS} diff --git a/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h b/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h index cf6d25f04..41c3c3984 100644 --- a/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h +++ b/libpthread/nptl/sysdeps/sh/jmpbuf-unwind.h @@ -27,5 +27,7 @@  #define _JMPBUF_UNWINDS_ADJ(jmpbuf, address, adj) \    ((uintptr_t) (address) - (adj) < (uintptr_t) (jmpbuf)[0].__regs[7] - (adj)) +extern __typeof(longjmp) __libc_longjmp attribute_noreturn; +  /* We use the normal lobngjmp for unwinding.  */  #define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/libpthread/nptl/sysdeps/sh/sysdep.h b/libpthread/nptl/sysdeps/sh/sysdep.h new file mode 100644 index 000000000..4dd6af47b --- /dev/null +++ b/libpthread/nptl/sysdeps/sh/sysdep.h @@ -0,0 +1,82 @@ +/* Assembler macros for SH. +   Copyright (C) 1999, 2000, 2005 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.  */ + +#include <sysdeps/generic/sysdep.h> + +#include <features.h> +#include <libc-internal.h> + +#ifdef	__ASSEMBLER__ + +/* Syntactic details of assembler.  */ + +#define ALIGNARG(log2) log2 +/* For ELF we need the `.type' directive to make shared libs work right.  */ +#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,@##typearg; +#define ASM_SIZE_DIRECTIVE(name) .size name,.-name + +#ifdef SHARED +#define PLTJMP(_x)	_x##@PLT +#else +#define PLTJMP(_x)	_x +#endif + +/* Define an entry point visible from C.  */ +#define	ENTRY(name)							      \ +  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name);				      \ +  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function)			      \ +  .align ALIGNARG(5);							      \ +  C_LABEL(name)								      \ +  cfi_startproc;							      \ +  CALL_MCOUNT + +#undef	END +#define END(name)							      \ +  cfi_endproc;								      \ +  ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name)) + +/* If compiled for profiling, call `mcount' at the start of each function.  */ +#ifdef	PROF +#define CALL_MCOUNT					\ +	mov.l	1f,r1;					\ +	sts.l	pr,@-r15;				\ +	cfi_adjust_cfa_offset (4);			\ +	cfi_rel_offset (pr, 0);				\ +	mova	2f,r0;					\ +	jmp	@r1;					\ +	 lds	r0,pr;					\ +	.align	2;					\ +1:	.long	mcount;					\ +2:	lds.l	@r15+,pr;				\ +	cfi_adjust_cfa_offset (-4);			\ +	cfi_restore (pr) + +#else +#define CALL_MCOUNT		/* Do nothing.  */ +#endif + +#ifdef	NO_UNDERSCORES +/* Since C identifiers are not normally prefixed with an underscore +   on this system, the asm identifier `syscall_error' intrudes on the +   C name space.  Make sure we use an innocuous name.  */ +#define	syscall_error	__syscall_error +#define mcount		_mcount +#endif + +#endif	/* __ASSEMBLER__ */ diff --git a/libpthread/nptl/sysdeps/sh/tls.h b/libpthread/nptl/sysdeps/sh/tls.h index cf9827a2a..258e6ffb5 100644 --- a/libpthread/nptl/sysdeps/sh/tls.h +++ b/libpthread/nptl/sysdeps/sh/tls.h @@ -50,10 +50,9 @@ typedef struct  /* We require TLS support in the tools.  */ -#ifndef HAVE_TLS_SUPPORT -# error "TLS support is required." -#endif - +#define HAVE_TLS_SUPPORT +#define HAVE___THREAD   1 +#define HAVE_TLS_MODEL_ATTRIBUTE	1  /* Signal that TLS support is available.  */  # define USE_TLS	1 @@ -81,7 +80,7 @@ typedef struct  # define TLS_DTV_AT_TP	1  /* Get the thread descriptor definition.  */ -# include <nptl/descr.h> +# include <descr.h>  /* Install the dtv pointer.  The pointer passed is to the element with     index -1 which contain the length.  */  | 
