pdb build fixes
authorAlan Modra <amodra@gmail.com>
Thu, 22 Dec 2022 01:19:09 +0000 (11:49 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 23 Dec 2022 08:50:31 +0000 (19:20 +1030)
Enable compilation of ld/pdb.c just for x86, as is done for bfd/pdb.c.
This reduces the size of ld and is necessary with the following
patches that call a COFF-only bfd function from ld/pdb.c.  Without it
we'd break every non-COFF target build.

ld/Makefile.am
ld/Makefile.in
ld/configure.tgt
ld/emultempl/pe.em
ld/emultempl/pep.em

index 65fef4e16903b30d2f1ce5869725e3f24db41d94..a1ef4ad8c24e40d7660e231d631b970b7a35de17 100644 (file)
@@ -466,6 +466,7 @@ ALL_64_EMULATIONS = $(ALL_64_EMULATION_SOURCES:.c=.@OBJEXT@)
 
 ALL_EMUL_EXTRA_OFILES = \
        deffilep.@OBJEXT@ \
+       pdb.@OBJEXT@ \
        pe-dll.@OBJEXT@ \
        ldelf.@OBJEXT@ \
        ldelfgen.@OBJEXT@
@@ -496,7 +497,7 @@ OFILES = ldgram.@OBJEXT@ ldlex-wrapper.@OBJEXT@ lexsup.@OBJEXT@ ldlang.@OBJEXT@
        mri.@OBJEXT@ ldctor.@OBJEXT@ ldmain.@OBJEXT@ plugin.@OBJEXT@ \
        ldwrite.@OBJEXT@ ldexp.@OBJEXT@  ldemul.@OBJEXT@ ldver.@OBJEXT@ ldmisc.@OBJEXT@ \
        ldfile.@OBJEXT@ ldcref.@OBJEXT@ ${EMULATION_OFILES} ${EMUL_EXTRA_OFILES} \
-       ldbuildid.@OBJEXT@ pdb.@OBJEXT@
+       ldbuildid.@OBJEXT@
 
 STAGESTUFF = *.@OBJEXT@ ldscripts/* e*.c
 
@@ -956,11 +957,11 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
 # We need this for automake to use YLWRAP.
 EXTRA_ld_new_SOURCES = deffilep.y ldlex.l
 # Allow dependency tracking to work for these files, too.
-EXTRA_ld_new_SOURCES += pep-dll.c pe-dll.c ldelf.c ldelfgen.c
+EXTRA_ld_new_SOURCES += ldelf.c ldelfgen.c pdb.c pep-dll.c pe-dll.c
 
 ld_new_SOURCES = ldgram.y ldlex-wrapper.c lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
        ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c plugin.c \
-       ldbuildid.c pdb.c
+       ldbuildid.c
 ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) \
                      $(BFDLIB) $(LIBCTF) $(LIBIBERTY) $(LIBINTL_DEP) $(JANSSON_LIBS)
 ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBCTF) \
index ff4c916c27ba8c86434c4dfeea914956b64b1f75..10b63629e2f3b9bbc6eb420bd8c975333a301b63 100644 (file)
@@ -212,7 +212,7 @@ am_ld_new_OBJECTS = ldgram.$(OBJEXT) ldlex-wrapper.$(OBJEXT) \
        ldctor.$(OBJEXT) ldmain.$(OBJEXT) ldwrite.$(OBJEXT) \
        ldexp.$(OBJEXT) ldemul.$(OBJEXT) ldver.$(OBJEXT) \
        ldmisc.$(OBJEXT) ldfile.$(OBJEXT) ldcref.$(OBJEXT) \
-       plugin.$(OBJEXT) ldbuildid.$(OBJEXT) pdb.$(OBJEXT)
+       plugin.$(OBJEXT) ldbuildid.$(OBJEXT)
 ld_new_OBJECTS = $(am_ld_new_OBJECTS)
 am__DEPENDENCIES_1 =
 @ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_2 = ../libctf/libctf.la
@@ -965,6 +965,7 @@ ALL_64_EMULATION_SOURCES = \
 ALL_64_EMULATIONS = $(ALL_64_EMULATION_SOURCES:.c=.@OBJEXT@)
 ALL_EMUL_EXTRA_OFILES = \
        deffilep.@OBJEXT@ \
+       pdb.@OBJEXT@ \
        pe-dll.@OBJEXT@ \
        ldelf.@OBJEXT@ \
        ldelfgen.@OBJEXT@
@@ -994,7 +995,7 @@ OFILES = ldgram.@OBJEXT@ ldlex-wrapper.@OBJEXT@ lexsup.@OBJEXT@ ldlang.@OBJEXT@
        mri.@OBJEXT@ ldctor.@OBJEXT@ ldmain.@OBJEXT@ plugin.@OBJEXT@ \
        ldwrite.@OBJEXT@ ldexp.@OBJEXT@  ldemul.@OBJEXT@ ldver.@OBJEXT@ ldmisc.@OBJEXT@ \
        ldfile.@OBJEXT@ ldcref.@OBJEXT@ ${EMULATION_OFILES} ${EMUL_EXTRA_OFILES} \
-       ldbuildid.@OBJEXT@ pdb.@OBJEXT@
+       ldbuildid.@OBJEXT@
 
 STAGESTUFF = *.@OBJEXT@ ldscripts/* e*.c
 SRC_POTFILES = $(CFILES) $(HFILES)
@@ -1008,12 +1009,12 @@ GEN_DEPENDS = $(srcdir)/genscripts.sh stringify.sed
 # Allow dependency tracking to work for these files, too.
 
 # Dependency tracking for the generated emulation files.
-EXTRA_ld_new_SOURCES = deffilep.y ldlex.l pep-dll.c pe-dll.c ldelf.c \
-       ldelfgen.c $(ALL_EMULATION_SOURCES) \
+EXTRA_ld_new_SOURCES = deffilep.y ldlex.l ldelf.c ldelfgen.c pdb.c \
+       pep-dll.c pe-dll.c $(ALL_EMULATION_SOURCES) \
        $(ALL_64_EMULATION_SOURCES)
 ld_new_SOURCES = ldgram.y ldlex-wrapper.c lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
        ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c plugin.c \
-       ldbuildid.c pdb.c
+       ldbuildid.c
 
 ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) \
                      $(BFDLIB) $(LIBCTF) $(LIBIBERTY) $(LIBINTL_DEP) $(JANSSON_LIBS)
index 741b246f67ef5253ce2c556d43022628cd7c0e6e..5971866fb61057ea055cf4876e5a56e1d181529a 100644 (file)
@@ -423,17 +423,17 @@ i[3-7]86-*-moss*) targ_emul=i386moss
                        targ_extra_emuls=i386msdos
                        ;;
 i[3-7]86-*-winnt*)     targ_emul=i386pe ;
-                       targ_extra_ofiles="deffilep.o pe-dll.o"
+                       targ_extra_ofiles="deffilep.o pdb.o pe-dll.o"
                        ;;
 i[3-7]86-*-pe)         targ_emul=i386pe ;
-                       targ_extra_ofiles="deffilep.o pe-dll.o"
+                       targ_extra_ofiles="deffilep.o pdb.o pe-dll.o"
                        ;;
 i[3-7]86-*-cygwin*)    targ_emul=i386pe ;
-                       targ_extra_ofiles="deffilep.o pe-dll.o" ;
+                       targ_extra_ofiles="deffilep.o pdb.o pe-dll.o" ;
                        test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api'
                        ;;
 i[3-7]86-*-mingw32*)   targ_emul=i386pe ;
-                       targ_extra_ofiles="deffilep.o pe-dll.o"
+                       targ_extra_ofiles="deffilep.o pdb.o pe-dll.o"
                        ;;
 i[3-7]86-*-interix*)   targ_emul=i386pe_posix;
                        targ_extra_ofiles="deffilep.o pe-dll.o"
@@ -1047,16 +1047,16 @@ x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
                        ;;
 x86_64-*-pe | x86_64-*-pep) targ_emul=i386pep ;
                        targ_extra_emuls=i386pe ;
-                       targ_extra_ofiles="deffilep.o pep-dll-x86_64.o pe-dll.o"
+                       targ_extra_ofiles="deffilep.o pdb.o pep-dll-x86_64.o pe-dll.o"
                        ;;
 x86_64-*-cygwin)       targ_emul=i386pep ;
                        targ_extra_emuls=i386pe
-                       targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o"
+                       targ_extra_ofiles="deffilep.o pdb.o pep-dll.o pe-dll.o"
                        test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api'
                        ;;
 x86_64-*-mingw*)       targ_emul=i386pep ;
                        targ_extra_emuls=i386pe
-                       targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o"
+                       targ_extra_ofiles="deffilep.o pdb.o pep-dll.o pe-dll.o"
                        ;;
 xgate-*-*)             targ_emul=xgateelf
                        targ_extra_ofiles=ldelfgen.o
index 1e0e23df043a78af86ae2baf0695836f78782b2d..cd4634180e72010c3637aac054f7344b0ca85fde 100644 (file)
@@ -15,6 +15,13 @@ case ${target} in
     ;;
 esac
 
+case ${target} in
+  x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin | \
+  i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
+    pdb_support=" ";;
+  *)
+esac
+
 rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF
@@ -66,7 +73,7 @@ fragment <<EOF
 #include "ldctor.h"
 #include "ldbuildid.h"
 #include "coff/internal.h"
-#include "pdb.h"
+${pdb_support+#include \"pdb.h\"}
 
 /* FIXME: See bfd/peXXigen.c for why we include an architecture specific
    header in generic PE code.  */
@@ -147,8 +154,10 @@ static lang_assignment_statement_type *image_base_statement = 0;
 static unsigned short pe_dll_characteristics = DEFAULT_DLL_CHARACTERISTICS;
 static bool insert_timestamp = true;
 static const char *emit_build_id;
+#ifdef PDB_H
 static int pdb;
 static char *pdb_name;
+#endif
 
 #ifdef DLL_SUPPORT
 static int pe_enable_stdcall_fixup = -1; /* 0=disable 1=enable.  */
@@ -220,87 +229,82 @@ fragment <<EOF
 /* PE format extra command line options.  */
 
 /* Used for setting flags in the PE header.  */
-#define OPTION_BASE_FILE               (300  + 1)
-#define OPTION_DLL                     (OPTION_BASE_FILE + 1)
-#define OPTION_FILE_ALIGNMENT          (OPTION_DLL + 1)
-#define OPTION_IMAGE_BASE              (OPTION_FILE_ALIGNMENT + 1)
-#define OPTION_MAJOR_IMAGE_VERSION     (OPTION_IMAGE_BASE + 1)
-#define OPTION_MAJOR_OS_VERSION                (OPTION_MAJOR_IMAGE_VERSION + 1)
-#define OPTION_MAJOR_SUBSYSTEM_VERSION (OPTION_MAJOR_OS_VERSION + 1)
-#define OPTION_MINOR_IMAGE_VERSION     (OPTION_MAJOR_SUBSYSTEM_VERSION + 1)
-#define OPTION_MINOR_OS_VERSION                (OPTION_MINOR_IMAGE_VERSION + 1)
-#define OPTION_MINOR_SUBSYSTEM_VERSION (OPTION_MINOR_OS_VERSION + 1)
-#define OPTION_SECTION_ALIGNMENT       (OPTION_MINOR_SUBSYSTEM_VERSION + 1)
-#define OPTION_STACK                   (OPTION_SECTION_ALIGNMENT + 1)
-#define OPTION_SUBSYSTEM               (OPTION_STACK + 1)
-#define OPTION_HEAP                    (OPTION_SUBSYSTEM + 1)
-#define OPTION_SUPPORT_OLD_CODE                (OPTION_HEAP + 1)
-#define OPTION_OUT_DEF                 (OPTION_SUPPORT_OLD_CODE + 1)
-#define OPTION_EXPORT_ALL              (OPTION_OUT_DEF + 1)
-#define OPTION_EXCLUDE_SYMBOLS         (OPTION_EXPORT_ALL + 1)
-#define OPTION_EXCLUDE_ALL_SYMBOLS     (OPTION_EXCLUDE_SYMBOLS + 1)
-#define OPTION_KILL_ATS                        (OPTION_EXCLUDE_ALL_SYMBOLS + 1)
-#define OPTION_STDCALL_ALIASES         (OPTION_KILL_ATS + 1)
-#define OPTION_ENABLE_STDCALL_FIXUP    (OPTION_STDCALL_ALIASES + 1)
-#define OPTION_DISABLE_STDCALL_FIXUP   (OPTION_ENABLE_STDCALL_FIXUP + 1)
-#define OPTION_THUMB_ENTRY             (OPTION_DISABLE_STDCALL_FIXUP + 1)
-#define OPTION_WARN_DUPLICATE_EXPORTS  (OPTION_THUMB_ENTRY + 1)
-#define OPTION_IMP_COMPAT              (OPTION_WARN_DUPLICATE_EXPORTS + 1)
-#define OPTION_ENABLE_AUTO_IMAGE_BASE  (OPTION_IMP_COMPAT + 1)
-#define OPTION_DISABLE_AUTO_IMAGE_BASE (OPTION_ENABLE_AUTO_IMAGE_BASE + 1)
-#define OPTION_DLL_SEARCH_PREFIX       (OPTION_DISABLE_AUTO_IMAGE_BASE + 1)
-#define OPTION_NO_DEFAULT_EXCLUDES     (OPTION_DLL_SEARCH_PREFIX + 1)
-#define OPTION_DLL_ENABLE_AUTO_IMPORT  (OPTION_NO_DEFAULT_EXCLUDES + 1)
-#define OPTION_DLL_DISABLE_AUTO_IMPORT (OPTION_DLL_ENABLE_AUTO_IMPORT + 1)
-#define OPTION_ENABLE_EXTRA_PE_DEBUG   (OPTION_DLL_DISABLE_AUTO_IMPORT + 1)
-#define OPTION_EXCLUDE_LIBS            (OPTION_ENABLE_EXTRA_PE_DEBUG + 1)
-#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC \
-                                       (OPTION_EXCLUDE_LIBS + 1)
-#define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC        \
-                                       (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
-#define OPTION_LARGE_ADDRESS_AWARE     (OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
-#define OPTION_DISABLE_LARGE_ADDRESS_AWARE \
-                                       (OPTION_LARGE_ADDRESS_AWARE + 1)
-#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1      \
-                                       (OPTION_DISABLE_LARGE_ADDRESS_AWARE + 1)
-#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2      \
-                                       (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 + 1)
-#define OPTION_EXCLUDE_MODULES_FOR_IMPLIB \
-                                       (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1)
-#define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \
-                                       (OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1)
-#define OPTION_NO_LEADING_UNDERSCORE   (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)
-#define OPTION_LEADING_UNDERSCORE      (OPTION_NO_LEADING_UNDERSCORE + 1)
-#define OPTION_ENABLE_LONG_SECTION_NAMES \
-                                       (OPTION_LEADING_UNDERSCORE + 1)
-#define OPTION_DISABLE_LONG_SECTION_NAMES \
-                                       (OPTION_ENABLE_LONG_SECTION_NAMES + 1)
+enum options
+{
+  OPTION_BASE_FILE = 300 + 1,
+  OPTION_DLL,
+  OPTION_FILE_ALIGNMENT,
+  OPTION_IMAGE_BASE,
+  OPTION_MAJOR_IMAGE_VERSION,
+  OPTION_MAJOR_OS_VERSION,
+  OPTION_MAJOR_SUBSYSTEM_VERSION,
+  OPTION_MINOR_IMAGE_VERSION,
+  OPTION_MINOR_OS_VERSION,
+  OPTION_MINOR_SUBSYSTEM_VERSION,
+  OPTION_SECTION_ALIGNMENT,
+  OPTION_STACK,
+  OPTION_SUBSYSTEM,
+  OPTION_HEAP,
+  OPTION_SUPPORT_OLD_CODE,
+  OPTION_OUT_DEF,
+  OPTION_EXPORT_ALL,
+  OPTION_EXCLUDE_SYMBOLS,
+  OPTION_EXCLUDE_ALL_SYMBOLS,
+  OPTION_KILL_ATS,
+  OPTION_STDCALL_ALIASES,
+  OPTION_ENABLE_STDCALL_FIXUP,
+  OPTION_DISABLE_STDCALL_FIXUP,
+  OPTION_THUMB_ENTRY,
+  OPTION_WARN_DUPLICATE_EXPORTS,
+  OPTION_IMP_COMPAT,
+  OPTION_ENABLE_AUTO_IMAGE_BASE,
+  OPTION_DISABLE_AUTO_IMAGE_BASE,
+  OPTION_DLL_SEARCH_PREFIX,
+  OPTION_NO_DEFAULT_EXCLUDES,
+  OPTION_DLL_ENABLE_AUTO_IMPORT,
+  OPTION_DLL_DISABLE_AUTO_IMPORT,
+  OPTION_ENABLE_EXTRA_PE_DEBUG,
+  OPTION_EXCLUDE_LIBS,
+  OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC,
+  OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC,
+  OPTION_LARGE_ADDRESS_AWARE,
+  OPTION_DISABLE_LARGE_ADDRESS_AWARE,
+  OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1,
+  OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2,
+  OPTION_EXCLUDE_MODULES_FOR_IMPLIB,
+  OPTION_USE_NUL_PREFIXED_IMPORT_TABLES,
+  OPTION_NO_LEADING_UNDERSCORE,
+  OPTION_LEADING_UNDERSCORE,
+  OPTION_ENABLE_LONG_SECTION_NAMES,
+  OPTION_DISABLE_LONG_SECTION_NAMES,
 /* DLLCharacteristics flags.  */
-#define OPTION_DYNAMIC_BASE            (OPTION_DISABLE_LONG_SECTION_NAMES + 1)
-#define OPTION_FORCE_INTEGRITY         (OPTION_DYNAMIC_BASE + 1)
-#define OPTION_NX_COMPAT               (OPTION_FORCE_INTEGRITY + 1)
-#define OPTION_NO_ISOLATION            (OPTION_NX_COMPAT + 1)
-#define OPTION_NO_SEH                  (OPTION_NO_ISOLATION + 1)
-#define OPTION_NO_BIND                 (OPTION_NO_SEH + 1)
-#define OPTION_WDM_DRIVER              (OPTION_NO_BIND + 1)
-#define OPTION_TERMINAL_SERVER_AWARE   (OPTION_WDM_DRIVER + 1)
+  OPTION_DYNAMIC_BASE,
+  OPTION_FORCE_INTEGRITY,
+  OPTION_NX_COMPAT,
+  OPTION_NO_ISOLATION,
+  OPTION_NO_SEH,
+  OPTION_NO_BIND,
+  OPTION_WDM_DRIVER,
+  OPTION_TERMINAL_SERVER_AWARE,
 /* Determinism.  */
-#define OPTION_INSERT_TIMESTAMP                (OPTION_TERMINAL_SERVER_AWARE + 1)
-#define OPTION_NO_INSERT_TIMESTAMP     (OPTION_INSERT_TIMESTAMP + 1)
-#define OPTION_BUILD_ID                        (OPTION_NO_INSERT_TIMESTAMP + 1)
-#define OPTION_PDB                     (OPTION_BUILD_ID + 1)
-#define OPTION_ENABLE_RELOC_SECTION    (OPTION_PDB + 1)
-#define OPTION_DISABLE_RELOC_SECTION   (OPTION_ENABLE_RELOC_SECTION + 1)
+  OPTION_INSERT_TIMESTAMP,
+  OPTION_NO_INSERT_TIMESTAMP,
+  OPTION_BUILD_ID,
+#ifdef PDB_H
+  OPTION_PDB,
+#endif
+  OPTION_ENABLE_RELOC_SECTION,
+  OPTION_DISABLE_RELOC_SECTION,
 /* DLL Characteristics flags.  */
-#define OPTION_DISABLE_DYNAMIC_BASE    (OPTION_DISABLE_RELOC_SECTION + 1)
-#define OPTION_DISABLE_FORCE_INTEGRITY (OPTION_DISABLE_DYNAMIC_BASE + 1)
-#define OPTION_DISABLE_NX_COMPAT       (OPTION_DISABLE_FORCE_INTEGRITY + 1)
-#define OPTION_DISABLE_NO_ISOLATION    (OPTION_DISABLE_NX_COMPAT + 1)
-#define OPTION_DISABLE_NO_SEH          (OPTION_DISABLE_NO_ISOLATION + 1)
-#define OPTION_DISABLE_NO_BIND         (OPTION_DISABLE_NO_SEH + 1)
-#define OPTION_DISABLE_WDM_DRIVER      (OPTION_DISABLE_NO_BIND + 1)
-#define OPTION_DISABLE_TERMINAL_SERVER_AWARE \
-                                       (OPTION_DISABLE_WDM_DRIVER + 1)
+  OPTION_DISABLE_DYNAMIC_BASE,
+  OPTION_DISABLE_FORCE_INTEGRITY,
+  OPTION_DISABLE_NX_COMPAT,
+  OPTION_DISABLE_NO_ISOLATION,
+  OPTION_DISABLE_NO_SEH,
+  OPTION_DISABLE_NO_BIND,
+  OPTION_DISABLE_WDM_DRIVER,
+  OPTION_DISABLE_TERMINAL_SERVER_AWARE
+};
 
 static void
 gld${EMULATION_NAME}_add_options
@@ -388,7 +392,9 @@ gld${EMULATION_NAME}_add_options
     {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
     {"disable-tsaware", no_argument, NULL, OPTION_DISABLE_TERMINAL_SERVER_AWARE},
     {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+#ifdef PDB_H
     {"pdb", required_argument, NULL, OPTION_PDB},
+#endif
     {"enable-reloc-section", no_argument, NULL, OPTION_ENABLE_RELOC_SECTION},
     {"disable-reloc-section", no_argument, NULL, OPTION_DISABLE_RELOC_SECTION},
     {NULL, no_argument, NULL, 0}
@@ -538,7 +544,9 @@ gld${EMULATION_NAME}_list_options (FILE *file)
   fprintf (file, _("  --[disable-]wdmdriver              Driver uses the WDM model\n"));
   fprintf (file, _("  --[disable-]tsaware                Image is Terminal Server aware\n"));
   fprintf (file, _("  --build-id[=STYLE]                 Generate build ID\n"));
+#ifdef PDB_H
   fprintf (file, _("  --pdb=[FILENAME]                   Generate PDB file\n"));
+#endif
 }
 
 /* A case insensitive comparison, regardless of the host platform, used for
@@ -979,11 +987,13 @@ gld${EMULATION_NAME}_handle_option (int optc)
       if (strcmp (optarg, "none"))
        emit_build_id = xstrdup (optarg);
       break;
+#ifdef PDB_H
     case OPTION_PDB:
       pdb = 1;
       if (optarg && optarg[0])
        pdb_name = xstrdup (optarg);
       break;
+#endif
     }
 
   /*  Set DLLCharacteristics bits  */
@@ -1106,8 +1116,10 @@ gld${EMULATION_NAME}_after_parse (void)
     einfo (_("%P: warning: --export-dynamic is not supported for PE "
       "targets, did you mean --export-all-symbols?\n"));
 
+#ifdef PDB_H
   if (pdb && emit_build_id == NULL)
     emit_build_id = xstrdup (DEFAULT_BUILD_ID_STYLE);
+#endif
 
   set_entry_point ();
 
@@ -1326,8 +1338,10 @@ write_build_id (bfd *abfd)
 
   bfd_vma ib = pe_data (link_info.output_bfd)->pe_opthdr.ImageBase;
 
+#ifdef PDB_H
   if (pdb_name)
     pdb_base_name = lbasename (pdb_name);
+#endif
 
   /* Construct a debug directory entry which points to an immediately following CodeView record.  */
   struct internal_IMAGE_DEBUG_DIRECTORY idd;
@@ -1336,7 +1350,11 @@ write_build_id (bfd *abfd)
   idd.MajorVersion = 0;
   idd.MinorVersion = 0;
   idd.Type = PE_IMAGE_DEBUG_TYPE_CODEVIEW;
-  idd.SizeOfData = sizeof (CV_INFO_PDB70) + (pdb_base_name ? strlen (pdb_base_name) : 0) + 1;
+  idd.SizeOfData = (sizeof (CV_INFO_PDB70)
+#ifdef PDB_H
+                   + (pdb_base_name ? strlen (pdb_base_name) : 0)
+#endif
+                   + 1);
   idd.AddressOfRawData = asec->vma - ib + link_order->offset
     + sizeof (struct external_IMAGE_DEBUG_DIRECTORY);
   idd.PointerToRawData = asec->filepos + link_order->offset
@@ -1352,11 +1370,13 @@ write_build_id (bfd *abfd)
   if (bfd_bwrite (contents, sizeof (*ext), abfd) != sizeof (*ext))
     return 0;
 
+#ifdef PDB_H
   if (pdb)
     {
       if (!create_pdb_file (abfd, pdb_name, build_id))
        return 0;
     }
+#endif
 
   /* Construct the CodeView record.  */
   CODEVIEW_INFO cvinfo;
@@ -1414,9 +1434,10 @@ setup_build_id (bfd *ibfd)
       s->size = sizeof (struct external_IMAGE_DEBUG_DIRECTORY)
        + sizeof (CV_INFO_PDB70) + 1;
 
+#ifdef PDB_H
       if (pdb_name)
        s->size += strlen (lbasename (pdb_name));
-
+#endif
       return true;
     }
 
@@ -1447,6 +1468,7 @@ gld${EMULATION_NAME}_after_open (void)
     }
 #endif
 
+#ifdef PDB_H
   if (pdb && !pdb_name)
     {
       const char *base = lbasename (bfd_get_filename (link_info.output_bfd));
@@ -1465,6 +1487,7 @@ gld${EMULATION_NAME}_after_open (void)
       memcpy (pdb_name, base, len);
       memcpy (pdb_name + len, suffix, sizeof (suffix));
     }
+#endif
 
   if (emit_build_id != NULL)
     {
index e61414893ada7d9a83ecad021c55b60fbb681289..7b2a656c8ab0aacb69df04093326dc12d8f975aa 100644 (file)
@@ -17,6 +17,13 @@ case ${target} in
     ;;
 esac
 
+case ${target} in
+  x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin | \
+  i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
+    pdb_support=" ";;
+  *)
+esac
+
 rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF
@@ -73,7 +80,7 @@ fragment <<EOF
 #include "ldctor.h"
 #include "ldbuildid.h"
 #include "coff/internal.h"
-#include "pdb.h"
+${pdb_support+#include \"pdb.h\"}
 
 /* FIXME: See bfd/peXXigen.c for why we include an architecture specific
    header in generic PE code.  */
@@ -166,8 +173,10 @@ static lang_assignment_statement_type *image_base_statement = 0;
 static unsigned short pe_dll_characteristics = DEFAULT_DLL_CHARACTERISTICS;
 static bool insert_timestamp = true;
 static const char *emit_build_id;
+#ifdef PDB_H
 static int pdb;
 static char *pdb_name;
+#endif
 
 #ifdef DLL_SUPPORT
 static int    pep_enable_stdcall_fixup = 1; /* 0=disable 1=enable (default).  */
@@ -284,7 +293,9 @@ enum options
   OPTION_NO_INSERT_TIMESTAMP,
   OPTION_TERMINAL_SERVER_AWARE,
   OPTION_BUILD_ID,
+#ifdef PDB_H
   OPTION_PDB,
+#endif
   OPTION_ENABLE_RELOC_SECTION,
   OPTION_DISABLE_RELOC_SECTION,
   OPTION_DISABLE_HIGH_ENTROPY_VA,
@@ -373,7 +384,9 @@ gld${EMULATION_NAME}_add_options
     {"insert-timestamp", no_argument, NULL, OPTION_INSERT_TIMESTAMP},
     {"no-insert-timestamp", no_argument, NULL, OPTION_NO_INSERT_TIMESTAMP},
     {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+#ifdef PDB_H
     {"pdb", required_argument, NULL, OPTION_PDB},
+#endif
     {"enable-reloc-section", no_argument, NULL, OPTION_ENABLE_RELOC_SECTION},
     {"disable-reloc-section", no_argument, NULL, OPTION_DISABLE_RELOC_SECTION},
     {"disable-high-entropy-va", no_argument, NULL, OPTION_DISABLE_HIGH_ENTROPY_VA},
@@ -521,8 +534,10 @@ gld${EMULATION_NAME}_list_options (FILE *file)
   fprintf (file, _("  --[disable-]wdmdriver              Driver uses the WDM model\n"));
   fprintf (file, _("  --[disable-]tsaware                Image is Terminal Server aware\n"));
   fprintf (file, _("  --build-id[=STYLE]                 Generate build ID\n"));
+#ifdef PDB_H
   fprintf (file, _("  --pdb=[FILENAME]                   Generate PDB file\n"));
 #endif
+#endif
 }
 
 
@@ -930,11 +945,13 @@ gld${EMULATION_NAME}_handle_option (int optc)
       if (strcmp (optarg, "none"))
        emit_build_id = xstrdup (optarg);
       break;
+#ifdef PDB_H
     case OPTION_PDB:
       pdb = 1;
       if (optarg && optarg[0])
        pdb_name = xstrdup (optarg);
       break;
+#endif
     }
 
   /*  Set DLLCharacteristics bits  */
@@ -1057,8 +1074,10 @@ gld${EMULATION_NAME}_after_parse (void)
     einfo (_("%P: warning: --export-dynamic is not supported for PE+ "
       "targets, did you mean --export-all-symbols?\n"));
 
+#ifdef PDB_H
   if (pdb && emit_build_id == NULL)
     emit_build_id = xstrdup (DEFAULT_BUILD_ID_STYLE);
+#endif
 
   set_entry_point ();
 
@@ -1318,8 +1337,10 @@ write_build_id (bfd *abfd)
 
   bfd_vma ib = pe_data (link_info.output_bfd)->pe_opthdr.ImageBase;
 
+#ifdef PDB_H
   if (pdb_name)
     pdb_base_name = lbasename (pdb_name);
+#endif
 
   /* Construct a debug directory entry which points to an immediately following CodeView record.  */
   struct internal_IMAGE_DEBUG_DIRECTORY idd;
@@ -1328,7 +1349,11 @@ write_build_id (bfd *abfd)
   idd.MajorVersion = 0;
   idd.MinorVersion = 0;
   idd.Type = PE_IMAGE_DEBUG_TYPE_CODEVIEW;
-  idd.SizeOfData = sizeof (CV_INFO_PDB70) + (pdb_base_name ? strlen (pdb_base_name) : 0) + 1;
+  idd.SizeOfData = (sizeof (CV_INFO_PDB70)
+#ifdef PDB_H
+                   + (pdb_base_name ? strlen (pdb_base_name) : 0)
+#endif
+                   + 1);
   idd.AddressOfRawData = asec->vma - ib + link_order->offset
     + sizeof (struct external_IMAGE_DEBUG_DIRECTORY);
   idd.PointerToRawData = asec->filepos + link_order->offset
@@ -1344,11 +1369,13 @@ write_build_id (bfd *abfd)
   if (bfd_bwrite (contents, sizeof (*ext), abfd) != sizeof (*ext))
     return 0;
 
+#ifdef PDB_H
   if (pdb)
     {
       if (!create_pdb_file (abfd, pdb_name, build_id))
        return 0;
     }
+#endif
 
   /* Construct the CodeView record.  */
   CODEVIEW_INFO cvinfo;
@@ -1403,12 +1430,13 @@ setup_build_id (bfd *ibfd)
         One IMAGE_DEBUG_DIRECTORY entry, of type IMAGE_DEBUG_TYPE_CODEVIEW,
         pointing at a CV_INFO_PDB70 record containing the build-id, followed by
         PdbFileName if relevant.  */
-      s->size = sizeof (struct external_IMAGE_DEBUG_DIRECTORY)
-       + sizeof (CV_INFO_PDB70) + 1;
+      s->size = (sizeof (struct external_IMAGE_DEBUG_DIRECTORY)
+                + sizeof (CV_INFO_PDB70) + 1);
 
+#ifdef PDB_H
       if (pdb_name)
        s->size += strlen (lbasename (pdb_name));
-
+#endif
       return true;
     }
 
@@ -1440,6 +1468,7 @@ gld${EMULATION_NAME}_after_open (void)
     }
 #endif
 
+#ifdef PDB_H
   if (pdb && !pdb_name)
     {
       const char *base = lbasename (bfd_get_filename (link_info.output_bfd));
@@ -1458,6 +1487,7 @@ gld${EMULATION_NAME}_after_open (void)
       memcpy (pdb_name, base, len);
       memcpy (pdb_name + len, suffix, sizeof (suffix));
     }
+#endif
 
   if (emit_build_id != NULL)
     {