Blame libelf/abstract.h

Packit 032894
/* Abstract description of component ELF types.
Packit 032894
   Copyright (C) 1998, 1999, 2000, 2002, 2004, 2007, 2015 Red Hat, Inc.
Packit 032894
   This file is part of elfutils.
Packit 032894
   Written by Ulrich Drepper <drepper@redhat.com>, 1998.
Packit 032894
Packit 032894
   This file is free software; you can redistribute it and/or modify
Packit 032894
   it under the terms of either
Packit 032894
Packit 032894
     * the GNU Lesser General Public License as published by the Free
Packit 032894
       Software Foundation; either version 3 of the License, or (at
Packit 032894
       your option) any later version
Packit 032894
Packit 032894
   or
Packit 032894
Packit 032894
     * the GNU General Public License as published by the Free
Packit 032894
       Software Foundation; either version 2 of the License, or (at
Packit 032894
       your option) any later version
Packit 032894
Packit 032894
   or both in parallel, as here.
Packit 032894
Packit 032894
   elfutils is distributed in the hope that it will be useful, but
Packit 032894
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 032894
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 032894
   General Public License for more details.
Packit 032894
Packit 032894
   You should have received copies of the GNU General Public License and
Packit 032894
   the GNU Lesser General Public License along with this program.  If
Packit 032894
   not, see <http://www.gnu.org/licenses/>.  */
Packit 032894
Packit 032894
/* ELF header.  */
Packit 032894
#define Ehdr(Bits, Ext) \
Packit 032894
START (Bits, Ehdr, Ext##Ehdr)						      \
Packit 032894
  TYPE_EXTRA (unsigned char e_ident[EI_NIDENT];)			      \
Packit 032894
  TYPE_XLATE (memmove (tdest->e_ident, tsrc->e_ident, EI_NIDENT);)	      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_type)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_machine)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), e_version)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Addr), e_entry)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Off), e_phoff)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Off), e_shoff)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), e_flags)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_ehsize)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_phentsize)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_phnum)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_shentsize)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_shnum)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), e_shstrndx)			      \
