convert to internal format, for GDB. Used as a last resort if no
debugging symbols recognized.
- Copyright (C) 2003-2013 Free Software Foundation, Inc.
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
This file is part of GDB.
char *qualified_name, *bare_name;
/* Add the stored offset to get the loaded address of the symbol. */
CORE_ADDR vma = func_rva + section_data->vma_offset;
- int dll_name_len = strlen (dll_name);
/* Generate a (hopefully unique) qualified name using the first part
of the dll name, e.g. KERNEL32!AddAtomA. This matches the style
const char *dll_name, struct objfile *objfile)
{
CORE_ADDR vma;
- struct objfile *forward_objfile;
- struct minimal_symbol *msymbol;
- short section;
+ struct bound_minimal_symbol msymbol;
enum minimal_symbol_type msymtype;
- int dll_name_len = strlen (dll_name);
char *qualified_name, *bare_name;
int forward_dll_name_len = strlen (forward_dll_name);
int forward_func_name_len = strlen (forward_func_name);
forward_func_name);
- msymbol = lookup_minimal_symbol_and_objfile (forward_qualified_name,
- &forward_objfile);
+ msymbol = lookup_minimal_symbol_and_objfile (forward_qualified_name);
- if (!msymbol)
+ if (!msymbol.minsym)
{
int i;
for (i = 0; i < forward_dll_name_len; i++)
forward_qualified_name[i] = tolower (forward_qualified_name[i]);
- msymbol = lookup_minimal_symbol_and_objfile (forward_qualified_name,
- &forward_objfile);
+ msymbol = lookup_minimal_symbol_and_objfile (forward_qualified_name);
}
- if (!msymbol)
+ if (!msymbol.minsym)
{
if (debug_coff_pe_read)
fprintf_unfiltered (gdb_stdlog, _("Unable to find function \"%s\" in"
" \"%s\" in dll \"%s\", pointing to \"%s\"\n"),
sym_name, dll_name, forward_qualified_name);
- vma = SYMBOL_VALUE_ADDRESS (msymbol);
- section = SYMBOL_SECTION (msymbol);
- msymtype = MSYMBOL_TYPE (msymbol);
+ vma = SYMBOL_VALUE_ADDRESS (msymbol.minsym);
+ msymtype = MSYMBOL_TYPE (msymbol.minsym);
/* Generate a (hopefully unique) qualified name using the first part
of the dll name, e.g. KERNEL32!AddAtomA. This matches the style
unsigned long name_rvas, ordinals, nexp, ordbase;
char *dll_name = (char *) dll->filename;
int otherix = PE_SECTION_TABLE_SIZE;
- int exportix = -1;
int is_pe64 = 0;
int is_pe32 = 0;
" for dll \"%s\": 0x%lx instead of 0x%lx\n"),
dll_name, export_opthdrrva, vaddr);
expptr = fptr + (export_opthdrrva - vaddr);
- exportix = i;
break;
}
}
exp_funcbase = pe_as32 (expdata + 28);
/* Use internal dll name instead of full pathname. */
- dll_name = pe_as32 (expdata + 12) + erva;
+ dll_name = (char *) (pe_as32 (expdata + 12) + erva);
pe_sections_info.nb_sections = otherix;
pe_sections_info.sections = section_data;
if ((func_rva >= section_data[sectix].rva_start)
&& (func_rva < section_data[sectix].rva_end))
{
+ char *sym_name = (char *) (erva + name_rva);
+
section_found = 1;
- add_pe_exported_sym (erva + name_rva,
- func_rva, ordinal,
+ add_pe_exported_sym (sym_name, func_rva, ordinal,
section_data + sectix, dll_name, objfile);
++nbnormal;
break;
pe_text_section_offset (struct bfd *abfd)
{
- unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
- unsigned long export_rva, export_size, nsections, secptr, expptr;
- unsigned long exp_funcbase;
- unsigned char *expdata, *erva;
- unsigned long name_rvas, ordinals, nexp, ordbase;
- char *dll_name;
+ unsigned long pe_header_offset, i;
+ unsigned long nsections, secptr;
int is_pe64 = 0;
int is_pe32 = 0;
char const *target;
/* Get pe_header, optional header and numbers of sections. */
pe_header_offset = pe_get32 (abfd, 0x3c);
- opthdr_ofs = pe_header_offset + 4 + 20;
nsections = pe_get16 (abfd, pe_header_offset + 4 + 2);
secptr = (pe_header_offset + 4 + 20 +
pe_get16 (abfd, pe_header_offset + 4 + 16));