[BACK]Return to pe.em CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils.old / dist / ld / emultempl

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/external/gpl3/binutils.old/dist/ld/emultempl/pe.em between version 1.5 and 1.5.2.1

version 1.5, 2018/04/14 17:52:55 version 1.5.2.1, 2020/04/08 14:05:53
Line 8  fi
Line 8  fi
 rm -f e${EMULATION_NAME}.c  rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)  (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF  fragment <<EOF
 /* Copyright (C) 1995-2016 Free Software Foundation, Inc.  /* Copyright (C) 1995-2018 Free Software Foundation, Inc.
   
    This file is part of the GNU Binutils.     This file is part of the GNU Binutils.
   
Line 40  fragment <<EOF
Line 40  fragment <<EOF
 /* Do this before including bfd.h, so we prototype the right functions.  */  /* Do this before including bfd.h, so we prototype the right functions.  */
   
 #if defined(TARGET_IS_armpe) \  #if defined(TARGET_IS_armpe) \
     || defined(TARGET_IS_arm_epoc_pe) \  
     || defined(TARGET_IS_arm_wince_pe)      || defined(TARGET_IS_arm_wince_pe)
 #define bfd_arm_allocate_interworking_sections \  #define bfd_arm_allocate_interworking_sections \
         bfd_${EMULATION_NAME}_allocate_interworking_sections          bfd_${EMULATION_NAME}_allocate_interworking_sections
Line 95  fragment <<EOF
Line 94  fragment <<EOF
 #if defined(TARGET_IS_i386pe) \  #if defined(TARGET_IS_i386pe) \
     || defined(TARGET_IS_shpe) \      || defined(TARGET_IS_shpe) \
     || defined(TARGET_IS_armpe) \      || defined(TARGET_IS_armpe) \
     || defined(TARGET_IS_arm_epoc_pe) \  
     || defined(TARGET_IS_arm_wince_pe)      || defined(TARGET_IS_arm_wince_pe)
 #define DLL_SUPPORT  #define DLL_SUPPORT
 #endif  #endif
Line 138  static const char *emit_build_id;
Line 136  static const char *emit_build_id;
 #ifdef DLL_SUPPORT  #ifdef DLL_SUPPORT
 static int pe_enable_stdcall_fixup = -1; /* 0=disable 1=enable.  */  static int pe_enable_stdcall_fixup = -1; /* 0=disable 1=enable.  */
 static char *pe_out_def_filename = NULL;  static char *pe_out_def_filename = NULL;
 static char *pe_implib_filename = NULL;  
 static int pe_enable_auto_image_base = 0;  static int pe_enable_auto_image_base = 0;
 static unsigned long pe_auto_image_base = 0x61500000;  static unsigned long pe_auto_image_base = 0x61500000;
 static char *pe_dll_search_prefix = NULL;  static char *pe_dll_search_prefix = NULL;
Line 228  fragment <<EOF
Line 225  fragment <<EOF
 #define OPTION_STDCALL_ALIASES          (OPTION_KILL_ATS + 1)  #define OPTION_STDCALL_ALIASES          (OPTION_KILL_ATS + 1)
 #define OPTION_ENABLE_STDCALL_FIXUP     (OPTION_STDCALL_ALIASES + 1)  #define OPTION_ENABLE_STDCALL_FIXUP     (OPTION_STDCALL_ALIASES + 1)
 #define OPTION_DISABLE_STDCALL_FIXUP    (OPTION_ENABLE_STDCALL_FIXUP + 1)  #define OPTION_DISABLE_STDCALL_FIXUP    (OPTION_ENABLE_STDCALL_FIXUP + 1)
 #define OPTION_IMPLIB_FILENAME          (OPTION_DISABLE_STDCALL_FIXUP + 1)  #define OPTION_THUMB_ENTRY              (OPTION_DISABLE_STDCALL_FIXUP + 1)
 #define OPTION_THUMB_ENTRY              (OPTION_IMPLIB_FILENAME + 1)  
 #define OPTION_WARN_DUPLICATE_EXPORTS   (OPTION_THUMB_ENTRY + 1)  #define OPTION_WARN_DUPLICATE_EXPORTS   (OPTION_THUMB_ENTRY + 1)
 #define OPTION_IMP_COMPAT               (OPTION_WARN_DUPLICATE_EXPORTS + 1)  #define OPTION_IMP_COMPAT               (OPTION_WARN_DUPLICATE_EXPORTS + 1)
 #define OPTION_ENABLE_AUTO_IMAGE_BASE   (OPTION_IMP_COMPAT + 1)  #define OPTION_ENABLE_AUTO_IMAGE_BASE   (OPTION_IMP_COMPAT + 1)
Line 244  fragment <<EOF
Line 240  fragment <<EOF
                                         (OPTION_EXCLUDE_LIBS + 1)                                          (OPTION_EXCLUDE_LIBS + 1)
 #define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC \  #define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC \
                                         (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)                                          (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
 #define OPTION_LARGE_ADDRESS_AWARE      (OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)  #define OPTION_LARGE_ADDRESS_AWARE      (OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
 #define OPTION_DISABLE_LARGE_ADDRESS_AWARE \  #define OPTION_DISABLE_LARGE_ADDRESS_AWARE \
                                         (OPTION_LARGE_ADDRESS_AWARE + 1)                                          (OPTION_LARGE_ADDRESS_AWARE + 1)
 #define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1       \  #define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1       \
                                         (OPTION_DISABLE_LARGE_ADDRESS_AWARE + 1)                                          (OPTION_DISABLE_LARGE_ADDRESS_AWARE + 1)
 #define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2       \  #define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2       \
Line 255  fragment <<EOF
Line 251  fragment <<EOF
                                         (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1)                                          (OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1)
 #define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \  #define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \
                                         (OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1)                                          (OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1)
 #define OPTION_NO_LEADING_UNDERSCORE    (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)  #define OPTION_NO_LEADING_UNDERSCORE    (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)
 #define OPTION_LEADING_UNDERSCORE       (OPTION_NO_LEADING_UNDERSCORE + 1)  #define OPTION_LEADING_UNDERSCORE       (OPTION_NO_LEADING_UNDERSCORE + 1)
 #define OPTION_ENABLE_LONG_SECTION_NAMES \  #define OPTION_ENABLE_LONG_SECTION_NAMES \
                                         (OPTION_LEADING_UNDERSCORE + 1)                                          (OPTION_LEADING_UNDERSCORE + 1)
 #define OPTION_DISABLE_LONG_SECTION_NAMES \  #define OPTION_DISABLE_LONG_SECTION_NAMES \
Line 323  gld${EMULATION_NAME}_add_options
Line 319  gld${EMULATION_NAME}_add_options
     {"add-stdcall-alias", no_argument, NULL, OPTION_STDCALL_ALIASES},      {"add-stdcall-alias", no_argument, NULL, OPTION_STDCALL_ALIASES},
     {"enable-stdcall-fixup", no_argument, NULL, OPTION_ENABLE_STDCALL_FIXUP},      {"enable-stdcall-fixup", no_argument, NULL, OPTION_ENABLE_STDCALL_FIXUP},
     {"disable-stdcall-fixup", no_argument, NULL, OPTION_DISABLE_STDCALL_FIXUP},      {"disable-stdcall-fixup", no_argument, NULL, OPTION_DISABLE_STDCALL_FIXUP},
     {"out-implib", required_argument, NULL, OPTION_IMPLIB_FILENAME},  
     {"warn-duplicate-exports", no_argument, NULL, OPTION_WARN_DUPLICATE_EXPORTS},      {"warn-duplicate-exports", no_argument, NULL, OPTION_WARN_DUPLICATE_EXPORTS},
     /* getopt() allows abbreviations, so we do this to stop it from      /* getopt() allows abbreviations, so we do this to stop it from
        treating -c as an abbreviation for these --compat-implib.  */         treating -c as an abbreviation for these --compat-implib.  */
Line 382  typedef struct
Line 377  typedef struct
    underscore.  */     underscore.  */
 #define GET_INIT_SYMBOL_NAME(IDX) \  #define GET_INIT_SYMBOL_NAME(IDX) \
   (init[(IDX)].symbol \    (init[(IDX)].symbol \
   + ((init[(IDX)].is_c_symbol == FALSE || (is_underscoring () != 0)) ? 0 : 1))     + ((!init[(IDX)].is_c_symbol || is_underscoring () != 0) ? 0 : 1))
   
 /* Decorates the C visible symbol by underscore, if target requires.  */  /* Decorates the C visible symbol by underscore, if target requires.  */
 #define U(CSTR) \  #define U(CSTR) \
   ((is_underscoring () == 0) ? CSTR : "_" CSTR)    ((is_underscoring () == 0) ? CSTR : "_" CSTR)
   
 /* Get size of constant string for a possible underscore prefixed  
    C visible symbol.  */  
 #define U_SIZE(CSTR) \  
   (sizeof (CSTR) + (is_underscoring () == 0 ? 0 : 1))  
   
 #define D(field,symbol,def,usc)  {&pe.field, sizeof (pe.field), def, symbol, 0, usc}  #define D(field,symbol,def,usc)  {&pe.field, sizeof (pe.field), def, symbol, 0, usc}
   
 static definfo init[] =  static definfo init[] =
Line 461  gld_${EMULATION_NAME}_list_options (FILE
Line 451  gld_${EMULATION_NAME}_list_options (FILE
   fprintf (file, _("                                     export, place into import library instead.\n"));    fprintf (file, _("                                     export, place into import library instead.\n"));
   fprintf (file, _("  --export-all-symbols               Automatically export all globals to DLL\n"));    fprintf (file, _("  --export-all-symbols               Automatically export all globals to DLL\n"));
   fprintf (file, _("  --kill-at                          Remove @nn from exported symbols\n"));    fprintf (file, _("  --kill-at                          Remove @nn from exported symbols\n"));
   fprintf (file, _("  --out-implib <file>                Generate import library\n"));  
   fprintf (file, _("  --output-def <file>                Generate a .DEF file for the built DLL\n"));    fprintf (file, _("  --output-def <file>                Generate a .DEF file for the built DLL\n"));
   fprintf (file, _("  --warn-duplicate-exports           Warn about duplicate exports\n"));    fprintf (file, _("  --warn-duplicate-exports           Warn about duplicate exports\n"));
   fprintf (file, _("  --compat-implib                    Create backward compatible import libs;\n\    fprintf (file, _("  --compat-implib                    Create backward compatible import libs;\n\
Line 492  gld_${EMULATION_NAME}_list_options (FILE
Line 481  gld_${EMULATION_NAME}_list_options (FILE
                                        executable image files\n"));                                         executable image files\n"));
   fprintf (file, _("  --disable-long-section-names       Never use long COFF section names, even\n\    fprintf (file, _("  --disable-long-section-names       Never use long COFF section names, even\n\
                                        in object files\n"));                                         in object files\n"));
   fprintf (file, _("  --dynamicbase                      Image base address may be relocated using\n\    fprintf (file, _("  --dynamicbase                      Image base address may be relocated using\n\
                                        address space layout randomization (ASLR)\n"));                                         address space layout randomization (ASLR)\n"));
   fprintf (file, _("  --forceinteg               Code integrity checks are enforced\n"));    fprintf (file, _("  --forceinteg               Code integrity checks are enforced\n"));
   fprintf (file, _("  --nxcompat                 Image is compatible with data execution prevention\n"));    fprintf (file, _("  --nxcompat                 Image is compatible with data execution prevention\n"));
   fprintf (file, _("  --no-isolation             Image understands isolation but do not isolate the image\n"));    fprintf (file, _("  --no-isolation             Image understands isolation but do not isolate the image\n"));
   fprintf (file, _("  --no-seh                   Image does not use SEH. No SE handler may\n\    fprintf (file, _("  --no-seh                   Image does not use SEH. No SE handler may\n\
                                        be called in this image\n"));                                         be called in this image\n"));
   fprintf (file, _("  --no-bind                  Do not bind this image\n"));    fprintf (file, _("  --no-bind                  Do not bind this image\n"));
   fprintf (file, _("  --wdmdriver                Driver uses the WDM model\n"));    fprintf (file, _("  --wdmdriver                Driver uses the WDM model\n"));
   fprintf (file, _("  --tsaware                  Image is Terminal Server aware\n"));    fprintf (file, _("  --tsaware                  Image is Terminal Server aware\n"));
   fprintf (file, _("  --build-id[=STYLE]         Generate build ID\n"));    fprintf (file, _("  --build-id[=STYLE]         Generate build ID\n"));
 }  }
Line 535  set_entry_point (void)
Line 524  set_entry_point (void)
   int i;    int i;
   
   static const struct    static const struct
     {    {
       const int value;      const int value;
       const char *entry;      const char *entry;
     }    }
   v[] =    v[] =
     {      {
       { 1, "NtProcessStartup"  },        { 1, "NtProcessStartup"  },
Line 564  set_entry_point (void)
Line 553  set_entry_point (void)
   else    else
     {      {
       for (i = 0; v[i].entry; i++)        for (i = 0; v[i].entry; i++)
         if (v[i].value == pe_subsystem)          if (v[i].value == pe_subsystem)
           break;            break;
   
       /* If no match, use the default.  */        /* If no match, use the default.  */
       if (v[i].entry != NULL)        if (v[i].entry != NULL)
         entry = v[i].entry;          entry = v[i].entry;
       else        else
         entry = default_entry;          entry = default_entry;
     }      }
   
   initial_symbol_char = (is_underscoring () != 0 ? "_" : "");    initial_symbol_char = (is_underscoring () != 0 ? "_" : "");
Line 655  set_pe_subsystem (void)
Line 644  set_pe_subsystem (void)
   
       if (v[i].name == NULL)        if (v[i].name == NULL)
         {          {
           einfo (_("%P%F: invalid subsystem type %s\n"), optarg);            einfo (_("%F%P: invalid subsystem type %s\n"), optarg);
           return;            return;
         }          }
   
Line 676  set_pe_value (char *name)
Line 665  set_pe_value (char *name)
   set_pe_name (name,  strtoul (optarg, &end, 0));    set_pe_name (name,  strtoul (optarg, &end, 0));
   
   if (end == optarg)    if (end == optarg)
     einfo (_("%P%F: invalid hex number for PE parameter '%s'\n"), optarg);      einfo (_("%F%P: invalid hex number for PE parameter '%s'\n"), optarg);
   
   optarg = end;    optarg = end;
 }  }
Line 693  set_pe_stack_heap (char *resname, char *
Line 682  set_pe_stack_heap (char *resname, char *
       set_pe_value (comname);        set_pe_value (comname);
     }      }
   else if (*optarg)    else if (*optarg)
     einfo (_("%P%F: strange hex info for PE parameter '%s'\n"), optarg);      einfo (_("%F%P: strange hex info for PE parameter '%s'\n"), optarg);
 }  }
   
 #define DEFAULT_BUILD_ID_STYLE  "md5"  #define DEFAULT_BUILD_ID_STYLE  "md5"
Line 804  gld${EMULATION_NAME}_handle_option (int 
Line 793  gld${EMULATION_NAME}_handle_option (int 
     case OPTION_DISABLE_STDCALL_FIXUP:      case OPTION_DISABLE_STDCALL_FIXUP:
       pe_enable_stdcall_fixup = 0;        pe_enable_stdcall_fixup = 0;
       break;        break;
     case OPTION_IMPLIB_FILENAME:  
       pe_implib_filename = xstrdup (optarg);  
       break;  
     case OPTION_WARN_DUPLICATE_EXPORTS:      case OPTION_WARN_DUPLICATE_EXPORTS:
       pe_dll_warn_dup_exports = 1;        pe_dll_warn_dup_exports = 1;
       break;        break;
Line 1008  gld_${EMULATION_NAME}_set_symbols (void)
Line 994  gld_${EMULATION_NAME}_set_symbols (void)
   
   if (pe.FileAlignment > pe.SectionAlignment)    if (pe.FileAlignment > pe.SectionAlignment)
     {      {
       einfo (_("%P: warning, file alignment > section alignment.\n"));        einfo (_("%P: warning, file alignment > section alignment\n"));
     }      }
 }  }
   
Line 1029  gld_${EMULATION_NAME}_after_parse (void)
Line 1015  gld_${EMULATION_NAME}_after_parse (void)
   after_parse_default ();    after_parse_default ();
 }  }
   
 /* pe-dll.c directly accesses pe_data_import_dll,  
    so it must be defined outside of #ifdef DLL_SUPPORT.  
    Note - this variable is deliberately not initialised.  
    This allows it to be treated as a common varaible, and only  
    exist in one incarnation in a multiple target enabled linker.  */  
 char * pe_data_import_dll;  
   
 #ifdef DLL_SUPPORT  #ifdef DLL_SUPPORT
 static struct bfd_link_hash_entry *pe_undef_found_sym;  static struct bfd_link_hash_entry *pe_undef_found_sym;
   
