1/* Manipulate ELF section header flags.
2   Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
3   Written by Ulrich Drepper <drepper@redhat.com>, 1999.
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
28unsigned int
29elf_flagshdr (scn, cmd, flags)
30     Elf_Scn *scn;
31     Elf_Cmd cmd;
32     unsigned int flags;
33{
34  unsigned int result;
35
36  if (scn == NULL)
37    return 0;
38
39  if (unlikely (scn->elf->kind != ELF_K_ELF))
40    {
41      __libelf_seterrno (ELF_E_INVALID_HANDLE);
42      return 0;
43    }
44
45  if (likely (cmd == ELF_C_SET))
46    result = (scn->shdr_flags |= (flags & ELF_F_DIRTY));
47  else if (likely (cmd == ELF_C_CLR))
48    result = (scn->shdr_flags &= ~(flags & ELF_F_DIRTY));
49  else
50    {
51      __libelf_seterrno (ELF_E_INVALID_COMMAND);
52      return 0;
53    }
54
55  return result;
56}
57