Thu Jun 13 17:25:11 1996 David Mosberger-Tang <davidm@azstarnet.com>

* sysdeps/generic/memcmp.c: Add prototype decls for internal fns.

	* locale/programs/locale.c: Include string.h.

	* sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
 	(xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
 	appropriate sign-extension is performed on machines with
 	sizeof(long) > 4.

	* sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
 	sizeof(int)<sizeof(long), we need to go through a temporary
 	variable.

	* locale/programs/ld-numeric.c: Include <alloca.h>

	* libio/stdio.h (__libc_fatal): Add prototype.

	* libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
 	in efect.

	* libio/iopopen.c (read_or_write, parent_end, child_end): Declare
 	volatile to avoid "might get clobbered by longjmp" warning.

	* features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
 	unless _LOOSE_KERNEL_NAMES is in effect (which, with high
 	probability is a sure loser).
	* sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.

	* sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
	* sysdeps/unix/sysv/linux/alpha/start.S: Ditto.

	* misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
	to be Linux FSSTND compliant.

Mon Jun 10 17:50:31 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.

	* sysdeps/unix/sysv/linux/alpha/sysdep.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/llseek.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
 	__syscall_error to avoid intruding application name space.

	* sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
	to SYS_get?id so that syscall stubs in sysdeps/unix define
	these syscalls in terms of getxpid/getxuid/getxgid.

	* sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
 	sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
 	sysdeps/unix/execve.S, sysdeps/unix/fork.S,
 	sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.

	* sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
 	(PSEUDO_END): Rename END() to PSEUDO_END().

	* sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
 	to PSEUDO_END to improve branch-prediction.  Include .frame
 	directive to make syscalls debugabble.
	(PSEUDO_END): New macro.

	* sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
 	latter is illegal under DEC Unix.

	* sysdeps/unix/alpha/sysdep.S: Renamed from
	sysdeps/unix/sysv/linux/alpha/sysdep.S.  This file works for OSF/1
 	as well.
	* sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
 	EWOULDBLOCK -> EAGAIN mapping was unnecessary since
 	EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).

	* sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
 	address register in the .frame directive.

	* sysdeps/alpha/copysign.c: Remove.

	* sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
 	avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.

	* errno.h: Move __END_DECLS to correct place to make file
 	compilable under c++.

	* dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro.  Define
	d_ino only if <direntry.h> hasn't defined d_fileno.

	* configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
	arguments to weakext to make .weakext detection work on ECOFF systems.

	* FAQ: Add Linux/Alpha to list of supported platforms.  Mention
	that _validuser() has been replaced by __ivaliduser().

Thu Jun  6 21:39:38 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
 	as unsigned long, not as int (to avoid incorrect int->long
 	promotion).
This commit is contained in:
Roland McGrath 1996-06-19 06:54:12 +00:00
parent 6990326c21
commit a1470b6f83
47 changed files with 325 additions and 218 deletions

103
ChangeLog
View File

@ -19,6 +19,109 @@ Wed Jun 19 03:24:58 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/setlocale.c (setlocale): Initialize local variables to
prevent warnings.
Thu Jun 13 17:25:11 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/generic/memcmp.c: Add prototype decls for internal fns.
* locale/programs/locale.c: Include string.h.
* sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
(xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
appropriate sign-extension is performed on machines with
sizeof(long) > 4.
* sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
sizeof(int)<sizeof(long), we need to go through a temporary
variable.
* locale/programs/ld-numeric.c: Include <alloca.h>
* libio/stdio.h (__libc_fatal): Add prototype.
* libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
in efect.
* libio/iopopen.c (read_or_write, parent_end, child_end): Declare
volatile to avoid "might get clobbered by longjmp" warning.
* features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
unless _LOOSE_KERNEL_NAMES is in effect (which, with high
probability is a sure loser).
* sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.
* sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
* sysdeps/unix/sysv/linux/alpha/start.S: Ditto.
* misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
to be Linux FSSTND compliant.
Mon Jun 10 17:50:31 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.
* sysdeps/unix/sysv/linux/alpha/sysdep.S,
sysdeps/unix/sysv/linux/alpha/brk.S,
sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
sysdeps/unix/sysv/linux/alpha/llseek.S,
sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
__syscall_error to avoid intruding application name space.
* sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
to SYS_get?id so that syscall stubs in sysdeps/unix define
these syscalls in terms of getxpid/getxuid/getxgid.
* sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
sysdeps/unix/execve.S, sysdeps/unix/fork.S,
sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.
* sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
(PSEUDO_END): Rename END() to PSEUDO_END().
* sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
to PSEUDO_END to improve branch-prediction. Include .frame
directive to make syscalls debugabble.
(PSEUDO_END): New macro.
* sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
latter is illegal under DEC Unix.
* sysdeps/unix/alpha/sysdep.S: Renamed from
sysdeps/unix/sysv/linux/alpha/sysdep.S. This file works for OSF/1
as well.
* sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
EWOULDBLOCK -> EAGAIN mapping was unnecessary since
EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).
* sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
address register in the .frame directive.
* sysdeps/alpha/copysign.c: Remove.
* sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.
* errno.h: Move __END_DECLS to correct place to make file
compilable under c++.
* dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro. Define
d_ino only if <direntry.h> hasn't defined d_fileno.
* configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
arguments to weakext to make .weakext detection work on ECOFF systems.
* FAQ: Add Linux/Alpha to list of supported platforms. Mention
that _validuser() has been replaced by __ivaliduser().
Thu Jun 6 21:39:38 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
as unsigned long, not as int (to avoid incorrect int->long
promotion).
Tue Jun 18 17:56:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Version 1.91 test release.

