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

(__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) 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; return err ? __hurd_fail (err) : 0;
} }

View File

@ -20,7 +20,8 @@
/* This is initialized in dtable.c when that gets linked in. /* This is initialized in dtable.c when that gets linked in.
If dtable.c is not linked in, it will be zero. */ 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 file_t
__getdport (int fd) __getdport (int fd)

View File

@ -109,11 +109,10 @@ extern pid_t _hurd_pid, _hurd_ppid, _hurd_pgrp;
extern int _hurd_orphaned; extern int _hurd_orphaned;
/* This variable is incremented every time the process IDs change. */ /* This variable is incremented every time the process IDs change. */
extern unsigned int _hurd_pids_changed_stamp;
unsigned int _hurd_pids_changed_stamp;
/* This condition is broadcast every time the process IDs change. */ /* 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. /* Unix `data break', for brk and sbrk.
If brk and sbrk are not used, this info will not be initialized or used. */ 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_ERRNO, /* `errno' value for this thread. */
_HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */ _HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */
_HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */ _HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */
_HURD_THREADVAR_MALLOC, /* For use of malloc. */
_HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */ _HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */
}; };

View File

@ -1,5 +1,5 @@
/* Handle faults in the signal thread. /* 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. 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
@ -31,6 +31,9 @@
jmp_buf _hurdsig_fault_env; jmp_buf _hurdsig_fault_env;
struct hurd_signal_preemptor _hurdsig_fault_preemptor; 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; static mach_port_t forward_sigexc;
kern_return_t kern_return_t

View File

@ -31,7 +31,9 @@ struct hurd_port *_hurd_ports;
unsigned int _hurd_nports; unsigned int _hurd_nports;
mode_t _hurd_umask; mode_t _hurd_umask;
sigset_t _hurdsig_traced; sigset_t _hurdsig_traced;
char **__libc_argv; char **__libc_argv;
int __libc_argc;
error_t 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. 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
@ -39,6 +39,11 @@ thread_t _hurd_msgport_thread;
/* Thread which receives task-global signals. */ /* Thread which receives task-global signals. */
thread_t _hurd_sigthread; 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. */ /* Linked-list of per-thread signal state. */
struct hurd_sigstate *_hurd_sigstates; 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; struct hurd_signal_preemptor *_hurdsig_preemptors;
sigset_t _hurdsig_preempted_set; sigset_t _hurdsig_preempted_set;
/* XXX temporary to deal with spelling fix */
weak_alias (_hurdsig_preemptors, _hurdsig_preempters)
/* Mask of stop signals. */ /* Mask of stop signals. */
#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \ #define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
sigmask (SIGSTOP) | sigmask (SIGTSTP)) sigmask (SIGSTOP) | sigmask (SIGTSTP))

View File

@ -35,15 +35,6 @@
mach_port_t *_hurd_init_dtable; mach_port_t *_hurd_init_dtable;
mach_msg_type_number_t _hurd_init_dtablesize; 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); extern void __mach_init (void);
/* Entry point. This is the first thing in the text segment. /* 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. */ /* We want _HURD_ITIMER_THREAD, but don't want to link in the itimer code
thread_t _hurd_itimer_thread; /* XXX */ 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 kern_return_t
_S_msg_report_wait (mach_port_t msgport, thread_t thread, _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) if (thread == _hurd_msgport_thread)
/* Cute. */ /* Cute. */
strcpy (description, "msgport"); strcpy (description, "msgport");
else if (thread == _hurd_itimer_thread) else if (&_hurd_msgport_thread && thread == _hurd_itimer_thread)
strcpy (description, "itimer"); strcpy (description, "itimer");
else 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. 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
@ -38,7 +38,7 @@ DEFUN(accept, (fd, addr, addr_len),
socket_t new; socket_t new;
addr_port_t aport; addr_port_t aport;
char *buf = (char *) addr; char *buf = (char *) addr;
mach_msg_type_number_t buflen = *addr_len; mach_msg_type_number_t buflen;
int type; int type;
if (err = HURD_DPORT_USE (fd, __socket_accept (port, &new, &aport))) if (err = HURD_DPORT_USE (fd, __socket_accept (port, &new, &aport)))
@ -46,6 +46,7 @@ DEFUN(accept, (fd, addr, addr_len),
if (addr != NULL) if (addr != NULL)
{ {
buflen = *addr_len;
err = __socket_whatis_address (aport, &type, &buf, &buflen); err = __socket_whatis_address (aport, &type, &buf, &buflen);
if (err == EOPNOTSUPP) if (err == EOPNOTSUPP)
/* If the protocol server can't tell us the address, just return a /* 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. 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
@ -28,7 +28,8 @@ Cambridge, MA 02139, USA. */
int int
DEFUN(chroot, (file_name), CONST char *file_name) 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); file = __file_name_lookup (file_name, O_EXEC, 0);
if (file == MACH_PORT_NULL) if (file == MACH_PORT_NULL)
@ -38,6 +39,12 @@ DEFUN(chroot, (file_name), CONST char *file_name)
if (dir == MACH_PORT_NULL) if (dir == MACH_PORT_NULL)
return -1; 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; return 0;
} }

View File

@ -1,6 +1,6 @@
/* Definitions of global stdio data structures. /* 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. 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
@ -80,6 +80,6 @@ text_set_element (_hurd_fd_subinit, init_stdio);
void void
DEFUN_VOID(_cleanup) DEFUN_VOID(_cleanup)
{ {
(void) fclose ((FILE *) NULL); __fcloseall ();
} }
text_set_element (__libc_atexit, _cleanup); 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]; static unsigned long int threadvars[_HURD_THREADVAR_MAX];
unsigned long int __hurd_threadvar_stack_offset unsigned long int __hurd_threadvar_stack_offset
= (unsigned long int) &threadvars; = (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; unsigned long int __hurd_threadvar_stack_mask;
/* XXX loser kludge for vm_map kernel bug */ /* XXX loser kludge for vm_map kernel bug */
static vm_address_t fmha; static vm_address_t fmha;
static vm_size_t fmhs; 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 __getopt_clean_environment (void);
extern void __libc_global_ctors (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_multiple_libcs = 1;
int __libc_argc; extern int __libc_argc;
char **__libc_argv; extern char **__libc_argv;
/* We often need the PID. Cache this value. */ /* We often need the PID. Cache this value. */
pid_t __libc_pid; 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. 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
@ -32,45 +32,33 @@ DEFUN(__readlink, (file_name, buf, len),
{ {
error_t err; error_t err;
file_t file; file_t file;
char mybuf[2048], *transp = mybuf; struct stat st;
mach_msg_type_number_t translen = sizeof (mybuf);
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) if (file == MACH_PORT_NULL)
return -1; 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); __mach_port_deallocate (__mach_task_self (), file);
if (err) if (err)
return __hurd_fail (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 else
{ return len;
/* 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;
} }
weak_alias (__readlink, readlink) weak_alias (__readlink, readlink)

View File

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

View File

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