* 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

@@ -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