changelog: update changelog
[platform/upstream/binutils.git] / bfd / libpei.h
index 9ed9c12..ffcafde 100644 (file)
@@ -1,23 +1,24 @@
 /* Support for the generic parts of PE/PEI; common header information.
 /* Support for the generic parts of PE/PEI; common header information.
-   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+   Copyright (C) 1995-2014 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
 
 /* Most of this hacked by  Steve Chamberlain,
                        sac@cygnus.com
 
 /* Most of this hacked by  Steve Chamberlain,
                        sac@cygnus.com
 #define PUT_SCNHDR_LNNOPTR H_PUT_32
 #endif
 
 #define PUT_SCNHDR_LNNOPTR H_PUT_32
 #endif
 
-#ifdef COFF_WITH_pep
+#ifdef COFF_WITH_pex64
+
+#define GET_OPTHDR_IMAGE_BASE            H_GET_64
+#define PUT_OPTHDR_IMAGE_BASE            H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
+#define GET_OPTHDR_SIZE_OF_STACK_COMMIT  H_GET_64
+#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT  H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE  H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE  H_PUT_64
+#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT   H_GET_64
+#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT   H_PUT_64
+#define GET_PDATA_ENTRY                  bfd_get_32
+
+#define _bfd_XX_bfd_copy_private_bfd_data_common       _bfd_pex64_bfd_copy_private_bfd_data_common
+#define _bfd_XX_bfd_copy_private_section_data          _bfd_pex64_bfd_copy_private_section_data
+#define _bfd_XX_get_symbol_info                                _bfd_pex64_get_symbol_info
+#define _bfd_XX_only_swap_filehdr_out                  _bfd_pex64_only_swap_filehdr_out
+#define _bfd_XX_print_private_bfd_data_common          _bfd_pex64_print_private_bfd_data_common
+#define _bfd_XXi_final_link_postscript                 _bfd_pex64i_final_link_postscript
+#define _bfd_XXi_only_swap_filehdr_out                 _bfd_pex64i_only_swap_filehdr_out
+#define _bfd_XXi_swap_aouthdr_in                       _bfd_pex64i_swap_aouthdr_in
+#define _bfd_XXi_swap_aouthdr_out                      _bfd_pex64i_swap_aouthdr_out
+#define _bfd_XXi_swap_aux_in                           _bfd_pex64i_swap_aux_in
+#define _bfd_XXi_swap_aux_out                          _bfd_pex64i_swap_aux_out
+#define _bfd_XXi_swap_lineno_in                                _bfd_pex64i_swap_lineno_in
+#define _bfd_XXi_swap_lineno_out                       _bfd_pex64i_swap_lineno_out
+#define _bfd_XXi_swap_scnhdr_out                       _bfd_pex64i_swap_scnhdr_out
+#define _bfd_XXi_swap_sym_in                           _bfd_pex64i_swap_sym_in
+#define _bfd_XXi_swap_sym_out                          _bfd_pex64i_swap_sym_out
+#define _bfd_XXi_swap_debugdir_in                      _bfd_pex64i_swap_debugdir_in
+#define _bfd_XXi_swap_debugdir_out                     _bfd_pex64i_swap_debugdir_out
+#define _bfd_XXi_write_codeview_record                 _bfd_pex64i_write_codeview_record
+
+#elif defined COFF_WITH_pep
 
 #define GET_OPTHDR_IMAGE_BASE H_GET_64
 #define PUT_OPTHDR_IMAGE_BASE H_PUT_64
 
 #define GET_OPTHDR_IMAGE_BASE H_GET_64
 #define PUT_OPTHDR_IMAGE_BASE H_PUT_64
 #define _bfd_XX_only_swap_filehdr_out                  _bfd_pep_only_swap_filehdr_out
 #define _bfd_XX_print_private_bfd_data_common          _bfd_pep_print_private_bfd_data_common
 #define _bfd_XXi_final_link_postscript                 _bfd_pepi_final_link_postscript
 #define _bfd_XX_only_swap_filehdr_out                  _bfd_pep_only_swap_filehdr_out
 #define _bfd_XX_print_private_bfd_data_common          _bfd_pep_print_private_bfd_data_common
 #define _bfd_XXi_final_link_postscript                 _bfd_pepi_final_link_postscript
-#define _bfd_XXi_final_link_postscript                 _bfd_pepi_final_link_postscript
 #define _bfd_XXi_only_swap_filehdr_out                 _bfd_pepi_only_swap_filehdr_out
 #define _bfd_XXi_swap_aouthdr_in                       _bfd_pepi_swap_aouthdr_in
 #define _bfd_XXi_swap_aouthdr_out                      _bfd_pepi_swap_aouthdr_out
 #define _bfd_XXi_only_swap_filehdr_out                 _bfd_pepi_only_swap_filehdr_out
 #define _bfd_XXi_swap_aouthdr_in                       _bfd_pepi_swap_aouthdr_in
 #define _bfd_XXi_swap_aouthdr_out                      _bfd_pepi_swap_aouthdr_out
 #define _bfd_XXi_swap_scnhdr_out                       _bfd_pepi_swap_scnhdr_out
 #define _bfd_XXi_swap_sym_in                           _bfd_pepi_swap_sym_in
 #define _bfd_XXi_swap_sym_out                          _bfd_pepi_swap_sym_out
 #define _bfd_XXi_swap_scnhdr_out                       _bfd_pepi_swap_scnhdr_out
 #define _bfd_XXi_swap_sym_in                           _bfd_pepi_swap_sym_in
 #define _bfd_XXi_swap_sym_out                          _bfd_pepi_swap_sym_out
+#define _bfd_XXi_swap_debugdir_in                      _bfd_pepi_swap_debugdir_in
+#define _bfd_XXi_swap_debugdir_out                     _bfd_pepi_swap_debugdir_out
+#define _bfd_XXi_write_codeview_record                 _bfd_pepi_write_codeview_record
 
 #else /* !COFF_WITH_pep */
 
 
 #else /* !COFF_WITH_pep */
 
 #define _bfd_XX_only_swap_filehdr_out                  _bfd_pe_only_swap_filehdr_out
 #define _bfd_XX_print_private_bfd_data_common          _bfd_pe_print_private_bfd_data_common
 #define _bfd_XXi_final_link_postscript                 _bfd_pei_final_link_postscript
 #define _bfd_XX_only_swap_filehdr_out                  _bfd_pe_only_swap_filehdr_out
 #define _bfd_XX_print_private_bfd_data_common          _bfd_pe_print_private_bfd_data_common
 #define _bfd_XXi_final_link_postscript                 _bfd_pei_final_link_postscript
