aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/alpha/bb_init_func.S4
-rw-r--r--sysdeps/alpha/copysign.c31
-rw-r--r--sysdeps/alpha/divrem.h2
-rw-r--r--sysdeps/generic/memcmp.c7
-rw-r--r--sysdeps/unix/_exit.S1
-rw-r--r--sysdeps/unix/alpha/sysdep.S (renamed from sysdeps/unix/sysv/linux/alpha/sysdep.S)9
-rw-r--r--sysdeps/unix/alpha/sysdep.h50
-rw-r--r--sysdeps/unix/bsd/osf/alpha/start.S2
-rw-r--r--sysdeps/unix/bsd/osf/alpha/sysdep.S40
-rw-r--r--sysdeps/unix/bsd/sun/sunos4/tcsetattr.c2
-rw-r--r--sysdeps/unix/execve.S1
-rw-r--r--sysdeps/unix/fork.S1
-rw-r--r--sysdeps/unix/getegid.S1
-rw-r--r--sysdeps/unix/geteuid.S1
-rw-r--r--sysdeps/unix/getppid.S1
-rw-r--r--sysdeps/unix/make-syscalls.sh2
-rw-r--r--sysdeps/unix/syscall.S1
-rw-r--r--sysdeps/unix/sysdep.h6
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/llseek.S10
-rw-r--r--sysdeps/unix/sysv/linux/alpha/pipe.S16
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/start.S95
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscall.S18
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sysdep.h12
-rw-r--r--sysdeps/unix/sysv/linux/gnu/types.h7
28 files changed, 139 insertions, 197 deletions
diff --git a/sysdeps/alpha/bb_init_func.S b/sysdeps/alpha/bb_init_func.S
index dfa8c1d07b..49be0b2bfe 100644
--- a/sysdeps/alpha/bb_init_func.S
+++ b/sysdeps/alpha/bb_init_func.S
@@ -53,11 +53,11 @@ init:
br pv, 1f
1: ldgp gp, 0(pv)
- lda t1, __bb_head
+ ldiq t1, __bb_head
lda t3, _gmonparam
ldq t2, 0(t1)
ldl t3, 0(t3) /* t3 = _gmonparam.state */
- ldi t0, 1
+ lda t0, 1
stq t0, ZERO_WORD(a0) /* blocks->zero_word = 1 */
stq t2, NEXT(a0) /* blocks->next = __bb_head */
stq a0, 0(t1)
diff --git a/sysdeps/alpha/copysign.c b/sysdeps/alpha/copysign.c
deleted file mode 100644
index 69544b01fb..0000000000
--- a/sysdeps/alpha/copysign.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1992, 1993, 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. */
-
-#define __NO_MATH_INLINES
-
-#include <math.h>
-
-/* Return X with its sign changed to Y's. */
-__inline double
-__copysign (double __x, double __y)
-{
- __asm ("cpys %1, %2, %0" : "=f" (__x) : "f" (__y), "f" (__x));
- return __x;
-}
-
-weak_alias (__copysign, copysign)
diff --git a/sysdeps/alpha/divrem.h b/sysdeps/alpha/divrem.h
index f296179e99..2951335c49 100644
--- a/sysdeps/alpha/divrem.h
+++ b/sysdeps/alpha/divrem.h
@@ -125,7 +125,7 @@ FUNC_NAME:
ldq gp, 0x10(sp)
lda sp, 0x18(sp)
#endif
- .frame sp, FRAME_SIZE, ra, 0
+ .frame sp, FRAME_SIZE, retaddr, 0
lda sp,-FRAME_SIZE(sp)
.prologue 1
stq arg1,0x00(sp)
diff --git a/sysdeps/generic/memcmp.c b/sysdeps/generic/memcmp.c
index 8f5eca0b6b..d9f93bab61 100644
--- a/sysdeps/generic/memcmp.c
+++ b/sysdeps/generic/memcmp.c
@@ -84,6 +84,9 @@ typedef unsigned char byte;
/* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine.
A and B are known to be different.
This is needed only on little-endian machines. */
+
+static int memcmp_bytes __P((op_t, op_t));
+
#ifdef __GNUC__
__inline
#endif
@@ -107,6 +110,8 @@ memcmp_bytes (a, b)
}
#endif
+static int memcmp_common_alignment __P((long, long, size_t));
+
/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t'
objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for
memory operations on `op_t's. */
@@ -194,6 +199,8 @@ memcmp_common_alignment (srcp1, srcp2, len)
return 0;
}
+static int memcmp_not_common_alignment __P((long, long, size_t));
+
/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN
`op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory
operations on `op_t', but SRCP1 *should be unaligned*. */
diff --git a/sysdeps/unix/_exit.S b/sysdeps/unix/_exit.S
index a171689473..50eb687d68 100644
--- a/sysdeps/unix/_exit.S
+++ b/sysdeps/unix/_exit.S
@@ -20,3 +20,4 @@ Cambridge, MA 02139, USA. */
PSEUDO (_exit, exit, 1)
/* Shouldn't get here. */
+PSEUDO_END(_exit)
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S
index 84582f404e..3e7666ff61 100644
--- a/sysdeps/unix/sysv/linux/alpha/sysdep.S
+++ b/sysdeps/unix/alpha/sysdep.S
@@ -20,7 +20,12 @@ Cambridge, MA 02139, USA. */
#define _ERRNO_H
#include <errnos.h>
-LEAF(syscall_error, 0)
+ .comm errno, 4
+#ifdef __ELF__
+ .type errno, @object
+#endif
+
+LEAF(__syscall_error, 0)
.prologue 1
/* Store return value in errno... */
@@ -31,4 +36,4 @@ LEAF(syscall_error, 0)
ldi v0, -1
ret
- .end syscall_error
+ END(__syscall_error)
diff --git a/sysdeps/unix/alpha/sysdep.h b/sysdeps/unix/alpha/sysdep.h
index 6fed4a6adf..4b3f9aa5d8 100644
--- a/sysdeps/unix/alpha/sysdep.h
+++ b/sysdeps/unix/alpha/sysdep.h
@@ -58,25 +58,27 @@ Cambridge, MA 02139, USA. */
.frame sp, 0, ra
#endif
-/* Note that while it's better structurally, going back to set errno
- can make things confusing if you're debugging---it looks like it's jumping
- backwards into the previous fn. */
+/* Mark the end of function SYM. */
+#undef END
+#define END(sym) .end sym
+
+/* Note that PSEUDO/PSEUDO_END use label number 1996---do not use a
+ label of that number between those two macros! */
+
#ifdef __STDC__
#define PSEUDO(name, syscall_name, args) \
.globl name; \
.align 3; \
.ent name,0; \
\
-1: br gp, 2f; \
-2: ldgp gp, 0(gp); \
- jmp zero, syscall_error; \
- \
name##: \
- ldi v0, SYS_ify(syscall_name); \
+ .frame sp, 0, ra \
+ .prologue 1; /* yes, we do use gp */ \
+ ldiq v0, SYS_ify(syscall_name); \
.set noat; \
call_pal PAL_callsys; \
.set at; \
- bne a3, 1b; \
+ bne a3, 1996f; \
3:
#else
#define PSEUDO(name, syscall_name, args) \
@@ -84,21 +86,35 @@ name##: \
.align 3; \
.ent name,0; \
\
-1: br gp, 2f; \
-2: ldgp gp, 0(gp); \
- jmp zero, syscall_error; \
- \
name/**/: \
- ldi v0, SYS_ify(syscall_name); \
+ .frame sp, 0, ra \
+ .prologue 1; /* yes, we do use gp */ \
+ ldiq v0, SYS_ify(syscall_name); \
.set noat; \
call_pal PAL_callsys; \
.set at; \
- bne a3, 1b; \
+ bne a3, 1996f; \
3:
#endif
-#undef END
-#define END(sym) .end sym
+#undef PSEUDO_END
+
+#ifdef PIC
+/* When building a shared library, we can use a branch since the text
+ section of the library is much smaller than 4MB. If we ever break
+ this assumption, the linker will tell us. */
+# define PSEUDO_END(sym) \
+1996: \
+ br zero, __syscall_error; \
+ END(sym)
+#else
+# define PSEUDO_END(sym) \
+1996: \
+ br gp, 2f; \
+2: ldgp gp, 0(gp); \
+ jmp zero, __syscall_error; \
+ END(sym)
+#endif
#define r0 v0
#define r1 a4
diff --git a/sysdeps/unix/bsd/osf/alpha/start.S b/sysdeps/unix/bsd/osf/alpha/start.S
index f3995a2fd6..d5ff14055b 100644
--- a/sysdeps/unix/bsd/osf/alpha/start.S
+++ b/sysdeps/unix/bsd/osf/alpha/start.S
@@ -18,8 +18,6 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
-.comm errno, 4
-
#if 0
.sdata
.globl STARTFRM
diff --git a/sysdeps/unix/bsd/osf/alpha/sysdep.S b/sysdeps/unix/bsd/osf/alpha/sysdep.S
deleted file mode 100644
index bc4865cef2..0000000000
--- a/sysdeps/unix/bsd/osf/alpha/sysdep.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 1993 Free Software Foundation, Inc.
- Contributed by Brendan Kehoe (brendan@zen.org).
-
-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>
-#define _ERRNO_H
-#include <errnos.h>
-
-ENTRY(syscall_error)
-#ifdef EWOULDBLOCK_sys
- /* We translate the system's EWOULDBLOCK error into EAGAIN.
- The GNU C library always defines EWOULDBLOCK==EAGAIN.
- EWOULDBLOCK_sys is the original number. */
- subq v0, EWOULDBLOCK_sys, t0
- cmoveq t0, EAGAIN, v0
-#endif
-
- /* Store it in errno... */
-! ldgp gp, 0(t12)
- stl v0, errno
-
- /* And just kick back a -1. */
- ldil v0, -1
- ret
-
- .end syscall_error
diff --git a/sysdeps/unix/bsd/sun/sunos4/tcsetattr.c b/sysdeps/unix/bsd/sun/sunos4/tcsetattr.c
index 4ae139a1f8..f88951ff9d 100644
--- a/sysdeps/unix/bsd/sun/sunos4/tcsetattr.c
+++ b/sysdeps/unix/bsd/sun/sunos4/tcsetattr.c
@@ -27,7 +27,7 @@ int
DEFUN(tcsetattr, (fd, optional_actions, termios_p),
int fd AND int optional_actions AND CONST struct termios *termios_p)
{
- int cmd;
+ unsigned long cmd;
switch (optional_actions)
{
diff --git a/sysdeps/unix/execve.S b/sysdeps/unix/execve.S
index 7a4fc139ec..5d48bc63d8 100644
--- a/sysdeps/unix/execve.S
+++ b/sysdeps/unix/execve.S
@@ -28,5 +28,6 @@ Cambridge, MA 02139, USA. */
SYSCALL__ (execve, 3)
ret
+PSEUDO_END(execve)
weak_alias (__execve, execve)
diff --git a/sysdeps/unix/fork.S b/sysdeps/unix/fork.S
index 1c360c6ed2..b8b99720b1 100644
--- a/sysdeps/unix/fork.S
+++ b/sysdeps/unix/fork.S
@@ -28,5 +28,6 @@ SYSCALL__ (fork, 0)
subl #1, r1
andl r1, r0
ret
+PSEUDO_END(fork)
weak_alias (__fork, fork)
diff --git a/sysdeps/unix/getegid.S b/sysdeps/unix/getegid.S
index 1bd447b623..aff66bb555 100644
--- a/sysdeps/unix/getegid.S
+++ b/sysdeps/unix/getegid.S
@@ -25,5 +25,6 @@ PSEUDO (__getegid, getgid, 0)
MOVE(r1, r0)
#endif
ret
+PSEUDO_END(__getegid)
weak_alias (__getegid, getegid)
diff --git a/sysdeps/unix/geteuid.S b/sysdeps/unix/geteuid.S
index 339eb536f5..db4087f831 100644
--- a/sysdeps/unix/geteuid.S
+++ b/sysdeps/unix/geteuid.S
@@ -25,5 +25,6 @@ PSEUDO (__geteuid, getuid, 0)
MOVE(r1, r0)
#endif
ret
+PSEUDO_END(__geteuid)
weak_alias (__geteuid, geteuid)
diff --git a/sysdeps/unix/getppid.S b/sysdeps/unix/getppid.S
index 132c3740a0..3f0c7456b5 100644
--- a/sysdeps/unix/getppid.S
+++ b/sysdeps/unix/getppid.S
@@ -25,5 +25,6 @@ PSEUDO (__getppid, getpid, 0)
MOVE(r1, r0)
#endif
ret
+PSEUDO_END(__getppid)
weak_alias (__getppid, getppid)
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index 5251e84cb9..260769ed7b 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -62,7 +62,7 @@ EOF
(echo '#include <sysdep.h>'; \\
echo 'PSEUDO ($strong, $syscall, $nargs)'; \\
echo ' ret'; \\
- echo 'END($strong)'; \\"
+ echo 'PSEUDO_END($strong)'; \\"
# Append any weak aliases defined for this syscall function.
for name in $weak; do
diff --git a/sysdeps/unix/syscall.S b/sysdeps/unix/syscall.S
index e3ef1775dc..d3f13dcc4f 100644
--- a/sysdeps/unix/syscall.S
+++ b/sysdeps/unix/syscall.S
@@ -27,3 +27,4 @@ Cambridge, MA 02139, USA. */
SYSCALL (syscall, 1)
ret
+PSEUDO_END(syscall)
diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h
index 0dde0b04a6..24be0063e0 100644
--- a/sysdeps/unix/sysdep.h
+++ b/sysdeps/unix/sysdep.h
@@ -55,6 +55,6 @@ Cambridge, MA 02139, USA. */
#define SYS_ify(syscall_name) SYS_/**/syscall_name
#endif
-/* Terminate a function named SYM. This is used on some platforms to
- generate correct debugging information. */
-#define END(sym)
+/* Terminate a system call named SYM. This is used on some platforms
+ to generate correct debugging information. */
+#define PSEUDO_END(sym)
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S
index 1c4a4f9217..26bf97f2bd 100644
--- a/sysdeps/unix/sysv/linux/alpha/brk.S
+++ b/sysdeps/unix/sysv/linux/alpha/brk.S
@@ -30,7 +30,7 @@ LEAF(__brk, 0)
ldgp gp, 0(t12)
.prologue 1
- ldi v0, __NR_brk
+ ldiq v0, __NR_brk
call_pal PAL_callsys
/* Correctly handle the brk(0) query case. */
@@ -46,7 +46,7 @@ LEAF(__brk, 0)
/* What a horrible way to die. */
error: ldi v0, ENOMEM
- jmp zero, syscall_error
+ jmp zero, __syscall_error
END(__brk)
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
index 52c945aec2..e09fa738e2 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
@@ -24,7 +24,7 @@ Cambridge, MA 02139, USA. */
LEAF(__ieee_get_fp_control, 8)
lda sp, -8(sp)
- .prologue 0
+ .prologue 1
mov sp, a1
ldi a0, GSI_IEEE_FP_CONTROL
@@ -39,7 +39,7 @@ LEAF(__ieee_get_fp_control, 8)
error: lda sp, 8(sp)
br gp, 1f
1: ldgp gp, 0(gp)
- jmp zero, syscall_error
+ jmp zero, __syscall_error
END(__ieee_get_fp_control)
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
index d72585daf1..d748c81142 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
@@ -22,7 +22,7 @@ Cambridge, MA 02139, USA. */
LEAF(__ieee_set_fp_control, 8)
lda sp, -8(sp)
- .prologue 0
+ .prologue 1
stq a0, 0(sp)
mov sp, a1
@@ -37,7 +37,7 @@ LEAF(__ieee_set_fp_control, 8)
error: br gp, 1f
1: ldgp gp, 0(gp)
- jmp zero, syscall_error
+ jmp zero, __syscall_error
END(__ieee_set_fp_control)
diff --git a/sysdeps/unix/sysv/linux/alpha/llseek.S b/sysdeps/unix/sysv/linux/alpha/llseek.S
index bd8c6595c9..6020f263cd 100644
--- a/sysdeps/unix/sysv/linux/alpha/llseek.S
+++ b/sysdeps/unix/sysv/linux/alpha/llseek.S
@@ -18,19 +18,17 @@ Cambridge, MA 02139, USA. */
/* For compatibility only: a "long" is 64 bits on the Alpha, so
llseek() isn't really needed. But there are some programs out
- there who may depend on it being around.
-*/
+ there who may depend on it being around. */
#include <sysdep.h>
.text
ENTRY(llseek)
- .prologue 0
-
- mov a3, t0 /* save result address */
+ .prologue 1
sll a1, 32, a1 /* build a 64 bit ofs out of 32 bit operands */
zap a2, 0xf0, a2
+ mov a3, t0 /* save result address */
bis a2, a1, a1
mov a4, a2 /* shift down whence */
@@ -44,6 +42,6 @@ ENTRY(llseek)
error: br gp, 1f
1: ldgp gp, 0(gp)
- jmp zero, syscall_error
+ jmp zero, __syscall_error
END(llseek)
diff --git a/sysdeps/unix/sysv/linux/alpha/pipe.S b/sysdeps/unix/sysv/linux/alpha/pipe.S
index b23803cecd..60334adb45 100644
--- a/sysdeps/unix/sysv/linux/alpha/pipe.S
+++ b/sysdeps/unix/sysv/linux/alpha/pipe.S
@@ -20,23 +20,11 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
- .text
-LEAF(__pipe, 0)
- .prologue 0
-
- ldi v0, __NR_pipe
- call_pal PAL_callsys
- bne a3, error
-
+PSEUDO (__pipe, pipe, 0)
stl r0, 0(a0)
stl r1, 4(a0)
mov zero, v0
ret
-
-error: br gp, 1f
-1: ldgp gp, 0(gp)
- jmp zero, syscall_error
-
- END(__pipe)
+PSEUDO_END(__pipe)