svn commit: branches/uClibc-nptl/libc: misc/pthread sysdeps/linux/common sysdep etc...
carmelo at uclibc.org
carmelo at uclibc.org
Wed Nov 21 17:45:57 UTC 2007
Author: carmelo
Date: 2007-11-21 09:45:53 -0800 (Wed, 21 Nov 2007)
New Revision: 20466
Log:
Added some missing files:
creat.c: to provide creat function
longjmp.c: to provide longjmp implementation for sh4
tsd.c: to provide implementation of __libc_dl_error_tsd
Signed-off-by: Carmelo Amoroso <carmelo.amoroso at st.com>
Added:
branches/uClibc-nptl/libc/misc/pthread/tsd.c
branches/uClibc-nptl/libc/sysdeps/linux/common/creat.c
branches/uClibc-nptl/libc/sysdeps/linux/sh/longjmp.c
Changeset:
Added: branches/uClibc-nptl/libc/misc/pthread/tsd.c
===================================================================
--- branches/uClibc-nptl/libc/misc/pthread/tsd.c (rev 0)
+++ branches/uClibc-nptl/libc/misc/pthread/tsd.c 2007-11-21 17:45:53 UTC (rev 20466)
@@ -0,0 +1,11 @@
+/* libpthread sets _dl_error_catch_tsd to point to this function.
+ We define it here instead of in libpthread so t here instead of in libpthread so that it doesn't
+ need to have a TLS segment of its own just for this one pointer. */
+
+void ** __attribute__ ((const))
+__libc_dl_error_tsd (void)
+{
+ static __thread void *data __attribute__ ((tls_model ("initial-exec")));
+ return &data;
+}
+
Added: branches/uClibc-nptl/libc/sysdeps/linux/common/creat.c
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/common/creat.c (rev 0)
+++ branches/uClibc-nptl/libc/sysdeps/linux/common/creat.c 2007-11-21 17:45:53 UTC (rev 20466)
@@ -0,0 +1,16 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * open() for uClibc
+ *
+ * Copyright (C) 2000-2006 Erik Andersen <andersen at uclibc.org>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+#include <fcntl.h>
+
+extern int __libc_open(const char *file, int flags, ...);
+
+int creat(const char *file, mode_t mode)
+{
+ return __libc_open(file, O_WRONLY | O_CREAT | O_TRUNC, mode);
+}
Added: branches/uClibc-nptl/libc/sysdeps/linux/sh/longjmp.c
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/sh/longjmp.c (rev 0)
+++ branches/uClibc-nptl/libc/sysdeps/linux/sh/longjmp.c 2007-11-21 17:45:53 UTC (rev 20466)
@@ -0,0 +1,56 @@
+/* Copyright (C) 1991, 92, 94, 95, 97, 98, 2000 Free Software Foundation, Inc.
+ Copyright (C) 2001 Hewlett-Packard Australia
+
+ This program is free software; you can redistribute it and/or modify it under
+ the terms of the GNU Library General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option) any
+ later version.
+
+ This program 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 Library General Public License for more
+ details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this program; if not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ Derived in part from the Linux-8086 C library, the GNU C Library, and several
+ other sundry sources. Files within this library are copyright by their
+ respective copyright holders.
+*/
+
+#include <stddef.h>
+#include <setjmp.h>
+#include <signal.h>
+
+libc_hidden_proto(sigprocmask)
+
+extern int __longjmp(char *env, int val);
+libc_hidden_proto(__longjmp)
+
+extern void _longjmp_unwind (jmp_buf env, int val);
+
+
+/* Set the signal mask to the one specified in ENV, and jump
+ to the position specified in ENV, causing the setjmp
+ call there to return VAL, or 1 if VAL is 0. */
+void __libc_siglongjmp (sigjmp_buf env, int val)
+{
+ /* Perform any cleanups needed by the frames being unwound. */
+
+ _longjmp_unwind (env, val);
+
+ if (env[0].__mask_was_saved)
+ /* Restore the saved signal mask. */
+ (void) sigprocmask (SIG_SETMASK, &env[0].__saved_mask,
+ (sigset_t *) NULL);
+
+ /* Call the machine-dependent function to restore machine state. */
+ __longjmp ((char *) env[0].__jmpbuf, val ?: 1);
+}
+
+__asm__(".weak longjmp; longjmp = __libc_siglongjmp");
+__asm__(".weak _longjmp; _longjmp = __libc_siglongjmp");
+__asm__(".weak siglongjmp; siglongjmp = __libc_siglongjmp");
+strong_alias(__libc_siglongjmp, __libc_longjmp)
More information about the uClibc-cvs
mailing list