Wed May 29 00:57:37 1996 David Mosberger-Tang <davidm@azstarnet.com>

* time/Makefile (tests): Add test-tz.

	* time/test-tz.c: New test.

	* time/clocktest.c: Rewrite to test more meaningfully.

	* sysdeps/unix/sysv/linux/syscalls.list: Add bdflush,
 	create_module, delete_module, get_kernel_syms, init_module,
 	klogctl.

	* sysdeps/unix/sysv/linux/sys/param.h (MAXSYMLINKS): Define as 5
	instead of SYMLOOP_MAX, which is nowhere to be found.

	* sysdeps/unix/sysv/linux/sys/msq_buf.h,
 	sysdeps/unix/sysv/linux/sys/sem_buf.h,
 	sysdeps/unix/sysv/linux/sys/shm_buf.h [__USE_MISC]: Add more
 	control ops and datastructures.

	* sysdeps/unix/sysv/linux/sys/io.h: New file declaring low-level
 	I/O related functions.

	* sysdeps/unix/sysv/linux/sys/kdaemon.h: New file declaring kernel
	daemon related functions/operations.

	* sysdeps/unix/sysv/linux/sys/klog.h: New file declaring kernel
	logging related functions/operations.

	* sysdeps/unix/sysv/linux/sys/module.h: New file declaring kernel
	module related functions/operations.

	* sysdeps/unix/sysv/linux/speed.c: Only do "mention this twice" hack
	for non-Alpha based Linux systems.

	* sysdeps/unix/sysv/linux/alpha/speed.c: Remove.

	* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/module.h,
	sys/io.h, sys/klog.h, and sys/kdaemon.h.

	* sysdeps/unix/sysdep.h (END): Define empty END macro for
 	platforms that don't need some sort of end directive at the
	end of functions.

	* sysdeps/unix/make-syscalls.sh: Emit END($strong) at end of
 	syscall wrapper to allow correct generation of debugging
 	information.

	* sysdeps/unix/alpha/sysdep.h (END): Redefine to use .end
 	directive for both ELF and ECOFF.
	(ret): Delete macro.  It was a dangerous macro and unnecessary
 	since the Alpha assemblers recognizes "ret" as a macro themselves.

	* sysdeps/gnu/utmpbits.h (struct utmp): Move ut_tv behind
 	ut_session to guarantee long alignment.  This is important for
 	Linux/Alpha since ut_tv.tv_sec is 32 bits and time_t is 64 bits.
  	This will all get cleaned up as programs start to use ut_tv
 	instead ut_time.

	* sysdeps/alpha/divrem.h: Include <sysdep.h> instead of <*/regdef.h>.

	* sysdeps/alpha/bsd-_setjmp.S (setjmp): Renamed entry point to
	_setjmp.

	* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
 	sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/bsd-setjmp.S,
 	sysdeps/alpha/copysign.S, sysdeps/alpha/divrem.h,
 	sysdeps/alpha/fabs.S, sysdeps/alpha/ffs.S, sysdeps/alpha/htonl.S,
 	sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
 	sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.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/pipe.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/sysdep.S: Use END macro instead of
 	.end directive.

	* csu/initfini.c (_fini): Tell gcc that _fini is not a leaf
 	function by having it contain a dummy function call.

	* configure.in (config_machine): Don't make ELF the default for
 	Linux/Alpha just yet (use --with-elf instead).
	(.init/.fini check): Generate .text to ensure function start and
 	end are in same section.

	* sysdeps/unix/bsd/osf/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S (__curbrk): Store the entire
 	break value, not just the low 32 bits to accomodate large
 	memories.

Tue May 28 10:46:04 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/unix/sysv/linux/alpha/brk.S: Rather than attempt to
	dynamically resolve _end for initializing __curbrk, support the
	brk(0) query idiom.

	* sysdeps/alpha/bb_init_func.S: Don't make `init' an external symbol.

	* sysdeps/alpha/bsd-_setjmp.S: The function is _setjmp not setjmp.

Sun May 26 22:17:38 1996  Richard Henderson  <rth@tamu.edu>

	* stdlib/lcong48_r.c, stdlib/seed48_r.c, stdlib/strtod.c,
	stdlib/strtol.c: Include <string.h> for mem* and str* fns used.

