1 /* 2 32.getshdr.c - implementation of the elf{32,64}_getshdr(3) functions. 3 Copyright (C) 1995 - 1998 Michael Riepe 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 18 */ 19 20 #include <private.h> 21 22 #ifndef lint 23 static const char rcsid[] = "@(#) $Id: 32.getshdr.c,v 1.10 2008/05/23 08:15:34 michael Exp $"; 24 #endif /* lint */ 25 26 Elf32_Shdr* 27 elf32_getshdr(Elf_Scn *scn) { 28 if (!scn) { 29 return NULL; 30 } 31 elf_assert(scn->s_magic == SCN_MAGIC); 32 elf_assert(scn->s_elf); 33 elf_assert(scn->s_elf->e_magic == ELF_MAGIC); 34 if (scn->s_elf->e_class == ELFCLASS32) { 35 return &scn->s_shdr32; 36 } 37 seterr(ERROR_CLASSMISMATCH); 38 return NULL; 39 } 40 41 #if __LIBELF64 42 43 Elf64_Shdr* 44 elf64_getshdr(Elf_Scn *scn) { 45 if (!scn) { 46 return NULL; 47 } 48 elf_assert(scn->s_magic == SCN_MAGIC); 49 elf_assert(scn->s_elf); 50 elf_assert(scn->s_elf->e_magic == ELF_MAGIC); 51 if (scn->s_elf->e_class == ELFCLASS64) { 52 return &scn->s_shdr64; 53 } 54 seterr(ERROR_CLASSMISMATCH); 55 return NULL; 56 } 57 58 #endif /* __LIBELF64 */ 59