aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/generic
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-08-29 01:19:12 +0000
committerUlrich Drepper <drepper@redhat.com>1997-08-29 01:19:12 +0000
commit39e16978c3b4ac8eaf2201fac56316623910d9da (patch)
tree054fff18119b31464b3133ad91050694130c7d2a /sysdeps/generic
parent92f1da4da04a7a86ddee91be5eaf0b10c333ac64 (diff)
downloadglibc-39e16978c3b4ac8eaf2201fac56316623910d9da.tar
glibc-39e16978c3b4ac8eaf2201fac56316623910d9da.tar.gz
glibc-39e16978c3b4ac8eaf2201fac56316623910d9da.tar.bz2
glibc-39e16978c3b4ac8eaf2201fac56316623910d9da.zip
1997-08-29 02:36 Ulrich Drepper <drepper@cygnus.com> * Makefile (version-info.h): Use ISO form for the date. * catgets/catgetsinfo.h: Include <bits/libc-lock.h>. (struct catalog_obj): Add lock field. (__open_catalog): Remove second parameter from prototype. * catgets/catgets.c (catopen): Initialize lock field. (catgets): Don't pass second parameter to __open_catalog. * catgets/gencat.c: Initialize lock field and don't pass second parameter to __open_catalog. * catgets/open_catalog.c (__open_catalog): Decide about use of path by examining path in struct, not based on extra argument. Acquire a the lock before trying to load the catalog and release it before returning. * csu/Makefile (abi-tag.h): Make sure target directory exists. * io/Makefile (headers): Add bits/poll.h. * io/sys/poll.h: Remove definitions of POLL* constants. Include <bits/poll.h>. * sysdeps/generic/bits/poll.h: New file. * sysdeps/unix/sysv/linux/bits/poll.h: New file. * sysdeps/unix/sysv/linux/m68k/bits/poll.h: New file. * sysdeps/unix/sysv/linux/mips/bits/poll.h: New file. * sysdeps/unix/sysv/linux/sparc/bits/poll.h: New file. * libio/fileops.c (_IO_file_read, _IO_file_write): Remove dead code. * malloc/obstack.c: Add casts to keep very verbose compilers on 64bit machine quiet. * nss/Makefile (libnss_db.so): Find libdb.so in db2 directory. 1997-08-28 17:30 Ulrich Drepper <drepper@cygnus.com> * catgets/catgets.c (catopen): Correctly determine length of string in NLSPATH evironment variable. Patch by HJ Lu <hjl@gnu.ai.mit.edu>. 1997-08-27 23:19 Richard Henderson <rth@cygnus.com> * sysdeps/generic/dl-sysdep.c (DL_FIND_ARG_COMPONENTS): Provide default macro to track down arguments from stack start. (_dl_sysdep_start): Use it. * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Truncate to simply providing a special DL_FIND_ARG_COMPONENTS and including the next file up the line. * sysdeps/powerpc/e_sqrt.c: Move contents to w_sqrt.c and provide stub. * sysdeps/powerpc/e_sqrtf.c: Likewise. * sysdeps/powerpc/s_copysignf.S: Provide empty file; symbol is with the double precision version. * sysdeps/powerpc/s_fabsf.S: Likewise. * sysdeps/powerpc/s_isnanf.S: Likewise.
Diffstat (limited to 'sysdeps/generic')
-rw-r--r--sysdeps/generic/bits/poll.h38
-rw-r--r--sysdeps/generic/dl-sysdep.c27
2 files changed, 56 insertions, 9 deletions
diff --git a/sysdeps/generic/bits/poll.h b/sysdeps/generic/bits/poll.h
new file mode 100644
index 0000000000..55ec70e363
--- /dev/null
+++ b/sysdeps/generic/bits/poll.h
@@ -0,0 +1,38 @@
+/* Copyright (C) 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
+ 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. */
+
+
+/* Event types that can be polled for. These bits may be set in `events'
+ to indicate the interesting event types; they will appear in `revents'
+ to indicate the status of the file descriptor. */
+#define POLLIN 01 /* There is data to read. */
+#define POLLPRI 02 /* There is urgent data to read. */
+#define POLLOUT 04 /* Writing now will not block. */
+
+/* Some aliases. */
+#define POLLWRNORM POLLOUT
+
+/* Event types always implicitly polled for. These bits need not be set in
+ `events', but they will appear in `revents' to indicate the status of
+ the file descriptor. */
+#define POLLERR 010 /* Error condition. */
+#define POLLHUP 020 /* Hung up. */
+#define POLLNVAL 040 /* Invalid polling request. */
+
+/* Canonical number of polling requests to read in at a time in poll. */
+#define NPOLLFILE 30
diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c
index b942e40f7a..7ee3002314 100644
--- a/sysdeps/generic/dl-sysdep.c
+++ b/sysdeps/generic/dl-sysdep.c
@@ -45,6 +45,21 @@ int __libc_multiple_libcs; /* Defining this here avoids the inclusion
of init-first. */
static ElfW(auxv_t) *_dl_auxv;
+
+#ifndef DL_FIND_ARG_COMPONENTS
+#define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
+ do { \
+ void **_tmp; \
+ (argc) = *(long *) cookie; \
+ (argv) = (char **) cookie + 1; \
+ (envp) = (argv) + (argc) + 1; \
+ for (_tmp = (void **) (envp); *_tmp; ++_tmp) \
+ continue; \
+ (auxp) = (void *) ++_tmp; \
+ } while (0)
+#endif
+
+
ElfW(Addr)
_dl_sysdep_start (void **start_argptr,
void (*dl_main) (const ElfW(Phdr) *phdr, ElfW(Word) phnum,
@@ -60,21 +75,15 @@ _dl_sysdep_start (void **start_argptr,
gid_t egid = 0;
unsigned int seen;
+ DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, _dl_argv, _environ, _dl_auxv);
+
user_entry = (ElfW(Addr)) &ENTRY_POINT;
- _dl_argc = *(long *) start_argptr;
- _dl_argv = (char **) start_argptr + 1;
- _environ = &_dl_argv[_dl_argc + 1];
_dl_platform = NULL; /* Default to nothing known about the platform. */
- start_argptr = (void **) _environ;
- while (*start_argptr)
- ++start_argptr;
seen = 0;
#define M(type) (1 << (type))
- for (av = _dl_auxv = (void *) ++start_argptr;
- av->a_type != AT_NULL;
- seen |= M ((++av)->a_type))
+ for (av = _dl_auxv; av->a_type != AT_NULL; seen |= M ((++av)->a_type))
switch (av->a_type)
{
case AT_PHDR: