Back to index

glibc  2.9
readelflib.c
Go to the documentation of this file.
00001 /* Copyright (C) 1999, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
00002    This file is part of the GNU C Library.
00003    Contributed by Alexandre Oliva <aoliva@redhat.com>
00004    Based on work ../x86_64/readelflib.c,
00005    contributed by Andreas Jaeger <aj@suse.de>, 1999 and
00006                 Jakub Jelinek <jakub@redhat.com>, 1999.
00007 
00008    The GNU C Library is free software; you can redistribute it and/or
00009    modify it under the terms of the GNU Lesser General Public
00010    License as published by the Free Software Foundation; either
00011    version 2.1 of the License, or (at your option) any later version.
00012 
00013    The GNU C Library is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016    Lesser General Public License for more details.
00017 
00018    You should have received a copy of the GNU Lesser General Public
00019    License along with the GNU C Library; if not, write to the Free
00020    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00021    02111-1307 USA.  */
00022 
00023 
00024 int process_elf32_file (const char *file_name, const char *lib, int *flag,
00025                      unsigned int *osversion, char **soname,
00026                      void *file_contents, size_t file_length);
00027 int process_elf64_file (const char *file_name, const char *lib, int *flag,
00028                      unsigned int *osversion, char **soname,
00029                      void *file_contents, size_t file_length);
00030 
00031 /* Returns 0 if everything is ok, != 0 in case of error.  */
00032 int
00033 process_elf_file (const char *file_name, const char *lib, int *flag,
00034                 unsigned int *osversion, char **soname, void *file_contents,
00035                 size_t file_length)
00036 {
00037   ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents;
00038   int ret;
00039 
00040   if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
00041     {
00042       ret = process_elf32_file (file_name, lib, flag, osversion, soname,
00043                             file_contents, file_length);
00044 
00045       /* n32 libraries are always libc.so.6+.  */
00046       if (ret && (elf_header->e_flags & EF_MIPS_ABI2) != 0)
00047        *flag = FLAG_MIPS64_LIBN32|FLAG_ELF_LIBC6;
00048     }
00049   else
00050     {
00051       ret = process_elf64_file (file_name, lib, flag, osversion, soname,
00052                             file_contents, file_length);
00053       /* n64 libraries are always libc.so.6+.  */
00054       if (!ret)
00055        *flag = FLAG_MIPS64_LIBN64|FLAG_ELF_LIBC6;
00056     }
00057 
00058   return ret;
00059 }
00060 
00061 #undef __ELF_NATIVE_CLASS
00062 #undef process_elf_file
00063 #define process_elf_file process_elf32_file
00064 #define __ELF_NATIVE_CLASS 32
00065 #include "elf/readelflib.c"
00066 
00067 #undef __ELF_NATIVE_CLASS
00068 #undef process_elf_file
00069 #define process_elf_file process_elf64_file
00070 #define __ELF_NATIVE_CLASS 64
00071 #include "elf/readelflib.c"