1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>

* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
	(sysdep_routines): Append setfpucw.
	(extra-objs): Append ieee-fpucw.o.
	(install-lib): Append libieee.a.
	(libieee.a): New target.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h
	(_FPU_GETCW, _FPU_SETCW): New macros.
	(fpu_control_t): New typedef.
	(__setfpucw): Use fpu_control_t for argument type.
	* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.

	* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
	(sysdep_routines): Append setfpucw.
	(extra-objs): Append ieee-fpucw.o.
	(install-lib): Append libieee.a.
	(libieee.a): New target.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h
	(_FPU_GETCW, _FPU_SETCW): New macros.
	(fpu_control_t): New typedef.
	(__setfpucw): Use fpu_control_t for argument type.
	* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.

	* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
This commit is contained in:
Roland McGrath
1996-02-13 11:07:05 +00:00
parent 363113d02a
commit 2a072de4a1
7 changed files with 90 additions and 25 deletions

View File

@ -1,5 +1,19 @@
Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
(sysdep_routines): Append setfpucw.
(extra-objs): Append ieee-fpucw.o.
(install-lib): Append libieee.a.
(libieee.a): New target.
* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
* sysdeps/unix/sysv/linux/i386/fpu_control.h
(_FPU_GETCW, _FPU_SETCW): New macros.
(fpu_control_t): New typedef.
(__setfpucw): Use fpu_control_t for argument type.
* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.
* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
* sysdeps/unix/sysv/linux/syscalls.list: Add ipc syscall. * sysdeps/unix/sysv/linux/syscalls.list: Add ipc syscall.
* sysdeps/unix/sysv/linux/i386/syscalls.list: File removed. * sysdeps/unix/sysv/linux/i386/syscalls.list: File removed.

View File

@ -1,3 +1,13 @@
ifeq ($(subdir), math)
sysdep_routines += setfpucw
extra-objs += ieee-fpucw.o
install-lib += libieee.a
$(objpfx)libieee.a: $(objpfx)ieee-fpucw.o
rm -f $@
ln $< $@
endif
ifeq ($(subdir), io) ifeq ($(subdir), io)
sysdep_routines += fxstat lxstat xstat sysdep_routines += fxstat lxstat xstat
endif endif
@ -7,17 +17,13 @@ sysdep_routines += xmknod mount umount s_ptrace
headers += sys/mount.h headers += sys/mount.h
endif endif
#ifeq ($(subdir), posix)
#sysdep_routines := $(sysdep_routines) setpgrp
#endif
ifeq ($(subdir), time) ifeq ($(subdir), time)
sysdep_routines := $(sysdep_routines) adjtimex sysdep_routines += adjtimex
headers += sys/timex.h headers += sys/timex.h
endif endif
ifeq ($(subdir), sysvipc) ifeq ($(subdir), sysvipc)
sysdep_routines := $(sysdep_routines) ipc sysdep_routines += ipc
endif endif
ifeq ($(subdir), socket) ifeq ($(subdir), socket)

View File

@ -1,7 +0,0 @@
ifeq ($(subdir), misc)
sysdep_routines := $(sysdep_routines) fpu_control setfpucw
extra-libs := $(extra-libs) libieee
libieee-routines := ieee_fpu
libieee-inhibit-o := .so .po
endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc. /* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Olaf Flebbe. Contributed by Olaf Flebbe.
@ -87,13 +87,20 @@ Boston, MA 02111-1307, USA. */
/* IEEE: same as above, but exceptions */ /* IEEE: same as above, but exceptions */
#define _FPU_IEEE 0x137f #define _FPU_IEEE 0x137f
/* private namespace. It should only be used in init-first.o. */ /* Type of the control word. */
extern unsigned short __fpu_control; typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
/* Macros for accessing the hardware control word. */
#define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (cw))
#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : "m" (cw))
/* Default control word set at startup. */
extern fpu_control_t __fpu_control;
__BEGIN_DECLS __BEGIN_DECLS
/* called in init-first.o. It can be used to manipulate 387 control word. */ /* Called at startup. It can be used to manipulate fpu control register. */
extern void __setfpucw __P ((unsigned short)); extern void __setfpucw __P ((fpu_control_t));
__END_DECLS __END_DECLS

View File

@ -1,5 +1,5 @@
/* Default control word for ix86 FPU. /* Set default FPU control word for IEEE operation.
Copyright (C) 1995 Free Software Foundation, Inc. Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -14,7 +14,9 @@ Library General Public License for more details.
You should have received a copy of the GNU Library General Public 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 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, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Boston, MA 02111-1307, USA. */ Cambridge, MA 02139, USA. */
unsigned short __fpu_control = 0; #include "fpu_control.h"
fpu_control_t __fpu_control = _FPU_IEEE;

View File

@ -1,5 +1,5 @@
/* Initialization code run first thing by the ELF startup code. i386/Linux /* Initialization code run first thing by the ELF startup code. Linux version.
Copyright (C) 1995 Free Software Foundation, Inc. Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -21,6 +21,10 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
#include "fpu_control.h" #include "fpu_control.h"
/* This code is mostly the same for all machines. This version works at
least for i386 and m68k, and probably any CISCy machine with a normal
stack arrangement. */
extern void __libc_init (int, char **, char **); extern void __libc_init (int, char **, char **);
extern void __libc_global_ctors (void); extern void __libc_global_ctors (void);
@ -32,6 +36,7 @@ init (int *data)
char **argv = (void *) (data + 1); char **argv = (void *) (data + 1);
char **envp = &argv[argc + 1]; char **envp = &argv[argc + 1];
#ifdef __i386__
/* Make sure we are not using the iBSC2 personality. The `personality' /* Make sure we are not using the iBSC2 personality. The `personality'
syscall takes one argument; zero means the Linux personality. The syscall takes one argument; zero means the Linux personality. The
argument arrives in %ebx; we have to save and restore %ebx by hand argument arrives in %ebx; we have to save and restore %ebx by hand
@ -42,6 +47,7 @@ init (int *data)
"int $0x80 # syscall no %0\n" "int $0x80 # syscall no %0\n"
"popl %%ebx" "popl %%ebx"
: : "a" (SYS_ify (personality))); : : "a" (SYS_ify (personality)));
#endif
/* Set the FPU control word to the proper default value. */ /* Set the FPU control word to the proper default value. */
__setfpucw (__fpu_control); __setfpucw (__fpu_control);

View File

@ -0,0 +1,37 @@
/* Set the FPU control word.
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "fpu_control.h"
void
__setfpucw (fpu_control_t set)
{
fpu_control_t cw;
/* Fetch the current control word. */
_FPU_GETCW (cw);
/* Preserve the reserved bits, and set the rest as the user
specified (or the default, if the user gave zero). */
_FPU_SETCW ((cw & _FPU_RESERVED) | ((set ?: _FPU_DEFAULT) & ~_FPU_RESERVED));
}
/* The startup code in init-first.c calls __setfpucw (__fpu_control). */
fpu_control_t __fpu_control;