Blame libelf/elf-knowledge.h

Packit Service 97d2fb
/* Accumulation of various pieces of knowledge about ELF.
Packit Service 97d2fb
   Copyright (C) 2000-2012, 2014, 2016 Red Hat, Inc.
Packit Service 97d2fb
   This file is part of elfutils.
Packit Service 97d2fb
   Written by Ulrich Drepper <drepper@redhat.com>, 2000.
Packit Service 97d2fb
Packit Service 97d2fb
   This file is free software; you can redistribute it and/or modify
Packit Service 97d2fb
   it under the terms of either
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU Lesser General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 3 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 2 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or both in parallel, as here.
Packit Service 97d2fb
Packit Service 97d2fb
   elfutils is distributed in the hope that it will be useful, but
Packit Service 97d2fb
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 97d2fb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 97d2fb
   General Public License for more details.
Packit Service 97d2fb
Packit Service 97d2fb
   You should have received copies of the GNU General Public License and
Packit Service 97d2fb
   the GNU Lesser General Public License along with this program.  If
Packit Service 97d2fb
   not, see <http://www.gnu.org/licenses/>.  */
Packit Service 97d2fb
Packit Service 97d2fb
#ifndef _ELF_KNOWLEDGE_H
Packit Service 97d2fb
#define _ELF_KNOWLEDGE_H	1
Packit Service 97d2fb
Packit Service 97d2fb
#include <stdbool.h>
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Test whether a section can be stripped or not.  */
Packit Service 97d2fb
#define SECTION_STRIP_P(shdr, name, remove_comment) \
Packit Service 97d2fb
  /* Sections which are allocated are not removed.  */			      \
Packit Service 97d2fb
  (((shdr)->sh_flags & SHF_ALLOC) == 0					      \
Packit Service 97d2fb
   /* We never remove .note sections.  */				      \
Packit Service 97d2fb
   && (shdr)->sh_type != SHT_NOTE					      \
Packit Service 97d2fb
   && (((shdr)->sh_type) != SHT_PROGBITS				      \
Packit Service 97d2fb
       /* Never remove .gnu.warning.* sections.  */			      \
Packit Service 97d2fb
       || (name != NULL							      \
Packit Service 97d2fb
	   && strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) != 0\
Packit Service 97d2fb
	   /* We remove .comment sections only if explicitly told to do so. */\
Packit Service 97d2fb
	   && (remove_comment						      \
Packit Service 97d2fb
	       || strcmp (name, ".comment") != 0))))
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Test whether `sh_info' field in section header contains a section
Packit Service 97d2fb
   index.  There are two kinds of sections doing this:
Packit Service 97d2fb
Packit Service 97d2fb
   - the sections containing relocation information reference in this
Packit Service 97d2fb
     field the section to which the relocations apply;
Packit Service 97d2fb
Packit Service 97d2fb
   - section with the SHF_INFO_LINK flag set to signal that `sh_info'
Packit Service 97d2fb
     references a section.  This allows correct handling of unknown
Packit Service 97d2fb
     sections.  */
Packit Service 97d2fb
#define SH_INFO_LINK_P(Shdr) \
Packit Service 97d2fb
  ((Shdr)->sh_type == SHT_REL || (Shdr)->sh_type == SHT_RELA		      \
Packit Service 97d2fb
   || ((Shdr)->sh_flags & SHF_INFO_LINK) != 0)
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Size of an entry in the hash table.  The ELF specification says all
Packit Service 97d2fb
   entries are regardless of platform 32-bits in size.  Early 64-bit
Packit Service 97d2fb
   ports (namely Alpha for Linux) got this wrong.  The wording was not
Packit Service 97d2fb
   clear.
Packit Service 97d2fb
Packit Service 97d2fb
   Several years later the ABI for the 64-bit S390s was developed.
Packit Service 97d2fb
   Many things were copied from the IA-64 ABI (which uses the correct
Packit Service 97d2fb
   32-bit entry size) but what do these people do?  They use 64-bit
Packit Service 97d2fb
   entries.  It is really shocking to see what kind of morons are out
Packit Service 97d2fb
   there.  And even worse: they are allowed to design ABIs.  */
Packit Service 97d2fb
#define SH_ENTSIZE_HASH(Ehdr) \
Packit Service 97d2fb
  ((Ehdr)->e_machine == EM_ALPHA					      \
Packit Service 97d2fb
   || ((Ehdr)->e_machine == EM_S390					      \
Packit Service 97d2fb
       && (Ehdr)->e_ident[EI_CLASS] == ELFCLASS64) ? 8 : 4)
Packit Service 97d2fb
Packit Service 97d2fb
/* GNU Annobin notes are not fully standardized and abuses the owner name.  */
Packit Service 97d2fb
Packit Service 97d2fb
#define ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX "GA"
Packit Service 97d2fb
Packit Service 97d2fb
#define NT_GNU_BUILD_ATTRIBUTE_OPEN 0x100
Packit Service 97d2fb
#define NT_GNU_BUILD_ATTRIBUTE_FUNC 0x101
Packit Service 97d2fb
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_TYPE_NUMERIC	'*'
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_TYPE_STRING		'$'
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_TYPE_BOOL_TRUE	'+'
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_TYPE_BOOL_FALSE	'!'
Packit Service 97d2fb
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_VERSION	1
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_STACK_PROT	2
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_RELRO	3
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_STACK_SIZE	4
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_TOOL	5
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_ABI		6
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_PIC		7
Packit Service 97d2fb
#define GNU_BUILD_ATTRIBUTE_SHORT_ENUM	8
Packit Service 97d2fb
Packit Service 97d2fb
#endif	/* elf-knowledge.h */