1/* Get ELF header.
2   Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc.
3   Written by Ulrich Drepper <drepper@redhat.com>, 1998.
4
5   This program is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation, version 2.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program; if not, write to the Free Software Foundation,
16   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
17
18#ifdef HAVE_CONFIG_H
19# include <config.h>
20#endif
21
22#include <libelf.h>
23#include <stddef.h>
24
25#include "libelfP.h"
26
27#ifndef LIBELFBITS
28# define LIBELFBITS 32
29#endif
30
31
32ElfW2(LIBELFBITS,Ehdr) *
33elfw2(LIBELFBITS,getehdr) (elf)
34     Elf *elf;
35{
36  ElfW2(LIBELFBITS,Ehdr) *result;
37
38  if (elf == NULL)
39    return NULL;
40
41  if (unlikely (elf->kind != ELF_K_ELF))
42    {
43      __libelf_seterrno (ELF_E_INVALID_HANDLE);
44      return NULL;
45    }
46
47  rwlock_rdlock (elf->lock);
48
49  if (elf->class == 0)
50    elf->class = ELFW(ELFCLASS,LIBELFBITS);
51  else if (unlikely (elf->class != ELFW(ELFCLASS,LIBELFBITS)))
52    {
53      __libelf_seterrno (ELF_E_INVALID_CLASS);
54      result = NULL;
55      goto out;
56    }
57
58  result = elf->state.ELFW(elf,LIBELFBITS).ehdr;
59
60 out:
61  rwlock_unlock (elf->lock);
62
63  return result;
64}
65INTDEF(elfw2(LIBELFBITS,getehdr))
66