summaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-04-11 04:42:14 +0000
committerUlrich Drepper <drepper@redhat.com>2001-04-11 04:42:14 +0000
commit390911beb3ae1f26f32318f79e344a70d896184c (patch)
treeb91091138d50272c0cfe00ea8836e30a08256cd6 /sysdeps/unix
parent07bccb46708982ee080a3a57033df6ad392b82a5 (diff)
downloadglibc-390911beb3ae1f26f32318f79e344a70d896184c.tar.gz
Update.
2001-04-10 Franz Sirl <Franz.Sirl-kernel@lauterbach.com> * elf/elf.h (AT_DCACHEBSIZE, AT_ICACHEBSIZE, AT_UCACHEBSIZE, AT_IGNOREPPC): New defines. * sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Print them. * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_STD_AUXV): Define for newer powerpc kernels. * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Use the standard DL_FIND_ARG_COMPONENTS if __ASSUME_STD_AUXV is defined.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h5
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c55
2 files changed, 35 insertions, 25 deletions
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index bbbae67839..a2b4278169 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -163,3 +163,8 @@
#if __LINUX_KERNEL_VERSION >= 132097
# define __ASSUME_AT_PAGESIZE 1
#endif
+
+/* Starting with 2.4.? kernels PPC passes the AUXV in the standard way. */
+#if __LINUX_KERNEL_VERSION >= (132096+99) && defined __powerpc__
+# define __ASSUME_STD_AUXV 1
+#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c b/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c
index 4419953d06..ca2d6341b5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c
+++ b/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c
@@ -1,5 +1,5 @@
/* Operating system support for run-time dynamic linker. Linux/PPC version.
- Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 2001 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
@@ -18,33 +18,38 @@
Boston, MA 02111-1307, USA. */
+#include "config.h"
+#include "kernel-features.h"
+
+#ifndef __ASSUME_STD_AUXV
+
/* The PowerPC's auxiliary argument block gets aligned to a 16-byte
boundary. This is history and impossible to change compatibly. */
-#define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
- do { \
- char **_tmp; \
- size_t _test; \
- (argc) = *(long *) cookie; \
- (argv) = (char **) cookie + 1; \
- (envp) = (argv) + (argc) + 1; \
- for (_tmp = (envp); *_tmp; ++_tmp) \
- continue; \
- /* The following '++' is important! */ \
- ++_tmp; \
- \
- _test = (size_t)_tmp; \
- _test = (_test + 0xf) & ~0xf; \
- /* Under some circumstances, MkLinux (up to at least DR3a5) \
- omits the padding. To work around this, we make a \
- basic sanity check of the argument vector. Of \
- course, this means that in future, the argument \
- vector will have to be laid out to allow for this \
- test :-(. */ \
- if (((ElfW(auxv_t) *)_test)->a_type <= 0x10) \
- _tmp = (char **)_test; \
- (auxp) = (ElfW(auxv_t) *) _tmp; \
+#define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
+ do { \
+ char **_tmp; \
+ size_t _test; \
+ (argc) = *(long int *) cookie; \
+ (argv) = (char **) cookie + 1; \
+ (envp) = (argv) + (argc) + 1; \
+ for (_tmp = (envp); *_tmp; ++_tmp) \
+ continue; \
+ /* The following '++' is important! */ \
+ ++_tmp; \
+ \
+ _test = (size_t)_tmp; \
+ _test = (_test + 0xf) & ~0xf; \
+ /* Under some circumstances, MkLinux (up to at least DR3a5) \
+ omits the padding. To work around this, we make a \
+ basic sanity check of the argument vector. Of \
+ course, this means that in future, the argument \
+ vector will have to be laid out to allow for this \
+ test :-(. */ \
+ if (((ElfW(auxv_t) *)_test)->a_type <= 0x10) \
+ _tmp = (char **)_test; \
+ (auxp) = (ElfW(auxv_t) *) _tmp; \
} while (0)
-
+#endif
#include <sysdeps/unix/sysv/linux/dl-sysdep.c>