Thu May 23 02:15:56 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/io.h,
 	sys/klog.h, and sys/kdaemon.h.

	* sysdeps/unix/sysv/linux/sys/io.h: New file.
	* sysdeps/unix/sysv/linux/sys/klog.h: Ditto.
	* sysdeps/unix/sysv/linux/sys/kdaemon.h: Ditto.

	* sysdeps/unix/alpha/sysdep.h (ret): Remove macro.  It is
 	dangerous and unnecessary since both OSF/1 as and gas define "ret"
 	as a pseudo-instruction.

Sat Jun  1 17:18:21 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* time/tzset.c (__tzset): Clear tz_rules name pointers after freeing
	them.  Bug found by David Mosberger-Tang.

	* sysdeps/posix/tempname.c (__stdio_gen_tempname): Use __ptr_t instead
	of PTR.

	* extra-lib.mk (extra-objs): Use patsubst intead of $(A:=B) syntax
	to work around Make bug when A contains var ref.

Fri May 31 18:27:52 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* string/string.h [__USE_MISC]: Declare basename; OSF/1 puts it here.

	* sysdeps/unix/sysv/linux/syscalls.list (getpgid, setpgid): Define __
	strong names and [gs]etpgid as weak aliases.

	* math/math_private.h (GET_LDOUBLE_EXP): Add missing backslash.
This commit is contained in:
Roland McGrath 1996-06-02 18:50:07 +00:00
parent 76060ec0b8
commit 847242451c
51 changed files with 483 additions and 174 deletions

139
ChangeLog
View File

@ -1,5 +1,144 @@
Wed May 29 00:57:37 1996 David Mosberger-Tang <davidm@azstarnet.com>
* time/Makefile (tests): Add test-tz.
* time/test-tz.c: New test.
* time/clocktest.c: Rewrite to test more meaningfully.
* sysdeps/unix/sysv/linux/syscalls.list: Add bdflush,
create_module, delete_module, get_kernel_syms, init_module,
klogctl.
* sysdeps/unix/sysv/linux/sys/param.h (MAXSYMLINKS): Define as 5
instead of SYMLOOP_MAX, which is nowhere to be found.
* sysdeps/unix/sysv/linux/sys/msq_buf.h,
sysdeps/unix/sysv/linux/sys/sem_buf.h,
sysdeps/unix/sysv/linux/sys/shm_buf.h [__USE_MISC]: Add more
control ops and datastructures.
* sysdeps/unix/sysv/linux/sys/io.h: New file declaring low-level
I/O related functions.
* sysdeps/unix/sysv/linux/sys/kdaemon.h: New file declaring kernel
daemon related functions/operations.
* sysdeps/unix/sysv/linux/sys/klog.h: New file declaring kernel
logging related functions/operations.
* sysdeps/unix/sysv/linux/sys/module.h: New file declaring kernel
module related functions/operations.
* sysdeps/unix/sysv/linux/speed.c: Only do "mention this twice" hack
for non-Alpha based Linux systems.
* sysdeps/unix/sysv/linux/alpha/speed.c: Remove.
* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/module.h,
sys/io.h, sys/klog.h, and sys/kdaemon.h.
* sysdeps/unix/sysdep.h (END): Define empty END macro for
platforms that don't need some sort of end directive at the
end of functions.
* sysdeps/unix/make-syscalls.sh: Emit END($strong) at end of
syscall wrapper to allow correct generation of debugging
information.
* sysdeps/unix/alpha/sysdep.h (END): Redefine to use .end
directive for both ELF and ECOFF.
(ret): Delete macro. It was a dangerous macro and unnecessary
since the Alpha assemblers recognizes "ret" as a macro themselves.
* sysdeps/gnu/utmpbits.h (struct utmp): Move ut_tv behind
ut_session to guarantee long alignment. This is important for
Linux/Alpha since ut_tv.tv_sec is 32 bits and time_t is 64 bits.
This will all get cleaned up as programs start to use ut_tv
instead ut_time.
* sysdeps/alpha/divrem.h: Include <sysdep.h> instead of <*/regdef.h>.
* sysdeps/alpha/bsd-_setjmp.S (setjmp): Renamed entry point to
_setjmp.
* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/bsd-setjmp.S,
sysdeps/alpha/copysign.S, sysdeps/alpha/divrem.h,
sysdeps/alpha/fabs.S, sysdeps/alpha/ffs.S, sysdeps/alpha/htonl.S,
sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.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/pipe.S,
sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
sysdeps/unix/sysv/linux/alpha/sysdep.S: Use END macro instead of
.end directive.
* csu/initfini.c (_fini): Tell gcc that _fini is not a leaf
function by having it contain a dummy function call.
* configure.in (config_machine): Don't make ELF the default for
Linux/Alpha just yet (use --with-elf instead).
(.init/.fini check): Generate .text to ensure function start and
end are in same section.
* sysdeps/unix/bsd/osf/alpha/brk.S,
sysdeps/unix/sysv/linux/alpha/brk.S (__curbrk): Store the entire
break value, not just the low 32 bits to accomodate large
memories.
Tue May 28 10:46:04 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/unix/sysv/linux/alpha/brk.S: Rather than attempt to
dynamically resolve _end for initializing __curbrk, support the
brk(0) query idiom.
* sysdeps/alpha/bb_init_func.S: Don't make `init' an external symbol.
* sysdeps/alpha/bsd-_setjmp.S: The function is _setjmp not setjmp.
Sun May 26 22:17:38 1996 Richard Henderson <rth@tamu.edu>
* stdlib/lcong48_r.c, stdlib/seed48_r.c, stdlib/strtod.c,
stdlib/strtol.c: Include <string.h> for mem* and str* fns used.
Thu May 23 02:15:56 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/io.h,
sys/klog.h, and sys/kdaemon.h.
* sysdeps/unix/sysv/linux/sys/io.h: New file.
* sysdeps/unix/sysv/linux/sys/klog.h: Ditto.
* sysdeps/unix/sysv/linux/sys/kdaemon.h: Ditto.
* sysdeps/unix/alpha/sysdep.h (ret): Remove macro. It is
dangerous and unnecessary since both OSF/1 as and gas define "ret"
as a pseudo-instruction.
Sat Jun 1 17:18:21 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/tzset.c (__tzset): Clear tz_rules name pointers after freeing
them. Bug found by David Mosberger-Tang.
* sysdeps/posix/tempname.c (__stdio_gen_tempname): Use __ptr_t instead
of PTR.
* extra-lib.mk (extra-objs): Use patsubst intead of $(A:=B) syntax
to work around Make bug when A contains var ref.
Fri May 31 18:27:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* string/string.h [__USE_MISC]: Declare basename; OSF/1 puts it here.
* sysdeps/unix/sysv/linux/syscalls.list (getpgid, setpgid): Define __
strong names and [gs]etpgid as weak aliases.
Thu May 30 11:24:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/math_private.h (GET_LDOUBLE_EXP): Add missing backslash.
* po/header.pot: Replace with exact boilerplate pinard dictates.
* sysdeps/i386/strtok.S (Lillegal_argument): Remove this code to set