7
FAQ
View File

@ -50,6 +50,7 @@ in the future are:
*-*-gnu GNU Hurd
i[3456]86-*-linux Linux-2.0 on Intel
alpha-*-linux Linux on Alpha
Other Linux platforms are also on the way to be supported but I need
some success reports first.
@ -214,6 +215,12 @@ incompatibilities:
init_module init_module <sys/module.h>
syslog ksyslog_ctl <sys/klog.h>
* lpd: Older versions of lpd depend on an routine called _validuser().
The library does not provide this function, but instead provides
__ivaliduser() which has a slightly different interfaces. Simply
upgrading to a newer lpd should fix this problem (e.g., the BSD 4.4
lpd is known to be working).
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

2
configure vendored
View File

@ -1483,7 +1483,7 @@ else
${libc_cv_asm_global_directive} foo
foo: .long 0
.weakext foo
.weakext bar, foo
.weakext foo, bar
EOF
if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
libc_cv_asm_weakext_directive=yes

View File

@ -455,7 +455,7 @@ cat > conftest.s <<EOF
${libc_cv_asm_global_directive} foo
foo: .long 0
.weakext foo
.weakext bar, foo
.weakext foo, bar
EOF
if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
libc_cv_asm_weakext_directive=yes

View File

@ -35,12 +35,16 @@ __BEGIN_DECLS
member that gives the length of `d_name'.
It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
member that gives the size of the entire directory entry. */
member that gives the size of the entire directory entry.
It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
member that gives the file offset of the next directory entry.
*/
#include <direntry.h>
#if defined(__USE_BSD) || defined(__USE_MISC)
#define d_ino d_fileno /* Backward compatibility. */
#if (defined(__USE_BSD) || defined(__USE_MISC)) && !defined(d_fileno)
#define d_ino d_fileno /* Backward compatibility. */
#endif
/* These macros extract size information from a `struct dirent *'.

View File

@ -60,10 +60,9 @@ typedef int error_t;
invoked. These variables are set up automatically at startup based on
the value of ARGV[0] (this works only if you use GNU ld). */
extern char *program_invocation_name, *program_invocation_short_name;
#endif /* Use GNU. */
#endif /* errno.h included */
#endif /* __USE_GNU */
#endif /* _ERRNO_H */
__END_DECLS
#endif /* errno.h */
#endif /* errno.h */

View File

@ -66,7 +66,13 @@ Cambridge, MA 02139, USA. */
#undef __USE_GNU
#undef __USE_REENTRANT
#undef __FAVOR_BSD
#undef __KERNEL_STRICT_NAMES
/* Suppress kernel-name space pollution unless user expressedly asks
for it: */
#ifndef _LOOSE_KERNEL_NAMES
# define __KERNEL_STRICT_NAMES
#endif
/* Always use ANSI things. */
#define __USE_ANSI 1

View File

@ -14,7 +14,7 @@ DEFUN_VOID(_IO_register_cleanup)
_IO_cleanup_registration_needed = 0;
}
void (*_IO_cleanup_registration_needed)() = _IO_register_cleanup;
void (*_IO_cleanup_registration_needed) __P((void)) = _IO_register_cleanup;
#else
void (*_IO_cleanup_registration_needed)() = NULL;
void (*_IO_cleanup_registration_needed) __P((void)) = NULL;
#endif /* _G_HAVE_ATEXIT */

View File