Packit 032894
END (Bits, Ext##Ehdr)
Packit 032894
Packit 032894
#define Ehdr32(Ext) \
Packit 032894
  Ehdr(32, Ext)
Packit 032894
#define Ehdr64(Ext) \
Packit 032894
  Ehdr(64, Ext)
Packit 032894
Packit 032894
Packit 032894
/* Program header.  */
Packit 032894
#define Phdr32(Ext) \
Packit 032894
START (32, Phdr, Ext##Phdr)						      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), p_type)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Off), p_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Addr), p_vaddr)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Addr), p_paddr)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), p_filesz)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), p_memsz)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), p_flags)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), p_align)				      \
Packit 032894
END (32, Ext##Phdr)
Packit 032894
#define Phdr64(Ext) \
Packit 032894
START (64, Phdr, Ext##Phdr)						      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), p_type)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), p_flags)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Off), p_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Addr), p_vaddr)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Addr), p_paddr)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), p_filesz)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), p_memsz)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), p_align)				      \
Packit 032894
END (64, Ext##Phdr)
Packit 032894
Packit 032894
Packit 032894
/* Section header.  */
Packit 032894
#define Shdr32(Ext) \
Packit 032894
START (32, Shdr, Ext##Shdr)						      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_name)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_type)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_flags)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Addr), sh_addr)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Off), sh_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_size)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_link)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_info)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_addralign)			      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), sh_entsize)				      \
Packit 032894
END (32, Ext##Shdr)
Packit 032894
#define Shdr64(Ext) \
Packit 032894
START (64, Shdr, Ext##Shdr)						      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), sh_name)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), sh_type)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), sh_flags)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Addr), sh_addr)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Off), sh_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), sh_size)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), sh_link)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), sh_info)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), sh_addralign)			      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), sh_entsize)				      \
Packit 032894
END (64, Ext##Shdr)
Packit 032894
Packit 032894
Packit 032894
/* Symbol table.  */
Packit 032894
#define Sym32(Ext) \
Packit 032894
START (32, Sym, Ext##Sym)						      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), st_name)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Addr), st_value)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), st_size)				      \
Packit 032894
  TYPE_EXTRA (unsigned char st_info;)					      \
Packit 032894
  TYPE_XLATE (tdest->st_info = tsrc->st_info;)				      \
Packit 032894
  TYPE_EXTRA (unsigned char st_other;)					      \
Packit 032894
  TYPE_XLATE (tdest->st_other = tsrc->st_other;)			      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Half), st_shndx)				      \
Packit 032894
END (32, Ext##Sym)
Packit 032894
#define Sym64(Ext) \
Packit 032894
START (64, Sym, Ext##Sym)						      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), st_name)				      \
Packit 032894
  TYPE_EXTRA (unsigned char st_info;)					      \
Packit 032894
  TYPE_XLATE (tdest->st_info = tsrc->st_info;)				      \
Packit 032894
  TYPE_EXTRA (unsigned char st_other;)					      \
Packit 032894
  TYPE_XLATE (tdest->st_other = tsrc->st_other;)			      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Half), st_shndx)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Addr), st_value)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), st_size)				      \
Packit 032894
END (64, Ext##Sym)
Packit 032894
Packit 032894
Packit 032894
/* Relocation.  */
Packit 032894
#define Rel32(Ext) \
Packit 032894
START (32, Rel, Ext##Rel)						      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Addr), r_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), r_info)				      \
Packit 032894
END (32, Ext##Rel)
Packit 032894
#define Rel64(Ext) \
Packit 032894
START (64, Rel, Ext##Rel)						      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Addr), r_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), r_info)				      \
Packit 032894
END (64, Ext##Rel)
Packit 032894
Packit 032894
#define Rela32(Ext) \
Packit 032894
START (32, Rela, Ext##Rela)						      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Addr), r_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), r_info)				      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Sword), r_addend)				      \
Packit 032894
END (32, Ext##Rela)
Packit 032894
#define Rela64(Ext) \
Packit 032894
START (64, Rela, Ext##Rela)						      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Addr), r_offset)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), r_info)				      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Sxword), r_addend)				      \
Packit 032894
END (64, Ext##Rela)
Packit 032894
Packit 032894
Packit 032894
/* Note entry header.  */
Packit 032894
#define Note(Bits, Ext) \
Packit 032894
START (Bits, Nhdr, Ext##Nhdr)						      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), n_namesz)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), n_descsz)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), n_type)				      \
Packit 032894
END (Bits, Ext##Nhdr)
Packit 032894
Packit 032894
#define Note32(Ext) \
Packit 032894
  Note (32, Ext)
Packit 032894
#define Note64(Ext) \
Packit 032894
  Note (64, Ext)
Packit 032894
Packit 032894
Packit 032894
/* Dynamic section data.  */
Packit 032894
#define Dyn32(Ext) \
Packit 032894
START (32, Dyn, Ext##Dyn)						      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Sword), d_tag)				      \
Packit 032894
  TYPE_EXTRA (union {)							      \
Packit 032894
  TYPE_EXTRA (ElfW2(32, Ext##Word) d_val;)				      \
Packit 032894
  TYPE_EXTRA (ElfW2(32, Ext##Addr) d_ptr;)				      \
Packit 032894
  TYPE_XLATE (Elf32_cvt_Addr1 (&tdest->d_un.d_val, &tsrc->d_un.d_val);)	      \
Packit 032894
  TYPE_EXTRA (ElfW2(32, Ext##Off) d_off;)				      \
Packit 032894
  TYPE_EXTRA (} d_un;)							      \
Packit 032894
END (32, Ext##Dyn)
Packit 032894
#define Dyn64(Ext) \
Packit 032894
START (64, Dyn, Ext##Dyn)						      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), d_tag)				      \
Packit 032894
  TYPE_EXTRA (union {)							      \
Packit 032894
  TYPE_EXTRA (ElfW2(64, Ext##Xword) d_val;)				      \
Packit 032894
  TYPE_EXTRA (ElfW2(64, Ext##Addr) d_ptr;)				      \
Packit 032894
  TYPE_XLATE (Elf64_cvt_Addr1 (&tdest->d_un.d_val, &tsrc->d_un.d_val);)	      \
Packit 032894
  TYPE_EXTRA (} d_un;)							      \
Packit 032894
END (64, Ext##Dyn)
Packit 032894
Packit 032894
Packit 032894
#ifndef GENERATE_CONVERSION
Packit 032894
/* Version definitions.  */
Packit 032894
# define Verdef(Bits, Ext) \
Packit 032894
START (Bits, Verdef, Ext##Verdef)					      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vd_version)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vd_flags)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vd_ndx)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vd_cnt)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vd_hash)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vd_aux)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vd_next)				      \
Packit 032894
END (Bits, Ext##Verdef)
Packit 032894
Packit 032894
# define Verdef32(Ext) \
Packit 032894
  Verdef (32, Ext)
Packit 032894
# define Verdef64(Ext) \
Packit 032894
  Verdef (64, Ext)
Packit 032894
Packit 032894
# define Verdaux(Bits, Ext) \
Packit 032894
START (Bits, Verdaux, Ext##Verdaux)					      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vda_name)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vda_next)				      \
Packit 032894
END (Bits, Ext##Verdaux)
Packit 032894
Packit 032894
# define Verdaux32(Ext) \
Packit 032894
  Verdaux (32, Ext)
Packit 032894
# define Verdaux64(Ext) \
Packit 032894
  Verdaux (64, Ext)
Packit 032894
Packit 032894
/* Required versions.  */
Packit 032894
# define Verneed(Bits, Ext) \
Packit 032894
START (Bits, Verneed, Ext##Verneed)					      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vn_version)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vn_cnt)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vn_file)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vn_aux)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vn_next)				      \
Packit 032894
END (Bits, Ext##Verneed)
Packit 032894
Packit 032894
# define Verneed32(Ext) \
Packit 032894
  Verneed (32, Ext)
Packit 032894
# define Verneed64(Ext) \
Packit 032894
  Verneed (64, Ext)
Packit 032894
Packit 032894
# define Vernaux(Bits, Ext) \
Packit 032894
START (Bits, Vernaux, Ext##Vernaux)					      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vna_hash)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vna_flags)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), vna_other)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vna_name)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), vna_next)				      \
Packit 032894
END (Bits, Ext##Vernaux)
Packit 032894
Packit 032894
# define Vernaux32(Ext) \
Packit 032894
  Vernaux (32, Ext)
Packit 032894
# define Vernaux64(Ext) \
Packit 032894
  Vernaux (64, Ext)
Packit 032894
#endif
Packit 032894
Packit 032894
/* Symbol information.  */
Packit 032894
#define Syminfo(Bits, Ext) \
Packit 032894
START (Bits, Syminfo, Ext##Syminfo)					      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), si_boundto)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), si_flags)				      \
Packit 032894
END (Bits, Ext##Syminfo)
Packit 032894
Packit 032894
#define Syminfo32(Ext) \
Packit 032894
  Syminfo (32, Ext)
Packit 032894
#define Syminfo64(Ext) \
Packit 032894
  Syminfo (64, Ext)
Packit 032894
Packit 032894
/* Move information.  */
Packit 032894
#define Move(Bits, Ext) \
Packit 032894
START (Bits, Move, Ext##Move)						      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Xword), m_value)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Xword), m_info)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Xword), m_poffset)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), m_repeat)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Half), m_stride)				      \
Packit 032894
END (Bits, Ext##Move)
Packit 032894
Packit 032894
#define Move32(Ext) \
Packit 032894
  Move (32, Ext)
Packit 032894
#define Move64(Ext) \
Packit 032894
  Move (64, Ext)
Packit 032894
Packit 032894
#define Lib(Bits, Ext) \
Packit 032894
START (Bits, Lib, Ext##Lib)						      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), l_name)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), l_time_stamp)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), l_checksum)			      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), l_version)				      \
Packit 032894
  TYPE_NAME (ElfW2(Bits, Ext##Word), l_flags)				      \
Packit 032894
END (Bits, Ext##Lib)
Packit 032894
Packit 032894
#define Lib32(Ext) \
Packit 032894
  Lib (32, Ext)
Packit 032894
#define Lib64(Ext) \
Packit 032894
  Lib (64, Ext)
Packit 032894
Packit 032894
#define auxv_t32(Ext) \
Packit 032894
START (32, auxv_t, Ext##auxv_t)						      \
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), a_type)				      \
Packit 032894
  TYPE_EXTRA (union {)							      \
Packit 032894
  TYPE_EXTRA (ElfW2(32, Ext##Word) a_val;)				      \
Packit 032894
  TYPE_XLATE (Elf32_cvt_Addr1 (&tdest->a_un.a_val, &tsrc->a_un.a_val);)	      \
Packit 032894
  TYPE_EXTRA (} a_un;)							      \
Packit 032894
END (32, Ext##auxv_t)
Packit 032894
#define auxv_t64(Ext) \
Packit 032894
START (64, auxv_t, Ext##auxv_t)						      \
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), a_type)				      \
Packit 032894
  TYPE_EXTRA (union {)							      \
Packit 032894
  TYPE_EXTRA (ElfW2(64, Ext##Xword) a_val;)				      \
Packit 032894
  TYPE_XLATE (Elf64_cvt_Addr1 (&tdest->a_un.a_val, &tsrc->a_un.a_val);)	      \
Packit 032894
  TYPE_EXTRA (} a_un;)							      \
Packit 032894
END (64, Ext##auxv_t)
Packit 032894
Packit 032894
/* Note that there is actual compression data right after the Chdr.
Packit 032894
   So we also have a separate conversion function for the whole
Packit 032894
   section.  */
Packit 032894
#define Chdr32(Ext) \
Packit 032894
START (32, Chdr, Ext##Chdr)						\
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), ch_type)				\
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), ch_size)				\
Packit 032894
  TYPE_NAME (ElfW2(32, Ext##Word), ch_addralign)			\
Packit 032894
END (32, Ext##Chdr)
Packit 032894
Packit 032894
#define Chdr64(Ext) \
Packit 032894
START (64, Chdr, Ext##Chdr)						\
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), ch_type)				\
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Word), ch_reserved)				\
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), ch_size)				\
Packit 032894
  TYPE_NAME (ElfW2(64, Ext##Xword), ch_addralign)			\
Packit 032894
END (64, Ext##Chdr)