View File

@ -86,13 +86,10 @@ esac
case "$host_os" in
gnu* | linux* | sysv4* | solaris2*)
# These systems always use the ELF format.
elf=yes ;;
esac
# Linux/Alpha does not use ELF yet.
case "$host_cpu-$host_os" in
alpha*-linux*)
gnu_ld=no elf=no ;;
if test "$host_cpu" != alpha; then # Linux/Alpha is not fully ELF yet
elf=yes
fi
;;
esac
machine=$config_machine
@ -406,7 +403,8 @@ fi
if test $elf != yes; then
AC_CACHE_CHECK(for .init and .fini sections, libc_cv_have_initfini,
[AC_TRY_COMPILE(, [asm (".section .init");
asm (".section .fini");],
asm (".section .fini");
asm (".text");],
libc_cv_have_initfini=yes,
libc_cv_have_initfini=no)])
AC_SUBST(libc_cv_have_initfini)dnl

View File

@ -98,6 +98,15 @@ _fini (void)
Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */
asm ("\nEOF.crti.fini\
\n\
cat > /dev/null <<\\EOF.fini.skip");
/* Let GCC know that _fini is not a leaf function by having a dummy
function call here. We arrange for this call to be omitted from
either crt file. */
i_am_not_a_leaf();
asm ("\nEOF.fini.skip\
\n\
fgrep .fini crti.s-new >>crtn.s-new\n\
cat >> crtn.s-new <<\\EOF.crtn.fini");

View File

@ -19,7 +19,8 @@ extra-objs := $(extra-objs)
# Add each flavor of library to the lists of things to build and install.
install-lib += $(foreach o,$(object-suffixes-$(lib)),$(lib:lib%=$(libtype$o)))
extra-objs += $(foreach o,$(object-suffixes-$(lib)),$($(lib)-routines:=$o))
extra-objs += $(foreach o,$(object-suffixes-$(lib)),\
$(patsubst %,%$o,$($(lib)-routines)))
alltypes-$(lib) := $(foreach o,$(object-suffixes-$(lib)),\
$(objpfx)$(patsubst %,$(libtype$o),\
$(lib:lib%=%)))