@ -84,9 +84,9 @@ DEFUN(_IO_proc_open, (fp, command, mode),
_IO_FILE* fp AND const char *command AND const char *mode)
{
#if _IO_HAVE_SYS_WAIT
int read_or_write;
volatile int read_or_write;
volatile int parent_end, child_end;
int pipe_fds[2];
int parent_end, child_end;
_IO_pid_t child_pid;
if (_IO_file_is_open(fp))
return NULL;

View File

@ -145,6 +145,8 @@ extern int ungetc __P ((int c, FILE* fp));
extern int vfprintf __P ((FILE *fp, char __const *fmt0, _G_va_list));
extern int vprintf __P ((char __const *fmt, _G_va_list));
extern int vsprintf __P ((char* string, __const char* format, _G_va_list));
extern void __libc_fatal __P ((__const char *__message))
__attribute__ ((__noreturn__));
#ifndef __STRICT_ANSI__
extern int dprintf __P ((int, __const char *, ...));

View File

@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */
# include <config.h>
#endif
#include <alloca.h>
#include <langinfo.h>
#include <string.h>

View File

@ -30,6 +30,7 @@ Cambridge, MA 02139, USA. */
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include "localeinfo.h"

View File

@ -140,7 +140,7 @@ $(objpfx)%_server.c $(objpfx)%_server.h:
$(include-%.defs) | \
$(MIG) - /dev/null -prefix _S_ \
$(MIGFLAGS) $(server-MIGFLAGS) $(MIGFLAGS-$*) \
$< -user /dev/null -header /dev/null \
-user /dev/null -header /dev/null \
-server $(@:.h=.c) -sheader $(@:.c=.h)
# To get header files that declare both the straight and __ functions,

View File

@ -50,7 +50,7 @@
#define _PATH_DRUM "/dev/drum"
#define _PATH_KMEM "/dev/kmem"
#define _PATH_MAILDIR "/var/mail"
#define _PATH_MAN "/usr/share/man"
#define _PATH_MAN "/usr/man"
#define _PATH_MEM "/dev/mem"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_SENDMAIL "/usr/sbin/sendmail"

View File

@ -52,6 +52,9 @@ extern char *malloc();
#include <sys/types.h>
#endif
#include <sys/time.h>
#include <sys/param.h>
#include <netinet/in.h>
#ifndef INADDR_LOOPBACK
#define INADDR_LOOPBACK (u_long)0x7F000001

View File

@ -99,10 +99,30 @@ xdr_int(xdrs, ip)
(void) (xdr_short(xdrs, (short *)ip));
return (xdr_long(xdrs, (long *)ip));
#else
if (sizeof (int) == 4) {
if (sizeof (int) < sizeof (long)) {
long l;
switch (xdrs->x_op) {
case XDR_ENCODE:
l = (long) *ip;
return XDR_PUTLONG(xdrs, &l);
case XDR_DECODE:
if (!XDR_GETLONG(xdrs, &l)) {
return FALSE;
}
*ip = (int) l;
return TRUE;
}
} else if (sizeof (int) == sizeof (long)) {
return (xdr_long(xdrs, (long *)ip));
} else {
} else if (sizeof (int) == sizeof (short)) {
return (xdr_short(xdrs, (short *)ip));
} else {
/* force unresolved reference (link-time error): */
extern unexpected_sizes_in_xdr_int ();
unexpected_sizes_in_xdr_int();
}
#endif
}
@ -115,15 +135,34 @@ xdr_u_int(xdrs, up)
XDR *xdrs;
u_int *up;
{
#ifdef lint
(void) (xdr_short(xdrs, (short *)up));
return (xdr_u_long(xdrs, (u_long *)up));
#else
if (sizeof (u_int) == 4) {
if (sizeof (u_int) < sizeof (u_long)) {
u_long l;
switch (xdrs->x_op) {
case XDR_ENCODE:
l = (u_long) *up;
return XDR_PUTLONG(xdrs, &l);
case XDR_DECODE:
if (!XDR_GETLONG(xdrs, &l)) {
return FALSE;
}
*up = (u_int) l;
return TRUE;
}
} else if (sizeof (u_int) == sizeof (u_long)) {
return (xdr_u_long(xdrs, (u_long *)up));
} else {
} else if (sizeof (u_int) == sizeof (u_short)) {
return (xdr_short(xdrs, (short *)up));
} else {
/* force unresolved reference (link-time error): */
extern unexpected_sizes_in_xdr_u_int ();
unexpected_sizes_in_xdr_u_int();
}
#endif
}

View File

@ -99,7 +99,7 @@ xdrmem_getlong(xdrs, lp)
if ((xdrs->x_handy -= 4) < 0)
return (FALSE);
*lp = (long)ntohl((u_long)(*((int32_t *)(xdrs->x_private))));
*lp = (int32_t) ntohl((*((int32_t *)(xdrs->x_private))));
xdrs->x_private += 4;
return (TRUE);
}

View File

@ -201,14 +201,14 @@ xdrrec_getlong(xdrs, lp)
if (rstrm->fbtbc >= BYTES_PER_XDR_UNIT &&
rstrm->in_boundry - (char *) buflp >= BYTES_PER_XDR_UNIT)
{
*lp = ntohl(*buflp);
*lp = (int32_t) ntohl(*buflp);
rstrm->fbtbc -= BYTES_PER_XDR_UNIT;
rstrm->in_finger += BYTES_PER_XDR_UNIT;
} else {
if (! xdrrec_getbytes(xdrs, (caddr_t) &mylong,
BYTES_PER_XDR_UNIT))
return FALSE;
*lp = ntohl(mylong);
*lp = (int32_t) ntohl(mylong);
}
return TRUE;
}

