about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/libm-ieee754/s_modf.c5
-rw-r--r--sysdeps/libm-ieee754/s_modff.c1
-rw-r--r--sysdeps/powerpc/dl-machine.h6
-rw-r--r--sysdeps/sparc/DEFS.h10
-rwxr-xr-xsysdeps/sparc/configure2
-rw-r--r--sysdeps/sparc/configure.in2
-rw-r--r--sysdeps/sparc/dl-machine.h3
-rw-r--r--sysdeps/sparc/setjmp.S9
-rw-r--r--sysdeps/unix/sparc/sysdep.h34
-rw-r--r--sysdeps/unix/sysv/linux/sparc/Dist3
-rw-r--r--sysdeps/unix/sysv/linux/sparc/Makefile5
-rw-r--r--sysdeps/unix/sysv/linux/sparc/fork.S33
-rw-r--r--sysdeps/unix/sysv/linux/sparc/pipe.S37
-rw-r--r--sysdeps/unix/sysv/linux/sparc/syscalls.list3
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sysdep.h12
15 files changed, 126 insertions, 39 deletions
diff --git a/sysdeps/libm-ieee754/s_modf.c b/sysdeps/libm-ieee754/s_modf.c
index 888d4f416d..7851f675a4 100644
--- a/sysdeps/libm-ieee754/s_modf.c
+++ b/sysdeps/libm-ieee754/s_modf.c
@@ -60,7 +60,6 @@ static double one = 1.0;
 		}
 	    }
 	} else if (j0>51) {		/* no fraction part */
-	    u_int32_t high;
 	    *iptr = x*one;
 	    /* We must handle NaNs separately.  */
 	    if (j0 == 0x400 && ((i0 & 0xfffff) | i1))
@@ -70,10 +69,8 @@ static double one = 1.0;
 	} else {			/* fraction part in low x */
 	    i = ((u_int32_t)(0xffffffff))>>(j0-20);
 	    if((i1&i)==0) { 		/* x is integral */
-	        u_int32_t high;
 		*iptr = x;
-		GET_HIGH_WORD(high,x);
-		INSERT_WORDS(x,high&0x80000000,0);	/* return +-0 */
+		INSERT_WORDS(x,i0&0x80000000,0);	/* return +-0 */
 		return x;
 	    } else {
 	        INSERT_WORDS(*iptr,i0,i1&(~i));
diff --git a/sysdeps/libm-ieee754/s_modff.c b/sysdeps/libm-ieee754/s_modff.c
index 60f7f1ec29..e6c22b2add 100644
--- a/sysdeps/libm-ieee754/s_modff.c
+++ b/sysdeps/libm-ieee754/s_modff.c
@@ -55,7 +55,6 @@ static float one = 1.0;
 		}
 	    }
 	} else {			/* no fraction part */
-	    u_int32_t ix;
 	    *iptr = x*one;
 	    /* We must handle NaNs separately.  */
 	    if (j0 == 0x80 && (i0 & 0x7fffff))
diff --git a/sysdeps/powerpc/dl-machine.h b/sysdeps/powerpc/dl-machine.h
index 541892cdfc..526887da18 100644
--- a/sysdeps/powerpc/dl-machine.h
+++ b/sysdeps/powerpc/dl-machine.h
@@ -53,9 +53,9 @@
 #define OPCODE_SLWI(ra,rs,sh) OPCODE_RLWINM(ra,rs,sh,0,31-sh)
 
 #define PPC_DCBST(where) asm __volatile__ ("dcbst 0,%0" : : "r"(where))
-+#define PPC_SYNC asm __volatile__ ("sync")
-+#define PPC_ISYNC asm __volatile__ ("sync; isync")
-+#define PPC_ICBI(where) asm __volatile__ ("icbi 0,%0" : : "r"(where))
+#define PPC_SYNC asm __volatile__ ("sync")
+#define PPC_ISYNC asm __volatile__ ("sync; isync")
+#define PPC_ICBI(where) asm __volatile__ ("icbi 0,%0" : : "r"(where))
 
 /* Use this when you've modified some code, but it won't be in the
    instruction fetch queue (or when it doesn't matter if it is). */
diff --git a/sysdeps/sparc/DEFS.h b/sysdeps/sparc/DEFS.h
index ef6966319f..ab70f5550e 100644
--- a/sysdeps/sparc/DEFS.h
+++ b/sysdeps/sparc/DEFS.h
@@ -1,4 +1,12 @@
-#define	FUNC(name)	\
+#ifdef HAVE_ELF
+# define FUNC(name)		\
+	.global name;		\
+	.type name,@function;	\
+	.align 4;		\
+	name:
+#else
+# define FUNC(name)	\
 	.global name;	\
 	.align 4;	\
 	name:
+#endif
diff --git a/sysdeps/sparc/configure b/sysdeps/sparc/configure
index 56168677a2..a8f815a577 100755
--- a/sysdeps/sparc/configure
+++ b/sysdeps/sparc/configure
@@ -1,4 +1,4 @@
  # Local configure fragment for sysdeps/sparc.
 
 # The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS_SO = -fPIC
+ASFLAGS_SO=-fPIC
diff --git a/sysdeps/sparc/configure.in b/sysdeps/sparc/configure.in
index 3e2b2f04f9..e71a7e30fa 100644
--- a/sysdeps/sparc/configure.in
+++ b/sysdeps/sparc/configure.in
@@ -3,4 +3,4 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
 # Local configure fragment for sysdeps/sparc.
 
 # The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS_SO = -fPIC
+ASFLAGS_SO=-fPIC
diff --git a/sysdeps/sparc/dl-machine.h b/sysdeps/sparc/dl-machine.h
index 6f1d7eb02e..e87f1970e7 100644
--- a/sysdeps/sparc/dl-machine.h
+++ b/sysdeps/sparc/dl-machine.h
@@ -26,7 +26,7 @@
 
 /* Some SPARC opcodes we need to use for self-modifying code.  */
 #define OPCODE_NOP	0x01000000 /* nop */
-#define OPCODE_CALL	0x04000000 /* call ?; add PC-rel word address */
+#define OPCODE_CALL	0x40000000 /* call ?; add PC-rel word address */
 #define OPCODE_SETHI_G1	0x03000000 /* sethi ?, %g1; add value>>10 */
 #define OPCODE_JMP_G1	0x81c06000 /* jmp %g1+?; add lo 10 bits of value */
 #define OPCODE_SAVE_SP64 0x9de3bfc0 /* save %sp, -64, %sp */
@@ -262,6 +262,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
 	.globl _dl_runtime_resolve
 	.type _dl_runtime_resolve, @function
 _dl_runtime_resolve:
+	t 1
 	#call  %g0
 	# Pass two args to fixup: the PLT address computed from the PC saved
 	# in the PLT's call insn, and the reloc offset passed in %g1.
diff --git a/sysdeps/sparc/setjmp.S b/sysdeps/sparc/setjmp.S
index d9599079c2..f07a348fe3 100644
--- a/sysdeps/sparc/setjmp.S
+++ b/sysdeps/sparc/setjmp.S
@@ -26,16 +26,19 @@ ENTRY (__sigsetjmp)
 	   return PC.  Save the signal mask if requested with a tail-call
 	   for simplicity; it always returns zero.  */
 #ifdef PIC
+	mov  %o7,%g1
 2:
-	jmpl 1f,%g2
+	call 1f
 	nop
 1:
 	sethi %hi(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l7
-	sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g3
-	st    %sp, [%o0 + (JB_SP * 4)]
 	or    %l7,%lo(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l7
+	add   %l7,%o7,%l7
+	sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g3
 	or    %g3,%lo(C_SYMBOL_NAME (__sigjmp_save)), %g3
+	st    %sp, [%o0 + (JB_SP * 4)]
 	st    %fp, [%o0 + (JB_FP * 4)]
+	mov   %g1,%o7
 	ld    [%l7+%g3],%g1
 	jmp   %g1
 	st   %o7, [%o0+(JB_PC*4)]
diff --git a/sysdeps/unix/sparc/sysdep.h b/sysdeps/unix/sparc/sysdep.h
index eab661c1ab..fe74a91809 100644
--- a/sysdeps/unix/sparc/sysdep.h
+++ b/sysdeps/unix/sparc/sysdep.h
@@ -1,20 +1,20 @@
-/* Copyright (C) 1993, 1994, 1995 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 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+/* Copyright (C) 1993, 1994, 1995, 1997 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 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 <sysdeps/unix/sysdep.h>
 
diff --git a/sysdeps/unix/sysv/linux/sparc/Dist b/sysdeps/unix/sysv/linux/sparc/Dist
index 6134c6056d..b50a46fb68 100644
--- a/sysdeps/unix/sysv/linux/sparc/Dist
+++ b/sysdeps/unix/sysv/linux/sparc/Dist
@@ -1,2 +1,5 @@
 __sigtrampoline.S
 clone.S
+start.c
+pipe.S
+fork.S
diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile
index 30ef946c19..4cbd3bd004 100644
--- a/sysdeps/unix/sysv/linux/sparc/Makefile
+++ b/sysdeps/unix/sysv/linux/sparc/Makefile
@@ -2,10 +2,11 @@ ifeq ($(subdir),signal)
 sysdep_routines += __sigtrampoline
 endif
 
+asm-CPPFLAGS=-D__ASSEMBLY__
+as-FLAGS-.so=-fPIC
+
 # When I get this to work, this is the right thing
 ifeq ($(subdir),elf)
 CFLAGS-rtld.c += -mv8
 #rtld-routines += dl-sysdepsparc
 endif   # elf
-
-asm-CPPFLAGS = -fPIC
diff --git a/sysdeps/unix/sysv/linux/sparc/fork.S b/sysdeps/unix/sysv/linux/sparc/fork.S
new file mode 100644
index 0000000000..55633f2cde
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/fork.S
@@ -0,0 +1,33 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
+
+   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., 675 Mass Ave,
+   Cambridge, MA 02139, USA.  */
+
+#include <sysdep.h>
+
+PSEUDO (__libc_fork, fork, 0)
+	tst %o1
+	be,a parent
+	nop
+	/* child: return 0 */
+	clr %o0
+parent:
+	ret
+
+PSEUDO_END (__libc_fork)
+weak_alias (__libc_fork, __fork)
+weak_alias (__libc_fork, fork)
diff --git a/sysdeps/unix/sysv/linux/sparc/pipe.S b/sysdeps/unix/sysv/linux/sparc/pipe.S
new file mode 100644
index 0000000000..4c50656d6c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/pipe.S
@@ -0,0 +1,37 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
+
+   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 <sysdep.h>
+	.globl __libc_pipe
+ENTRY (__libc_pipe)
+        mov %o0, %o2            /* Save PIPEDES. */
+	mov SYS_ify(pipe),%g1
+	ta 0x10
+	bcc,a 2f
+	nop
+	SYSCALL_ERROR_HANDLER
+2:
+	st %o0, [%o2]           /* PIPEDES[0] = %o0; */
+        st %o1, [%o2 + 4]       /* PIPEDES[1] = %o1; */
+	retl
+	clr %o0
+
+PSEUDO_END (__libc_pipe)
+weak_alias (__libc_pipe, __pipe)
+weak_alias (__libc_pipe, pipe)
diff --git a/sysdeps/unix/sysv/linux/sparc/syscalls.list b/sysdeps/unix/sysv/linux/sparc/syscalls.list
index 7883d70719..3d59984f1b 100644
--- a/sysdeps/unix/sysv/linux/sparc/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/syscalls.list
@@ -1,3 +1,6 @@
 # File name	Caller	Syscall name	# args	Strong name	Weak names
 
+fork		-	fork		0	__fork		fork
+pipe		-	pipe		1	__pipe		pipe
 s_llseek	llseek	_llseek		5	__sys_llseek
+syscall		-	syscall		0	__syscall	syscall
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h
index 5ae440152b..0e5a8cd218 100644
--- a/sysdeps/unix/sysv/linux/sparc/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h
@@ -20,11 +20,6 @@
 #ifndef _LINUX_SPARC_SYSDEP_H
 #define _LINUX_SPARC_SYSDEP_H 1
 
-/* Kernel headers use __ASSEMBLY__ */
-#ifdef ASSEMBLER
-#define __ASSEMBLY__
-#endif
-
 #include <sysdeps/unix/sparc/sysdep.h>
 
 #undef SYS_ify
@@ -40,6 +35,13 @@
 
 /* Linux/SPARC uses a different trap number */
 #undef PSEUDO
+#undef ENTRY
+
+#define ENTRY(name) \
+	.global C_SYMBOL_NAME(name); \
+	.align 2;\
+	C_LABEL(name);\
+	.type name,@function;
 
 #ifdef PIC
 #define SYSCALL_ERROR_HANDLER \