View File

@ -219,7 +219,7 @@ do { \
#define GET_LDOUBLE_EXP(exp,d) \
do { \
ieee_long_double_shape_type ge_u; \
ge_u.value = (d);
ge_u.value = (d); \
(exp) = ge_u.parts.sign_exponent; \
} while (0)

View File

@ -18,6 +18,7 @@ not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <stdlib.h>
#include <string.h>
int
lcong48_r (param, buffer)

View File

@ -18,6 +18,7 @@ not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <stdlib.h>
#include <string.h>
int
seed48_r (seed16v, buffer)

View File

@ -57,6 +57,7 @@ Boston, MA 02111-1307, USA. */
#include "../locale/localeinfo.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>
/* The gmp headers need some configuration frobs. */
#define HAVE_ALLOCA 1

View File

@ -39,6 +39,7 @@ extern int errno;
#ifdef STDC_HEADERS
# include <stddef.h>
# include <stdlib.h>
# include <string.h>
#else
# ifndef NULL
# define NULL 0

View File

@ -213,6 +213,11 @@ extern char *strfry __P ((char *__string));
extern __ptr_t memfrob __P ((__ptr_t __s, size_t __n));
#endif
#ifdef __USE_MISC
/* Return the file name within directory of FILENAME. */
extern char *basename __P ((__const char *filename));
#endif
__END_DECLS
#endif /* string.h */

View File

@ -106,4 +106,4 @@ LEAF(_mcount, 0xb0)
addq sp, 0xb0, sp
ret zero,($at),1
.end _mcount
END(_mcount)

View File

@ -41,10 +41,11 @@ ENTRY(__bb_init_func)
beq t0, init /* not initialized yet -> */
ret
.end __bb_init_func
END(__bb_init_func)
LEAF(init, 0x38)
.ent init
init:
.frame sp, 0x38, ra, 0
subq sp, 0x38, sp
.prologue 0
@ -84,4 +85,4 @@ leave: ldq pv, 0x30(sp)
addq sp, 0x38, sp
ret
.end init
.end init

View File

@ -23,8 +23,8 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
ENTRY(setjmp)
ENTRY(_setjmp)
lda $27, __sigsetjmp /* Load address to jump to. */
bis $31, $31, $17 /* Pass a second argument of zero. */
jmp $31, ($27), __sigsetjmp /* Call __sigsetjmp. */
.end setjmp
END(_setjmp)

View File

@ -27,4 +27,4 @@ ENTRY(setjmp)
lda $27, __sigsetjmp /* Load address to jump to. */
bis $31, 1, $17 /* Pass a second argument of one. */
jmp $31, ($27), __sigsetjmp /* Call __sigsetjmp. */
.end setjmp
END(setjmp)

View File

@ -24,6 +24,6 @@ ENTRY(__copysign)
cpys $f17,$f16,$f0
ret
.end __copysign
END(__copysign)
weak_alias(__copysign, copysign)

View File

@ -32,12 +32,12 @@ sequence, these expect their arguments in registers t10 and t11, and
return the result in t12 (aka pv). Registers AT and v0 may be
clobbered (assembly temporary), anything else must be saved. */
#include <sysdep.h>
#ifdef __linux__
# include <alpha/regdef.h>
# include <asm/gentrap.h>
# include <asm/pal.h>
#else
# include <regdef.h>
# include <machine/pal.h>
#endif
@ -185,4 +185,4 @@ divbyzero:
ldq arg1,0x00(sp)
br done
.end FUNC_NAME
END(FUNC_NAME)

View File

@ -24,4 +24,4 @@ ENTRY(fabs)
cpys $f31,$f16,$f0
ret
.end fabs
END(fabs)

View File

@ -63,4 +63,4 @@ ENTRY(ffs)
done: ret
.end ffs
END(ffs)

View File

@ -31,7 +31,7 @@ ENTRY(__htonl)
or t2, v0, v0 # v0 = ddccbbaa
ret
.end __htonl
END(__htonl)
strong_alias_asm(__htonl, __ntohl)
weak_alias(__htonl, htonl)

View File

@ -25,7 +25,7 @@ ENTRY(__htons)
bis v0, t1, v0 # v0 = bbaa
ret
.end __htons
END(__htons)
strong_alias_asm(__htons, __ntohs)
weak_alias(__htons, htons)

View File

@ -157,4 +157,4 @@ not_found:
mov zero, v0
ret
.end memchr
END(memchr)

View File

@ -30,4 +30,4 @@ ENTRY (__sigsetjmp)
bis $15, $15, $19 /* Pass FP as 4th arg. */
jmp $31, ($27), __sigsetjmp_aux /* Call __sigsetjmp_aux. */
.end __sigsetjmp
END(__sigsetjmp)

View File

@ -67,4 +67,4 @@ found: blbs t1, done # make aligned case fast
done: subq v0, a0, v0
ret
.end strlen
END(strlen)

View File

@ -69,8 +69,8 @@ struct utmp
char ut_user[UT_NAMESIZE]; /* Username (not NUL terminated). */
char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */
int ut_exit; /* Process termination/exit status. */
struct timeval ut_tv; /* Time entry was made. */
long ut_session; /* Session ID, used for windowing. */
struct timeval ut_tv; /* Time entry was made. */
int32_t ut_addr; /* Internet address of remote host. */
char pad[32]; /* Reserved for future use. */
};

