From 03a1c9a70857253f0a7a2d7a29a0f627ffc632bd Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 2 Jun 2003 08:43:37 +0000 Subject: [PATCH] Scan table pe_dll->exports, which is sorted alphabetically, instead of exported_symbols, which is sorted by ordinal. --- ld/ChangeLog | 6 ++++++ ld/pe-dll.c | 16 ++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index bfd7846a3b..0af2d4d338 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2003-06-02 Fabrizio Gennari + + * pe-dll.c (fill_edata): Scan table pe_dll->exports, which is + sorted alphabetically, instead of exported_symbols, which is + sorted by ordinal. + 2003-05-30 Ulrich Drepper Jakub Jelinek diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 1430754842..db9f2dfa49 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -959,7 +959,7 @@ fill_edata (abfd, info) bfd *abfd; struct bfd_link_info *info ATTRIBUTE_UNUSED; { - int i, hint; + int s, hint; unsigned char *edirectory; unsigned long *eaddresses; unsigned long *enameptrs; @@ -1000,13 +1000,16 @@ fill_edata (abfd, info) fill_exported_offsets (abfd, info); - /* Ok, now for the filling in part. */ + /* Ok, now for the filling in part. + Scan alphabetically - ie the ordering in the exports[] table, + rather than by ordinal - the ordering in the exported_symbol[] + table. See dlltool.c and: + http://sources.redhat.com/ml/binutils/2003-04/msg00379.html + for more information. */ hint = 0; - for (i = 0; i < export_table_size; i++) + for (s = 0; s < NE; s++) { - int s = exported_symbols[i]; - - if (s != -1) + if (pe_def_file->exports[s].ordinal != -1) { struct sec *ssec = exported_symbol_sections[s]; unsigned long srva = (exported_symbol_offsets[s] @@ -1020,6 +1023,7 @@ fill_edata (abfd, info) if (!pe_def_file->exports[s].flag_noname) { char *ename = pe_def_file->exports[s].name; + bfd_put_32 (abfd, ERVA (enamestr), (void *) enameptrs); enameptrs++; strcpy (enamestr, ename);