diff options
author | DJ Delorie <dj@redhat.com> | 2000-09-28 20:53:40 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2000-09-28 20:53:40 +0000 |
commit | 45b1f63c8cdded5c3b874abc87b02ee079ac4e93 (patch) | |
tree | 42c35d1c47d8931fdbf544363eac56a3254f98cf | |
parent | 170cdc4f01682c7873834d0b6fe88a2170bf14b2 (diff) | |
download | fsf-binutils-gdb-45b1f63c8cdded5c3b874abc87b02ee079ac4e93.zip fsf-binutils-gdb-45b1f63c8cdded5c3b874abc87b02ee079ac4e93.tar.gz fsf-binutils-gdb-45b1f63c8cdded5c3b874abc87b02ee079ac4e93.tar.bz2 |
* pe-dll.c (process_def_file): Uninitialized data wasn't
exported with --export-all-symbols switch.
* pe-dll.c (fill_edata): rearrange the data so that ordinals and
noname work properly.
-rw-r--r-- | ld/ChangeLog | 10 | ||||
-rw-r--r-- | ld/emultempl/pe.em | 21 | ||||
-rw-r--r-- | ld/pe-dll.c | 15 |
3 files changed, 41 insertions, 5 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index c4b2a3a..0c72cac 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,13 @@ +2000-09-28 Paul Sokolovsky <Paul.Sokolovsky@technologist.com> + + * pe-dll.c (process_def_file): Uninitialized data wasn't + exported with --export-all-symbols switch. + +2000-09-28 DJ Delorie <dj@redhat.com> + + * pe-dll.c (fill_edata): rearrange the data so that ordinals and + noname work properly. + 2000-09-28 Alan Modra <alan@linuxcare.com.au> * ld.texinfo (HPPA ELF32): New section. diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em index 0ffeffc..b556fac 100644 --- a/ld/emultempl/pe.em +++ b/ld/emultempl/pe.em @@ -876,6 +876,27 @@ gld_${EMULATION_NAME}_after_open () } } } + + { + LANG_FOR_EACH_INPUT_STATEMENT (is) + { + asection *sec; + char *new_name, seq; + + + if (is->the_bfd->my_archive) + for (sec = is->the_bfd->sections; sec; sec = sec->next) + if (strcmp (sec->name, ".idata\$7") == 0 + && sec->reloc_count == 0) + { + char *name = xmalloc (sec->_raw_size + 1); + bfd_get_section_contents (is->the_bfd, sec, name, 0, sec->_raw_size); + name[sec->_raw_size] = 0; + printf ("dj: implib \"%s\" for dll \"%s\" %d\n", + is->the_bfd->my_archive->filename, name, sec->_raw_size); + } + } + } } static void diff --git a/ld/pe-dll.c b/ld/pe-dll.c index cbd0c49..99ca312 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -302,7 +302,10 @@ process_def_file (abfd, info) for (j = 0; j < nsyms; j++) { - if (symbols[j]->flags & BSF_GLOBAL) + /* We should export symbols which are either global or not + anything at all (.bss data is the latter) */ + if ((symbols[j]->flags & BSF_GLOBAL) + || (symbols[j]->flags == BSF_NO_FLAGS)) { const char *sn = symbols[j]->name; if (*sn == '_') @@ -703,19 +706,21 @@ fill_edata (abfd, info) unsigned long srva = (exported_symbol_offsets[s] + ssec->output_section->vma + ssec->output_offset); + int ord = pe_def_file->exports[s].ordinal; - bfd_put_32 (abfd, srva - image_base, (void *) (eaddresses + i)); + bfd_put_32 (abfd, srva - image_base, + (void *) (eaddresses + ord - min_ordinal)); 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); enamestr += strlen (enamestr) + 1; - bfd_put_16 (abfd, i, (void *) eordinals); - enameptrs++; + bfd_put_16 (abfd, ord - min_ordinal, (void *) eordinals); + eordinals++; pe_def_file->exports[s].hint = hint++; } - eordinals++; } } } |