View File

@ -108,7 +108,7 @@ xdrstdio_getlong(xdrs, lp)
if (fread((caddr_t)&mycopy, 4, 1, (FILE *)xdrs->x_private) != 1)
return (FALSE);
*(int32_t*)lp = ntohl(mycopy);
*lp = (int32_t) ntohl(mycopy);
return (TRUE);
}

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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*. */

View File

@ -20,3 +20,4 @@ Cambridge, MA 02139, USA. */
PSEUDO (_exit, exit, 1)
/* Shouldn't get here. */
PSEUDO_END(_exit)

View File

@ -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)

View File

@ -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

View File

@ -18,8 +18,6 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
.comm errno, 4
#if 0
.sdata
.globl STARTFRM

View File

@ -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

View File

@ -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)
{

View File

@ -28,5 +28,6 @@ Cambridge, MA 02139, USA. */
SYSCALL__ (execve, 3)
ret
PSEUDO_END(execve)
weak_alias (__execve, execve)

View File

@ -28,5 +28,6 @@ SYSCALL__ (fork, 0)
subl #1, r1
andl r1, r0
ret
PSEUDO_END(fork)
weak_alias (__fork, fork)

View File

@ -25,5 +25,6 @@ PSEUDO (__getegid, getgid, 0)
MOVE(r1, r0)
#endif
ret
PSEUDO_END(__getegid)
weak_alias (__getegid, getegid)

View File

@ -25,5 +25,6 @@ PSEUDO (__geteuid, getuid, 0)
MOVE(r1, r0)
#endif
ret
PSEUDO_END(__geteuid)
weak_alias (__geteuid, geteuid)

View File

@ -25,5 +25,6 @@ PSEUDO (__getppid, getpid, 0)
MOVE(r1, r0)
#endif
ret
PSEUDO_END(__getppid)
weak_alias (__getppid, getppid)

View File

@ -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

View File

@ -27,3 +27,4 @@ Cambridge, MA 02139, USA. */
SYSCALL (syscall, 1)
ret
PSEUDO_END(syscall)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)
weak_alias (__pipe, pipe)

View File

@ -24,7 +24,7 @@ Cambridge, MA 02139, USA. */
.text
LEAF(sigsuspend, 0)
.prologue 0
.prologue 1
ldq a0, 0(a0)
ldi v0, __NR_sigsuspend
@ -34,6 +34,6 @@ LEAF(sigsuspend, 0)
error: br gp, 1f
1: ldgp gp, 0(gp)
jmp zero, syscall_error
jmp zero, __syscall_error
END(sigsuspend)

View File

