aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-07-20 17:25:48 +0000
committerUlrich Drepper <drepper@redhat.com>1998-07-20 17:25:48 +0000
commita9ddb79305d6346fdf2bcb1772213987d53c0bc5 (patch)
tree113c7be7f13b28e6be9dcd9c4a84a0d4875a8e5c /sysdeps
parent8f1c9b09f915b52c7c90c111c3e5e7a995cf8a78 (diff)
downloadglibc-a9ddb79305d6346fdf2bcb1772213987d53c0bc5.tar
glibc-a9ddb79305d6346fdf2bcb1772213987d53c0bc5.tar.gz
glibc-a9ddb79305d6346fdf2bcb1772213987d53c0bc5.tar.bz2
glibc-a9ddb79305d6346fdf2bcb1772213987d53c0bc5.zip
Update.
1998-07-20 17:09 Ulrich Drepper <drepper@cygnus.com> * shlib-versions: Remove definition for libSegFault. * memory.texi: Comment out the relocating allocator description. * manual/signal.texi: Remove reference to relocating allocator. * manual/top-menu.texi: Regenerated. * posix/fnmatch.c: Implement [: :] and change to recognize ^ as negation only when not _POSIXLY_CORRECT. * sysdeps/generic/glob.c: Add several optimizations. * posix/glob.h: Undefine __PMT to prevent warnings. Reported by Roland McGrath. * posix/regex.c: Define namespace macros only for _LIBC. * sysdeps/arm/dl-machine.h: Fix typo. * sysdeps/unix/sysv/sysv4/solaris2/sigpending.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigstack.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: Add sigaltstack, sigpending, sigqueue, and sigtimedwait. * sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S: New file. * timezone/leapseconds: Update from tzdata1998f. 1998-07-18 Mark Kettenis <kettenis@phys.uva.nl> * stdio/stdio.h [__USE_GNU]: Add prototype for fputs_unlocked. * stdio/Versions [GLIBC_2.1]: Add fputs_unlocked. * libio/stdio.h: Fix typo. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): #if 0 out the magic memobj port arg parsing stuff. Fix it someday when we are ready to really use it. (_dl_sysdep_output): New function, modified from _dl_sysdep_error. (_dl_sysdep_error, _dl_sysdep_message, _dl_sysdep_fatal): Removed. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * stdio/fputs.c: Add fputs_unlocked as weak alias for fputs. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/posix/sigsuspend.c: Define __sigsuspend with sigsuspend as a weak alias. * sysdeps/mach/hurd/sigsuspend.c: Likewise. * sysdeps/generic/sigsuspend.c: Likewise. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/i386/sigcontextinfo.h: New file. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (map-file): Don't use $(wildcard) to find the generated version script, instead look in $(version-maps). ($(common-objpfx)libc.so): Only depend on libc.map if versioning is used. * extra-lib.mk ($(objpfx)$(lib).so): Only depend on version script if versioning is used. Don't use $(wildcard) to find the generated version script, instead look in $(verson-maps). 1998-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/generic/segfault.c: Rename GET_EIP to GET_PC. Remove unused function handle. * sysdeps/generic/sigcontextinfo.h: Rename GET_EIP to GET_PC. * sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise. * debug/catchsegv.sh: Fix argument processing, quoting and various typos. Put the crash info always in the current directory. Find program in $PATH if it contains no directory component. * Makerules (install-lib.so-versioned, install-lib.so-unversioned): New variables. (install-lib-nosubdir): Depend on unversioned libs in slibdir, not libdir. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Make-dist (+tsrcs): Remove references to %-map variables and *.map files. Add Versions in subdirs. * Makerules (distinfo-vars): Don't write out %-map variables. 1998-07-20 13:55 Ulrich Drepper <drepper@cygnus.com> * inet/protocols/rwhod.h: Remove definition of _PATH_RWHODIR. Include <paths.h> instead. * sysdeps/generic/paths.h: Define _PATH_RWHODIR. * sysdeps/unix/sysv/linux/paths.h: Likewise. Reported by Dale Scheetz <dwarf@polaris.net>. 1998-07-17 21:44 Ulrich Drepper <drepper@cygnus.com> * catgets/open_catalog.c: Strictly check whether catalog file is larger enough for the data. Reported by Andries.Brouwer@cwi.nl.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/arm/dl-machine.h2
-rw-r--r--sysdeps/generic/glob.c190
-rw-r--r--sysdeps/generic/paths.h1
-rw-r--r--sysdeps/generic/segfault.c8
-rw-r--r--sysdeps/generic/sigcontextinfo.h2
-rw-r--r--sysdeps/generic/sigsuspend.c7
-rw-r--r--sysdeps/mach/hurd/dl-sysdep.c53
-rw-r--r--sysdeps/mach/hurd/i386/sigcontextinfo.h22
-rw-r--r--sysdeps/mach/hurd/sigsuspend.c6
-rw-r--r--sysdeps/posix/sigsuspend.c5
-rw-r--r--sysdeps/unix/sysv/linux/i386/sigcontextinfo.h2
-rw-r--r--sysdeps/unix/sysv/linux/paths.h1
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sigpending.c37
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sigstack.c3
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c2
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S2
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/syscalls.list4
17 files changed, 204 insertions, 143 deletions
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
index e6a686e626..7612285907 100644
--- a/sysdeps/arm/dl-machine.h
+++ b/sysdeps/arm/dl-machine.h
@@ -313,7 +313,7 @@ _dl_start_user:
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
#define ELF_MACHINE_JMP_SLOT R_ARM_JUMP_SLOT
-/* The i386 never uses Elf32_Rela relocations. */
+/* The ARM never uses Elf32_Rela relocations. */
#define ELF_MACHINE_NO_RELA 1
/* We define an initialization functions. This is called very early in
diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c
index 70d125c200..9182c0585a 100644
--- a/sysdeps/generic/glob.c
+++ b/sysdeps/generic/glob.c
@@ -797,10 +797,10 @@ glob (pattern, flags, errfunc, pglob)
int i;
struct stat st;
for (i = oldcount; i < pglob->gl_pathc; ++i)
- if (((flags & GLOB_ALTDIRFUNC) ?
- (*pglob->gl_stat) (pglob->gl_pathv[i], &st) :
- __stat (pglob->gl_pathv[i], &st)) == 0 &&
- S_ISDIR (st.st_mode))
+ if (((flags & GLOB_ALTDIRFUNC)
+ ? (*pglob->gl_stat) (pglob->gl_pathv[i], &st)
+ : __stat (pglob->gl_pathv[i], &st)) == 0
+ && S_ISDIR (st.st_mode))
{
size_t len = strlen (pglob->gl_pathv[i]) + 2;
char *new = realloc (pglob->gl_pathv[i], len);
@@ -958,7 +958,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
int (*errfunc) __P ((const char *, int));
glob_t *pglob;
{
- __ptr_t stream;
+ __ptr_t stream = NULL;
struct globlink
{
@@ -970,92 +970,127 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
int meta;
int save;
- stream = ((flags & GLOB_ALTDIRFUNC) ?
- (*pglob->gl_opendir) (directory) :
- (__ptr_t) opendir (directory));
- if (stream == NULL)
+ meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE));
+ if (meta == 0)
{
- if ((errfunc != NULL && (*errfunc) (directory, errno)) ||
- (flags & GLOB_ERR))
- return GLOB_ABORTED;
+ if (flags & (GLOB_NOCHECK|GLOB_NOMAGIC))
+ /* We need not do any tests. The PATTERN contains no meta
+ characters and we must not return an error therefore the
+ result will always contain exactly the one name. */
+ flags |= GLOB_NOCHECK;
+ else
+ {
+ /* Since we use the normal file functions we can also use stat()
+ to verify the file is there. */
+ struct stat st;
+ size_t patlen = strlen (pattern);
+ size_t dirlen = strlen (directory);
+ char *fullname = __alloca (dirlen + 1 + patlen + 1);
+
+# ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (mempcpy (fullname, directory, dirlen),
+ "/", 1),
+ pattern, patlen + 1);
+# else
+ memcpy (fullname, directory, dirlen);
+ fullname[dirlen] = '/';
+ memcpy (&fullname[dirlen + 1], pattern, patlen + 1);
+# endif
+ if (((flags & GLOB_ALTDIRFUNC)
+ ? (*pglob->gl_stat) (fullname, &st)
+ : __stat (fullname, &st)) == 0)
+ /* We found this file to be existing. No tell the rest
+ of the function to copy this name into the result. */
+ flags |= GLOB_NOCHECK;
+ }
+
nfound = 0;
- meta = 0;
- }
- else if (pattern[0] == '\0')
- {
- /* This is a special case for matching directories like in
- "*a/". */
- names = (struct globlink *) __alloca (sizeof (struct globlink));
- names->name = (char *) malloc (1);
- if (names->name == NULL)
- goto memory_error;
- names->name[0] = '\0';
- names->next = NULL;
- nfound = 1;
- meta = 0;
}
else
{
- nfound = 0;
- meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE));
- if(meta)
- flags |= GLOB_MAGCHAR;
-
- while (1)
+ if (pattern[0] == '\0')
{
- const char *name;
- size_t len;
- struct dirent *d = ((flags & GLOB_ALTDIRFUNC) ?
- (*pglob->gl_readdir) (stream) :
- readdir ((DIR *) stream));
- if (d == NULL)
- break;
- if (! REAL_DIR_ENTRY (d))
- continue;
+ /* This is a special case for matching directories like in
+ "*a/". */
+ names = (struct globlink *) __alloca (sizeof (struct globlink));
+ names->name = (char *) malloc (1);
+ if (names->name == NULL)
+ goto memory_error;
+ names->name[0] = '\0';
+ names->next = NULL;
+ nfound = 1;
+ meta = 0;
+ }
+ else
+ {
+ stream = ((flags & GLOB_ALTDIRFUNC)
+ ? (*pglob->gl_opendir) (directory)
+ : (__ptr_t) opendir (directory));
+ if (stream == NULL)
+ {
+ if ((errfunc != NULL && (*errfunc) (directory, errno))
+ || (flags & GLOB_ERR))
+ return GLOB_ABORTED;
+ nfound = 0;
+ meta = 0;
+ }
+ else
+ {
+ int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0)
+ | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)
+#if defined _AMIGA || defined VMS
+ | FNM_CASEFOLD
+#endif
+ );
+ nfound = 0;
+ flags |= GLOB_MAGCHAR;
+
+ while (1)
+ {
+ const char *name;
+ size_t len;
+ struct dirent *d = ((flags & GLOB_ALTDIRFUNC)
+ ? (*pglob->gl_readdir) (stream)
+ : readdir ((DIR *) stream));
+ if (d == NULL)
+ break;
+ if (! REAL_DIR_ENTRY (d))
+ continue;
#ifdef HAVE_D_TYPE
- /* If we shall match only directories use the information
- provided by the dirent call if possible. */
- if ((flags & GLOB_ONLYDIR)
- && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR)
- continue;
+ /* If we shall match only directories use the information
+ provided by the dirent call if possible. */
+ if ((flags & GLOB_ONLYDIR)
+ && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR)
+ continue;
#endif
- name = d->d_name;
+ name = d->d_name;
- if ((!meta && strcmp (pattern, name) == 0)
- || fnmatch (pattern, name,
- (!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) |
- ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)
-#if defined _AMIGA || defined VMS
- | FNM_CASEFOLD
-#endif
- ) == 0)
- {
- struct globlink *new
- = (struct globlink *) __alloca (sizeof (struct globlink));
- len = NAMLEN (d);
- new->name = (char *) malloc (len + 1);
- if (new->name == NULL)
- goto memory_error;
+ if (fnmatch (pattern, name, fnm_flags) == 0)
+ {
+ struct globlink *new = (struct globlink *)
+ __alloca (sizeof (struct globlink));
+ len = NAMLEN (d);
+ new->name = (char *) malloc (len + 1);
+ if (new->name == NULL)
+ goto memory_error;
#ifdef HAVE_MEMPCPY
- *((char *) mempcpy ((__ptr_t) new->name, name, len)) = '\0';
+ *((char *) mempcpy ((__ptr_t) new->name, name, len))
+ = '\0';
#else
- memcpy ((__ptr_t) new->name, name, len);
- new->name[len] = '\0';
+ memcpy ((__ptr_t) new->name, name, len);
+ new->name[len] = '\0';
#endif
- new->next = names;
- names = new;
- ++nfound;
- if (!meta)
- break;
+ new->next = names;
+ names = new;
+ ++nfound;
+ }
+ }
}
}
}
- if (nfound == 0 && (flags & GLOB_NOMAGIC) && !meta)
- flags |= GLOB_NOCHECK;
-
if (nfound == 0 && (flags & GLOB_NOCHECK))
{
size_t len = strlen (pattern);
@@ -1096,10 +1131,11 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
}
save = errno;
- if (flags & GLOB_ALTDIRFUNC)
- (*pglob->gl_closedir) (stream);
- else
- closedir ((DIR *) stream);
+ if (stream != NULL)
+ if (flags & GLOB_ALTDIRFUNC)
+ (*pglob->gl_closedir) (stream);
+ else
+ closedir ((DIR *) stream);
__set_errno (save);
return nfound == 0 ? GLOB_NOMATCH : 0;
diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h
index 3e6053aeaf..59e00c8c23 100644
--- a/sysdeps/generic/paths.h
+++ b/sysdeps/generic/paths.h
@@ -57,6 +57,7 @@
#define _PATH_MOUNTED "/var/run/mtab"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_PRESERVE "/var/preserve"
+#define _PATH_RWHODIR "/var/rwho"
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
#define _PATH_SHADOW "/etc/shadow"
#define _PATH_SHELLS "/etc/shells"
diff --git a/sysdeps/generic/segfault.c b/sysdeps/generic/segfault.c
index 868ff1dfd7..6504123e18 100644
--- a/sysdeps/generic/segfault.c
+++ b/sysdeps/generic/segfault.c
@@ -63,12 +63,6 @@ struct layout
};
-static void
-handle (int fd, void *addr)
-{
-}
-
-
/* This function is called when a segmentation fault is caught. The system
is in an instable state now. This means especially that malloc() might
not work anymore. */
@@ -115,7 +109,7 @@ catch_segfault (int signal, SIGCONTEXT ctx)
arr = alloca (cnt * sizeof (void *));
/* First handle the program counter from the structure. */
- arr[0] = GET_EIP (ctx);
+ arr[0] = GET_PC (ctx);
current = (struct layout *) top_frame;
cnt = 1;
diff --git a/sysdeps/generic/sigcontextinfo.h b/sysdeps/generic/sigcontextinfo.h
index 014db6624c..9623599698 100644
--- a/sysdeps/generic/sigcontextinfo.h
+++ b/sysdeps/generic/sigcontextinfo.h
@@ -19,6 +19,6 @@
/* In general we cannot provide any information. */
#define SIGCONTEXT struct sigcontext *
-#define GET_EIP(ctx) ((void *) 0)
+#define GET_PC(ctx) ((void *) 0)
#define GET_FRAME(ctx) ((void *) 0)
#define GET_STACK(ctx) ((void *) 0)
diff --git a/sysdeps/generic/sigsuspend.c b/sysdeps/generic/sigsuspend.c
index 15166acfb7..17650c78da 100644
--- a/sysdeps/generic/sigsuspend.c
+++ b/sysdeps/generic/sigsuspend.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1997, 1998 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
@@ -23,13 +23,14 @@
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
int
-sigsuspend (set)
+__sigsuspend (set)
const sigset_t *set;
{
__set_errno (ENOSYS);
return -1;
}
-
+weak_alias (__sigsuspend, sigsuspend)
stub_warning (sigsuspend)
+stub_warning (__sigsuspend)
#include <stub-tag.h>
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c
index 44049cef57..8edde69337 100644
--- a/sysdeps/mach/hurd/dl-sysdep.c
+++ b/sysdeps/mach/hurd/dl-sysdep.c
@@ -122,6 +122,7 @@ _dl_sysdep_start (void **start_argptr,
unfmh(); /* XXX */
+#if 0 /* XXX make this work for real someday... */
if (_dl_hurd_data->user_entry == (vm_address_t) &ENTRY_POINT)
/* We were invoked as a command, not as the program interpreter.
The generic ld.so code supports this: it will parse the args
@@ -166,6 +167,7 @@ unfmh(); /* XXX */
can be retrieved by the program later. */
l->l_info[DT_NULL] = (void *) memobj;
}
+#endif
/* Call elf/rtld.c's main program. It will set everything
up and leave us to transfer control to USER_ENTRY. */
@@ -643,58 +645,13 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
return result;
}
-void weak_function
-_dl_sysdep_fatal (const char *msg, ...)
-{
- va_list ap;
-
- va_start (ap, msg);
- do
- {
- size_t len = strlen (msg);
- mach_msg_type_number_t nwrote;
- do
- {
- if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
- break;
- len -= nwrote;
- msg += nwrote;
- } while (nwrote > 0);
- msg = va_arg (ap, const char *);
- } while (msg);
- va_end (ap);
-
- _exit (127);
-}
-
void weak_function
-_dl_sysdep_error (const char *msg, ...)
+_dl_sysdep_output (int fd, const char *msg, ...)
{
va_list ap;
- va_start (ap, msg);
- do
- {
- size_t len = strlen (msg);
- mach_msg_type_number_t nwrote;
- do
- {
- if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
- break;
- len -= nwrote;
- msg += nwrote;
- } while (nwrote > 0);
- msg = va_arg (ap, const char *);
- } while (msg);
- va_end (ap);
-}
-
-
-void weak_function
-_dl_sysdep_message (const char *msg, ...)
-{
- va_list ap;
+ assert(fd < _hurd_init_dtablesize);
va_start (ap, msg);
do
@@ -703,7 +660,7 @@ _dl_sysdep_message (const char *msg, ...)
mach_msg_type_number_t nwrote;
do
{
- if (__io_write (_hurd_init_dtable[1], msg, len, -1, &nwrote))
+ if (__io_write (_hurd_init_dtable[fd], msg, len, -1, &nwrote))
break;
len -= nwrote;
msg += nwrote;
diff --git a/sysdeps/mach/hurd/i386/sigcontextinfo.h b/sysdeps/mach/hurd/i386/sigcontextinfo.h
new file mode 100644
index 0000000000..6dd80f25ea
--- /dev/null
+++ b/sysdeps/mach/hurd/i386/sigcontextinfo.h
@@ -0,0 +1,22 @@
+/* Copyright (C) 1998 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#define SIGCONTEXT struct sigcontext
+#define GET_PC(ctx) ((void *) (ctx).sc_eip)
+#define GET_FRAME(ctx) ((void *) (ctx).sc_ebp)
+#define GET_STACK(ctx) ((void *) (ctx).sc_uesp)
diff --git a/sysdeps/mach/hurd/sigsuspend.c b/sysdeps/mach/hurd/sigsuspend.c
index ec7849557a..58f1417699 100644
--- a/sysdeps/mach/hurd/sigsuspend.c
+++ b/sysdeps/mach/hurd/sigsuspend.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,93,94,95,96,97,98 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
@@ -23,9 +23,8 @@
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
-/* XXX should be __sigsuspend ? */
int
-sigsuspend (set)
+__sigsuspend (set)
const sigset_t *set;
{
struct hurd_sigstate *ss;
@@ -80,3 +79,4 @@ sigsuspend (set)
errno = EINTR;
return -1;
}
+weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/posix/sigsuspend.c b/sysdeps/posix/sigsuspend.c
index db7899bfd4..914340d681 100644
--- a/sysdeps/posix/sigsuspend.c
+++ b/sysdeps/posix/sigsuspend.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997, 1998 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
@@ -25,7 +25,7 @@
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
int
-sigsuspend (set)
+__sigsuspend (set)
const sigset_t *set;
{
sigset_t oset;
@@ -49,3 +49,4 @@ sigsuspend (set)
__set_errno (save);
return -1;
}
+weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h b/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h
index b9913a4f4c..6560b9441e 100644
--- a/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h
@@ -18,6 +18,6 @@
Boston, MA 02111-1307, USA. */
#define SIGCONTEXT struct sigcontext
-#define GET_EIP(ctx) ((void *) ctx.eip)
+#define GET_PC(ctx) ((void *) ctx.eip)
#define GET_FRAME(ctx) ((void *) ctx.ebp)
#define GET_STACK(ctx) ((void *) ctx.esp_at_signal)
diff --git a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h
index cb5b57122c..c0a4940855 100644
--- a/sysdeps/unix/sysv/linux/paths.h
+++ b/sysdeps/unix/sysv/linux/paths.h
@@ -58,6 +58,7 @@
#define _PATH_MOUNTED "/etc/mtab"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_PRESERVE "/var/preserve"
+#define _PATH_RWHODIR "/var/spool/rwho"
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
#define _PATH_SHADOW "/etc/shadow"
#define _PATH_SHELLS "/etc/shells"
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sigpending.c b/sysdeps/unix/sysv/sysv4/solaris2/sigpending.c
new file mode 100644
index 0000000000..4e1ce0eb58
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sigpending.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 1998 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <stddef.h>
+#include <signal.h>
+
+extern int __syscall_sigpending (int subcode, sigset_t *set);
+
+
+/* Store in SET all signals that are blocked and pending. */
+int
+sigpending (sigset_t *set)
+{
+ if (set == NULL)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ return __syscall_sigpending (1, set);
+}
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sigstack.c b/sysdeps/unix/sysv/sysv4/solaris2/sigstack.c
new file mode 100644
index 0000000000..5aa73c8dcb
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sigstack.c
@@ -0,0 +1,3 @@
+/* We can reuse the Linux implementation with some tricks. */
+#define __NR_sigaltstack 1
+#include <sysdeps/unix/sysv/linux/sigstack.c>
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c b/sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c
new file mode 100644
index 0000000000..026e61102e
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c
@@ -0,0 +1,2 @@
+/* We can reuse the Linux implementation. */
+#include <sysdeps/unix/sysv/linux/sigwaitinfo.h>
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S b/sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S
new file mode 100644
index 0000000000..b9f2996e31
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S
@@ -0,0 +1,2 @@
+/* Bets are that the Linux code works... */
+#include <sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S>
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list b/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
index 52063630dc..092d869efc 100644
--- a/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
+++ b/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
@@ -1,3 +1,7 @@
# File name Caller Syscall name # args Strong name Weak names
sigaction - sigaction 3 __sigaction sigaction
+sigaltstack - sigaltstack 2 sigaltstack
+sigpending - sigpending 2 __syscall_sigpending
+sigqueue - sigqueue 3 __sigqueue sigqueue
+sigtimedwait - sigtimedwait 3 __sigtimedwait sigtime