Line 1073  change_undef (struct bfd_link_hash_entry
Line 1052  change_undef (struct bfd_link_hash_entry
   
   if (pe_enable_stdcall_fixup == -1)    if (pe_enable_stdcall_fixup == -1)
     {      {
       einfo (_("Warning: resolving %s by linking to %s\n"),        einfo (_("%P: warning: resolving %s by linking to %s\n"),
              undef->root.string, sym->root.string);               undef->root.string, sym->root.string);
   
       if (! gave_warning_message)        if (! gave_warning_message)
Line 1116  pe_fixup_stdcalls (void)
Line 1095  pe_fixup_stdcalls (void)
   
             if (lead_at)              if (lead_at)
               *cname = '_';                *cname = '_';
             if (at)              if (at)
               * strchr (cname, '@') = 0;                * strchr (cname, '@') = 0;
             sym = bfd_link_hash_lookup (link_info.hash, cname, FALSE, FALSE, TRUE);              sym = bfd_link_hash_lookup (link_info.hash, cname, FALSE, FALSE, TRUE);
   
Line 1136  pe_fixup_stdcalls (void)
Line 1115  pe_fixup_stdcalls (void)
       }        }
 }  }
   
 static int  static void
 make_import_fixup (arelent *rel, asection *s)  make_import_fixup (arelent *rel, asection *s, char *name, const char *symname)
 {  {
   struct bfd_symbol *sym = *rel->sym_ptr_ptr;    struct bfd_symbol *sym = *rel->sym_ptr_ptr;
   char addend[4];    char addend[4];
     bfd_vma _addend;
   
   if (pe_dll_extra_pe_debug)    if (pe_dll_extra_pe_debug)
     printf ("arelent: %s@%#lx: add=%li\n", sym->name,      printf ("arelent: %s@%#lx: add=%li\n", sym->name,
             (unsigned long) rel->address, (long) rel->addend);              (unsigned long) rel->address, (long) rel->addend);
   
   if (! bfd_get_section_contents (s->owner, s, addend, rel->address, sizeof (addend)))    if (! bfd_get_section_contents (s->owner, s, addend, rel->address, sizeof (addend)))
     einfo (_("%C: Cannot get section contents - auto-import exception\n"),      einfo (_("%P: %C: cannot get section contents - auto-import exception\n"),
            s->owner, s, rel->address);             s->owner, s, rel->address);
   
   pe_create_import_fixup (rel, s, bfd_get_32 (s->owner, addend));    _addend = bfd_get_32 (s->owner, addend);
     pe_create_import_fixup (rel, s, _addend, name, symname);
   return 1;  
 }  
   
 static void  
 pe_find_data_imports (void)  
 {  
   struct bfd_link_hash_entry *undef, *sym;  
   
   if (link_info.pei386_auto_import == 0)  
     return;  
   
   for (undef = link_info.hash->undefs; undef; undef=undef->u.undef.next)  
     {  
       if (undef->type == bfd_link_hash_undefined)  
         {  
           /* C++ symbols are *long*.  */  
 #define BUF_SIZE 4096  
           char buf[BUF_SIZE];  
   
           if (pe_dll_extra_pe_debug)  
             printf ("%s:%s\n", __FUNCTION__, undef->root.string);  
   
           if (strlen (undef->root.string) > (BUF_SIZE - 6))  
             {  
               /* PR linker/18466.  */  
               einfo (_("%P: internal error: symbol too long: %s\n"),  
                      undef->root.string);  
               return;  
             }  
   
           sprintf (buf, "__imp_%s", undef->root.string);  
   
           sym = bfd_link_hash_lookup (link_info.hash, buf, 0, 0, 1);  
   
           if (sym && sym->type == bfd_link_hash_defined)  
             {  
               bfd *b = sym->u.def.section->owner;  
               asymbol **symbols;  
               int nsyms, i;  
   
               if (link_info.pei386_auto_import == -1)  
                 {  
                   static bfd_boolean warned = FALSE;  
   
                   info_msg (_("Info: resolving %s by linking to %s (auto-import)\n"),  
                             undef->root.string, buf);  
   
                   /* PR linker/4844.  */  
                   if (! warned)  
                     {  
                       warned = TRUE;  
                       einfo (_("%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line.\n\  
 This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.\n"));  
                     }  
                 }  
   
               if (!bfd_generic_link_read_symbols (b))  
                 {  
                   einfo (_("%B%F: could not read symbols: %E\n"), b);  
                   return;  
                 }  
   
               symbols = bfd_get_outsymbols (b);  
               nsyms = bfd_get_symcount (b);  
   
               for (i = 0; i < nsyms; i++)  
                 {  
                   if (! CONST_STRNEQ (symbols[i]->name,  
                                       U ("_head_")))  
                     continue;  
   
                   if (pe_dll_extra_pe_debug)  
                     printf ("->%s\n", symbols[i]->name);  
   
                   pe_data_import_dll = (char *) (symbols[i]->name  
                                                  + U_SIZE ("_head_") - 1);  
                   break;  
                 }  
   
               pe_walk_relocs_of_symbol (&link_info, undef->root.string,  
                                         make_import_fixup);  
   
               /* Let's differentiate it somehow from defined.  */  
               undef->type = bfd_link_hash_defweak;  
               /* We replace original name with __imp_ prefixed, this  
                  1) may trash memory 2) leads to duplicate symbol generation.  
                  Still, IMHO it's better than having name poluted.  */  
               undef->root.string = sym->root.string;  
               undef->u.def.value = sym->u.def.value;  
               undef->u.def.section = sym->u.def.section;  
             }  
         }  
     }  
 }  }
   
 static bfd_boolean  static bfd_boolean
Line 1281  pecoff_checksum_contents (bfd *abfd,
Line 1168  pecoff_checksum_contents (bfd *abfd,
   
       status = bfd_bread (&b, (bfd_size_type) 1, abfd);        status = bfd_bread (&b, (bfd_size_type) 1, abfd);
       if (status < 1)        if (status < 1)
         {          {
           break;            break;
         }          }
   
       (*process) (&b, 1, arg);        (*process) (&b, 1, arg);
       filepos += 1;        filepos += 1;
Line 1308  write_build_id (bfd *abfd)
Line 1195  write_build_id (bfd *abfd)
     {      {
       struct bfd_link_order *l = NULL;        struct bfd_link_order *l = NULL;
       for (l = asec->map_head.link_order; l != NULL; l = l->next)        for (l = asec->map_head.link_order; l != NULL; l = l->next)
         {          {
           if (l->type == bfd_indirect_link_order)            if (l->type == bfd_indirect_link_order)
             {              {
               if (l->u.indirect.section == t->build_id.sec)                if (l->u.indirect.section == t->build_id.sec)
                 {                  {
                   link_order = l;                    link_order = l;
                   break;                    break;
                 }                  }
             }              }
         }          }
   
       if (link_order)        if (link_order)
         break;          break;
     }      }
   
   if (!link_order)    if (!link_order)
     {      {
       einfo (_("%P: warning: .buildid section discarded,"        einfo (_("%P: warning: .buildid section discarded,"
                " --build-id ignored.\n"));                 " --build-id ignored\n"));
       return TRUE;        return TRUE;
     }      }
   
Line 1398  setup_build_id (bfd *ibfd)
Line 1285  setup_build_id (bfd *ibfd)
   
   if (!validate_build_id_style (emit_build_id))    if (!validate_build_id_style (emit_build_id))
     {      {
       einfo ("%P: warning: unrecognized --build-id style ignored.\n");        einfo (_("%P: warning: unrecognized --build-id style ignored\n"));
       return FALSE;        return FALSE;
     }      }
   
Line 1422  setup_build_id (bfd *ibfd)
Line 1309  setup_build_id (bfd *ibfd)
       return TRUE;        return TRUE;
     }      }
   
   einfo ("%P: warning: Cannot create .buildid section,"    einfo (_("%P: warning: cannot create .buildid section,"
          " --build-id ignored.\n");             " --build-id ignored\n"));
   return FALSE;    return FALSE;
 }  }
   
Line 1475  gld_${EMULATION_NAME}_after_open (void)
Line 1362  gld_${EMULATION_NAME}_after_open (void)
   
   if (coff_data (link_info.output_bfd) == NULL    if (coff_data (link_info.output_bfd) == NULL
       || coff_data (link_info.output_bfd)->pe == 0)        || coff_data (link_info.output_bfd)->pe == 0)
     einfo (_("%F%P: cannot perform PE operations on non PE output file '%B'.\n"),      einfo (_("%F%P: cannot perform PE operations on non PE output file '%pB'\n"),
            link_info.output_bfd);             link_info.output_bfd);
   
   pe_data (link_info.output_bfd)->pe_opthdr = pe;    pe_data (link_info.output_bfd)->pe_opthdr = pe;
Line 1514  gld_${EMULATION_NAME}_after_open (void)
Line 1401  gld_${EMULATION_NAME}_after_open (void)
   pe_output_file_set_long_section_names (link_info.output_bfd);    pe_output_file_set_long_section_names (link_info.output_bfd);
   
 #ifdef DLL_SUPPORT  #ifdef DLL_SUPPORT
   if (pe_enable_stdcall_fixup) /* -1=warn or 1=disable */  
     pe_fixup_stdcalls ();  
   
   pe_process_import_defs (link_info.output_bfd, &link_info);    pe_process_import_defs (link_info.output_bfd, &link_info);
   
   pe_find_data_imports ();    if (link_info.pei386_auto_import) /* -1=warn or 1=enable */
       pe_find_data_imports (U ("_head_"), make_import_fixup);
   
   /* As possibly new symbols are added by imports, we rerun    /* The implementation of the feature is rather dumb and would cause the
      stdcall/fastcall fixup here.  */       compilation time to go through the roof if there are many undefined
   if (pe_enable_stdcall_fixup) /* -1=warn or 1=disable */       symbols in the link, so it needs to be run after auto-import.  */
     if (pe_enable_stdcall_fixup) /* -1=warn or 1=enable */
     pe_fixup_stdcalls ();      pe_fixup_stdcalls ();
   
 #if defined (TARGET_IS_i386pe) \  #if defined (TARGET_IS_i386pe) \
     || defined (TARGET_IS_armpe) \      || defined (TARGET_IS_armpe) \
     || defined (TARGET_IS_arm_epoc_pe) \  
     || defined (TARGET_IS_arm_wince_pe)      || defined (TARGET_IS_arm_wince_pe)
   if (!bfd_link_relocatable (&link_info))    if (!bfd_link_relocatable (&link_info))
     pe_dll_build_sections (link_info.output_bfd, &link_info);      pe_dll_build_sections (link_info.output_bfd, &link_info);
