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 Fri, Sep 29, 2000 at 06:38:17PM +0200, Andreas Schwab wrote: > David Mosberger <davidm@hpl.hp.com> writes: > > |> >>>>> On 29 Sep 2000 17:37:36 +0200, Jes Sorensen <jes@linuxcare.com> said: > |> > |> Jes> Ahhh thanks, I must have missed this one. I am forwarding this > |> Jes> one to Uli (without the change of year of copyright back to > |> Jes> 1999 ;-). > |> > |> I ran a diff across the entire ia64 directory and found some other > |> differences: > > Here is another one, so that ldconfig can distinguish between 32bit and > 64bit objects. > > Andreas. > > 2000-09-29 Andreas Schwab <schwab@suse.de> > > * sysdeps/unix/sysv/linux/ia64/readelflib.c: New file. > > * elf/cache.c (print_entry): Check for FLAG_IA64_LIB64. > > Index: elf/cache.c > =================================================================== > RCS file: /cvs/glibc/libc/elf/cache.c,v > retrieving revision 1.5 > diff -u -a -u -r1.5 elf/cache.c > --- elf/cache.c 2000/05/17 11:04:02 1.5 > +++ elf/cache.c 2000/08/18 09:45:45 > @@ -72,6 +72,10 @@ > case FLAG_SPARC_LIB64: > fputs (",64bit", stdout); > #endif > +#if defined __ia64__ || defined __i386__ > + case FLAG_IA64_LIB64: > + fputs (",64bit", stdout); > +#endif > case 0: > break; > default: > Index: sysdeps/unix/sysv/linux/ia64/readelflib.c > =================================================================== > RCS file: readelflib.c > diff -N sysdeps/unix/sysv/linux/ia64/readelflib.c > --- /dev/null Tue May 5 13:32:27 1998 > +++ sysdeps/unix/sysv/linux/ia64/readelflib.c Fri Aug 18 02:45:49 2000 > @@ -0,0 +1,57 @@ > +/* Copyright (C) 2000 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. */ > + > + > +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 > + { > + ret = process_elf64_file (file_name, lib, flag, soname, file_contents, > + file_length); > + /* Intel 64bit libraries are always libc.so.6+. */ > + if (!ret) > + *flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6; > + 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" > I don't like fputs (",64bit", stdout); since ia64 may not be the only 64bit library together with ia32 library. Also I am not sure if #if defined __ia64__ || defined __i386__ is really necessary. BTW, I think we need sysdeps/unix/sysv/linux/ia64/dl-cache.h Here is my patch. -- H.J. Lu (hjl@gnu.org) ---- 2000-09-29 H.J. Lu <hjl@gnu.org> * sysdeps/unix/sysv/linux/ia64/dl-cache.h: New. * sysdeps/unix/sysv/linux/ia64/readelflib.c: Likewise. * elf/cache.c (print_entry): Handle FLAG_IA64_LIB64 for ia64. Index: elf/cache.c =================================================================== RCS file: /work/cvs/gnu/glibc/elf/cache.c,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 cache.c --- elf/cache.c 2000/05/21 21:10:57 1.1.1.1 +++ elf/cache.c 2000/09/29 17:11:03 @@ -72,6 +72,10 @@ print_entry (const char *lib, int flag, case FLAG_SPARC_LIB64: fputs (",64bit", stdout); #endif +#ifdef __ia64__ + case FLAG_IA64_LIB64: + fputs (",IA-64", stdout); +#endif case 0: break; default: --- /dev/null Thu Aug 24 02:00:32 2000 +++ sysdeps/unix/sysv/linux/ia64/dl-cache.h Fri Sep 29 10:06:21 2000 @@ -0,0 +1,25 @@ +/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. + Copyright (C) 2000 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. */ + +#define _DL_CACHE_DEFAULT_ID 0x203 + +#define _dl_cache_check_flags(flags) \ + ((flags) == _DL_CACHE_DEFAULT_ID) + +#include_next <dl-cache.h> --- /dev/null Thu Aug 24 02:00:32 2000 +++ sysdeps/unix/sysv/linux/ia64/readelflib.c Fri Sep 29 10:33:05 2000 @@ -0,0 +1,62 @@ +/* Copyright (C) 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>, 1999 and + H.J. Lu <hjl@rvalinux.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 + { + ret = process_elf64_file (file_name, lib, flag, soname, file_contents, + file_length); + /* IA64 libraries are always libc.so.6+. */ + if (!ret) + *flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6; + 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"
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |