Back to index

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