* ldlang.c (wild_sort): When sorting by file name, sort by archive

name first.
This commit is contained in:
Ian Lance Taylor 1998-07-03 21:52:43 +00:00
parent 4d315b8660
commit 6ccce8e82b
2 changed files with 62 additions and 1 deletions

View File

@ -1,5 +1,21 @@
Fri Jul 3 14:19:06 1998 Ian Lance Taylor <ian@cygnus.com>
* scripttempl/pe.sc: Use SORT to sort sections appropriately.
* emultempl/pe.em (sort_by_file_name): Remove.
(sort_by_section_name): Remove.
(sort_sections_1, sort_sections): Remove.
(gld_${EMULATION_NAME}_before_allocation): Don't call
sort_sections.
(hold_section, hold_section_name): New static variables.
(hold_use, hold_text, hold_rdata, hold_data, hold_bss): Likewise.
(gld_${EMULATION_NAME}_place_orphan): Rewrite. Look for a good
place to put the section. Align the section. Sort the input
sections by name.
(gld_${EMULATION_NAME}_place_section): New static function.
* ldlang.c (wild_sort): When sorting by file name, sort by archive
name first.
* emultempl/pe.em (set_pe_subsystem): Don't call
ldlang_add_undef.
(gld_${EMULATION_NAME}_after_parse): New static function.

View File

@ -993,13 +993,58 @@ wild_sort (wild, file, section)
if (wild->filenames_sorted)
{
const char *fn, *ln;
boolean fa, la;
int i;
i = strcmp (file->filename, ls->ifile->filename);
/* The PE support for the .idata section as generated by
dlltool assumes that files will be sorted by the name of
the archive and then the name of the file within the
archive. */
if (file->the_bfd != NULL
&& bfd_my_archive (file->the_bfd) != NULL)
{
fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
fa = true;
}
else
{
fn = file->filename;
fa = false;
}
if (ls->ifile->the_bfd != NULL
&& bfd_my_archive (ls->ifile->the_bfd) != NULL)
{
ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
la = true;
}
else
{
ln = ls->ifile->filename;
la = false;
}
i = strcmp (fn, ln);
if (i > 0)
continue;
else if (i < 0)
break;
if (fa || la)
{
if (fa)
fn = file->filename;
if (la)
ln = ls->ifile->filename;
i = strcmp (fn, ln);
if (i > 0)
continue;
else if (i < 0)
break;
}
}
/* Here either the files are not sorted by name, or we are