This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
On ia64 we want to recognize libraries using ld-linux.so.2 as 32 bit libc6
libraries. On the other hand, only i386 and m68k ever had a libc5
implementation (please correct me if I'm wrong). This patch adds hooks to
readlib.c to allow platforms to add libraries and interpreters to
recognize.
OK to install?
Andreas.
2001-03-07 Andreas Schwab <schwab@suse.de>
* elf/ldconfig.h: Moved to ...
* sysdeps/generic/ldconfig.h: ... here.
* sysdeps/unix/sysv/linux/i386/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/m68k/ldconfig.h: New file.
* sysdeps/unix/sysv/linux/ia64/ldconfig.h: New file.
* elf/readlib.c (interpreters, known_libs): Use
SYSDEP_KNOWN_INTERPRETER_NAMES and SYSDEP_KNOWN_LIBRARY_NAMES
instead of hard coding old names.
Index: elf/ldconfig.h
===================================================================
RCS file: ldconfig.h
diff -N elf/ldconfig.h
--- elf/ldconfig.h Wed Mar 7 10:08:37 2001
+++ /dev/null Tue May 5 13:32:27 1998
@@ -1,68 +0,0 @@
-/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Andreas Jaeger <aj@suse.de>, 1999.
-
- 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. */
-
-#ifndef _LDCONFIG_H
-#define _LDCONFIG_H
-
-#define FLAG_ANY -1
-#define FLAG_TYPE_MASK 0x00ff
-#define FLAG_LIBC4 0x0000
-#define FLAG_ELF 0x0001
-#define FLAG_ELF_LIBC5 0x0002
-#define FLAG_ELF_LIBC6 0x0003
-#define FLAG_REQUIRED_MASK 0xff00
-#define FLAG_SPARC_LIB64 0x0100
-#define FLAG_IA64_LIB64 0x0200
-#define FLAG_X8664_LIB64 0x0300
-
-/* Declared in cache.c. */
-extern void print_cache (const char *cache_name);
-
-extern void init_cache (void);
-
-extern void save_cache (const char *cache_name);
-
-extern void add_to_cache (const char *path, const char *lib, int flags,
- uint64_t hwcap);
-
-/* Declared in readlib.c. */
-extern int process_file (const char *real_file_name, const char *file_name,
- const char *lib, int *flag, char **soname,
- int is_link);
-
-/* Declared in readelflib.c. */
-extern int process_elf_file (const char *file_name, const char *lib, int *flag,
- char **soname, void *file_contents,
- size_t file_length);
-
-/* Declared in chroot_canon.c. */
-extern char *chroot_canon (const char *chroot, const char *name);
-
-/* Declared in ldconfig.c. */
-extern int opt_verbose;
-
-extern int opt_format;
-
-/* Prototypes for a few program-wide used functions. */
-extern void *xmalloc (size_t __n);
-extern void *xcalloc (size_t __n, size_t __size);
-extern void *xrealloc (void *__p, size_t __n);
-extern char *xstrdup (const char *__str);
-
-#endif /* ! _LDCONFIG_H */
Index: elf/readlib.c
===================================================================
RCS file: /cvs/glibc/libc/elf/readlib.c,v
retrieving revision 1.8
diff -u -a -r1.8 elf/readlib.c
--- elf/readlib.c 2000/09/30 00:53:11 1.8
+++ elf/readlib.c 2001/03/07 18:08:34
@@ -51,17 +51,18 @@
static struct known_names interpreters [] =
{
{"/lib/" LD_SO, FLAG_ELF_LIBC6},
- {"/lib/ld-linux.so.1", FLAG_ELF_LIBC5}
+#ifdef SYSDEP_KNOWN_INTERPRETER_NAMES
+ SYSDEP_KNOWN_INTERPRETER_NAMES
+#endif
};
static struct known_names known_libs [] =
{
- /* Old names: */
- {"libc.so.5", FLAG_ELF_LIBC5},
- {"libm.so.5", FLAG_ELF_LIBC5},
- /* Current names: */
{LIBC_SO, FLAG_ELF_LIBC6},
- {LIBM_SO, FLAG_ELF_LIBC6}
+ {LIBM_SO, FLAG_ELF_LIBC6},
+#ifdef SYSDEP_KNOWN_LIBRARY_NAMES
+ SYSDEP_KNOWN_LIBRARY_NAMES
+#endif
};
Index: sysdeps/generic/ldconfig.h
===================================================================
RCS file: ldconfig.h
diff -N sysdeps/generic/ldconfig.h
--- /dev/null Tue May 5 13:32:27 1998
+++ sysdeps/generic/ldconfig.h Wed Mar 7 10:08:34 2001
@@ -0,0 +1,68 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Jaeger <aj@suse.de>, 1999.
+
+ 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. */
+
+#ifndef _LDCONFIG_H
+#define _LDCONFIG_H
+
+#define FLAG_ANY -1
+#define FLAG_TYPE_MASK 0x00ff
+#define FLAG_LIBC4 0x0000
+#define FLAG_ELF 0x0001
+#define FLAG_ELF_LIBC5 0x0002
+#define FLAG_ELF_LIBC6 0x0003
+#define FLAG_REQUIRED_MASK 0xff00
+#define FLAG_SPARC_LIB64 0x0100
+#define FLAG_IA64_LIB64 0x0200
+#define FLAG_X8664_LIB64 0x0300
+
+/* Declared in cache.c. */
+extern void print_cache (const char *cache_name);
+
+extern void init_cache (void);
+
+extern void save_cache (const char *cache_name);
+
+extern void add_to_cache (const char *path, const char *lib, int flags,
+ uint64_t hwcap);
+
+/* Declared in readlib.c. */
+extern int process_file (const char *real_file_name, const char *file_name,
+ const char *lib, int *flag, char **soname,
+ int is_link);
+
+/* Declared in readelflib.c. */
+extern int process_elf_file (const char *file_name, const char *lib, int *flag,
+ char **soname, void *file_contents,
+ size_t file_length);
+
+/* Declared in chroot_canon.c. */
+extern char *chroot_canon (const char *chroot, const char *name);
+
+/* Declared in ldconfig.c. */
+extern int opt_verbose;
+
+extern int opt_format;
+
+/* Prototypes for a few program-wide used functions. */
+extern void *xmalloc (size_t __n);
+extern void *xcalloc (size_t __n, size_t __size);
+extern void *xrealloc (void *__p, size_t __n);
+extern char *xstrdup (const char *__str);
+
+#endif /* ! _LDCONFIG_H */
Index: sysdeps/unix/sysv/linux/i386/ldconfig.h
===================================================================
RCS file: ldconfig.h
diff -N sysdeps/unix/sysv/linux/i386/ldconfig.h
--- /dev/null Tue May 5 13:32:27 1998
+++ sysdeps/unix/sysv/linux/i386/ldconfig.h Wed Mar 7 10:08:37 2001
@@ -0,0 +1,25 @@
+/* Copyright (C) 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
+ 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 <sysdeps/generic/ldconfig.h>
+
+#define SYSDEP_KNOWN_INTERPRETER_NAMES \
+ { "/lib/ld-linux.so.1", FLAG_ELF_LIBC5 },
+#define SYSDEP_KNOWN_LIBRARY_NAMES \
+ { "libc.so.5", FLAG_ELF_LIBC5 }, \
+ { "libm.so.5", FLAG_ELF_LIBC5 },
Index: sysdeps/unix/sysv/linux/ia64/ldconfig.h
===================================================================
RCS file: ldconfig.h
diff -N sysdeps/unix/sysv/linux/ia64/ldconfig.h
--- /dev/null Tue May 5 13:32:27 1998
+++ sysdeps/unix/sysv/linux/ia64/ldconfig.h Wed Mar 7 10:08:37 2001
@@ -0,0 +1,25 @@
+/* Copyright (C) 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
+ 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 <sysdeps/generic/ldconfig.h>
+
+#define SYSDEP_KNOWN_INTERPRETER_NAMES \
+ { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 },
+#define SYSDEP_KNOWN_LIBRARY_NAMES \
+ { "libc.so.6", FLAG_ELF_LIBC6 }, \
+ { "libm.so.6", FLAG_ELF_LIBC6 },
Index: sysdeps/unix/sysv/linux/m68k/ldconfig.h
===================================================================
RCS file: ldconfig.h
diff -N sysdeps/unix/sysv/linux/m68k/ldconfig.h
--- /dev/null Tue May 5 13:32:27 1998
+++ sysdeps/unix/sysv/linux/m68k/ldconfig.h Wed Mar 7 10:08:37 2001
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/ldconfig.h>
--
Andreas Schwab "And now for something
SuSE Labs completely different."
Andreas.Schwab@suse.de
SuSE GmbH, Schanzäckerstr. 10, D-90443 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |