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]

Re: ldconfig patch for ia64


On Fri, Sep 29, 2000 at 03:53:57PM -0700, Ulrich Drepper wrote:
> "H . J . Lu" <hjl@valinux.com> writes:
> 
> > I don't like
> > 
> > 	fputs (",64bit", stdout);
> 
> I agree, it's misleading.  Especially with the AMD thing coming up.
> 
> > #if defined __ia64__ || defined __i386__
> 
> Here I don't agree.  Sometimes it might be desirable to configure for
> x86 and a IA-64 machine.  Some day when IA-64 machines are faster than
> x86.

I think ia32 ldconfig should do the same job as its ia64 counterpart, ie. be
able to put both 32 and 64bit libraries into the cache (because you should
be able to run 32bit ldconfig binary on ia64 (and amd x86-64)).
On ia32 it is harder because there can be either ia64 or k8 binaries
present, so we have to deal with it.

2000-09-30  Jakub Jelinek  <jakub@redhat.com>

	* elf/ldconfig.h (FLAG_X8664_LIB64): Define.
	* sysdeps/unix/sysv/linux/i386/readelflib.c: New file.

--- libc/elf/ldconfig.h.jj	Sat Sep 30 08:02:59 2000
+++ libc/elf/ldconfig.h	Sat Sep 30 08:03:40 2000
@@ -29,6 +29,7 @@
 #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);
--- libc/sysdeps/unix/sysv/linux/i386/readelflib.c.jj	Sat Sep 30 07:54:24 2000
+++ libc/sysdeps/unix/sysv/linux/i386/readelflib.c	Sat Sep 30 08:01:15 2000
@@ -0,0 +1,81 @@
+/* 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 and
+		  Jakub Jelinek <jakub@redhat.com>, 2000.
+
+   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.  */
+
+
+int process_elf32_file (const char *file_name, const char *lib, int *flag,
+			char **soname, void *file_contents,
+			size_t file_length);
+int process_elf64_file (const char *file_name, const char *lib, int *flag,
+			char **soname, void *file_contents,
+			size_t file_length);
+
+/* Returns 0 if everything is ok, != 0 in case of error.  */
+int
+process_elf_file (const char *file_name, const char *lib, int *flag,
+		  char **soname, void *file_contents, size_t file_length)
+{
+  ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents;
+  int ret;
+
+  if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
+    return process_elf32_file (file_name, lib, flag, soname, file_contents,
+			       file_length);
+  else
+    {
+      switch (elf_header->e_machine)
+	{
+	case EM_IA_64:
+	case EM_X8664:
+	  break;
+	default:
+	  error (0, 0, _("%s is for unknown machine %d.\n"),
+		 file_name, elf_header->e_machine);
+	  return 1;
+	}
+
+      ret = process_elf64_file (file_name, lib, flag, soname, file_contents,
+				file_length);
+      /* IA64/X86-64 64bit libraries are always libc.so.6+.  */
+      if (!ret)
+	switch (elf_header->e_machine)
+	  {
+	  case EM_IA_64:
+	    *flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6;
+	    break;
+	  case EM_X8664:
+	    *flag = FLAG_X8664_LIB64|FLAG_ELF_LIBC6;
+	    break;
+	  }
+
+      return ret;
+    }
+}
+
+#undef __ELF_NATIVE_CLASS
+#undef process_elf_file
+#define process_elf_file process_elf32_file
+#define __ELF_NATIVE_CLASS 32
+#include "sysdeps/generic/readelflib.c"
+
+#undef __ELF_NATIVE_CLASS
+#undef process_elf_file
+#define process_elf_file process_elf64_file
+#define __ELF_NATIVE_CLASS 64
+#include "sysdeps/generic/readelflib.c"

	Jakub

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]