View File

@ -218,7 +218,7 @@ __stdio_gen_tempname (const char *dir, const char *pfx, int dir_search,
errno = save;
return NULL;
}
(*streamptr)->__cookie = (PTR) (long int) fd;
(*streamptr)->__cookie = (__ptr_t) (long int) fd;
(*streamptr)->__mode.__write = 1;
(*streamptr)->__mode.__read = 1;
(*streamptr)->__mode.__binary = 1;

View File

@ -97,7 +97,9 @@ name/**/: \
3:
#endif
#define ret ret zero,(ra),1
#undef END
#define END(sym) .end sym
#define r0 v0
#define r1 a4

View File

@ -41,7 +41,7 @@ ENTRY(__brk)
/* Update __curbrk and exit cleanly. */
/* ldgp gp, 0(t12) */
stl a0, __curbrk
stq a0, __curbrk
mov zero, v0
ret

View File

@ -61,7 +61,8 @@ EOF
\$(foreach o,\$(object-suffixes),\$(objpfx)$file\$o): \$(objpfx)s-proto.d
(echo '#include <sysdep.h>'; \\
echo 'PSEUDO ($strong, $syscall, $nargs)'; \\
echo ' ret'; \\"
echo ' ret'; \\
echo 'END($strong)'; \\"
# Append any weak aliases defined for this syscall function.
for name in $weak; do

View File

@ -54,3 +54,7 @@ Cambridge, MA 02139, USA. */
#else
#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)

View File

@ -17,7 +17,9 @@ endif
ifeq ($(subdir), misc)
sysdep_routines += mount umount xmknod s_ptrace s_sysctl sysctl llseek \
setfsgid setfsuid sysinfo uselib s_reboot
headers += sys/mount.h sys/sysinfo.h sys/acct.h sys/sysctl.h
headers += sys/mount.h sys/sysinfo.h sys/acct.h sys/sysctl.h sys/module.h \
sys/io.h sys/klog.h sys/kdaemon.h
install-others += $(includedir)/sys/syscall.h

View File

@ -23,17 +23,7 @@ break value (instead of the new, requested one). */
#include <sysdep.h>
#include <errnos.h>
#ifndef HAVE_GNU_LD
#define _end end
#endif
.extern _end,8
.data
.globl __curbrk
__curbrk:
.quad _end
.comm __curbrk, 8
.text
LEAF(__brk, 0)
@ -42,11 +32,15 @@ LEAF(__brk, 0)
ldi v0, __NR_brk
call_pal PAL_callsys
/* Correctly handle the brk(0) query case. */
cmoveq a0, v0, a0
subq a0, v0, t0
bne t0, error
/* Update __curbrk and return cleanly. */
stl a0, __curbrk
stq a0, __curbrk
mov zero, v0
ret
@ -54,6 +48,6 @@ LEAF(__brk, 0)
error: ldi v0, ENOMEM
jmp zero, syscall_error
.end __brk
END(__brk)
weak_alias (__brk, brk)

View File

@ -41,6 +41,6 @@ error: lda sp, 8(sp)
1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end __ieee_get_fp_control
END(__ieee_get_fp_control)
weak_alias (__ieee_get_fp_control, ieee_get_fp_control)

View File

@ -39,6 +39,6 @@ error: br gp, 1f
1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end __ieee_set_fp_control
END(__ieee_set_fp_control)
weak_alias (__ieee_set_fp_control, ieee_set_fp_control)

View File

@ -46,4 +46,4 @@ error: br gp, 1f
1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end llseek
END(llseek)

View File

@ -37,6 +37,6 @@ error: br gp, 1f
1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end __pipe
END(__pipe)
weak_alias (__pipe, pipe)

View File

@ -36,4 +36,4 @@ error: br gp, 1f
1: ldgp gp, 0(gp)
jmp zero, syscall_error
.end sigsuspend
END(sigsuspend)

View File

@ -1,103 +0,0 @@
/* `struct termios' speed frobnication functions. Linux version.
Copyright (C) 1991, 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. */
#include <stddef.h>
#include <errno.h>
#include <termios.h>
static const speed_t speeds[] =
{
0,
50,
75,
110,
134,
150,
200,
300,
600,
1200,
1800,
2400,
4800,
9600,
19200,
38400,
57600,
115200,
230400,
460800,
};
/* Return the output baud rate stored in *TERMIOS_P. */
speed_t
cfgetospeed (termios_p)
const struct termios *termios_p;
{
speed_t retval = termios_p->c_cflag & (CBAUD | CBAUDEX);
if (retval & CBAUDEX)
{
retval &= ~CBAUDEX;
retval |= CBAUD + 1;
}
return retval;
}
/* Return the input baud rate stored in *TERMIOS_P.
For Linux there is no difference between input and output speed. */
strong_alias (cfgetospeed, cfgetispeed);
/* Set the output baud rate stored in *TERMIOS_P to SPEED. */
int
cfsetospeed (termios_p, speed)
struct termios *termios_p;
speed_t speed;
{
register unsigned int i;
if (termios_p == NULL)
{
errno = EINVAL;
return -1;
}
/* This allows either B1200 or 1200 to work. XXX
Do we really want to try to support this, given that
fetching the speed must return one or the other? */
for (i = 0; i < sizeof (speeds) / sizeof (speeds[0]); ++i)
if (i == speed || speeds[i] == speed)
{
termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
termios_p->c_cflag |= (i & CBAUD);
if (i & ~CBAUD)
termios_p->c_cflag |= CBAUDEX;
return 0;
}
errno = EINVAL;
return -1;
}
/* Set the input baud rate stored in *TERMIOS_P to SPEED.
For Linux there is no difference between input and output speed. */
strong_alias (cfsetospeed, cfsetispeed);

View File

@ -39,7 +39,9 @@ static const speed_t speeds[] =
9600,
19200,
38400,
#ifndef __alpha__
38400, /* Mention this twice here is a trick. */
#endif
57600,
115200,
230400,

View File

@ -0,0 +1,39 @@
/* Copyright (C) 1996 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. */
#ifndef _SYS_IO_H
#define _SYS_IO_H
#include <asm/io.h>
/* If TURN_ON is TRUE, request for permission to do direct i/o on the
port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
permission off for that range. This call requires root privileges.
Portability note: not all Linux platforms support this call. Most
platforms based on the PC I/O architecture probably will, however.
E.g., Linux/Alpha for Alpha PCs supports this. */
extern int ioperm __P((unsigned long __from, unsigned long __num,
int __turn_on));
/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to
access any I/O port is granted. This call requires root
privileges. */
extern int iopl __P((int __level));
#endif /* _SYS_IO_H */

View File

@ -0,0 +1,9 @@
/* Interfaces to control the various kernel daemons. */
#ifndef _SYS_KDAEMON_H
#define _SYS_KDAEMON_H
/* Start, flush, or tune the kernel's buffer flushing daemon. */
extern int bdflush (int func, long data);
#endif /* _SYS_KDAEMON_H */

View File

@ -0,0 +1,10 @@
#ifndef _SYS_KLOG_H
#define _SYS_KLOG_H
/* Control the kernel's logging facility. This corresponds exactly to
the kernel's syslog system call, but that name is easily confused
with the user-level syslog facility, which is something completely
different. */
extern int klogctl __P((int type, char *bufp, int len));
#endif /* _SYS_KLOG_H */

View File

@ -0,0 +1,36 @@
#ifndef _SYS_MODULE_H
#define _SYS_MODULE_H
#include <features.h>
#include <linux/module.h>
/* Return number of kernel symbols if TABLE == NULL, otherwise, return
kernel symbols in TABLE. TABLE must be large enough to hold all
kernel symbols. */
extern int get_kernel_syms __P((struct kernel_sym * table));
/* Create a new module of name MODULE_NAME and of size SIZE bytes.
The return address is the starting address of the new module or -1L
if the module cannot be created (the return value needs to be cast
to (long) to detect the error condition). */
extern unsigned long create_module __P((const char * module_name,
size_t size));
/* Initialize the module called MODULE_NAME with the CONTENTSSIZE
bytes starting at address CONTENTS. CONTENTS normally contains the
text and data segment of the module (the bss is implicity zeroed).
After copying the contents, the function pointed to by
ROUTINES.init is executed. When the module is no longer needed,
ROUTINES.cleanup is executed. SYMTAB is NULL if the module does
not want to export symbols by itself, or a pointer to a symbol
table if the module wants to register its own symbols. */
extern int init_module __P((const char * module_name,
const void * contents, size_t contentssize,
struct mod_routines * routines,
struct symbol_table * symtab));
/* Delete the module named MODULE_NAME from the kernel. */
extern int delete_module __P((const char *module_name));
#endif /* _SYS_MODULE_H */

View File

@ -49,6 +49,28 @@ struct msqid_ds
__pid_t msg_lrpid; /* pid of last msgrcv() */
};
#ifdef __USE_MISC
#define msg_cbytes __msg_cbytes
/* ipcs ctl commands */
#define MSG_STAT 11
#define MSG_INFO 12
/* buffer for msgctl calls IPC_INFO, MSG_INFO */
struct msginfo {
int msgpool;
int msgmap;
int msgmax;
int msgmnb;
int msgmni;
int msgssz;
int msgtql;
ushort msgseg;
};
#endif /* __USE_MISC */
__END_DECLS
#endif /* sys/msq_buf.h */

View File

@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */
#ifndef NGROUPS
#define NGROUPS NGROUPS_MAX
#endif
#define MAXSYMLINKS SYMLOOP_MAX
#define MAXSYMLINKS 5
#define CANBSIZ MAX_CANON
#define NCARGS ARG_MAX
#define MAXPATHLEN PATH_MAX

View File

@ -60,6 +60,27 @@ union semun
struct seminfo *__buf; /* buffer for IPC_INFO */
};
#ifdef __USE_MISC
/* ipcs ctl cmds */
#define SEM_STAT 18
#define SEM_INFO 19
struct seminfo {
int semmap;
int semmni;
int semmns;
int semmnu;
int semmsl;
int semopm;
int semume;
int semusz;
int semvmx;
int semaem;
};
#endif /* __USE_MISC */
__END_DECLS
#endif /* sys/sem_buf.h */

View File

@ -38,11 +38,11 @@ __BEGIN_DECLS
/* Data structure describing a set of semaphores. */
struct shmid_ds
{
struct ipc_perm sem_perm; /* operation permisson struct */
struct ipc_perm shm_perm; /* operation permisson struct */
int shm_segsz; /* size of segment in bytes */
__time_t sem_atime; /* time of last shmat() */
__time_t sem_dtime; /* time of last shmdt() */
__time_t sem_ctime; /* time of last change by shmctl() */
__time_t shm_atime; /* time of last shmat() */
__time_t shm_dtime; /* time of last shmdt() */
__time_t shm_ctime; /* time of last change by shmctl() */
__pid_t shm_cpid; /* pid of creator */
__pid_t shm_lpid; /* pid of last shmop */
unsigned short int shm_nattch; /* number of current attaches */
@ -51,6 +51,35 @@ struct shmid_ds
struct vm_area_struct *__attaches; /* descriptors for attaches */
};
#ifdef __USE_MISC
/* ipcs ctl commands */
#define SHM_STAT 13
#define SHM_INFO 14
/* shm_mode upper byte flags */
#define SHM_DEST 01000 /* segment will be destroyed on last detach */
#define SHM_LOCKED 02000 /* segment will not be swapped */
struct shminfo {
int shmmax;
int shmmin;
int shmmni;
int shmseg;
int shmall;
};
struct shm_info {
int used_ids;
ulong shm_tot; /* total allocated shm */
ulong shm_rss; /* total resident shm */
ulong shm_swp; /* total swapped shm */
ulong swap_attempts;
ulong swap_successes;
};
#endif /* __USE_MISC */
__END_DECLS
#endif /* sys/shm_buf.h */