Line 1540  gld_${EMULATION_NAME}_after_open (void)
Line 1425  gld_${EMULATION_NAME}_after_open (void)
 #endif  #endif
 #endif /* DLL_SUPPORT */  #endif /* DLL_SUPPORT */
   
 #if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)  #if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
   if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)    if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)
     {      {
       /* The arm backend needs special fields in the output hash structure.        /* The arm backend needs special fields in the output hash structure.
          These will only be created if the output format is an arm format,           These will only be created if the output format is an arm format,
          hence we do not support linking and changing output formats at the           hence we do not support linking and changing output formats at the
          same time.  Use a link followed by objcopy to change output formats.  */           same time.  Use a link followed by objcopy to change output formats.  */
       einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");        einfo (_("%F%P: error: cannot change output format "
                  "whilst linking %s binaries\n"), "ARM");
       return;        return;
     }      }
   {    {
Line 1606  gld_${EMULATION_NAME}_after_open (void)
Line 1492  gld_${EMULATION_NAME}_after_open (void)
   
                     if (!bfd_generic_link_read_symbols (is->the_bfd))                      if (!bfd_generic_link_read_symbols (is->the_bfd))
                       {                        {
                         einfo (_("%B%F: could not read symbols: %E\n"),                          einfo (_("%F%P: %pB: could not read symbols: %E\n"),
                                is->the_bfd);                                 is->the_bfd);
                         return;                          return;
                       }                        }
Line 1618  gld_${EMULATION_NAME}_after_open (void)
Line 1504  gld_${EMULATION_NAME}_after_open (void)
                     if (nrelocs < 0)                      if (nrelocs < 0)
                       {                        {
                         free (relocs);                          free (relocs);
                         einfo ("%X%P: unable to process relocs: %E\n");                          einfo (_("%X%P: unable to process relocs: %E\n"));
                         return;                          return;
                       }                        }
   
Line 1813  gld_${EMULATION_NAME}_after_open (void)
Line 1699  gld_${EMULATION_NAME}_after_open (void)
   
                 if (!bfd_generic_link_read_symbols (is->the_bfd))                  if (!bfd_generic_link_read_symbols (is->the_bfd))
                   {                    {
                     einfo (_("%B%F: could not read symbols: %E\n"),                      einfo (_("%F%P: %pB: could not read symbols: %E\n"),
                            is->the_bfd);                             is->the_bfd);
                     return;                      return;
                   }                    }
Line 1856  gld_${EMULATION_NAME}_before_allocation 
Line 1742  gld_${EMULATION_NAME}_before_allocation 
         if (!ppc_process_before_allocation (is->the_bfd, &link_info))          if (!ppc_process_before_allocation (is->the_bfd, &link_info))
           {            {
             /* xgettext:c-format */              /* xgettext:c-format */
             einfo (_("Errors encountered processing file %s\n"), is->filename);              einfo (_("%P: errors encountered processing file %s\n"), is->filename);
           }            }
       }        }
   }    }
Line 1865  gld_${EMULATION_NAME}_before_allocation 
Line 1751  gld_${EMULATION_NAME}_before_allocation 
   ppc_allocate_toc_section (&link_info);    ppc_allocate_toc_section (&link_info);
 #endif /* TARGET_IS_ppcpe */  #endif /* TARGET_IS_ppcpe */
   
 #if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)  #if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
   /* FIXME: we should be able to set the size of the interworking stub    /* FIXME: we should be able to set the size of the interworking stub
      section.       section.
   
Line 1879  gld_${EMULATION_NAME}_before_allocation 
Line 1765  gld_${EMULATION_NAME}_before_allocation 
             (is->the_bfd, & link_info, support_old_code))              (is->the_bfd, & link_info, support_old_code))
           {            {
             /* xgettext:c-format */              /* xgettext:c-format */
             einfo (_("Errors encountered processing file %s for interworking\n"),              einfo (_("%P: errors encountered processing file %s for interworking\n"),
                    is->filename);                     is->filename);
           }            }
       }        }
Line 1887  gld_${EMULATION_NAME}_before_allocation 
Line 1773  gld_${EMULATION_NAME}_before_allocation 
   
   /* We have seen it all. Allocate it, and carry on.  */    /* We have seen it all. Allocate it, and carry on.  */
   bfd_arm_allocate_interworking_sections (& link_info);    bfd_arm_allocate_interworking_sections (& link_info);
 #endif /* TARGET_IS_armpe || TARGET_IS_arm_epoc_pe || TARGET_IS_arm_wince_pe */  #endif /* TARGET_IS_armpe || TARGET_IS_arm_wince_pe */
   
   before_allocation_default ();    before_allocation_default ();
 }  }
