* 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.
This commit is contained in:
Roland McGrath 1996-06-16 03:49:40 +00:00
parent f9496a7b54
commit 5fbef18864
17 changed files with 273 additions and 56 deletions

View File

@ -1,5 +1,33 @@
Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> 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. * 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. Set mark bits of deps as opened, instead of as scanned.

View File

@ -40,6 +40,7 @@ server-interfaces := hurd/msg faultexc
routines = hurdstartup hurdinit \ routines = hurdstartup hurdinit \
hurdid hurdlookup hurdpid hurdrlimit hurdprio hurdexec \ hurdid hurdlookup hurdpid hurdrlimit hurdprio hurdexec \
get-host set-host \
path-lookup \ path-lookup \
setauth \ setauth \
pid2task task2pid \ pid2task task2pid \
@ -57,7 +58,8 @@ sig = hurdsig hurdfault siginfo hurd-raise preempt-sig \
dtable = dtable port2fd new-fd alloc-fd intern-fd \ dtable = dtable port2fd new-fd alloc-fd intern-fd \
getdport openport \ getdport openport \
fd-close fd-read fd-write hurdioctl ctty-input ctty-output 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 # XXX this is a temporary hack; see hurdmalloc.h
routines += hurdmalloc routines += hurdmalloc

57
hurd/get-host.c Normal file
View File

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

28
hurd/hurdhost.h Normal file
View File

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

48
hurd/set-host.c Normal file
View File

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

View File

@ -21,11 +21,13 @@
subdir := math subdir := math
# Installed header files. # 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. # Internal header files.
distribute := math_private.h machine/asm.h machine/endian.h distribute := math_private.h machine/asm.h machine/endian.h
# FPU support code.
aux := fpu_control setfpucw
# Build the -lm library. # Build the -lm library.

View File

@ -1,15 +1,23 @@
/* Copyright (C) 1993 Olaf Flebbe /* FPU control word bits. Alpha version.
This file is part of the Linux C Library. 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 modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. 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 but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 #ifndef _ALPHA_FPU_CONTROL_H
#define _ALPHA_FPU_CONTROL_H #define _ALPHA_FPU_CONTROL_H

View File

@ -1,5 +1,6 @@
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc. /* Default FPU control word initialization.
Contributed by David Mosberger (davidm@azstarnet.com). 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 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 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> #include <fpu_control.h>
/* This module defines `__fpu_control' with the default value. */
fpu_control_t __fpu_control = _FPU_DEFAULT; fpu_control_t __fpu_control = _FPU_DEFAULT;

View File

@ -29,9 +29,5 @@ __setfpucw (fpu_control_t set)
/* Preserve the reserved bits, and set the rest as the user /* Preserve the reserved bits, and set the rest as the user
specified (or the default, if the user gave zero). */ 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;

View File

@ -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. This file is part of the GNU C Library.
Contributed by Olaf Flebbe. Contributed by Olaf Flebbe.

View File

@ -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. 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
@ -17,17 +17,19 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h> #include <ansidecl.h>
#include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <hurd.h> #include <hurd.h>
#include "hurdhost.h"
/* Return the current machine's Internet number. */ /* Return the current machine's Internet number. */
long int long int
DEFUN_VOID(gethostid) DEFUN_VOID(gethostid)
{ {
int hostid; /* The hostid is just the contents of the file /etc/hostid,
error_t err; kept as text of hexadecimal digits. */
if (err = __USEPORT (PROC, __proc_gethostid (port, &hostid))) char buf[8];
return __hurd_fail (err); ssize_t n = _hurd_get_host_config ("/etc/hostid", buf, sizeof buf);
return hostid; if (n < 0)
return -1;
return strtol (buf, NULL, 16);
} }

View File

@ -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. 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
@ -17,11 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h> #include <ansidecl.h>
#include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <hurd.h> #include "hurdhost.h"
#include <hurd/port.h>
#include <string.h>
/* Put the name of the current host in no more than LEN bytes of NAME. /* 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 The result is null-terminated if LEN is large enough for the full
@ -30,19 +27,9 @@ int
DEFUN(__gethostname, (name, len), DEFUN(__gethostname, (name, len),
char *name AND size_t len) char *name AND size_t len)
{ {
error_t err; /* The host name is just the contents of the file /etc/hostname. */
char *buf = name; ssize_t n = _hurd_get_host_config ("/etc/hostname", name, len);
mach_msg_type_number_t buflen = len; return n < 0 ? -1 : 0;
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;
} }
weak_alias (__gethostname, gethostname) weak_alias (__gethostname, gethostname)

View File

@ -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. 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
@ -17,15 +17,26 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h> #include <ansidecl.h>
#include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <hurd.h> #include <hurd.h>
#include "hurdhost.h"
#include "../stdio-common/_itoa.h"
/* Set the current machine's Internet number to ID. /* Set the current machine's Internet number to ID.
This call is restricted to the super-user. */ This call is restricted to the super-user. */
int int
DEFUN(sethostid, (id), long int id) DEFUN(sethostid, (id), long int id)
{ {
error_t err = __USEPORT (PROC, __proc_sethostid (port, id)); char buf[8], *bp;
return err ? __hurd_fail (err) : 0; 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;
} }

View File

@ -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. 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
@ -17,9 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h> #include <ansidecl.h>
#include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <hurd.h> #include "hurdhost.h"
/* Set the name of the current host to NAME, which is LEN bytes long. /* Set the name of the current host to NAME, which is LEN bytes long.
This call is restricted to the super-user. */ This call is restricted to the super-user. */
@ -27,8 +26,7 @@ int
DEFUN(sethostname, (name, len), DEFUN(sethostname, (name, len),
CONST char *name AND size_t len) CONST char *name AND size_t len)
{ {
error_t err = __USEPORT (PROC, __proc_sethostname (port, name, len)); /* The host name is just the contents of the file /etc/hostname. */
if (err) ssize_t n = _hurd_set_host_config ("/etc/hostname", name, len);
return __hurd_fail (err); return n < 0 ? -1 : 0;
return 0;
} }

View File

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

View File

@ -1,6 +1,6 @@
ifeq ($(subdir), misc) ifeq ($(subdir), misc)
sysdep_headers += alpha/ptrace.h alpha/regdef.h sysdep_headers += alpha/ptrace.h alpha/regdef.h
sysdep_routines += ieee_get_fp_control ieee_set_fp_control fpu_control \ sysdep_routines += ieee_get_fp_control ieee_set_fp_control \
setfpucw sethae ioperm osf_sigprocmask fstatfs statfs sethae ioperm osf_sigprocmask fstatfs statfs
endif endif