aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-07-06 04:26:42 +0000
committerUlrich Drepper <drepper@redhat.com>2004-07-06 04:26:42 +0000
commitce6e047fbb353e1d2faf15ab104a19db609b622b (patch)
tree3cf56ba767e54e26c5a7bfedc235728d457c9093
parent2dd18ce2b2dfecc737479548f5b6d1784d90fe79 (diff)
downloadglibc-ce6e047fbb353e1d2faf15ab104a19db609b622b.tar.xz
glibc-ce6e047fbb353e1d2faf15ab104a19db609b622b.zip
Update.
2004-07-05 Ulrich Drepper <drepper@redhat.com> * elf/dl-init.c: Don't define and use _dl_starting_up if HAVE_INLINED_SYSCALLS is defined and the variable is not used. * elf/dl-support.c: Likewise. * elf/rtld.c: Likewise. * elf/dl-misc.c (_dl_debug_vdprintf): Use writev syscall directly if HAVE_INLINED_SYSCALLS is defined. * sysdeps/powerpc/powerpc64/dl-machine.h: Don't rest _dl_starting_up here. * sysdeps/powerpc/powerpc32/dl-start.S: Likewise. * sysdeps/unix/sysv/linux/configure.in: Define HAVE_INLINED_SYSCALLS. * config.h.in: Add entry for HAVE_INLINED_SYSCALLS. * sysdeps/posix/profil.c: If compiled for ld.so, omit code which is needed to stop profiling. * elf/dl-open.c (dl_open_worker): If a newly opened object is to be profile make sure it cannot be unloaded. * sysdeps/unix/sysv/linux/dl-origin.c: Inline readlink syscall. * sysdeps/unix/sysv/linux/fcntl.c: If compiled without cancellation support, make sure the helper function is inlined. * sysdeps/unix/sysv/linux/pread.c: Likewise. * sysdeps/unix/sysv/linux/pwrite.c: Likewise. * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Likewise.
-rw-r--r--ChangeLog28
-rw-r--r--config.h.in3
-rw-r--r--elf/dl-init.c4
-rw-r--r--elf/dl-misc.c2
-rw-r--r--elf/dl-open.c9
-rw-r--r--elf/dl-profile.c2
-rw-r--r--elf/dl-support.c2
-rw-r--r--elf/rtld.c4
-rw-r--r--nptl/ChangeLog17
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h26
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h4
-rwxr-xr-xsysdeps/generic/configure38
-rw-r--r--sysdeps/posix/profil.c19
-rw-r--r--sysdeps/powerpc/powerpc32/dl-start.S5
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.h35
-rwxr-xr-xsysdeps/unix/common/configure103
-rwxr-xr-xsysdeps/unix/configure38
-rw-r--r--sysdeps/unix/sysv/linux/configure8
-rw-r--r--sysdeps/unix/sysv/linux/configure.in3
-rw-r--r--sysdeps/unix/sysv/linux/dl-origin.c7
-rw-r--r--sysdeps/unix/sysv/linux/fcntl.c5
-rw-r--r--sysdeps/unix/sysv/linux/i386/fcntl.c18
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c3
-rw-r--r--sysdeps/unix/sysv/linux/pread.c5
-rw-r--r--sysdeps/unix/sysv/linux/pwrite.c5
34 files changed, 297 insertions, 124 deletions
diff --git a/ChangeLog b/ChangeLog
index 44484f0f85..95218d9252 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+2004-07-05 Ulrich Drepper <drepper@redhat.com>
+
+ * elf/dl-init.c: Don't define and use _dl_starting_up if
+ HAVE_INLINED_SYSCALLS is defined and the variable is not used.
+ * elf/dl-support.c: Likewise.
+ * elf/rtld.c: Likewise.
+ * elf/dl-misc.c (_dl_debug_vdprintf): Use writev syscall directly
+ if HAVE_INLINED_SYSCALLS is defined.
+ * sysdeps/powerpc/powerpc64/dl-machine.h: Don't rest _dl_starting_up
+ here.
+ * sysdeps/powerpc/powerpc32/dl-start.S: Likewise.
+ * sysdeps/unix/sysv/linux/configure.in: Define HAVE_INLINED_SYSCALLS.
+ * config.h.in: Add entry for HAVE_INLINED_SYSCALLS.
+
+ * sysdeps/posix/profil.c: If compiled for ld.so, omit code which
+ is needed to stop profiling.
+ * elf/dl-open.c (dl_open_worker): If a newly opened object is to be
+ profile make sure it cannot be unloaded.
+
+ * sysdeps/unix/sysv/linux/dl-origin.c: Inline readlink syscall.
+
+ * sysdeps/unix/sysv/linux/fcntl.c: If compiled without cancellation
+ support, make sure the helper function is inlined.
+ * sysdeps/unix/sysv/linux/pread.c: Likewise.
+ * sysdeps/unix/sysv/linux/pwrite.c: Likewise.
+ * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Likewise.
+
2004-07-05 Jakub Jelinek <jakub@redhat.com>
* include/string.h (ffs): Add libc_hidden_builtin_proto.
diff --git a/config.h.in b/config.h.in
index 86b1e39a7e..c02d691883 100644
--- a/config.h.in
+++ b/config.h.in
@@ -208,6 +208,9 @@
/* Defined of libidn is available. */
#undef HAVE_LIBIDN
+/* Define if inlined system calls are available. */
+#undef HAVE_INLINED_SYSCALLS
+
/*
*/
diff --git a/elf/dl-init.c b/elf/dl-init.c
index c06c71bbeb..e700dffb3a 100644
--- a/elf/dl-init.c
+++ b/elf/dl-init.c
@@ -24,9 +24,11 @@
/* Type of the initializer. */
typedef void (*init_t) (int, char **, char **);
+#ifndef HAVE_INLINED_SYSCALLS
/* Flag, nonzero during startup phase. */
extern int _dl_starting_up;
extern int _dl_starting_up_internal attribute_hidden;
+#endif
static void
@@ -143,7 +145,9 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
r->r_state = RT_CONSISTENT;
_dl_debug_state ();
+#ifndef HAVE_INLINED_SYSCALLS
/* Finished starting up. */
INTUSE(_dl_starting_up) = 0;
+#endif
}
INTDEF (_dl_init)
diff --git a/elf/dl-misc.c b/elf/dl-misc.c
index 41ef26131d..08d64956b8 100644
--- a/elf/dl-misc.c
+++ b/elf/dl-misc.c
@@ -247,7 +247,7 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
}
/* Finally write the result. */
-#ifdef INTERNAL_SYSCALL
+#ifdef HAVE_INLINED_SYSCALLS
INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (writev, err, 3, fd, &iov, niov);
#elif RTLD_PRIVATE_ERRNO
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 70f2fb20bc..450024948a 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -297,8 +297,13 @@ dl_open_worker (void *a)
GLRO(dl_relocate_object) (l, l->l_scope, 1, 1);
if (old_profile_map == NULL && GL(dl_profile_map) != NULL)
- /* We must prepare the profiling. */
- GLRO(dl_start_profile) ();
+ {
+ /* We must prepare the profiling. */
+ GLRO(dl_start_profile) ();
+
+ /* Prevent unloading the object. */
+ GL(dl_profile_map)->l_flags_1 |= DF_1_NODELETE;
+ }
}
else
#endif
diff --git a/elf/dl-profile.c b/elf/dl-profile.c
index 8afa8350c2..0a4aba1be5 100644
--- a/elf/dl-profile.c
+++ b/elf/dl-profile.c
@@ -358,7 +358,7 @@ _dl_start_profile (void)
return;
}
- /* We don't need the file desriptor anymore. */
+ /* We don't need the file descriptor anymore. */
__close (fd);
/* Pointer to data after the header. */
diff --git a/elf/dl-support.c b/elf/dl-support.c
index 0b2d0243de..2b53770605 100644
--- a/elf/dl-support.c
+++ b/elf/dl-support.c
@@ -86,8 +86,10 @@ struct r_scope_elem *_dl_global_scope[2] = { &_dl_initial_searchlist, NULL };
to be the global scope. */
struct r_scope_elem *_dl_main_searchlist = &_dl_initial_searchlist;
+#ifndef HAVE_INLINED_SYSCALLS
/* Nonzero during startup. */
int _dl_starting_up = 1;
+#endif
/* Get architecture specific initializer. */
#include <dl-procinfo.c>
diff --git a/elf/rtld.c b/elf/rtld.c
index 2e7a9b6867..3def0306e2 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -79,6 +79,7 @@ INTDEF(_dl_argv)
/* Nonzero if we were run directly. */
unsigned int _dl_skip_args attribute_relro attribute_hidden;
+#ifndef HAVE_INLINED_SYSCALLS
/* Set nonzero during loading and initialization of executable and
libraries, cleared before the executable's entry point runs. This
must not be initialized to nonzero, because the unused dynamic
@@ -88,6 +89,7 @@ unsigned int _dl_skip_args attribute_relro attribute_hidden;
never be called. */
int _dl_starting_up = 0;
INTVARDEF(_dl_starting_up)
+#endif
/* This is the structure which defines all variables global to ld.so
(except those which cannot be added for some reason). */
@@ -720,8 +722,10 @@ dl_main (const ElfW(Phdr) *phdr,
/* Process the environment variable which control the behaviour. */
process_envvars (&mode);
+#ifndef HAVE_INLINED_SYSCALLS
/* Set up a flag which tells we are just starting. */
INTUSE(_dl_starting_up) = 1;
+#endif
if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
{
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index ca178dffc5..f96550a979 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,20 @@
+2004-07-05 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Define NO_CANCELLATION
+ if no cancellation support is needed.
+ * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
+
+ * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Define __NR_futex
+ only if not already defined.
+
2004-07-05 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_unlock): Use
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
index 0dead61c6a..8142455781 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@@ -99,30 +99,30 @@
L(ENDFDE): \
.previous
-#ifdef SHARED
+# ifdef SHARED
/* NUL-terminated augmentation string. Note "z" means there is an
augmentation value later on. */
-# define AUGMENTATION_STRING .string "zR"
-# define AUGMENTATION_PARAM \
+# define AUGMENTATION_STRING .string "zR"
+# define AUGMENTATION_PARAM \
/* Augmentation value length. */ \
.uleb128 1; \
/* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4. */ \
.byte 0x1b;
-# define AUGMENTATION_PARAM_FDE \
+# define AUGMENTATION_PARAM_FDE \
/* No augmentation data. */ \
.uleb128 0;
-# define START_SYMBOL_REF(name) \
+# define START_SYMBOL_REF(name) \
/* PC-relative start address of the code. */ \
.long L(name##START)-.
-#else
+# else
/* No augmentation. */
-# define AUGMENTATION_STRING .ascii "\0"
-# define AUGMENTATION_PARAM /* nothing */
-# define AUGMENTATION_PARAM_FDE /* nothing */
-# define START_SYMBOL_REF(name) \
+# define AUGMENTATION_STRING .ascii "\0"
+# define AUGMENTATION_PARAM /* nothing */
+# define AUGMENTATION_PARAM_FDE /* nothing */
+# define START_SYMBOL_REF(name) \
/* Absolute start address of the code. */ \
.long L(name##START)
-#endif
+# endif
/* Callframe description for syscalls without parameters. This is very
simple. The only place the stack pointer is changed is when the old
@@ -373,7 +373,7 @@
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
index 619f28c4aa..63aaa96eb0 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
@@ -216,7 +216,7 @@ __GC_##name: \
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
index ead89ba931..2bee000730 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
@@ -26,7 +26,9 @@
#include <atomic.h>
-#define __NR_futex 221
+#ifndef __NR_futex
+# define __NR_futex 221
+#endif
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
#define FUTEX_REQUEUE 3
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
index 41e6af4749..7f5ba4aeef 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
@@ -1,5 +1,5 @@
/* Cancellable system call stubs. Linux/PowerPC version.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
@@ -109,7 +109,7 @@
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
index c7fe41dea9..aa993b9a58 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
@@ -1,5 +1,5 @@
/* Cancellable system call stubs. Linux/PowerPC64 version.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
@@ -109,7 +109,7 @@
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
index bbbd30b71f..09dac2c90b 100644
--- a/nptl/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
@@ -109,7 +109,7 @@ L(pseudo_end):
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
index 2daf5944e4..f8eb6a9ebc 100644
--- a/nptl/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
@@ -122,7 +122,7 @@ extern int __local_multiple_threads attribute_hidden;
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
index 581046c007..fc3c2340b6 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
@@ -241,7 +241,7 @@
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANC