(__libc_argv, __libc_argc): Make extern. (__hurd_threadvar_max, __hurd_threadvar_stack_offset, __hurd_threadvar_stack_mask): New variables.

This commit is contained in:
Miles Bader 1997-02-23 22:09:31 +00:00
parent 4dea6fa212
commit 6bac11d993
17 changed files with 82 additions and 68 deletions

View file

@ -35,7 +35,13 @@ fchroot (int fd)
}));
if (! err)
_hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], dir);
{
file_t root;
err = __file_reparent (dir, MACH_PORT_NULL, &root);
__mach_port_deallocate (__mach_task_self (), dir);
if (! err)
_hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], root);
}
return err ? __hurd_fail (err) : 0;
}

View file

@ -20,7 +20,8 @@
/* This is initialized in dtable.c when that gets linked in.
If dtable.c is not linked in, it will be zero. */
file_t (*_hurd_getdport_fn) (int fd);
static file_t (*_default_hurd_getdport_fn) (int fd) = 0;
weak_alias (_default_hurd_getdport_fn, _hurd_getdport_fn)
file_t
__getdport (int fd)

View file

@ -109,11 +109,10 @@ extern pid_t _hurd_pid, _hurd_ppid, _hurd_pgrp;
extern int _hurd_orphaned;
/* This variable is incremented every time the process IDs change. */
unsigned int _hurd_pids_changed_stamp;
extern unsigned int _hurd_pids_changed_stamp;
/* This condition is broadcast every time the process IDs change. */
struct condition _hurd_pids_changed_sync;
extern struct condition _hurd_pids_changed_sync;
/* Unix `data break', for brk and sbrk.
If brk and sbrk are not used, this info will not be initialized or used. */

View file

@ -60,6 +60,7 @@ enum __hurd_threadvar_index
_HURD_THREADVAR_ERRNO, /* `errno' value for this thread. */
_HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */
_HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */
_HURD_THREADVAR_MALLOC, /* For use of malloc. */
_HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */
};

View file

@ -1,5 +1,5 @@
/* Handle faults in the signal thread.
Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
Copyright (C) 1994, 1995, 1996, 1997 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
@ -31,6 +31,9 @@
jmp_buf _hurdsig_fault_env;
struct hurd_signal_preemptor _hurdsig_fault_preemptor;
/* XXX temporary to deal with spelling fix */
weak_alias (_hurdsig_fault_preemptor, _hurdsig_fault_preempter)
static mach_port_t forward_sigexc;
kern_return_t

View file

@ -31,7 +31,9 @@ struct hurd_port *_hurd_ports;
unsigned int _hurd_nports;
mode_t _hurd_umask;
sigset_t _hurdsig_traced;
char **__libc_argv;
int __libc_argc;
error_t

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 92, 93, 94, 95, 96, 1996 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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
@ -39,6 +39,11 @@ thread_t _hurd_msgport_thread;
/* Thread which receives task-global signals. */
thread_t _hurd_sigthread;
/* These are set up by _hurdsig_init. */
unsigned long int __hurd_sigthread_stack_base;
unsigned long int __hurd_sigthread_stack_end;
unsigned long int *__hurd_sigthread_variables;
/* Linked-list of per-thread signal state. */
struct hurd_sigstate *_hurd_sigstates;
@ -424,6 +429,9 @@ abort_all_rpcs (int signo, struct machine_thread_all_state *state, int live)
struct hurd_signal_preemptor *_hurdsig_preemptors;
sigset_t _hurdsig_preempted_set;
/* XXX temporary to deal with spelling fix */
weak_alias (_hurdsig_preemptors, _hurdsig_preempters)
/* Mask of stop signals. */
#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
sigmask (SIGSTOP) | sigmask (SIGTSTP))

View file

@ -35,15 +35,6 @@
mach_port_t *_hurd_init_dtable;
mach_msg_type_number_t _hurd_init_dtablesize;
unsigned int __hurd_threadvar_max;
unsigned long int __hurd_threadvar_stack_mask;
unsigned long int __hurd_threadvar_stack_offset;
/* These are set up by _hurdsig_init. */
unsigned long int __hurd_sigthread_stack_base;
unsigned long int __hurd_sigthread_stack_end;
unsigned long int *__hurd_sigthread_variables;
extern void __mach_init (void);
/* Entry point. This is the first thing in the text segment.

View file

@ -93,8 +93,15 @@ describe_port (string_t description, mach_port_t port)
}
/* Common defn so we don't link in the itimer code unnecessarily. */
thread_t _hurd_itimer_thread; /* XXX */
/* We want _HURD_ITIMER_THREAD, but don't want to link in the itimer code
unnecessarily. */
#if 0 /* libc.so.0.0 needs this defined, so make it a weak alias for now. */
extern thread_t _hurd_itimer_thread; /* XXX */
weak_extern (_hurd_itimer_thread)
#else
static thread_t default_hurd_itimer_thread;
weak_alias (default_hurd_itimer_thread, _hurd_itimer_thread)
#endif
kern_return_t
_S_msg_report_wait (mach_port_t msgport, thread_t thread,
@ -105,7 +112,7 @@ _S_msg_report_wait (mach_port_t msgport, thread_t thread,
if (thread == _hurd_msgport_thread)
/* Cute. */
strcpy (description, "msgport");
else if (thread == _hurd_itimer_thread)
else if (&_hurd_msgport_thread && thread == _hurd_itimer_thread)
strcpy (description, "itimer");
else
{

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1992, 1993, 1994, 1997 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
@ -38,7 +38,7 @@ DEFUN(accept, (fd, addr, addr_len),
socket_t new;
addr_port_t aport;
char *buf = (char *) addr;
mach_msg_type_number_t buflen = *addr_len;
mach_msg_type_number_t buflen;
int type;
if (err = HURD_DPORT_USE (fd, __socket_accept (port, &new, &aport)))
@ -46,6 +46,7 @@ DEFUN(accept, (fd, addr, addr_len),
if (addr != NULL)
{
buflen = *addr_len;
err = __socket_whatis_address (aport, &type, &buf, &buflen);
if (err == EOPNOTSUPP)
/* If the protocol server can't tell us the address, just return a

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1997 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
@ -28,7 +28,8 @@ Cambridge, MA 02139, USA. */
int
DEFUN(chroot, (file_name), CONST char *file_name)
{
file_t file, dir;
error_t err;
file_t file, dir, root;
file = __file_name_lookup (file_name, O_EXEC, 0);
if (file == MACH_PORT_NULL)
@ -38,6 +39,12 @@ DEFUN(chroot, (file_name), CONST char *file_name)
if (dir == MACH_PORT_NULL)
return -1;
_hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], dir);
/* Prevent going through DIR's .. */
err = __file_reparent (dir, MACH_PORT_NULL, &root);
__mach_port_deallocate (__mach_task_self (), dir);
if (err)
return __hurd_fail (err);
_hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], root);
return 0;
}

View file

@ -1,6 +1,6 @@
/* Definitions of global stdio data structures.
Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1997 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
@ -80,6 +80,6 @@ text_set_element (_hurd_fd_subinit, init_stdio);
void
DEFUN_VOID(_cleanup)
{
(void) fclose ((FILE *) NULL);
__fcloseall ();
}
text_set_element (__libc_atexit, _cleanup);

View file

@ -52,12 +52,8 @@ unsigned int __hurd_threadvar_max = _HURD_THREADVAR_MAX;
static unsigned long int threadvars[_HURD_THREADVAR_MAX];
unsigned long int __hurd_threadvar_stack_offset
= (unsigned long int) &threadvars;
unsigned long int __hurd_sigthread_stack_base;
unsigned long int __hurd_sigthread_stack_end;
unsigned long int *__hurd_sigthread_variables;
unsigned long int __hurd_threadvar_stack_mask;
/* XXX loser kludge for vm_map kernel bug */
static vm_address_t fmha;
static vm_size_t fmhs;

View file

@ -30,10 +30,14 @@ extern void __libc_init (int, char **, char **);
extern void __getopt_clean_environment (void);
extern void __libc_global_ctors (void);
unsigned int __hurd_threadvar_max;
unsigned long int __hurd_threadvar_stack_offset;
unsigned long int __hurd_threadvar_stack_mask;
int __libc_multiple_libcs = 1;
int __libc_argc;
char **__libc_argv;
extern int __libc_argc;
extern char **__libc_argv;
/* We often need the PID. Cache this value. */
pid_t __libc_pid;

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1997 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
@ -32,45 +32,33 @@ DEFUN(__readlink, (file_name, buf, len),
{
error_t err;
file_t file;
char mybuf[2048], *transp = mybuf;
mach_msg_type_number_t translen = sizeof (mybuf);
struct stat st;
file = __file_name_lookup (file_name, O_NOTRANS, 0);
file = __file_name_lookup (file_name, O_READ | O_NOLINK, 0);
if (file == MACH_PORT_NULL)
return -1;
err = __file_get_translator (file, &transp, &translen);
err = __io_stat (file, &st);
if (! err)
if (S_ISLNK (st.st_mode))
{
char *rbuf = buf;
err = __io_read (file, &rbuf, &len, 0, len);
if (!err && rbuf != buf)
{
memcpy (buf, rbuf, len);
__vm_deallocate (__mach_task_self (), (vm_address_t)rbuf, len);
}
}
else
err = EINVAL;
__mach_port_deallocate (__mach_task_self (), file);
if (err)
return __hurd_fail (err);
if (translen < sizeof (_HURD_SYMLINK) ||
memcmp (transp, _HURD_SYMLINK, sizeof (_HURD_SYMLINK)))
/* The file is not actually a symlink. */
err = EINVAL;
else
{
/* This is a symlink; its translator is "/hurd/symlink\0target\0". */
if (len >= translen - sizeof (_HURD_SYMLINK))
{
len = translen - sizeof (_HURD_SYMLINK);
if (transp[translen - 1] == '\0')
/* Remove the null terminator. */
--len;
}
if (buf == NULL)
/* This call is just to find out how large a buffer is required. */
len = translen - sizeof (_HURD_SYMLINK) - 1;
else
/* Copy into the user's buffer. */
memcpy (buf, transp + sizeof (_HURD_SYMLINK), len);
}
if (transp != mybuf)
__vm_deallocate (__mach_task_self (), (vm_address_t) transp, translen);
return err ? __hurd_fail (err) : len;
return len;
}
weak_alias (__readlink, readlink)

View file

@ -1,6 +1,6 @@
/* Definitions of global stdio data structures.
Copyright (C) 1991, 1993 Free Software Foundation, Inc.
Copyright (C) 1991, 1993, 1997 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
@ -67,7 +67,7 @@ FILE *__stdio_head = &stdstreams[0];
void
DEFUN_VOID(_cleanup)
{
(void) fclose((FILE *) NULL);
__fcloseall ();
}

View file

@ -1,6 +1,6 @@
/* Definitions of global stdio data structures.
Copyright (C) 1991, 1995 Free Software Foundation, Inc.
Copyright (C) 1991, 1995, 1997 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
@ -40,7 +40,7 @@ FILE *__stdio_head;
void
DEFUN_VOID(_cleanup)
{
(void) fclose((FILE *) NULL);
__fcloseall ();
}