-#define _bfd_XXi_final_link_postscript                 _bfd_pei_final_link_postscript
 #define _bfd_XXi_only_swap_filehdr_out                 _bfd_pei_only_swap_filehdr_out
 #define _bfd_XXi_swap_aouthdr_in                       _bfd_pei_swap_aouthdr_in
 #define _bfd_XXi_swap_aouthdr_out                      _bfd_pei_swap_aouthdr_out
 #define _bfd_XXi_only_swap_filehdr_out                 _bfd_pei_only_swap_filehdr_out
 #define _bfd_XXi_swap_aouthdr_in                       _bfd_pei_swap_aouthdr_in
 #define _bfd_XXi_swap_aouthdr_out                      _bfd_pei_swap_aouthdr_out
 #define _bfd_XXi_swap_scnhdr_out                       _bfd_pei_swap_scnhdr_out
 #define _bfd_XXi_swap_sym_in                           _bfd_pei_swap_sym_in
 #define _bfd_XXi_swap_sym_out                          _bfd_pei_swap_sym_out
 #define _bfd_XXi_swap_scnhdr_out                       _bfd_pei_swap_scnhdr_out
 #define _bfd_XXi_swap_sym_in                           _bfd_pei_swap_sym_in
 #define _bfd_XXi_swap_sym_out                          _bfd_pei_swap_sym_out
+#define _bfd_XXi_swap_debugdir_in                      _bfd_pei_swap_debugdir_in
+#define _bfd_XXi_swap_debugdir_out                     _bfd_pei_swap_debugdir_out
+#define _bfd_XXi_write_codeview_record                 _bfd_pei_write_codeview_record
 
 #endif /* !COFF_WITH_pep */
 
 
 #endif /* !COFF_WITH_pep */
 
    implementations architecture types, and actually appear in
    peigen.c.  */
 
    implementations architecture types, and actually appear in
    peigen.c.  */
 
-void _bfd_XXi_swap_sym_in PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_sym_in _bfd_XXi_swap_sym_in
-
-unsigned int _bfd_XXi_swap_sym_out PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_sym_out _bfd_XXi_swap_sym_out
-
-void _bfd_XXi_swap_aux_in PARAMS ((bfd *, PTR, int, int, int, int, PTR));
-#define coff_swap_aux_in _bfd_XXi_swap_aux_in
-
-unsigned int _bfd_XXi_swap_aux_out \
-  PARAMS ((bfd *, PTR, int, int, int, int, PTR));
-#define coff_swap_aux_out _bfd_XXi_swap_aux_out
-
-void _bfd_XXi_swap_lineno_in PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_lineno_in _bfd_XXi_swap_lineno_in
-
-unsigned int _bfd_XXi_swap_lineno_out PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_lineno_out _bfd_XXi_swap_lineno_out
-
-void _bfd_XXi_swap_aouthdr_in PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_aouthdr_in _bfd_XXi_swap_aouthdr_in
-
-unsigned int _bfd_XXi_swap_aouthdr_out PARAMS ((bfd *, PTR, PTR));
+#define coff_swap_sym_in      _bfd_XXi_swap_sym_in
+#define coff_swap_sym_out     _bfd_XXi_swap_sym_out
+#define coff_swap_aux_in      _bfd_XXi_swap_aux_in
+#define coff_swap_aux_out     _bfd_XXi_swap_aux_out
+#define coff_swap_lineno_in   _bfd_XXi_swap_lineno_in
+#define coff_swap_lineno_out  _bfd_XXi_swap_lineno_out
+#define coff_swap_aouthdr_in  _bfd_XXi_swap_aouthdr_in
 #define coff_swap_aouthdr_out _bfd_XXi_swap_aouthdr_out
 #define coff_swap_aouthdr_out _bfd_XXi_swap_aouthdr_out