@ -1,5 +1,5 @@
/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
Contributed by Brendan Kehoe (brendan@zen.org).
Contributed by Richard Henderson <rth@tamu.edu>
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
@ -18,81 +18,76 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
.comm errno, 4
#ifdef __ELF__
.type errno, @object
#endif
.text
LEAF(__start, 16)
lda sp, -16(sp)
.prologue 0
.globl __start
.align 3
.ent __start, 0
__start:
.frame fp, 0, zero
mov zero, fp
br gp, 1f
1: ldgp gp, 0(gp)
.prologue 1
stq zero, 8(sp) /* terminate frame chain */
/* Save v0. When starting a binary via the dynamic linker, s0
contains the address of the shared library termination function,
which we will register below with atexit() to be called by exit().
If we are statically linked, this will be NULL. */
mov v0, s0
br t0, 1f
1: ldgp gp, 0(t0)
mov zero, a0 /* establish __fpu_control w/kernel */
jsr ra, __setfpucw
/* Do essential libc initialization (sp points to argc, argv, and envp) */
jsr ra, __libc_init_first
ldgp gp, 0(ra)
/* clear out errno. */
stl zero, (errno)
/* Now that we have the proper stack frame, register library termination
function, if there is any: */
ldl a0, 16(sp) /* get argc */
lda a1, 24(sp) /* get argv */
beq s0, 1f
mov s0, a0
jsr ra, atexit
ldgp gp, 0(ra)
1:
/* initialize environ: */
lda t0, environ
s8addq a0, a1, a2
addq a2, 0x8, a2
stq a2, 0(t0)
/* Extract the arguments and environment as encoded on the stack. */
ldl a0, 0(sp) /* get argc */
lda a1, 8(sp) /* get argv */
s8addq a0, a1, a2 /* get envp */
addq a2, 8, a2
stq a2, _environ
mov a0, s0
mov a0, s0 /* tuck them away */
mov a1, s1
mov a2, s2
#ifdef HAVE_INITFINI
/* register the _fini sections to ensure destructors get run: */
lda a0, _fini
jsr ra, atexit
ldgp gp, 0(ra)
/* Now run the _init section of the program itself. The _init
sections of shared libraries will be run by the dynamic linker. */
/* Call _init, the entry point to our own .init section. */
jsr ra, _init
ldgp gp, 0(ra)
/* initialize constructors: */
jsr ra, __main
/* Register our .fini section with atexit. */
lda a0, _fini
jsr ra, atexit
ldgp gp, 0(ra)
#else
jsr ra, __libc_init
/* initialize constructors: */
jsr ra, __main
ldgp gp, 0(ra)
#endif
mov s0, a0
mov s1, a1
mov s2, a2
/* Call the user's main and exit with its return value. */
jsr ra, main
ldgp gp, 0(ra)
mov v0, a0
jsr ra, exit
lda pv, exit
jsr ra, (pv), 1
ldgp gp, 0(ra)
/* in case exit returns: */
1: ldi v0, __NR_exit
call_pal PAL_callsys
br 1b
.end __start
/* Die very horribly if exit returns. Call_pal hlt is callable from
kernel mode only; this will result in an illegal instruction trap. */
call_pal 0
END(__start)
/* Define a symbol for the first piece of initialized data. */
.data

View File

@ -42,19 +42,19 @@ Cambridge, MA 02139, USA. */
LEAF(__syscall, 0)
bis a0, a0, v0 # Syscall number -> v0
bis a1, a1, a0 # arg1-arg5 -> a0-a4
bis a2, a2, a1
bis a3, a3, a2
bis a4, a4, a3
bis a5, a5, a4
mov a0, v0 /* Syscall number -> v0 */
mov a1, a0 /* arg1-arg5 -> a0-a4 */
mov a2, a1
mov a3, a2
mov a4, a3
mov a5, a4
call_pal PAL_callsys # Invoke system call
call_pal PAL_callsys /* Invoke system call */
bne a3, error
ret
error: br gp, 2f
2: ldgp gp, 0(gp)
jmp zero, syscall_error
jmp zero, __syscall_error
weak_alias(__syscall, syscall)

View File

@ -38,15 +38,15 @@ Cambridge, MA 02139, USA. */
# define SYS_ify(syscall_name) __NR_/**/syscall_name
#endif
/*
* Define some aliases for syscalls that return two values (in r0 and r1):
*/
/* Define some aliases to make automatic syscall generation work
properly. The SYS_* variants are for the benefit of the files in
sysdeps/unix. */
#define __NR_getpid __NR_getxpid
#define __NR_getppid __NR_getxpid
#define __NR_getuid __NR_getxuid
#define __NR_geteuid __NR_getxuid
#define __NR_getgid __NR_getxgid
#define __NR_getegid __NR_getxgid
#define SYS_getpid __NR_getxpid
#define SYS_getuid __NR_getxuid
#define SYS_getgid __NR_getxgid
/*
* Some syscalls no Linux program should know about:

View File

@ -19,10 +19,9 @@ Cambridge, MA 02139, USA. */
#ifndef _GNU_TYPES_H
#define _GNU_TYPES_H 1
/* Get actual type definitions for architecture from kernel headers.
This #define tells <linux/types.h> not to define `dev_t' et al itself. */
#define __KERNEL_STRICT_NAMES
#define _LINUX_TYPES_DONT_EXPORT
#include <features.h>
/* Get actual type definitions for architecture from kernel headers. */
#include <linux/types.h>
/* Convenience types. */