1004 lines
36 KiB
Diff
1004 lines
36 KiB
Diff
2008-05-08 David S. Miller <davem@davemloft.net>
|
|
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S: Use
|
|
HIDDEN_JUMPTARGET.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
|
|
(__SYSCALL_CLOBBERS): Remove %g* registers.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
|
|
(__SYSCALL_CLOBBERS): Likewise.
|
|
|
|
2008-05-21 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
|
|
(CALL_ERRNO_LOCATION): Define.
|
|
(__SYSCALL_STRING, __CLONE_SYSCALL_STRING): Use it.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
|
|
(CALL_ERRNO_LOCATION): Define.
|
|
(__SYSCALL_STRING, __CLONE_SYSCALL_STRING): Use it.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc64/brk.S (__brk): Use
|
|
HIDDEN_JUMPTARGET for __errno_location call in libc.so.
|
|
|
|
2008-05-20 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h
|
|
(FIRST_FRAME_POINTER): Define.
|
|
|
|
2008-05-19 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
* elf/soinit.c (__EH_FRAME_BEGIN__): Remove.
|
|
|
|
2008-05-09 David S. Miller <davem@davemloft.net>
|
|
|
|
* sysdeps/sparc/sparc64/backtrace.c: New file.
|
|
|
|
2008-05-14 David S. Miller <davem@davemloft.net>
|
|
|
|
* sysdeps/sparc/machine-gmon.h: New file.
|
|
* sysdeps/sparc/sparc-mcount.S: Likewise.
|
|
* sysdeps/sparc/Makefile: Add sparc-mcount target to
|
|
sysdep_routines in gmon directory.
|
|
|
|
2008-05-08 David S. Miller <davem@davemloft.net>
|
|
|
|
* misc/truncate64.c (truncate64): Use __truncate not truncate.
|
|
|
|
* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee751_j0l): Use __finitel.
|
|
(__ieee754_y0l): Likewise.
|
|
* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_j1l): Likewise.
|
|
(__ieee754_y1l): Likewise.
|
|
* sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Use __ldexpl.
|
|
* sysdeps/ieee754/ldbl-128/s_log1pl.c: Kill bogus prototypes for
|
|
frexpl and ldexpl. math_private.h provides them and the latter
|
|
is not even used.
|
|
(__log1pl): Use __frexpl.
|
|
|
|
2008-05-05 David S. Miller <davem@davemloft.net>
|
|
|
|
* sysdeps/sparc/sparc32/Makefile: Use -mcpu=v7 for initfini.s build.
|
|
* sysdeps/sparc/sparc64/Makefile: Use -mcpu=v9 for initfini.s build.
|
|
|
|
2008-05-01 David S. Miller <davem@davemloft.net>
|
|
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym: New file.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/Makefile [$(subdir) = stdlib]:
|
|
(gen-as-const-headers): Add it.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S: New file.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c: Likewise.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S: Likewise.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S: Likewise.
|
|
|
|
* sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S: Add support for
|
|
six system call parameters.
|
|
* sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S: Likewise.
|
|
|
|
nptl/
|
|
2008-05-20 Jakub Jelinek <jakub@redhat.com>
|
|
David S. Miller <davem@davemloft.net>
|
|
|
|
* sysdeps/unix/sysv/linux/sparc/sparc64/Makefile: New file.
|
|
|
|
--- libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile 20 May 2008 07:42:00 -0000 1.1
|
|
@@ -0,0 +1,4 @@
|
|
+ifeq ($(subdir),nptl)
|
|
+CFLAGS-pause.c += -fexceptions
|
|
+CFLAGS-sigsuspend.c += -fexceptions
|
|
+endif
|
|
--- libc/sysdeps/sparc/Makefile 18 Jan 2006 23:25:05 -0000 1.19
|
|
+++ libc/sysdeps/sparc/Makefile 20 May 2008 07:48:50 -0000 1.20
|
|
@@ -1,6 +1,10 @@
|
|
# The Sparc `long double' is a distinct type we support.
|
|
long-double-fcts = yes
|
|
|
|
+ifeq ($(subdir),gmon)
|
|
+sysdep_routines += sparc-mcount
|
|
+endif
|
|
+
|
|
ifeq ($(subdir),db2)
|
|
CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_SPARC_GCC=1
|
|
endif
|
|
--- libc/sysdeps/sparc/machine-gmon.h 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/sparc/machine-gmon.h 20 May 2008 07:48:50 -0000 1.1
|
|
@@ -0,0 +1,33 @@
|
|
+/* sparc-specific implementation of profiling support.
|
|
+ Copyright (C) 2008 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David S. Miller <davem@davemloft.net>, 2008
|
|
+
|
|
+ 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 <sysdep.h>
|
|
+
|
|
+/* We must not pollute the global namespace. */
|
|
+#define mcount_internal __mcount_internal
|
|
+
|
|
+extern void mcount_internal (u_long frompc, u_long selfpc) internal_function;
|
|
+
|
|
+#define _MCOUNT_DECL(frompc, selfpc) \
|
|
+void internal_function mcount_internal (u_long frompc, u_long selfpc)
|
|
+
|
|
+/* Define MCOUNT as empty since we have the implementation in another
|
|
+ file. */
|
|
+#define MCOUNT
|
|
--- libc/sysdeps/sparc/sparc-mcount.S 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/sparc/sparc-mcount.S 20 May 2008 07:48:50 -0000 1.1
|
|
@@ -0,0 +1,29 @@
|
|
+/* sparc-specific implemetation of profiling support.
|
|
+ Copyright (C) 2008 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David S. Miller <davem@davemloft.net>, 2008.
|
|
+
|
|
+ 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 <sysdep.h>
|
|
+
|
|
+ENTRY(_mcount)
|
|
+ mov %i7, %o0
|
|
+ ba __mcount_internal
|
|
+ mov %o7, %o1
|
|
+END(_mcount)
|
|
+
|
|
+weak_alias (_mcount, mcount)
|
|
--- libc/sysdeps/sparc/sparc32/Makefile 6 Jul 2001 04:56:04 -0000 1.5
|
|
+++ libc/sysdeps/sparc/sparc32/Makefile 6 May 2008 09:13:49 -0000 1.6
|
|
@@ -20,6 +20,10 @@ ifeq ($(subdir),gnulib)
|
|
sysdep_routines = dotmul umul $(divrem) alloca
|
|
endif # gnulib
|
|
|
|
+ifeq ($(subdir),csu)
|
|
+CFLAGS-initfini.s += -mcpu=v7
|
|
+endif
|
|
+
|
|
# We distribute these files, even though they are generated,
|
|
# so as to avoid the need for a functioning m4 to build the library.
|
|
divrem := sdiv udiv rem urem
|
|
--- libc/sysdeps/sparc/sparc64/Makefile 18 Jan 2006 23:25:05 -0000 1.8
|
|
+++ libc/sysdeps/sparc/sparc64/Makefile 6 May 2008 09:13:49 -0000 1.9
|
|
@@ -2,3 +2,7 @@ ifeq ($(subdir),csu)
|
|
sysdep_routines += hp-timing
|
|
elide-routines.os += hp-timing
|
|
endif
|
|
+
|
|
+ifeq ($(subdir),csu)
|
|
+CFLAGS-initfini.s += -mcpu=v9
|
|
+endif
|
|
--- libc/sysdeps/sparc/sparc64/backtrace.c 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/sparc/sparc64/backtrace.c 20 May 2008 19:23:00 -0000 1.1
|
|
@@ -0,0 +1,58 @@
|
|
+/* Return backtrace of current program state.
|
|
+ Copyright (C) 2008 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David S. Miller <davem@davemloft.net>
|
|
+
|
|
+ The GNU C Library 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.
|
|
+
|
|
+ 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
|
|
+ Library General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Library General Public
|
|
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
+ Boston, MA 02111-1307, USA. */
|
|
+
|
|
+#include <execinfo.h>
|
|
+#include <stddef.h>
|
|
+#include <bp-checks.h>
|
|
+#include <sysdep.h>
|
|
+
|
|
+struct layout
|
|
+{
|
|
+ unsigned long locals[8];
|
|
+ unsigned long ins[6];
|
|
+ unsigned long next;
|
|
+ void *__unbounded return_address;
|
|
+};
|
|
+
|
|
+int
|
|
+__backtrace (void **array, int size)
|
|
+{
|
|
+ struct layout *current;
|
|
+ unsigned long fp;
|
|
+ int count;
|
|
+
|
|
+ asm volatile ("flushw");
|
|
+ asm volatile ("mov %%fp, %0" : "=r"(fp));
|
|
+ current = (struct layout *__unbounded) (fp + STACK_BIAS);
|
|
+ current = BOUNDED_1 (current);
|
|
+
|
|
+ for (count = 0; count < size; count++)
|
|
+ {
|
|
+ array[count] = current->return_address;
|
|
+ if (!current->next)
|
|
+ break;
|
|
+ current = (struct layout *__unbounded) (current->next + STACK_BIAS);
|
|
+ current = BOUNDED_1 (current);
|
|
+ }
|
|
+
|
|
+ return count;
|
|
+}
|
|
+weak_alias (__backtrace, backtrace)
|
|
+libc_hidden_def (__backtrace)
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile 1 Feb 2006 03:00:30 -0000 1.13
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile 5 May 2008 09:34:18 -0000 1.14
|
|
@@ -2,6 +2,10 @@ asm-CPPFLAGS = -D__ASSEMBLY__
|
|
ASFLAGS-.os += -fPIC
|
|
LD += -melf32_sparc
|
|
|
|
+ifeq ($(subdir),stdlib)
|
|
+gen-as-const-headers += ucontext_i.sym
|
|
+endif
|
|
+
|
|
# When I get this to work, this is the right thing
|
|
ifeq ($(subdir),elf)
|
|
CFLAGS-rtld.c += -mcpu=v8
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S 5 May 2008 09:34:18 -0000 1.1
|
|
@@ -0,0 +1,85 @@
|
|
+/* Save current context.
|
|
+ Copyright (C) 2008 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David S. Miller <davem@davemloft.net>, 2008.
|
|
+
|
|
+ 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 <sysdep.h>
|
|
+
|
|
+#include "ucontext_i.h"
|
|
+
|
|
+/* int __getcontext (ucontext_t *ucp)
|
|
+
|
|
+ Saves the machine context in UCP such that when it is activated,
|
|
+ it appears as if __getcontext() returned again.
|
|
+
|
|
+ This implementation is intended to be used for *synchronous* context
|
|
+ switches only. Therefore, it does not have to save anything
|
|
+ other than the PRESERVED state. */
|
|
+
|
|
+
|
|
+ENTRY(__getcontext)
|
|
+ save %sp, -112, %sp
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PSR]
|
|
+
|
|
+ /* In reality, we only use the GREG_PC value when setting
|
|
+ or swapping contexts. But we fill in NPC for completeness. */
|
|
+ add %i7, 8, %o0
|
|
+ st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PC]
|
|
+ add %o0, 4, %o0
|
|
+ st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_NPC]
|
|
+
|
|
+ rd %y, %o1
|
|
+ st %o1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y]
|
|
+
|
|
+ st %g1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G1]
|
|
+ st %g2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2]
|
|
+ st %g3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3]
|
|
+ st %g4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4]
|
|
+ st %g5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5]
|
|
+ st %g6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6]
|
|
+ st %g7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7]
|
|
+
|
|
+ mov SIG_BLOCK, %o0
|
|
+ clr %o1
|
|
+ add %i0, UC_SIGMASK, %o2
|
|
+ mov 8, %o3
|
|
+ mov __NR_rt_sigprocmask, %g1
|
|
+ ta 0x10
|
|
+
|
|
+ /* Zero, success, return value. */
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O0]
|
|
+ st %i1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1]
|
|
+ st %i2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2]
|
|
+ st %i3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3]
|
|
+ st %i4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4]
|
|
+ st %i5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5]
|
|
+ st %i6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6]
|
|
+ st %i7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O7]
|
|
+
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_GWINS]
|
|
+
|
|
+ /* Do not save FPU state, it is volatile across calls. */
|
|
+ stb %g0, [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN]
|
|
+
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_ID]
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_PTR]
|
|
+ jmpl %i7 + 8, %g0
|
|
+ restore %g0, %g0, %o0
|
|
+END(__getcontext)
|
|
+
|
|
+weak_alias (__getcontext, getcontext)
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c 5 May 2008 09:34:18 -0000 1.1
|
|
@@ -0,0 +1,93 @@
|
|
+/* Create new context.
|
|
+ Copyright (C) 2008 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David S. Miller <davem@davemloft.net>, 2008.
|
|
+
|
|
+ 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 <sysdep.h>
|
|
+#include <stdarg.h>
|
|
+#include <stdint.h>
|
|
+#include <ucontext.h>
|
|
+
|
|
+/* Sets up the outgoing arguments and the program counter for a user
|
|
+ context for the requested function call.
|
|
+
|
|
+ Returning to the correct parent context is pretty simple on
|
|
+ Sparc. We only need to link up the register windows correctly.
|
|
+ Since global registers are clobbered by calls, we need not be
|
|
+ concernred about those, and thus is all could be worked out without
|
|
+ using a trampoline.
|
|
+
|
|
+ Except that we must deal with the signal mask, thus a trampoline
|
|
+ is unavoidable. 32-bit stackframe layout:
|
|
+ +-----------------------------------------+
|
|
+ | 7th and further parameters |
|
|
+ +-----------------------------------------+
|
|
+ | backup storage for initial 6 parameters |
|
|
+ +-----------------------------------------+
|
|
+ | struct return pointer |
|
|
+ +-----------------------------------------+
|
|
+ | 8 incoming registers |
|
|
+ +-----------------------------------------+
|
|
+ | 8 local registers |
|
|
+ %sp --> +-----------------------------------------+
|
|
+
|
|
+*/
|
|
+
|
|
+void
|
|
+__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
|
|
+{
|
|
+ extern void __start_context (void);
|
|
+ unsigned long int *sp;
|
|
+ va_list ap;
|
|
+ int i;
|
|
+
|
|
+ sp = (unsigned long int *) (ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
|
|
+ sp -= 16 + 7 + argc;
|
|
+ sp = (unsigned long int *) (((uintptr_t) sp) & ~(8 - 1));
|
|
+
|
|
+ for (i = 0; i < 8; i++)
|
|
+ sp[i + 8] = ucp->uc_mcontext.gregs[REG_O0 + i];
|
|
+
|
|
+ /* The struct return pointer is essentially unused, so we can
|
|
+ place the link there. */
|
|
+ sp[16] = (unsigned long int) ucp->uc_link;
|
|
+
|
|
+ va_start (ap, argc);
|
|
+
|
|
+ /* Fill in outgoing arguments, including those which will
|
|
+ end up being passed on the stack. */
|
|
+ for (i = 0; i < argc; i++)
|
|
+ {
|
|
+ unsigned long int arg = va_arg (ap, unsigned long int);
|
|
+ if (i < 6)
|
|
+ ucp->uc_mcontext.gregs[REG_O0 + i] = arg;
|
|
+ else
|
|
+ sp[i + 23] = arg;
|
|
+ }
|
|
+
|
|
+ va_end (ap);
|
|
+
|
|
+ ucp->uc_mcontext.gregs[REG_O6] = (unsigned long int) sp;
|
|
+
|
|
+ ucp->uc_mcontext.gregs[REG_O7] = ((unsigned long int) __start_context) - 8;
|
|
+
|
|
+ ucp->uc_mcontext.gregs[REG_PC] = (unsigned long int) func;
|
|
+ ucp->uc_mcontext.gregs[REG_nPC] = ucp->uc_mcontext.gregs[REG_PC] + 4;
|
|
+}
|
|
+
|
|
+weak_alias (__makecontext, makecontext)
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S 21 May 2008 09:29:07 -0000 1.2
|
|
@@ -0,0 +1,119 @@
|
|
+/* Install given context.
|
|
+ Copyright (C) 2008 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David S. Miller <davem@davemloft.net>, 2008.
|
|
+
|
|
+ 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 <sysdep.h>
|
|
+#include <sys/trap.h>
|
|
+
|
|
+#include "ucontext_i.h"
|
|
+
|
|
+
|
|
+/* int __setcontext (const ucontext_t *ucp)
|
|
+
|
|
+ Restores the machine context in UCP and thereby resumes execution
|
|
+ in that context.
|
|
+
|
|
+ This implementation is intended to be used for *synchronous* context
|
|
+ switches only. Therefore, it does not have to restore anything
|
|
+ other than the PRESERVED state. */
|
|
+
|
|
+ENTRY(__setcontext)
|
|
+ save %sp, -112, %sp
|
|
+
|
|
+ mov SIG_SETMASK, %o0
|
|
+ add %i0, UC_SIGMASK, %o1
|
|
+ clr %o2
|
|
+ mov 8, %o3
|
|
+ mov __NR_rt_sigprocmask, %g1
|
|
+ ta 0x10
|
|
+
|
|
+ /* This is a bit on the expensive side, and we could optimize
|
|
+ the unwind similar to how the 32-bit sparc longjmp code
|
|
+ does if performance of this routine really matters. */
|
|
+ ta ST_FLUSH_WINDOWS
|
|
+
|
|
+ ldub [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN], %g1
|
|
+ cmp %g1, 0
|
|
+ be 1f
|
|
+ nop
|
|
+ ld [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_FSR], %fsr
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D0], %f0
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D2], %f2
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D4], %f4
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D6], %f6
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D8], %f8
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D10], %f10
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D12], %f12
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D14], %f14
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D16], %f16
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D18], %f18
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D20], %f20
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D22], %f22
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D24], %f24
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D26], %f26
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D28], %f28
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D30], %f30
|
|
+1:
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y], %g1
|
|
+ wr %g1, 0x0, %y
|
|
+
|
|
+ /* We specifically do not restore %g1 since we need it here as
|
|
+ a temporary. */
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2], %g2
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3], %g3
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4], %g4
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5], %g5
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6], %g6
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7], %g7
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1], %i1
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2], %i2
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3], %i3
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4], %i4
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5], %i5
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6], %i6
|
|
+ restore
|
|
+ ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O7], %o7
|
|
+ ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_PC], %g1
|
|
+ jmpl %g1, %g0
|
|
+ ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O0], %o0
|
|
+END(__setcontext)
|
|
+
|
|
+weak_alias (__setcontext, setcontext)
|
|
+
|
|
+/* This is the helper code which gets called if a function which is
|
|
+ registered with 'makecontext' returns. In this case we have to
|
|
+ install the context listed in the uc_link element of the context
|
|
+ 'makecontext' manipulated at the time of the 'makecontext' call.
|
|
+ If the pointer is NULL the process must terminate. */
|
|
+
|
|
+ENTRY(__start_context)
|
|
+ ld [%sp + (16 * 4)], %g1
|
|
+ cmp %g1, 0
|
|
+ be,a 1f
|
|
+ clr %o0
|
|
+ call __setcontext
|
|
+ mov %g1, %o0
|
|
+ /* If this returns (which can happen if the syscall fails) we'll
|
|
+ exit the program with the return error value (-1). */
|
|
+1: call HIDDEN_JUMPTARGET(exit)
|
|
+ nop
|
|
+ /* The 'exit' call should never return. In case it does cause
|
|
+ the process to terminate. */
|
|
+ unimp
|
|
+END(__start_context)
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h 6 Jul 2001 04:56:21 -0000 1.7
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h 20 May 2008 19:23:00 -0000 1.8
|
|
@@ -20,6 +20,9 @@
|
|
#define SIGCONTEXT struct sigcontext *
|
|
#define SIGCONTEXT_EXTRA_ARGS
|
|
#define GET_PC(__ctx) ((void *) ((__ctx)->si_regs.pc))
|
|
+#define FIRST_FRAME_POINTER \
|
|
+ ({ void *ret; \
|
|
+ asm volatile ("ta 3; add %%fp, 56, %0" : "=r" (ret)); ret; })
|
|
#define ADVANCE_STACK_FRAME(__next) \
|
|
((void *) (((unsigned *)(__next))+14))
|
|
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S 5 May 2008 09:34:18 -0000 1.1
|
|
@@ -0,0 +1,119 @@
|
|
+/* Save current context and install the given one.
|
|
+ Copyright (C) 2008 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David S. Miller <davem@davemloft.net>, 2008.
|
|
+
|
|
+ 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 <sysdep.h>
|
|
+#include <sys/trap.h>
|
|
+
|
|
+#include "ucontext_i.h"
|
|
+
|
|
+
|
|
+/* int __swapcontext (ucontext_t *oucp, const ucontext_t *ucp);
|
|
+
|
|
+ Saves the machine context in oucp such that when it is activated,
|
|
+ it appears as if __swapcontext() returned again, restores the
|
|
+ machine context in ucp and thereby resumes execution in that
|
|
+ context.
|
|
+
|
|
+ This implementation is intended to be used for *synchronous* context
|
|
+ switches only. Therefore, it does not have to save anything
|
|
+ other than the PRESERVED state. */
|
|
+
|
|
+ENTRY(__swapcontext)
|
|
+ save %sp, -112, %sp
|
|
+ ta ST_FLUSH_WINDOWS
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PSR]
|
|
+ add %i7, 8, %o0
|
|
+ st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PC]
|
|
+ add %o0, 4, %o0
|
|
+ st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_NPC]
|
|
+ rd %y, %o1
|
|
+ st %o1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y]
|
|
+ st %g1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G1]
|
|
+ st %g2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2]
|
|
+ st %g3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3]
|
|
+ st %g4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4]
|
|
+ st %g5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5]
|
|
+ st %g6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6]
|
|
+ st %g7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7]
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O0]
|
|
+ st %i1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1]
|
|
+ st %i2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2]
|
|
+ st %i3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3]
|
|
+ st %i4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4]
|
|
+ st %i5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5]
|
|
+ st %i6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6]
|
|
+ st %i7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O7]
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_GWINS]
|
|
+ stb %g0, [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN]
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_ID]
|
|
+ st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_PTR]
|
|
+
|
|
+ mov SIG_SETMASK, %o0
|
|
+ add %i1, UC_SIGMASK, %o1
|
|
+ add %i0, UC_SIGMASK, %o2
|
|
+ mov 8, %o3
|
|
+ mov __NR_rt_sigprocmask, %g1
|
|
+ ta 0x10
|
|
+
|
|
+ mov %i1, %i0
|
|
+ ldub [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN], %g1
|
|
+ cmp %g1, 0
|
|
+ be 1f
|
|
+ nop
|
|
+ ld [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_FSR], %fsr
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D0], %f0
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D2], %f2
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D4], %f4
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D6], %f6
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D8], %f8
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D10], %f10
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D12], %f12
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D14], %f14
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D16], %f16
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D18], %f18
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D20], %f20
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D22], %f22
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D24], %f24
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D26], %f26
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D28], %f28
|
|
+ ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D30], %f30
|
|
+1:
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y], %g1
|
|
+ wr %g1, 0x0, %y
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2], %g2
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3], %g3
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4], %g4
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5], %g5
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6], %g6
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7], %g7
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1], %i1
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2], %i2
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3], %i3
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4], %i4
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5], %i5
|
|
+ ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6], %i6
|
|
+ restore
|
|
+ ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O7], %o7
|
|
+ ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_PC], %g1
|
|
+ jmpl %g1, %g0
|
|
+ ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O0], %o0
|
|
+END(__swapcontext)
|
|
+
|
|
+weak_alias (__swapcontext, swapcontext)
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S 6 Mar 2006 01:33:04 -0000 1.4
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S 5 May 2008 09:17:00 -0000 1.5
|
|
@@ -27,6 +27,7 @@ ENTRY(syscall)
|
|
mov %o3, %o2
|
|
mov %o4, %o3
|
|
mov %o5, %o4
|
|
+ ld [%sp + 92], %o5
|
|
ta 0x10
|
|
bcc 1f
|
|
mov %o7, %g1
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h 6 Mar 2006 01:33:04 -0000 1.17
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h 21 May 2008 09:29:07 -0000 1.19
|
|
@@ -1,4 +1,5 @@
|
|
-/* Copyright (C) 1997, 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
|
|
+/* Copyright (C) 1997, 2002, 2003, 2004, 2006, 2008
|
|
+ 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.
|
|
|
|
@@ -89,6 +90,13 @@ ENTRY(name); \
|
|
|
|
#else /* __ASSEMBLER__ */
|
|
|
|
+#if defined SHARED && defined DO_VERSIONING && defined PIC \
|
|
+ && !defined NO_HIDDEN && !defined NOT_IN_libc
|
|
+# define CALL_ERRNO_LOCATION "call __GI___errno_location;"
|
|
+#else
|
|
+# define CALL_ERRNO_LOCATION "call __errno_location;"
|
|
+#endif
|
|
+
|
|
#define __SYSCALL_STRING \
|
|
"ta 0x10;" \
|
|
"bcs 2f;" \
|
|
@@ -97,7 +105,7 @@ ENTRY(name); \
|
|
".subsection 2;" \
|
|
"2:" \
|
|
"save %%sp, -192, %%sp;" \
|
|
- "call __errno_location;" \
|
|
+ CALL_ERRNO_LOCATION \
|
|
" nop;" \
|
|
"st %%i0,[%%o0];" \
|
|
"ba 1b;" \
|
|
@@ -113,7 +121,7 @@ ENTRY(name); \
|
|
".subsection 2;" \
|
|
"2:" \
|
|
"save %%sp, -192, %%sp;" \
|
|
- "call __errno_location;" \
|
|
+ CALL_ERRNO_LOCATION \
|
|
" nop;" \
|
|
"st %%i0, [%%o0];" \
|
|
"ba 1b;" \
|
|
@@ -126,7 +134,7 @@ ENTRY(name); \
|
|
" sub %%g0, %%o0, %%o0;" \
|
|
"1:"
|
|
|
|
-#define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g6", \
|
|
+#define __SYSCALL_CLOBBERS \
|
|
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
|
|
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
|
|
"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym 1 Jan 1970 00:00:00 -0000
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym 5 May 2008 09:34:18 -0000 1.1
|
|
@@ -0,0 +1,61 @@
|
|
+#include <stddef.h>
|
|
+#include <signal.h>
|
|
+#include <sys/ucontext.h>
|
|
+
|
|
+--
|
|
+
|
|
+SIG_BLOCK
|
|
+SIG_SETMASK
|
|
+
|
|
+UC_FLAGS offsetof (ucontext_t, uc_flags)
|
|
+UC_LINK offsetof (ucontext_t, uc_link)
|
|
+UC_SIGMASK offsetof (ucontext_t, uc_sigmask)
|
|
+UC_STACK offsetof (ucontext_t, uc_stack)
|
|
+UC_MCONTEXT offsetof (ucontext_t, uc_mcontext)
|
|
+MC_GREGS offsetof (mcontext_t, gregs)
|
|
+MC_GWINS offsetof (mcontext_t, gwins)
|
|
+MC_FPREGS offsetof (mcontext_t, fpregs)
|
|
+MC_XRS offsetof (mcontext_t, xrs)
|
|
+MC_FILLER offsetof (mcontext_t, filler)
|
|
+GREG_PSR (REG_PSR * sizeof(greg_t))
|
|
+GREG_PC (REG_PC * sizeof(greg_t))
|
|
+GREG_NPC (REG_nPC * sizeof(greg_t))
|
|
+GREG_Y (REG_Y * sizeof(greg_t))
|
|
+GREG_G1 (REG_G1 * sizeof(greg_t))
|
|
+GREG_G2 (REG_G2 * sizeof(greg_t))
|
|
+GREG_G3 (REG_G3 * sizeof(greg_t))
|
|
+GREG_G4 (REG_G4 * sizeof(greg_t))
|
|
+GREG_G5 (REG_G5 * sizeof(greg_t))
|
|
+GREG_G6 (REG_G6 * sizeof(greg_t))
|
|
+GREG_G7 (REG_G7 * sizeof(greg_t))
|
|
+GREG_O0 (REG_O0 * sizeof(greg_t))
|
|
+GREG_O1 (REG_O1 * sizeof(greg_t))
|
|
+GREG_O2 (REG_O2 * sizeof(greg_t))
|
|
+GREG_O3 (REG_O3 * sizeof(greg_t))
|
|
+GREG_O4 (REG_O4 * sizeof(greg_t))
|
|
+GREG_O5 (REG_O5 * sizeof(greg_t))
|
|
+GREG_O6 (REG_O6 * sizeof(greg_t))
|
|
+GREG_O7 (REG_O7 * sizeof(greg_t))
|
|
+FPU_D0 offsetof (fpregset_t, fpu_fr.fpu_dregs[0])
|
|
+FPU_D2 offsetof (fpregset_t, fpu_fr.fpu_dregs[1])
|
|
+FPU_D4 offsetof (fpregset_t, fpu_fr.fpu_dregs[2])
|
|
+FPU_D6 offsetof (fpregset_t, fpu_fr.fpu_dregs[3])
|
|
+FPU_D8 offsetof (fpregset_t, fpu_fr.fpu_dregs[4])
|
|
+FPU_D10 offsetof (fpregset_t, fpu_fr.fpu_dregs[5])
|
|
+FPU_D12 offsetof (fpregset_t, fpu_fr.fpu_dregs[6])
|
|
+FPU_D14 offsetof (fpregset_t, fpu_fr.fpu_dregs[7])
|
|
+FPU_D16 offsetof (fpregset_t, fpu_fr.fpu_dregs[8])
|
|
+FPU_D18 offsetof (fpregset_t, fpu_fr.fpu_dregs[9])
|
|
+FPU_D20 offsetof (fpregset_t, fpu_fr.fpu_dregs[10])
|
|
+FPU_D22 offsetof (fpregset_t, fpu_fr.fpu_dregs[11])
|
|
+FPU_D24 offsetof (fpregset_t, fpu_fr.fpu_dregs[12])
|
|
+FPU_D26 offsetof (fpregset_t, fpu_fr.fpu_dregs[13])
|
|
+FPU_D28 offsetof (fpregset_t, fpu_fr.fpu_dregs[14])
|
|
+FPU_D30 offsetof (fpregset_t, fpu_fr.fpu_dregs[15])
|
|
+FPU_Q offsetof (fpregset_t, fpu_q)
|
|
+FPU_FSR offsetof (fpregset_t, fpu_fsr)
|
|
+FPU_QCNT offsetof (fpregset_t, fpu_qcnt)
|
|
+FPU_Q_ENTRY_SZ offsetof (fpregset_t, fpu_q_entrysize)
|
|
+FPU_EN offsetof (fpregset_t, fpu_en)
|
|
+XRS_ID offsetof (xrs_t, xrs_id)
|
|
+XRS_PTR offsetof (xrs_t, xrs_ptr)
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S 6 Mar 2006 01:33:03 -0000 1.5
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S 21 May 2008 08:48:21 -0000 1.6
|
|
@@ -1,4 +1,4 @@
|
|
-/* Copyright (C) 1997 Free Software Foundation, Inc.
|
|
+/* Copyright (C) 1997, 2008 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
|
|
|
|
@@ -86,7 +86,11 @@ ENTRY (__brk)
|
|
#endif
|
|
st %o0, [%g1]
|
|
#else
|
|
+#ifndef NOT_IN_libc
|
|
+ call HIDDEN_JUMPTARGET(__errno_location)
|
|
+#else
|
|
call __errno_location
|
|
+#endif
|
|
mov %o0,%l1
|
|
st %l1, [%o0]
|
|
#endif
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S 6 Mar 2006 01:33:03 -0000 1.6
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S 5 May 2008 09:17:00 -0000 1.7
|
|
@@ -27,6 +27,7 @@ ENTRY(syscall)
|
|
mov %o3,%o2
|
|
mov %o4,%o3
|
|
mov %o5,%o4
|
|
+ ldx [%sp + STACK_BIAS + 176],%o5
|
|
|
|
ta 0x6d
|
|
|
|
--- libc/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h 6 Mar 2006 01:33:03 -0000 1.20
|
|
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h 21 May 2008 09:29:07 -0000 1.22
|
|
@@ -1,4 +1,4 @@
|
|
-/* Copyright (C) 1997, 2000, 2002, 2003, 2004, 2006
|
|
+/* Copyright (C) 1997, 2000, 2002, 2003, 2004, 2006, 2008
|
|
Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
|
|
@@ -106,12 +106,19 @@ ENTRY(name); \
|
|
|
|
#else /* __ASSEMBLER__ */
|
|
|
|
+#if defined SHARED && defined DO_VERSIONING && defined PIC \
|
|
+ && !defined NO_HIDDEN && !defined NOT_IN_libc
|
|
+# define CALL_ERRNO_LOCATION "call __GI___errno_location;"
|
|
+#else
|
|
+# define CALL_ERRNO_LOCATION "call __errno_location;"
|
|
+#endif
|
|
+
|
|
#define __SYSCALL_STRING \
|
|
"ta 0x6d;" \
|
|
"bcc,pt %%xcc, 1f;" \
|
|
" nop;" \
|
|
"save %%sp, -192, %%sp;" \
|
|
- "call __errno_location;" \
|
|
+ CALL_ERRNO_LOCATION \
|
|
" nop;" \
|
|
"st %%i0,[%%o0];" \
|
|
"restore %%g0, -1, %%o0;" \
|
|
@@ -122,7 +129,7 @@ ENTRY(name); \
|
|
"bcc,pt %%xcc, 1f;" \
|
|
" sub %%o1, 1, %%o1;" \
|
|
"save %%sp, -192, %%sp;" \
|
|
- "call __errno_location;" \
|
|
+ CALL_ERRNO_LOCATION \
|
|
" mov -1, %%i1;" \
|
|
"st %%i0,[%%o0];" \
|
|
"restore %%g0, -1, %%o0;" \
|
|
@@ -135,7 +142,7 @@ ENTRY(name); \
|
|
" sub %%g0, %%o0, %%o0;" \
|
|
"1:"
|
|
|
|
-#define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g6", \
|
|
+#define __SYSCALL_CLOBBERS \
|
|
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
|
|
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
|
|
"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
|
|
--- libc/elf/soinit.c 24 Feb 2006 22:57:31 -0000 1.14
|
|
+++ libc/elf/soinit.c 19 May 2008 18:43:36 -0000 1.15
|
|
@@ -20,10 +20,6 @@ run_hooks (void (*const list[]) (void))
|
|
(**list) ();
|
|
}
|
|
|
|
-static const char __EH_FRAME_BEGIN__[]
|
|
- __attribute__ ((used, section (".eh_frame")))
|
|
- = { };
|
|
-
|
|
/* This function will be called from _init in init-first.c. */
|
|
void
|
|
__libc_global_ctors (void)
|
|
--- libc/misc/truncate64.c 14 Dec 2005 11:27:42 -0000 1.1
|
|
+++ libc/misc/truncate64.c 10 May 2008 23:38:21 -0000 1.2
|
|
@@ -31,5 +31,5 @@ truncate64 (path, length)
|
|
__set_errno (EINVAL);
|
|
return -1;
|
|
}
|
|
- return truncate (path, (off_t) length);
|
|
+ return __truncate (path, (off_t) length);
|
|
}
|
|
--- libc/sysdeps/ieee754/ldbl-128/e_j0l.c 11 Apr 2008 22:20:35 -0000 1.8
|
|
+++ libc/sysdeps/ieee754/ldbl-128/e_j0l.c 10 May 2008 23:35:21 -0000 1.9
|
|
@@ -679,7 +679,7 @@ __ieee754_j0l (long double x)
|
|
{
|
|
long double xx, xinv, z, p, q, c, s, cc, ss;
|
|
|
|
- if (! finitel (x))
|
|
+ if (! __finitel (x))
|
|
{
|
|
if (x != x)
|
|
return x;
|
|
@@ -816,7 +816,7 @@ long double
|
|
{
|
|
long double xx, xinv, z, p, q, c, s, cc, ss;
|
|
|
|
- if (! finitel (x))
|
|
+ if (! __finitel (x))
|
|
{
|
|
if (x != x)
|
|
return x;
|
|
--- libc/sysdeps/ieee754/ldbl-128/e_j1l.c 11 Apr 2008 22:22:54 -0000 1.6
|
|
+++ libc/sysdeps/ieee754/ldbl-128/e_j1l.c 10 May 2008 23:35:59 -0000 1.7
|
|
@@ -685,7 +685,7 @@ __ieee754_j1l (long double x)
|
|
{
|
|
long double xx, xinv, z, p, q, c, s, cc, ss;
|
|
|
|
- if (! finitel (x))
|
|
+ if (! __finitel (x))
|
|
{
|
|
if (x != x)
|
|
return x;
|
|
@@ -823,7 +823,7 @@ __ieee754_y1l (long double x)
|
|
{
|
|
long double xx, xinv, z, p, q, c, s, cc, ss;
|
|
|
|
- if (! finitel (x))
|
|
+ if (! __finitel (x))
|
|
{
|
|
if (x != x)
|
|
return x;
|
|
--- libc/sysdeps/ieee754/ldbl-128/s_expm1l.c 10 Sep 2002 00:57:17 -0000 1.6
|
|
+++ libc/sysdeps/ieee754/ldbl-128/s_expm1l.c 10 May 2008 23:36:10 -0000 1.7
|
|
@@ -153,7 +153,7 @@ __expm1l (long double x)
|
|
exp(x) - 1 = 2^k (qx + 1) - 1
|
|
= 2^k qx + 2^k - 1. */
|
|
|
|
- px = ldexpl (1.0L, k);
|
|
+ px = __ldexpl (1.0L, k);
|
|
x = px * qx + (px - 1.0);
|
|
return x;
|
|
}
|
|
--- libc/sysdeps/ieee754/ldbl-128/s_log1pl.c 26 Aug 2002 22:40:02 -0000 1.5
|
|
+++ libc/sysdeps/ieee754/ldbl-128/s_log1pl.c 10 May 2008 23:36:28 -0000 1.6
|
|
@@ -120,13 +120,6 @@ static const long double maxlog = 1.1356
|
|
static const long double big = 2e4932L;
|
|
static const long double zero = 0.0L;
|
|
|
|
-#if 1
|
|
-/* Make sure these are prototyped. */
|
|
-long double frexpl (long double, int *);
|
|
-long double ldexpl (long double, int);
|
|
-#endif
|
|
-
|
|
-
|
|
long double
|
|
__log1pl (long double xm1)
|
|
{
|
|
@@ -160,7 +153,7 @@ __log1pl (long double xm1)
|
|
/* Separate mantissa from exponent. */
|
|
|
|
/* Use frexp used so that denormal numbers will be handled properly. */
|
|
- x = frexpl (x, &e);
|
|
+ x = __frexpl (x, &e);
|
|
|
|
/* Logarithm using log(x) = z + z^3 P(z^2)/Q(z^2),
|
|
where z = 2(x-1)/x+1). */
|