* pe-dll.c (pe_implied_import_dll): Also scan .rdata sections

to identify data symbols.
This commit is contained in:
Danny Smith 2003-10-14 06:26:31 +00:00
parent 46a16dba95
commit 661a32f7da
2 changed files with 22 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2003-10-14 Danny Smith <dannysmith@users.sourceforge.net>
* pe-dll.c (pe_implied_import_dll): Also scan .rdata sections
to identify data symbols.
2003-10-13 Richard Sandiford <rsandifo@redhat.com>
* emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Move

View File

@ -2441,9 +2441,11 @@ pe_implied_import_dll (const char *filename)
/* Initialization with start > end guarantees that is_data
will not be set by mistake, and avoids compiler warning. */
unsigned long data_start = 1;
unsigned long data_end = 0;
unsigned long bss_start = 1;
unsigned long bss_end = 0;
unsigned long data_end = 0;
unsigned long rdata_start = 1;
unsigned long rdata_end = 0;
unsigned long bss_start = 1;
unsigned long bss_end = 0;
/* No, I can't use bfd here. kernel32.dll puts its export table in
the middle of the .rdata section. */
@ -2516,6 +2518,15 @@ pe_implied_import_dll (const char *filename)
data_start = vaddr;
data_end = vaddr + vsize;
if (pe_dll_extra_pe_debug)
printf ("%s %s: 0x%08lx-0x%08lx (0x%08lx)\n",
__FUNCTION__, sec_name, vaddr, vaddr + vsize, flags);
}
else if (strcmp(sec_name,".rdata") == 0)
{
rdata_start = vaddr;
rdata_end = vaddr + vsize;
if (pe_dll_extra_pe_debug)
printf ("%s %s: 0x%08lx-0x%08lx (0x%08lx)\n",
__FUNCTION__, sec_name, vaddr, vaddr + vsize, flags);
@ -2573,9 +2584,11 @@ pe_implied_import_dll (const char *filename)
exported in buggy auto-import releases. */
if (strncmp (erva + name_rva, "_nm_", 4) != 0)
{
/* is_data is true if the address is in the data or bss segment. */
/* is_data is true if the address is in the data, rdata or bss
segment. */
is_data =
(func_rva >= data_start && func_rva < data_end)
|| (func_rva >= rdata_start && func_rva < rdata_end)
|| (func_rva >= bss_start && func_rva < bss_end);
imp = def_file_add_import (pe_def_file, erva + name_rva,