2023-01-06 21:08:04 +00:00
|
|
|
|
/* Copyright (C) 1992-2023 Free Software Foundation, Inc.
|
1997-02-15 04:31:36 +00:00
|
|
|
|
This file is part of the GNU C Library.
|
|
|
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 04:58:11 +00:00
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1997-02-15 04:31:36 +00:00
|
|
|
|
|
|
|
|
|
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
|
2001-07-06 04:58:11 +00:00
|
|
|
|
Lesser General Public License for more details.
|
1997-02-15 04:31:36 +00:00
|
|
|
|
|
2001-07-06 04:58:11 +00:00
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-09 23:18:22 +00:00
|
|
|
|
License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
|
|
|
|
<https://www.gnu.org/licenses/>. */
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
|
|
#include <sys/stat.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
#include <hurd.h>
|
|
|
|
|
#include <hurd/port.h>
|
2020-11-13 01:10:42 +00:00
|
|
|
|
#include <ldsodefs.h>
|
1995-02-18 01:27:10 +00:00
|
|
|
|
#include "set-hooks.h"
|
|
|
|
|
#include "hurdmalloc.h" /* XXX */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int _hurd_exec_flags;
|
|
|
|
|
struct hurd_port *_hurd_ports;
|
|
|
|
|
unsigned int _hurd_nports;
|
|
|
|
|
mode_t _hurd_umask;
|
1996-05-04 09:46:57 +00:00
|
|
|
|
sigset_t _hurdsig_traced;
|
1997-02-23 22:09:31 +00:00
|
|
|
|
|
1996-09-21 20:05:50 +00:00
|
|
|
|
char **__libc_argv;
|
1997-02-23 22:09:31 +00:00
|
|
|
|
int __libc_argc;
|
1996-09-21 20:05:50 +00:00
|
|
|
|
|
2020-11-11 12:52:35 +00:00
|
|
|
|
static int *_hurd_intarray;
|
|
|
|
|
static size_t _hurd_intarraysize;
|
|
|
|
|
static mach_port_t *_hurd_portarray;
|
|
|
|
|
static size_t _hurd_portarraysize;
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
Sat Oct 14 02:52:36 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* malloc/malloc.c (_malloc_internal): Performance fix. Move
if statement out of loop.
* stdio/_itoa.c, stdio/_itoa.h: Complete rewrite. Much faster
implementation using GMP functions. Contributed by
Torbjorn Granlund and Ulrich Drepper.
* stdio/test_rdwr.c: Include <errno.h>.
* sysdeps/i386/i586/Implies: New file.
New highly optimized string functions for i[345]86.
* sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files.
* sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files.
* sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files.
* sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files.
* sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files.
* sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files.
* sysdeps/i386/i586/strlen.S: New file.
* sysdeps/i386/memchr.c: Removed. There is now an assembler version.
* sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did
not correspond to used values.
* sysdeps/unix/sysv/linux/nfs/nfs.h: New file. Simply a wrapper
around a kernel header file.
* sysdeps/unix/sysv/linux/Dist: Add it.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers):
Likewise.
* sysdeps/unix/sysv/linux/local_lim.h: Rewrite. Instead of
defining ourself we use a kernel header file.
* sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system
call handler for i586.
* sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up.
Sat Oct 14 02:52:36 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* malloc/malloc.c (_malloc_internal): Performance fix. Move
if statement out of loop.
* stdio/_itoa.c, stdio/_itoa.h: Complete rewrite. Much faster
implementation using GMP functions. Contributed by
Torbjorn Granlund and Ulrich Drepper.
* stdio/test_rdwr.c: Include <errno.h>.
* sysdeps/i386/i586/Implies: New file.
New highly optimized string functions for i[345]86.
* sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files.
* sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files.
* sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files.
* sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files.
* sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files.
* sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files.
* sysdeps/i386/i586/strlen.S: New file.
* sysdeps/i386/memchr.c: Removed. There is now an assembler version.
* sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did
not correspond to used values.
* sysdeps/unix/sysv/linux/nfs/nfs.h: New file. Simply a wrapper
around a kernel header file.
* sysdeps/unix/sysv/linux/Dist: Add it.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers):
Likewise.
* sysdeps/unix/sysv/linux/local_lim.h: Rewrite. Instead of
defining ourself we use a kernel header file.
* sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system
call handler for i586.
* sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up.
1995-10-16 01:37:51 +00:00
|
|
|
|
error_t
|
|
|
|
|
_hurd_ports_use (int which, error_t (*operate) (mach_port_t))
|
|
|
|
|
{
|
2014-02-10 13:45:42 +00:00
|
|
|
|
if (__glibc_unlikely (_hurd_ports == NULL))
|
2002-01-02 10:23:33 +00:00
|
|
|
|
/* This means that _hurd_init has not been called yet, which is
|
|
|
|
|
normally only the case in the bootstrap filesystem, and there
|
|
|
|
|
only in the early phases of booting. */
|
|
|
|
|
return EGRATUITOUS;
|
|
|
|
|
|
Sat Oct 14 02:52:36 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* malloc/malloc.c (_malloc_internal): Performance fix. Move
if statement out of loop.
* stdio/_itoa.c, stdio/_itoa.h: Complete rewrite. Much faster
implementation using GMP functions. Contributed by
Torbjorn Granlund and Ulrich Drepper.
* stdio/test_rdwr.c: Include <errno.h>.
* sysdeps/i386/i586/Implies: New file.
New highly optimized string functions for i[345]86.
* sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files.
* sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files.
* sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files.
* sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files.
* sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files.
* sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files.
* sysdeps/i386/i586/strlen.S: New file.
* sysdeps/i386/memchr.c: Removed. There is now an assembler version.
* sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did
not correspond to used values.
* sysdeps/unix/sysv/linux/nfs/nfs.h: New file. Simply a wrapper
around a kernel header file.
* sysdeps/unix/sysv/linux/Dist: Add it.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers):
Likewise.
* sysdeps/unix/sysv/linux/local_lim.h: Rewrite. Instead of
defining ourself we use a kernel header file.
* sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system
call handler for i586.
* sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up.
Sat Oct 14 02:52:36 1995 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
* malloc/malloc.c (_malloc_internal): Performance fix. Move
if statement out of loop.
* stdio/_itoa.c, stdio/_itoa.h: Complete rewrite. Much faster
implementation using GMP functions. Contributed by
Torbjorn Granlund and Ulrich Drepper.
* stdio/test_rdwr.c: Include <errno.h>.
* sysdeps/i386/i586/Implies: New file.
New highly optimized string functions for i[345]86.
* sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files.
* sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files.
* sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files.
* sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files.
* sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files.
* sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files.
* sysdeps/i386/i586/strlen.S: New file.
* sysdeps/i386/memchr.c: Removed. There is now an assembler version.
* sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did
not correspond to used values.
* sysdeps/unix/sysv/linux/nfs/nfs.h: New file. Simply a wrapper
around a kernel header file.
* sysdeps/unix/sysv/linux/Dist: Add it.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers):
Likewise.
* sysdeps/unix/sysv/linux/local_lim.h: Rewrite. Instead of
defining ourself we use a kernel header file.
* sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system
call handler for i586.
* sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up.
1995-10-16 01:37:51 +00:00
|
|
|
|
return HURD_PORT_USE (&_hurd_ports[which], (*operate) (port));
|
|
|
|
|
}
|
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
|
DEFINE_HOOK (_hurd_subinit, (void));
|
|
|
|
|
|
2023-04-15 19:08:56 +00:00
|
|
|
|
/* Hook for things which should be initialized as soon as the proc
|
|
|
|
|
server is available. */
|
|
|
|
|
DEFINE_HOOK (_hurd_proc_subinit, (void));
|
|
|
|
|
|
2002-05-14 02:22:58 +00:00
|
|
|
|
__typeof (_hurd_proc_init) _hurd_new_proc_init; /* below */
|
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
|
/* Initialize the library data structures from the
|
|
|
|
|
ints and ports passed to us by the exec server.
|
|
|
|
|
|
|
|
|
|
PORTARRAY and INTARRAY are vm_deallocate'd. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
_hurd_init (int flags, char **argv,
|
|
|
|
|
mach_port_t *portarray, size_t portarraysize,
|
|
|
|
|
int *intarray, size_t intarraysize)
|
|
|
|
|
{
|
Mon Mar 20 03:19:23 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdio/vfscanf.c (%n): Use READ_IN - 1, so as not to count the
read-ahead character.
* hurd/dtable.c, hurd/getdport.c, hurd/hurd.h, hurd/hurdexec.c,
hurd/hurdinit.c, hurd/hurdprio.c, hurd/hurdsock.c,
hurd/ports-get.c, hurd/ports-set.c, hurd/setauth.c,
hurd/setuids.c, sysdeps/mach/hurd/i386/trampoline.c:
Get anal with unsigned to pacify compiler.
1995-03-20 08:21:38 +00:00
|
|
|
|
size_t i;
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
|
|
_hurd_exec_flags = flags;
|
|
|
|
|
|
|
|
|
|
_hurd_ports = malloc (portarraysize * sizeof (*_hurd_ports));
|
|
|
|
|
if (_hurd_ports == NULL)
|
|
|
|
|
__libc_fatal ("Can't allocate _hurd_ports\n");
|
|
|
|
|
_hurd_nports = portarraysize;
|
|
|
|
|
|
|
|
|
|
/* See what ports we were passed. */
|
|
|
|
|
for (i = 0; i < portarraysize; ++i)
|
|
|
|
|
_hurd_port_init (&_hurd_ports[i], portarray[i]);
|
|
|
|
|
|
|
|
|
|
/* When the user asks for the bootstrap port,
|
|
|
|
|
he will get the one the exec server passed us. */
|
|
|
|
|
__task_set_special_port (__mach_task_self (), TASK_BOOTSTRAP_PORT,
|
|
|
|
|
portarray[INIT_PORT_BOOTSTRAP]);
|
|
|
|
|
|
|
|
|
|
if (intarraysize > INIT_UMASK)
|
|
|
|
|
_hurd_umask = intarray[INIT_UMASK] & 0777;
|
|
|
|
|
else
|
|
|
|
|
_hurd_umask = CMASK;
|
|
|
|
|
|
1996-05-04 09:46:57 +00:00
|
|
|
|
if (intarraysize > INIT_TRACEMASK)
|
|
|
|
|
_hurdsig_traced = intarray[INIT_TRACEMASK];
|
|
|
|
|
|
2020-11-11 12:52:35 +00:00
|
|
|
|
_hurd_intarray = intarray;
|
|
|
|
|
_hurd_intarraysize = intarraysize;
|
|
|
|
|
_hurd_portarray = portarray;
|
|
|
|
|
_hurd_portarraysize = portarraysize;
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
|
|
if (flags & EXEC_SECURE)
|
2019-02-27 13:58:56 +00:00
|
|
|
|
{
|
|
|
|
|
/* XXX if secure exec, elide environment variables
|
|
|
|
|
which the library uses and could be security holes.
|
|
|
|
|
CORESERVER, COREFILE
|
|
|
|
|
*/
|
|
|
|
|
}
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
2023-04-15 19:08:56 +00:00
|
|
|
|
/* Call other things which want to do some initialization. These are not
|
|
|
|
|
on the _hurd_subinit hook because things there assume that things done
|
|
|
|
|
here, like _hurd_pid, are already initialized. */
|
|
|
|
|
RUN_RELHOOK (_hurd_proc_subinit, ());
|
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
|
/* Call other things which want to do some initialization. These are not
|
|
|
|
|
on the __libc_subinit hook because things there like to be able to
|
|
|
|
|
assume the availability of the POSIX.1 services we provide. */
|
2021-12-28 09:27:06 +00:00
|
|
|
|
RUN_RELHOOK (_hurd_subinit, ());
|
1995-02-18 01:27:10 +00:00
|
|
|
|
}
|
hurd: Avoid some libc.so PLTs
* hurd/catch-signal.c (hurd_catch_signal): Rename to
__hurd_catch_signal.
(hurd_catch_signal): New strong alias.
(hurd_safe_memset, hurd_safe_copyout, hurd_safe_copyin): Call
__hurd_catch_signal instead of hurd_catch_signal.
* hurd/exc2signal.c (_hurd_exception2signal): Add hidden def.
* hurd/hurdexec.c (_hurd_init): Add hidden def.
* hurd/hurdinit.c (_hurd_init): Add hidden def.
* hurd/hurdsig.c: Include <mach/mig_support.h>.
(_hurd_thread_sigstate): Add hidden def.
(_hurd_internal_post_signal): Use __mutex_unlock instead of
mutex_unlock.
* hurd/intern-fd.c (_hurd_intern_fd): Add hidden def.
* hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Add hidden def.
* hurd/path-lookup.c (hurd_file_name_path_lookup): Rename to
__hurd_file_name_path_lookup.
(hurd_file_name_path_lookup): New strong alias.
(file_name_path_lookup): Call __hurd_file_name_path_lookup instead of
hurd_file_name_path_lookup.
* mach/errstring.c (mach_error_type): Add hidden def.
* mach/msg-destroy.c (__mach_msg_destroy): Add hidden def.
* mach/mutex-init.c (__mutex_init): Add hidden def.
* mach/spin-lock.c (__spin_lock_locked, __spin_lock, __spin_unlock,
__spin_try_lock, __mutex_lock, __mutex_trylock): Add hidden defs.
* mach/spin-solid.c (__spin_lock_solid): Add hidden def.
* sysdeps/mach/hurd/getcwd.c
(_hurd_canonicalize_directory_name_internal): Rename to
__hurd_canonicalize_directory_name_internal.
(_hurd_canonicalize_directory_name_internal): New strong alias.
(__canonicalize_directory_name_internal, __getcwd): Call
__hurd_canonicalize_directory_name_internal instead of
_hurd_canonicalize_directory_name_internal.
* sysdeps/mach/hurd/mig-reply.c: Include <mach/mig_support.h>.
(__mig_get_reply_port, __mig_dealloc_reply_port, __mig_init): Add
hidden defs.
* sysdeps/hurd/include/hurd.h: New file.
* sysdeps/hurd/include/hurd/fd.h: New file.
* sysdeps/hurd/include/hurd/signal.h: New file.
* sysdeps/mach/include/lock-intern.h: New file.
* sysdeps/mach/include/mach.h: New file.
* sysdeps/mach/include/mach/mig_support.h: New file.
* sysdeps/mach/include/mach_error.h: New file.
2018-04-02 22:07:28 +00:00
|
|
|
|
libc_hidden_def (_hurd_init)
|
2020-11-11 12:52:35 +00:00
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
_hurd_libc_proc_init (char **argv)
|
|
|
|
|
{
|
2020-11-13 00:21:47 +00:00
|
|
|
|
if (_hurd_portarray)
|
|
|
|
|
{
|
2020-11-13 01:10:42 +00:00
|
|
|
|
/* We will start the signal thread, so we need to initialize libpthread
|
|
|
|
|
* if linked in. */
|
|
|
|
|
if (__pthread_initialize_minimal != NULL)
|
|
|
|
|
__pthread_initialize_minimal ();
|
|
|
|
|
|
2020-11-13 00:21:47 +00:00
|
|
|
|
/* Tell the proc server we exist, if it does. */
|
|
|
|
|
if (_hurd_portarray[INIT_PORT_PROC] != MACH_PORT_NULL)
|
|
|
|
|
_hurd_new_proc_init (argv, _hurd_intarray, _hurd_intarraysize);
|
|
|
|
|
|
|
|
|
|
/* All done with init ints and ports. */
|
|
|
|
|
__vm_deallocate (__mach_task_self (),
|
|
|
|
|
(vm_address_t) _hurd_intarray,
|
|
|
|
|
_hurd_intarraysize * sizeof (int));
|
|
|
|
|
_hurd_intarray = NULL;
|
|
|
|
|
_hurd_intarraysize = 0;
|
|
|
|
|
|
|
|
|
|
__vm_deallocate (__mach_task_self (),
|
|
|
|
|
(vm_address_t) _hurd_portarray,
|
|
|
|
|
_hurd_portarraysize * sizeof (mach_port_t));
|
|
|
|
|
_hurd_portarray = NULL;
|
|
|
|
|
_hurd_portarraysize = 0;
|
|
|
|
|
}
|
2020-11-11 12:52:35 +00:00
|
|
|
|
}
|
|
|
|
|
libc_hidden_def (_hurd_libc_proc_init)
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
|
|
#include <hurd/signal.h>
|
|
|
|
|
|
|
|
|
|
/* The user can do "int _hide_arguments = 1;" to make
|
|
|
|
|
sure the arguments are never visible with `ps'. */
|
|
|
|
|
int _hide_arguments, _hide_environment;
|
|
|
|
|
|
|
|
|
|
/* Do startup handshaking with the proc server just installed in _hurd_ports.
|
|
|
|
|
Call _hurdsig_init to set up signal processing. */
|
|
|
|
|
|
|
|
|
|
void
|
1998-12-04 13:47:40 +00:00
|
|
|
|
_hurd_new_proc_init (char **argv,
|
|
|
|
|
const int *intarray, size_t intarraysize)
|
1995-02-18 01:27:10 +00:00
|
|
|
|
{
|
|
|
|
|
mach_port_t oldmsg;
|
|
|
|
|
struct hurd_userlink ulink;
|
|
|
|
|
process_t procserver;
|
|
|
|
|
|
|
|
|
|
/* Initialize the signal code; Mach exceptions will become signals. */
|
1998-11-11 09:56:51 +00:00
|
|
|
|
_hurdsig_init (intarray, intarraysize);
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
|
|
/* The signal thread is now prepared to receive messages.
|
|
|
|
|
It is safe to give the port to the proc server. */
|
|
|
|
|
|
|
|
|
|
procserver = _hurd_port_get (&_hurd_ports[INIT_PORT_PROC], &ulink);
|
|
|
|
|
|
|
|
|
|
/* Give the proc server our message port. */
|
|
|
|
|
__proc_setmsgport (procserver, _hurd_msgport, &oldmsg);
|
|
|
|
|
if (oldmsg != MACH_PORT_NULL)
|
|
|
|
|
/* Deallocate the old msg port we replaced. */
|
|
|
|
|
__mach_port_deallocate (__mach_task_self (), oldmsg);
|
|
|
|
|
|
|
|
|
|
/* Tell the proc server where our args and environment are. */
|
|
|
|
|
__proc_set_arg_locations (procserver,
|
|
|
|
|
_hide_arguments ? 0 : (vm_address_t) argv,
|
|
|
|
|
_hide_environment ? 0 : (vm_address_t) __environ);
|
|
|
|
|
|
|
|
|
|
_hurd_port_free (&_hurd_ports[INIT_PORT_PROC], &ulink, procserver);
|
|
|
|
|
|
|
|
|
|
/* Initialize proc server-assisted fault recovery for the signal thread. */
|
|
|
|
|
_hurdsig_fault_init ();
|
|
|
|
|
|
1999-04-30 13:52:59 +00:00
|
|
|
|
/* XXX This code should probably be removed entirely at some point. This
|
|
|
|
|
conditional should make it reasonably usable with old gdb's for a
|
|
|
|
|
while. Eventually it probably makes most sense for the exec server to
|
|
|
|
|
mask out EXEC_SIGTRAP so the debugged program is closer to not being
|
|
|
|
|
able to tell it's being debugged. */
|
2002-01-02 10:52:56 +00:00
|
|
|
|
if (!__sigisemptyset (&_hurdsig_traced)
|
1999-04-30 13:52:59 +00:00
|
|
|
|
#ifdef EXEC_SIGTRAP
|
|
|
|
|
&& !(_hurd_exec_flags & EXEC_SIGTRAP)
|
|
|
|
|
#endif
|
|
|
|
|
)
|
1995-02-18 01:27:10 +00:00
|
|
|
|
/* This process is "traced", meaning it should stop on signals or exec.
|
|
|
|
|
We are all set up now to handle signals. Stop ourselves, to inform
|
|
|
|
|
our parent (presumably a debugger) that the exec has completed. */
|
2020-12-21 00:41:55 +00:00
|
|
|
|
__msg_sig_post (_hurd_msgport, SIGTRAP, TRAP_TRACE, __mach_task_self ());
|
1995-02-18 01:27:10 +00:00
|
|
|
|
}
|
1998-12-04 13:47:40 +00:00
|
|
|
|
|
2000-03-27 05:18:47 +00:00
|
|
|
|
#include <shlib-compat.h>
|
|
|
|
|
versioned_symbol (libc, _hurd_new_proc_init, _hurd_proc_init, GLIBC_2_1);
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
|
|
/* Called when we get a message telling us to change our proc server port. */
|
|
|
|
|
|
|
|
|
|
error_t
|
|
|
|
|
_hurd_setproc (process_t procserver)
|
|
|
|
|
{
|
|
|
|
|
error_t err;
|
|
|
|
|
mach_port_t oldmsg;
|
|
|
|
|
|
|
|
|
|
/* Give the proc server our message port. */
|
|
|
|
|
if (err = __proc_setmsgport (procserver, _hurd_msgport, &oldmsg))
|
|
|
|
|
return err;
|
|
|
|
|
if (oldmsg != MACH_PORT_NULL)
|
|
|
|
|
/* Deallocate the old msg port we replaced. */
|
|
|
|
|
__mach_port_deallocate (__mach_task_self (), oldmsg);
|
|
|
|
|
|
|
|
|
|
/* Tell the proc server where our args and environment are. */
|
|
|
|
|
if (err = __proc_set_arg_locations (procserver,
|
2019-02-25 13:19:19 +00:00
|
|
|
|
_hide_arguments ? 0
|
|
|
|
|
: (vm_address_t) __libc_argv,
|
|
|
|
|
_hide_environment ? 0
|
|
|
|
|
: (vm_address_t) __environ))
|
1995-02-18 01:27:10 +00:00
|
|
|
|
return err;
|
|
|
|
|
|
|
|
|
|
/* Those calls worked, so the port looks good. */
|
|
|
|
|
_hurd_port_set (&_hurd_ports[INIT_PORT_PROC], procserver);
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
pid_t oldpgrp = _hurd_pgrp;
|
|
|
|
|
|
|
|
|
|
/* Call these functions again so they can fetch the
|
|
|
|
|
new information from the new proc server. */
|
2021-12-28 09:27:06 +00:00
|
|
|
|
RUN_RELHOOK (_hurd_proc_subinit, ());
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
|
|
if (_hurd_pgrp != oldpgrp)
|
|
|
|
|
{
|
|
|
|
|
/* Run things that want notification of a pgrp change. */
|
|
|
|
|
DECLARE_HOOK (_hurd_pgrp_changed_hook, (pid_t));
|
|
|
|
|
RUN_HOOK (_hurd_pgrp_changed_hook, (_hurd_pgrp));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|