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]

ldconfig


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]