diff --git a/ld/ChangeLog b/ld/ChangeLog index 25452fbbf1..c7f5202936 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2010-06-09 Dave Korn + + PR ld/11603 + * pe-dll.c (process_def_file_and_drectve): Reorder check for + forwarded export name after check for ordinary export. + 2010-06-08 Bernd Schmidt * emulparams/elf32_tic6x_le.sh (OTHER_BSS_SECTIONS): New. diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 5048c2077f..47722b6df3 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -871,28 +871,6 @@ process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info * for (i = 0; i < NE; i++) { char *name; - - /* Check for forward exports */ - if (strchr (pe_def_file->exports[i].internal_name, '.')) - { - count_exported++; - if (!pe_def_file->exports[i].flag_noname) - count_exported_byname++; - - pe_def_file->exports[i].flag_forward = 1; - - if (pe_def_file->exports[i].ordinal != -1) - { - if (max_ordinal < pe_def_file->exports[i].ordinal) - max_ordinal = pe_def_file->exports[i].ordinal; - if (min_ordinal > pe_def_file->exports[i].ordinal) - min_ordinal = pe_def_file->exports[i].ordinal; - count_with_ordinals++; - } - - continue; - } - name = xmalloc (strlen (pe_def_file->exports[i].internal_name) + 2); if (pe_details->underscored && (*pe_def_file->exports[i].internal_name != '@')) @@ -923,6 +901,28 @@ process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info * else exported_symbol_sections[i] = blhe->u.c.p->section; + if (pe_def_file->exports[i].ordinal != -1) + { + if (max_ordinal < pe_def_file->exports[i].ordinal) + max_ordinal = pe_def_file->exports[i].ordinal; + if (min_ordinal > pe_def_file->exports[i].ordinal) + min_ordinal = pe_def_file->exports[i].ordinal; + count_with_ordinals++; + } + } + /* Check for forward exports. These are indicated in DEF files by an + export directive of the form NAME1 = MODULE-NAME.EXTERNAL-NAME + but we must take care not to be fooled when the user wants to export + a symbol that actually really has a dot in it, so we only check + for them here, after real defined symbols have already been matched. */ + else if (strchr (pe_def_file->exports[i].internal_name, '.')) + { + count_exported++; + if (!pe_def_file->exports[i].flag_noname) + count_exported_byname++; + + pe_def_file->exports[i].flag_forward = 1; + if (pe_def_file->exports[i].ordinal != -1) { if (max_ordinal < pe_def_file->exports[i].ordinal)