From 91c7ad9a6ad43c73e582f039e12c8787bf09279e Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Tue, 10 Nov 1998 03:45:43 +0000 Subject: [PATCH] * pe-dll.c (process_def_file): don't assume exports won't move during a realloc --- ld/ChangeLog | 5 +++++ ld/pe-dll.c | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 10805fc93d..ea7dd5a199 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +Mon Nov 9 22:44:58 1998 DJ Delorie + + * pe-dll.c (process_def_file): don't assume exports won't move + during a realloc + Mon Nov 9 16:41:30 1998 DJ Delorie * pe-dll.c: New file; direct support for PE DLLs diff --git a/ld/pe-dll.c b/ld/pe-dll.c index abfd9d4b5e..72444c0e80 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -182,7 +182,7 @@ process_def_file (abfd, info) struct bfd_link_hash_entry *blhe; bfd *b; struct sec *s; - def_file_export *e; + def_file_export *e=0; if (!pe_def_file) pe_def_file = def_file_empty (); @@ -233,7 +233,6 @@ process_def_file (abfd, info) #undef NE #define NE pe_def_file->num_exports - e = pe_def_file->exports; /* convenience */ /* Canonicalize the export list */ @@ -241,13 +240,13 @@ process_def_file (abfd, info) { for (i = 0; i < NE; i++) { - if (strchr (e[i].name, '@')) + if (strchr (pe_def_file->exports[i].name, '@')) { /* This will preserve internal_name, which may have been pointing to the same memory as name, or might not have */ - char *tmp = xstrdup (e[i].name); + char *tmp = xstrdup (pe_def_file->exports[i].name); *(strchr (tmp, '@')) = 0; - e[i].name = tmp; + pe_def_file->exports[i].name = tmp; } } } @@ -256,18 +255,21 @@ process_def_file (abfd, info) { for (i = 0; i < NE; i++) { - if (strchr (e[i].name, '@')) + if (strchr (pe_def_file->exports[i].name, '@')) { - char *tmp = xstrdup (e[i].name); + char *tmp = xstrdup (pe_def_file->exports[i].name); *(strchr (tmp, '@')) = 0; if (auto_export (pe_def_file, tmp)) - def_file_add_export (pe_def_file, tmp, e[i].internal_name, -1); + def_file_add_export (pe_def_file, tmp, + pe_def_file->exports[i].internal_name, -1); else free (tmp); } } } + e = pe_def_file->exports; /* convenience */ + exported_symbol_offsets = (bfd_vma *) xmalloc (NE * sizeof (bfd_vma)); exported_symbol_sections = (struct sec **) xmalloc (NE * sizeof (struct sec *)); -- 2.34.1