Line 1937  gld_${EMULATION_NAME}_unrecognized_file 
Line 1823  gld_${EMULATION_NAME}_unrecognized_file 
               struct bfd_link_hash_entry *h;                struct bfd_link_hash_entry *h;
   
               sprintf (buf, "%s%s", U (""),                sprintf (buf, "%s%s", U (""),
                        pe_def_file->exports[i].internal_name);                         pe_def_file->exports[i].internal_name);
   
               h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);                h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);
               if (h == (struct bfd_link_hash_entry *) NULL)                if (h == (struct bfd_link_hash_entry *) NULL)
                 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));                  einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n"));
               if (h->type == bfd_link_hash_new)                if (h->type == bfd_link_hash_new)
                 {                  {
                   h->type = bfd_link_hash_undefined;                    h->type = bfd_link_hash_undefined;
Line 2002  gld_${EMULATION_NAME}_recognized_file (l
Line 1888  gld_${EMULATION_NAME}_recognized_file (l
 #ifdef TARGET_IS_armpe  #ifdef TARGET_IS_armpe
   pe_dll_id_target ("pei-arm-little");    pe_dll_id_target ("pei-arm-little");
 #endif  #endif
 #ifdef TARGET_IS_arm_epoc_pe  
   pe_dll_id_target ("epoc-pei-arm-little");  
 #endif  
 #ifdef TARGET_IS_arm_wince_pe  #ifdef TARGET_IS_arm_wince_pe
   pe_dll_id_target ("pei-arm-wince-little");    pe_dll_id_target ("pei-arm-wince-little");
 #endif  #endif
Line 2017  gld_${EMULATION_NAME}_recognized_file (l
Line 1900  gld_${EMULATION_NAME}_recognized_file (l
 static void  static void
 gld_${EMULATION_NAME}_finish (void)  gld_${EMULATION_NAME}_finish (void)
 {  {
 #if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe)  #if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe)
   struct bfd_link_hash_entry * h;    struct bfd_link_hash_entry * h;
   
   if (thumb_entry_symbol != NULL)    if (thumb_entry_symbol != NULL)
Line 2057  gld_${EMULATION_NAME}_finish (void)
Line 1940  gld_${EMULATION_NAME}_finish (void)
       else        else
         einfo (_("%P: warning: cannot find thumb start symbol %s\n"), thumb_entry_symbol);          einfo (_("%P: warning: cannot find thumb start symbol %s\n"), thumb_entry_symbol);
     }      }
 #endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) || defined(TARGET_IS_arm_wince_pe) */  #endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_wince_pe) */
   
   finish_default ();    finish_default ();
   
Line 2070  gld_${EMULATION_NAME}_finish (void)
Line 1953  gld_${EMULATION_NAME}_finish (void)
     )      )
     {      {
       pe_dll_fill_sections (link_info.output_bfd, &link_info);        pe_dll_fill_sections (link_info.output_bfd, &link_info);
       if (pe_implib_filename)        if (command_line.out_implib_filename)
         pe_dll_generate_implib (pe_def_file, pe_implib_filename, &link_info);          pe_dll_generate_implib (pe_def_file, command_line.out_implib_filename,
                                   &link_info);
     }      }
 #if defined(TARGET_IS_shpe)  #if defined(TARGET_IS_shpe)
   /* ARM doesn't need relocs.  */    /* ARM doesn't need relocs.  */
Line 2331  gld_${EMULATION_NAME}_open_dynamic_archi
Line 2215  gld_${EMULATION_NAME}_open_dynamic_archi
       /* Alternate explicit import library for dll's.  */        /* Alternate explicit import library for dll's.  */
       { "%s.dll.a", FALSE },        { "%s.dll.a", FALSE },
       /* "libfoo.a" could be either an import lib or a static lib.        /* "libfoo.a" could be either an import lib or a static lib.
           For backwards compatibility, libfoo.a needs to precede           For backwards compatibility, libfoo.a needs to precede
           libfoo.dll and foo.dll in the search.  */           libfoo.dll and foo.dll in the search.  */
       { "lib%s.a", FALSE },        { "lib%s.a", FALSE },
       /* The 'native' spelling of an import lib name is "foo.lib".  */        /* The 'native' spelling of an import lib name is "foo.lib".  */
       { "%s.lib", FALSE },        { "%s.lib", FALSE },
         /* PR 22948 - Check for an import library.  */
         { "lib%s.lib", FALSE },
 #ifdef DLL_SUPPORT  #ifdef DLL_SUPPORT
       /* Try "<prefix>foo.dll" (preferred dll name, if specified).  */        /* Try "<prefix>foo.dll" (preferred dll name, if specified).  */
       { "%s%s.dll", TRUE },        { "%s%s.dll", TRUE },
Line 2463  struct ld_emulation_xfer_struct ld_${EMU
Line 2349  struct ld_emulation_xfer_struct ld_${EMU
   hll_default,    hll_default,
   gld_${EMULATION_NAME}_after_parse,    gld_${EMULATION_NAME}_after_parse,
   gld_${EMULATION_NAME}_after_open,    gld_${EMULATION_NAME}_after_open,
     after_check_relocs_default,
   after_allocation_default,    after_allocation_default,
   set_output_arch_default,    set_output_arch_default,
   ldemul_default_target,    ldemul_default_target,

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.5.2.1

CVSweb <webmaster@jp.NetBSD.org>