diff options
-rw-r--r-- | ChangeLog | 28 | ||||
-rw-r--r-- | hurd/Makefile | 4 | ||||
-rw-r--r-- | hurd/get-host.c | 57 | ||||
-rw-r--r-- | hurd/hurdhost.h | 28 | ||||
-rw-r--r-- | hurd/set-host.c | 48 | ||||
-rw-r--r-- | math/Makefile | 4 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/fpu_control.h (renamed from sysdeps/unix/sysv/linux/alpha/fpu_control.h) | 24 | ||||
-rw-r--r-- | sysdeps/generic/fpu_control.c (renamed from sysdeps/unix/sysv/linux/alpha/fpu_control.c) | 7 | ||||
-rw-r--r-- | sysdeps/generic/setfpucw.c (renamed from sysdeps/unix/sysv/linux/setfpucw.c) | 6 | ||||
-rw-r--r-- | sysdeps/i386/fpu_control.h (renamed from sysdeps/unix/sysv/linux/i386/fpu_control.h) | 3 | ||||
-rw-r--r-- | sysdeps/m68k/fpu_control.h (renamed from sysdeps/unix/sysv/linux/m68k/fpu_control.h) | 0 | ||||
-rw-r--r-- | sysdeps/mach/hurd/gethostid.c | 16 | ||||
-rw-r--r-- | sysdeps/mach/hurd/gethostname.c | 23 | ||||
-rw-r--r-- | sysdeps/mach/hurd/sethostid.c | 19 | ||||
-rw-r--r-- | sysdeps/mach/hurd/sethostname.c | 12 | ||||
-rw-r--r-- | sysdeps/stub/fpu_control.h | 46 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/Makefile | 4 |
17 files changed, 273 insertions, 56 deletions
diff --git a/ChangeLog b/ChangeLog index 69eb550ebe..5929b2f59e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,33 @@ Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> + * hurd/Makefile (routines): Add get-host, set-host. + (distribute): Add hurdhost.h. + * hurd/hurdhost.h: New file. + * sysdeps/mach/hurd/gethostname.c: Use _hurd_get_host_config. + * sysdeps/mach/hurd/gethostid.c: Likewise. + * sysdeps/mach/hurd/sethostname.c: Use _hurd_set_host_config. + * sysdeps/mach/hurd/sethostid.c: Likewise. + * hurd/get-host.c: New file. + * hurd/set-host.c: New file. + + * math/Makefile (headers): Add fpu_control.h. + (aux): New variable, list fpu_control and setfpucw. + * sysdeps/generic/fpu_control.c: New file. + * sysdeps/stub/fpu_control.h: New file. + * sysdeps/unix/sysv/linux/m68k/fpu_control.h: Moved to ... + * sysdeps/m68k/fpu_control.h: here. + * sysdeps/unix/sysv/linux/i386/fpu_control.h: Moved to ... + * sysdeps/i386/fpu_control.h: here. + * sysdeps/unix/sysv/linux/alpha/fpu_control.h: Moved to ... + * sysdeps/alpha/fpu/fpu_control.h: here. Fixed copyright. + * sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Remove + setfpucw, fpu_control. + * sysdeps/unix/sysv/linux/alpha/fpu_control.c: File removed. + * sysdeps/unix/sysv/linux/setfpucw.c: Moved to ... + * sysdeps/generic/setfpucw.c: here. + (__fpu_control): Variable removed. + (__setfpucw): Use SET even if zero. + * elf/dl-deps.c (_dl_map_object_deps): Set MAP's mark bit before loop. Set mark bits of deps as opened, instead of as scanned. diff --git a/hurd/Makefile b/hurd/Makefile index 4f1f22c7c8..1484ad5a06 100644 --- a/hurd/Makefile +++ b/hurd/Makefile @@ -40,6 +40,7 @@ server-interfaces := hurd/msg faultexc routines = hurdstartup hurdinit \ hurdid hurdlookup hurdpid hurdrlimit hurdprio hurdexec \ + get-host set-host \ path-lookup \ setauth \ pid2task task2pid \ @@ -57,7 +58,8 @@ sig = hurdsig hurdfault siginfo hurd-raise preempt-sig \ dtable = dtable port2fd new-fd alloc-fd intern-fd \ getdport openport \ fd-close fd-read fd-write hurdioctl ctty-input ctty-output -distribute = hurdstartup.h hurdfault.h faultexc.defs intr-rpc.defs intr-rpc.h +distribute = hurdstartup.h hurdfault.h hurdhost.h \ + faultexc.defs intr-rpc.defs intr-rpc.h # XXX this is a temporary hack; see hurdmalloc.h routines += hurdmalloc diff --git a/hurd/get-host.c b/hurd/get-host.c new file mode 100644 index 0000000000..231ee59d88 --- /dev/null +++ b/hurd/get-host.c @@ -0,0 +1,57 @@ +/* Get a host configuration item kept as the whole contents of a file. +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. */ + +#include <hurd.h> +#include "hurdhost.h" + +ssize_t +_hurd_get_host_config (const char *item, char *buf, size_t buflen) +{ + error_t err; + char *data; + mach_msg_type_number_t nread, more; + file_t config = __file_name_lookup (item, O_RDONLY, 0); + if (config == MACH_PORT_NULL) + return -1; + + data = buf; + err = __io_read (config, &data, &nread, -1, buflen); + if (! err) + /* Check if there is more in the file we didn't read. */ + err = __io_readable (config, &more); + __mach_port_deallocate (__mach_task_self (), config); + if (err) + return __hurd_fail (err); + if (data != buf) + { + memcpy (buf, data, nread); + __vm_deallocate (__mach_task_self (), (vm_address_t) data, nread); + } + + /* Remove newlines in case someone wrote the file by hand. */ + while (buf[nread - 1] == '\n') + buf[--nread] = '\0'; + + if (more) + /* If we didn't read the whole file, tell the caller to use a bigger + buffer next time. */ + return __hurd_fail (ENAMETOOLONG); + + return nread; +} diff --git a/hurd/hurdhost.h b/hurd/hurdhost.h new file mode 100644 index 0000000000..7a826ebbbd --- /dev/null +++ b/hurd/hurdhost.h @@ -0,0 +1,28 @@ +/* Host configuration items kept as the whole contents of a file. +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. */ + +/* Fetch and atomically store the contents of the file ITEM. + Returns the size read or written, or -1 for errors. + If BUFLEN is not big enough to contain the whole contents, + BUFLEN bytes of BUF are filled in and we fail with ENAMETOOLONG. */ + +ssize_t _hurd_get_host_config (const char *item, + char *buf, size_t buflen); +ssize_t _hurd_set_host_config (const char *item, + const char *value, size_t valuelen); diff --git a/hurd/set-host.c b/hurd/set-host.c new file mode 100644 index 0000000000..e9af697226 --- /dev/null +++ b/hurd/set-host.c @@ -0,0 +1,48 @@ +/* Set a host configuration item kept as the whole contents of a file. +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. */ + +#include <hurd.h> +#include "hurdhost.h" + +ssize_t +_hurd_set_host_config (const char *item, const char *value, size_t valuelen) +{ + error_t err; + mach_msg_type_number_t nwrote; + file_t new, dir; + + dir = __file_name_split (item, &item); + if (dir == MACH_PORT_NULL) + return -1; + + /* Create a new node. */ + err = __dir_mkfile (dir, O_CREAT|O_TRUNC, 0600, &new); + if (! err) + { + /* Write the contents. */ + err = __io_write (new, value, valuelen, 0, &nwrote); + if (! err) + /* Atomically link the new node onto the name. */ + err = __dir_link (dir, item, 0); + __mach_port_deallocate (__mach_task_self (), new); + } + __mach_port_deallocate (__mach_task_self (), dir); + + return nread; +} diff --git a/math/Makefile b/math/Makefile index beaa26912a..65302911c4 100644 --- a/math/Makefile +++ b/math/Makefile @@ -21,11 +21,13 @@ subdir := math # Installed header files. -headers := math.h mathcalls.h __math.h huge_val.h nan.h +headers := math.h mathcalls.h __math.h huge_val.h nan.h fpu_control.h # Internal header files. distribute := math_private.h machine/asm.h machine/endian.h +# FPU support code. +aux := fpu_control setfpucw # Build the -lm library. diff --git a/sysdeps/unix/sysv/linux/alpha/fpu_control.h b/sysdeps/alpha/fpu/fpu_control.h index 782f33e040..219ea55f24 100644 --- a/sysdeps/unix/sysv/linux/alpha/fpu_control.h +++ b/sysdeps/alpha/fpu/fpu_control.h @@ -1,15 +1,23 @@ -/* Copyright (C) 1993 Olaf Flebbe -This file is part of the Linux C Library. +/* FPU control word bits. Alpha version. +Copyright (C) 1996 Free Software Foundation, Inc. +Contributed by Olaf Flebbe. -The Linux C Library is free software; you can redistribute it and/or +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 Linux C Library is distributed in the hope that it will be useful, +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. */ +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 _ALPHA_FPU_CONTROL_H #define _ALPHA_FPU_CONTROL_H @@ -28,7 +36,7 @@ Library General Public License for more details. */ * OM: Overflow mask * UM: Underflow mask * PM: Precision (inexact result) mask - * + * * Mask bit is 1 means no interrupt. * * PC: Precision control @@ -51,7 +59,7 @@ Library General Public License for more details. */ #include <features.h> /* masking of interrupts */ -#define _FPU_MASK_IM 0x01 +#define _FPU_MASK_IM 0x01 #define _FPU_MASK_DM 0x02 #define _FPU_MASK_ZM 0x04 #define _FPU_MASK_OM 0x08 @@ -84,7 +92,7 @@ Library General Public License for more details. */ one can use /d to get round to +infinity with no extra overhead (so long as the default isn't changed, of course...) - exceptions on overflow, zero divide and NaN */ -#define _FPU_DEFAULT 0x1f72 +#define _FPU_DEFAULT 0x1f72 /* IEEE: same as above, but exceptions */ #define _FPU_IEEE 0x1f7f diff --git a/sysdeps/unix/sysv/linux/alpha/fpu_control.c b/sysdeps/generic/fpu_control.c index 20c032a03c..4a47e626a8 100644 --- a/sysdeps/unix/sysv/linux/alpha/fpu_control.c +++ b/sysdeps/generic/fpu_control.c @@ -1,5 +1,6 @@ -/* Copyright (C) 1993, 1995 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@azstarnet.com). +/* Default FPU control word initialization. +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 @@ -18,4 +19,6 @@ Cambridge, MA 02139, USA. */ #include <fpu_control.h> +/* This module defines `__fpu_control' with the default value. */ + fpu_control_t __fpu_control = _FPU_DEFAULT; diff --git a/sysdeps/unix/sysv/linux/setfpucw.c b/sysdeps/generic/setfpucw.c index 47a021c587..7b09a68b55 100644 --- a/sysdeps/unix/sysv/linux/setfpucw.c +++ b/sysdeps/generic/setfpucw.c @@ -29,9 +29,5 @@ __setfpucw (fpu_control_t set) /* 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)); + _FPU_SETCW ((cw & _FPU_RESERVED) | (set & ~_FPU_RESERVED)); } - -/* The startup code in init-first.c calls __setfpucw (__fpu_control). */ - -fpu_control_t __fpu_control; diff --git a/sysdeps/unix/sysv/linux/i386/fpu_control.h b/sysdeps/i386/fpu_control.h index 8c04c1ea11..d72f474eb6 100644 --- a/sysdeps/unix/sysv/linux/i386/fpu_control.h +++ b/sysdeps/i386/fpu_control.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. +/* FPU control word bits. i387 version. +Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Olaf Flebbe. diff --git a/sysdeps/unix/sysv/linux/m68k/fpu_control.h b/sysdeps/m68k/fpu_control.h index 97bde853bc..97bde853bc 100644 --- a/sysdeps/unix/sysv/linux/m68k/fpu_control.h +++ b/sysdeps/m68k/fpu_control.h diff --git a/sysdeps/mach/hurd/gethostid.c b/sysdeps/mach/hurd/gethostid.c index 5a3309266e..a413a50308 100644 --- a/sysdeps/mach/hurd/gethostid.c +++ b/sysdeps/mach/hurd/gethostid.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 96 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 @@ -17,17 +17,19 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <ansidecl.h> -#include <errno.h> #include <unistd.h> #include <hurd.h> +#include "hurdhost.h" /* Return the current machine's Internet number. */ long int DEFUN_VOID(gethostid) { - int hostid; - error_t err; - if (err = __USEPORT (PROC, __proc_gethostid (port, &hostid))) - return __hurd_fail (err); - return hostid; + /* The hostid is just the contents of the file /etc/hostid, + kept as text of hexadecimal digits. */ + char buf[8]; + ssize_t n = _hurd_get_host_config ("/etc/hostid", buf, sizeof buf); + if (n < 0) + return -1; + return strtol (buf, NULL, 16); } diff --git a/sysdeps/mach/hurd/gethostname.c b/sysdeps/mach/hurd/gethostname.c index 94a0537d91..06703ead6a 100644 --- a/sysdeps/mach/hurd/gethostname.c +++ b/sysdeps/mach/hurd/gethostname.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 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 @@ -17,11 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <ansidecl.h> -#include <errno.h> #include <unistd.h> -#include <hurd.h> -#include <hurd/port.h> -#include <string.h> +#include "hurdhost.h" /* Put the name of the current host in no more than LEN bytes of NAME. The result is null-terminated if LEN is large enough for the full @@ -30,19 +27,9 @@ int DEFUN(__gethostname, (name, len), char *name AND size_t len) { - error_t err; - char *buf = name; - mach_msg_type_number_t buflen = len; - if (err = __USEPORT (PROC, __proc_gethostname (port, &buf, &buflen))) - return __hurd_fail (err); - if (buf != name) - { - memcpy (name, buf, len < buflen ? len : buflen); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - if (buflen > len) - return __hurd_fail (ENAMETOOLONG); - return 0; + /* The host name is just the contents of the file /etc/hostname. */ + ssize_t n = _hurd_get_host_config ("/etc/hostname", name, len); + return n < 0 ? -1 : 0; } weak_alias (__gethostname, gethostname) diff --git a/sysdeps/mach/hurd/sethostid.c b/sysdeps/mach/hurd/sethostid.c index dc8153caa6..64f5e0c1c6 100644 --- a/sysdeps/mach/hurd/sethostid.c +++ b/sysdeps/mach/hurd/sethostid.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993 Free Software Foundation, Inc. +/* Copyright (C) 1993, 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 @@ -17,15 +17,26 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <ansidecl.h> -#include <errno.h> #include <unistd.h> #include <hurd.h> +#include "hurdhost.h" +#include "../stdio-common/_itoa.h" /* Set the current machine's Internet number to ID. This call is restricted to the super-user. */ int DEFUN(sethostid, (id), long int id) { - error_t err = __USEPORT (PROC, __proc_sethostid (port, id)); - return err ? __hurd_fail (err) : 0; + char buf[8], *bp; + ssize_t n; + + /* The hostid is kept in the file /etc/hostid, + eight characters of upper-case hexadecimal. */ + + bp = _itoa_word (id, &buf[sizeof buf], 16, 1); + while (bp > buf) + *--bp = '0'; + + n = _hurd_set_host_config ("/etc/hostid", buf, sizeof buf); + return n < 0 ? -1 : 0; } diff --git a/sysdeps/mach/hurd/sethostname.c b/sysdeps/mach/hurd/sethostname.c index 2c019cf99e..d07e69d395 100644 --- a/sysdeps/mach/hurd/sethostname.c +++ b/sysdeps/mach/hurd/sethostname.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 96 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 @@ -17,9 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <ansidecl.h> -#include <errno.h> #include <unistd.h> -#include <hurd.h> +#include "hurdhost.h" /* Set the name of the current host to NAME, which is LEN bytes long. This call is restricted to the super-user. */ @@ -27,8 +26,7 @@ int DEFUN(sethostname, (name, len), CONST char *name AND size_t len) { - error_t err = __USEPORT (PROC, __proc_sethostname (port, name, len)); - if (err) - return __hurd_fail (err); - return 0; + /* The host name is just the contents of the file /etc/hostname. */ + ssize_t n = _hurd_set_host_config ("/etc/hostname", name, len); + return n < 0 ? -1 : 0; } diff --git a/sysdeps/stub/fpu_control.h b/sysdeps/stub/fpu_control.h new file mode 100644 index 0000000000..65f58824ae --- /dev/null +++ b/sysdeps/stub/fpu_control.h @@ -0,0 +1,46 @@ +/* FPU control word definitions. Stub version. +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 _FPU_CONTROL_H +#define _FPU_CONTROL_H + +#define _FPU_RESERVED ??? /* These bits are reserved are not changed. */ + +/* The fdlibm code requires no interrupts for exceptions. Don't + change the rounding mode, it would break long double I/O! */ +#define _FPU_DEFAULT 0x00000000 /* Default value. */ + +/* Type of the control word. */ +typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__?I__))); + +/* Macros for accessing the hardware control word. */ +#define _FPU_GETCW(cw) __asm__ ("fetch fpu control word into %0" : "=g" (cw)) +#define _FPU_SETCW(cw) __asm__ ("set fpu control word to %0" : : "g" (cw)) + +/* Default control word set at startup. */ +extern fpu_control_t __fpu_control; + +__BEGIN_DECLS + +/* Called at startup. It can be used to manipulate fpu control register. */ +extern void __setfpucw __P ((fpu_control_t)); + +__END_DECLS + +#endif /* _M68K_FPU_CONTROL_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile index e6e421da9d..9d596719da 100644 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ b/sysdeps/unix/sysv/linux/alpha/Makefile @@ -1,6 +1,6 @@ ifeq ($(subdir), misc) sysdep_headers += alpha/ptrace.h alpha/regdef.h -sysdep_routines += ieee_get_fp_control ieee_set_fp_control fpu_control \ - setfpucw sethae ioperm osf_sigprocmask fstatfs statfs +sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ + sethae ioperm osf_sigprocmask fstatfs statfs endif |