Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* BFD COFF interfaces used outside of BFD.
  2.    Copyright (C) 1990-2015 Free Software Foundation, Inc.
  3.    Written by Cygnus Support.
  4.  
  5.    This file is part of BFD, the Binary File Descriptor library.
  6.  
  7.    This program is free software; you can redistribute it and/or modify
  8.    it under the terms of the GNU General Public License as published by
  9.    the Free Software Foundation; either version 3 of the License, or
  10.    (at your option) any later version.
  11.  
  12.    This program is distributed in the hope that it will be useful,
  13.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.    GNU General Public License for more details.
  16.  
  17.    You should have received a copy of the GNU General Public License
  18.    along with this program; if not, write to the Free Software
  19.    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
  20.    MA 02110-1301, USA.  */
  21.  
  22. /* This structure is used for a comdat section, as in PE.  A comdat
  23.    section is associated with a particular symbol.  When the linker
  24.    sees a comdat section, it keeps only one of the sections with a
  25.    given name and associated with a given symbol.  */
  26.  
  27. struct coff_comdat_info
  28. {
  29.   /* The name of the symbol associated with a comdat section.  */
  30.   const char *name;
  31.  
  32.   /* The local symbol table index of the symbol associated with a
  33.      comdat section.  This is only meaningful to the object file format
  34.      specific code; it is not an index into the list returned by
  35.      bfd_canonicalize_symtab.  */
  36.   long symbol;
  37. };
  38.  
  39. /* The used_by_bfd field of a section may be set to a pointer to this
  40.    structure.  */
  41.  
  42. struct coff_section_tdata
  43. {
  44.   /* The relocs, swapped into COFF internal form.  This may be NULL.  */
  45.   struct internal_reloc *relocs;
  46.   /* If this is TRUE, the relocs entry may not be freed.  */
  47.   bfd_boolean keep_relocs;
  48.   /* The section contents.  This may be NULL.  */
  49.   bfd_byte *contents;
  50.   /* If this is TRUE, the contents entry may not be freed.  */
  51.   bfd_boolean keep_contents;
  52.   /* Information cached by coff_find_nearest_line.  */
  53.   bfd_vma offset;
  54.   unsigned int i;
  55.   const char *function;
  56.   /* Optional information about a COMDAT entry; NULL if not COMDAT. */
  57.   struct coff_comdat_info *comdat;
  58.   int line_base;
  59.   /* A pointer used for .stab linking optimizations.  */
  60.   void * stab_info;
  61.   /* Available for individual backends.  */
  62.   void * tdata;
  63. };
  64.  
  65. /* An accessor macro for the coff_section_tdata structure.  */
  66. #define coff_section_data(abfd, sec) \
  67.   ((struct coff_section_tdata *) (sec)->used_by_bfd)
  68.  
  69. #define bfd_coff_get_comdat_section(abfd, sec)          \
  70.   ((bfd_get_flavour (abfd) == bfd_target_coff_flavour   \
  71.     && coff_section_data (abfd, sec) != NULL)           \
  72.    ? coff_section_data (abfd, sec)->comdat : NULL)
  73.  
  74. #define coff_symbol_from(symbol)                        \
  75.   ((bfd_family_coff (bfd_asymbol_bfd (symbol))          \
  76.     && bfd_asymbol_bfd (symbol)->tdata.coff_obj_data)   \
  77.    ? (coff_symbol_type *) (symbol) : NULL)
  78.  
  79. struct internal_syment;
  80. union internal_auxent;
  81.  
  82. extern bfd_boolean bfd_coff_get_syment
  83.   (bfd *, struct bfd_symbol *, struct internal_syment *);
  84.  
  85. extern bfd_boolean bfd_coff_get_auxent
  86.   (bfd *, struct bfd_symbol *, int, union internal_auxent *);
  87.