View File

@ -1,15 +1,20 @@
# File name Caller Syscall name # args Strong name Weak names
adjtimex adjtime adjtimex 1 __adjtimex
bdflush - bdflush 2 bdflush
create_module - create_module 3 create_module
delete_module - delete_module 3 delete_module
fdatasync - fdatasync 1 fdatasync
flock - flock 2 __flock flock
fork - fork 0 __fork fork
get_kernel_syms - get_kernel_syms 1 get_kernel_syms
getegid - getegid 0 __getegid getegid
geteuid - geteuid 0 __geteuid geteuid
getpgid - getpgid 1 getpgid
getpgid - getpgid 1 __getpgid getpgid
getpgrp - getpgrp 0 getpgrp
getppid - getppid 0 __getppid getppid
getsid - getsid 1 getsid
init_module - init_module 5 init_module
ioperm - ioperm 3 ioperm
iopl - iopl 1 iopl
ipc msgget ipc 5 __ipc
@ -37,11 +42,12 @@ sched_primin - sched_get_priority_min 1 __sched_get_priority_min sched_get_prior
sched_rr_gi - sched_rr_get_interval 2 __sched_rr_get_interval sched_rr_get_interval
setfsgid - setfsgid 1 setfsgid
setfsuid - setfsuid 1 setfsuid
setpgid - setpgid 2 setpgid
setpgid - setpgid 2 __setpgid setpgid
sigpending - sigpending 1 sigpending
sigprocmask - sigprocmask 3 __sigprocmask sigprocmask
s_sysctl sysctl _sysctl 1 __syscall__sysctl
sysinfo - sysinfo 1 sysinfo
ksyslog_ctl - syslog 3 ksyslog_ctl
umount - umount 1 __umount umount
uselib - uselib 1 uselib
wait4 - wait4 4 __wait4 wait4

