diff options
author | Ian Lance Taylor <ian@airs.com> | 1998-07-03 21:52:43 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1998-07-03 21:52:43 +0000 |
commit | 6ccce8e82b4b18e5008f94808ddaf554bdd6c040 (patch) | |
tree | 9be4e4b344b9f8f18e2b24ed1b39dad8d73fac10 /ld | |
parent | 4d315b86605a2b13ecf4dbd6287406bde3deb3b0 (diff) | |
download | gdb-6ccce8e82b4b18e5008f94808ddaf554bdd6c040.zip gdb-6ccce8e82b4b18e5008f94808ddaf554bdd6c040.tar.gz gdb-6ccce8e82b4b18e5008f94808ddaf554bdd6c040.tar.bz2 |
* ldlang.c (wild_sort): When sorting by file name, sort by archive
name first.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 16 | ||||
-rw-r--r-- | ld/ldlang.c | 47 |
2 files changed, 62 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 7d85d50..66eaa2f 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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. diff --git a/ld/ldlang.c b/ld/ldlang.c index 56b4294..4194614 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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 |