-
-unsigned int _bfd_XXi_swap_scnhdr_out PARAMS ((bfd *, PTR, PTR));
-#define coff_swap_scnhdr_out _bfd_XXi_swap_scnhdr_out
-
-bfd_boolean _bfd_XX_print_private_bfd_data_common PARAMS ((bfd *, PTR));
-
-bfd_boolean _bfd_XX_bfd_copy_private_bfd_data_common PARAMS ((bfd *, bfd *));
-
-void _bfd_XX_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
-
-bfd_boolean _bfd_XXi_final_link_postscript
-  PARAMS ((bfd *, struct coff_final_link_info *));
+#define coff_swap_scnhdr_out  _bfd_XXi_swap_scnhdr_out
 
 #ifndef coff_final_link_postscript
 #define coff_final_link_postscript _bfd_XXi_final_link_postscript
 #endif
 
 #ifndef coff_final_link_postscript
 #define coff_final_link_postscript _bfd_XXi_final_link_postscript
 #endif
+
+void        _bfd_XXi_swap_sym_in (bfd *, void *, void *);
+unsigned    _bfd_XXi_swap_sym_out (bfd *, void *, void *);
+void        _bfd_XXi_swap_aux_in (bfd *, void *, int, int, int, int, void *);
+unsigned    _bfd_XXi_swap_aux_out (bfd *, void *, int, int, int, int, void *);
+void        _bfd_XXi_swap_lineno_in (bfd *, void *, void *);
+unsigned    _bfd_XXi_swap_lineno_out (bfd *, void *, void *);
+void        _bfd_XXi_swap_aouthdr_in (bfd *, void *, void *);
+unsigned    _bfd_XXi_swap_aouthdr_out (bfd *, void *, void *);
+unsigned    _bfd_XXi_swap_scnhdr_out (bfd *, void *, void *);
+bfd_boolean _bfd_XX_print_private_bfd_data_common (bfd *, void *);
+bfd_boolean _bfd_XX_bfd_copy_private_bfd_data_common (bfd *, bfd *);
+void        _bfd_XX_get_symbol_info (bfd *, asymbol *, symbol_info *);
+bfd_boolean _bfd_XXi_final_link_postscript (bfd *, struct coff_final_link_info *);
+void        _bfd_XXi_swap_debugdir_in (bfd *, void *, void *);
+unsigned    _bfd_XXi_swap_debugdir_out (bfd *, void *, void *);
+unsigned    _bfd_XXi_write_codeview_record (bfd *, file_ptr, CODEVIEW_INFO *);
+
 /* The following are needed only for ONE of pe or pei, but don't
    otherwise vary; peicode.h fixes up ifdefs but we provide the
    prototype.  */
 
 /* The following are needed only for ONE of pe or pei, but don't
    otherwise vary; peicode.h fixes up ifdefs but we provide the
    prototype.  */
 
-unsigned int _bfd_XX_only_swap_filehdr_out PARAMS ((bfd*, PTR, PTR));
-unsigned int _bfd_XXi_only_swap_filehdr_out PARAMS ((bfd*, PTR, PTR));
-bfd_boolean _bfd_XX_bfd_copy_private_section_data
-  PARAMS ((bfd *, asection *, bfd *, asection *));
+unsigned    _bfd_XX_only_swap_filehdr_out  (bfd *, void *, void *);
+unsigned    _bfd_XXi_only_swap_filehdr_out (bfd *, void *, void *);
+bfd_boolean _bfd_XX_bfd_copy_private_section_data (bfd *, asection *, bfd *, asection *);
+
+bfd_boolean _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
+bfd_boolean _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
+bfd_boolean _bfd_pex64_print_ce_compressed_pdata (bfd *, void *);
+bfd_boolean _bfd_pep_print_ce_compressed_pdata (bfd *, void *);
 
 
-/* Macro: Returns true if the bfd is a PE executable as opposed to a PE object file.  */
-#define bfd_pe_executable_p(abfd) \
-  (strncmp ((abfd)->xvec->name, "pei-", 4) == 0                \
-   || strncmp ((abfd)->xvec->name, "efi-app-", 8) == 0)