View File

@ -33,7 +33,7 @@ routines := offtime asctime clock ctime difftime gmtime \
strptime
others := ap zdump zic
tests := test_time clocktest
tests := test_time clocktest test-tz
tzfiles := africa antarctica asia australasia europe northamerica \
southamerica etcetera factory systemv backward

View File

@ -1,16 +1,31 @@
#include <signal.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
main ()
volatile int gotit = 0;
void
alarm_handler (int signal)
{
volatile int i;
double t1, t2, t;
gotit = 1;
}
t1 = (double) clock ();
for (i = 0; i < 100000; ++i) ;
t2 = (double) clock ();
t = (t2 - t1) / ((double) CLOCKS_PER_SEC);
printf ("%f - %f = %f\n",t2,t1,t);
int
main (int argc, char ** argv)
{
clock_t start, stop;
signal(SIGALRM, alarm_handler);
alarm(1);
start = clock ();
while (!gotit);
stop = clock ();
printf ("%ld clock ticks per second (start=%ld,stop=%ld)\n",
stop - start, start, stop);
printf ("CLOCKS_PER_SEC=%d, sysconf(_SC_CLK_TCK)=%ld\n",
CLOCKS_PER_SEC, sysconf(_SC_CLK_TCK));
return 0;
}

57
time/test-tz.c Normal file
View File

@ -0,0 +1,57 @@
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
struct {
const char * env;
time_t expected;
} tests[] = {
{"TZ=MST", 832935315},
{"TZ=", 832910115},
{"TZ=:UTC", 832910115},
{"TZ=UTC", 832910115},
{"TZ=UTC0", 832910115}
};
int
main(int argc, char ** argv)
{
int errors = 0;
struct tm tm;
time_t t;
int i;
memset (&tm, 0, sizeof (tm));
tm.tm_isdst = 0;
tm.tm_year = 96; /* years since 1900 */
tm.tm_mon = 4;
tm.tm_mday = 24;
tm.tm_hour = 3;
tm.tm_min = 55;
tm.tm_sec = 15;
for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
{
putenv (tests[i].env);
tzset ();
t = mktime(&tm);
if (t != tests[i].expected)
{
printf ("%s: flunked test %d (expected %lu, got %lu)\n",
argv[0], i, (long) tests[i].expected, (long) t);
++errors;
}
}
if (errors == 0)
{
puts ("No errors.");
exit (EXIT_SUCCESS);
}
else
{
printf ("%d errors.\n", errors);
exit (EXIT_FAILURE);
}
}

View File

@ -85,10 +85,16 @@ DEFUN_VOID(__tzset)
/* Free old storage. */
if (tz_rules[0].name != NULL && *tz_rules[0].name != '\0')
{
free((PTR) tz_rules[0].name);
tz_rules[0].name = NULL;
}
if (tz_rules[1].name != NULL && *tz_rules[1].name != '\0' &&
tz_rules[1].name != tz_rules[0].name)
{
free((PTR) tz_rules[1].name);
tz_rules[1].name = NULL;
}
/* Examine the TZ environment variable. */
tz = getenv ("TZ");