/* Read dbx symbol tables and convert to internal format, for GDB.
Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009.
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009, 2010.
Free Software Foundation, Inc.
This file is part of GDB.
#include "complaints.h"
#include "cp-abi.h"
#include "cp-support.h"
+#include "psympriv.h"
#include "gdb_assert.h"
#include "gdb_string.h"
/* Same with virtual function tables, both global and static. */
{
char *tempstring = name;
+
if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
++tempstring;
if (is_vtable_name (tempstring))
if (symbuf_left <= 0)
{
file_ptr filepos = symbuf_sections->section->filepos;
+
if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
perror_with_name (bfd_get_filename (sym_bfd));
symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
if (next_bincl >= bincl_list + bincls_allocated)
{
int offset = next_bincl - bincl_list;
+
bincls_allocated *= 2;
bincl_list = (struct header_file_location *)
xrealloc ((char *) bincl_list,
{
arelent *rel = *relptr;
CORE_ADDR address =
- rel->address + ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
+ rel->address + ANOFFSET (objfile->section_offsets,
+ SECT_OFF_DATA (objfile));
switch (bfd_get_arch (abfd))
{
case N_BINCL:
{
enum language tmp_language;
+
/* Add this bincl to the bincl_list for future EXCLs. No
need to save the string; it'll be around until
read_dbx_symtab function returns */
case N_SOL:
{
enum language tmp_language;
- /* Mark down an include file in the current psymtab */
+ /* Mark down an include file in the current psymtab */
namestring = set_namestring (objfile, &nlist);
tmp_language = deduce_language_from_filename (namestring);
continue;
{
int i;
+
for (i = 0; i < includes_used; i++)
if (strcmp (namestring, psymtab_include_list[i]) == 0)
{
{
char *new_name, *name = xmalloc (p - namestring + 1);
memcpy (name, namestring, p - namestring);
+
name[p - namestring] = '\0';
new_name = cp_canonicalize_string (name);
if (new_name != NULL)
{
int name_len = p - namestring;
char *name = xmalloc (name_len + 1);
+
memcpy (name, namestring, name_len);
name[name_len] = '\0';
function_outside_compilation_unit_complaint (name);
find_stab_function_addr (namestring,
pst ? pst->filename : NULL,
objfile);
+
/* find_stab_function_addr will return 0 if the minimal
symbol wasn't found. (Unfortunately, this might also
be a valid address.) Anyway, if it *does* return 0,
{
int name_len = p - namestring;
char *name = xmalloc (name_len + 1);
+
memcpy (name, namestring, name_len);
name[name_len] = '\0';
function_outside_compilation_unit_complaint (name);
find_stab_function_addr (namestring,
pst ? pst->filename : NULL,
objfile);
+
/* find_stab_function_addr will return 0 if the minimal
symbol wasn't found. (Unfortunately, this might also
be a valid address.) Anyway, if it *does* return 0,
if (dependencies_used >= dependencies_allocated)
{
struct partial_symtab **orig = dependency_list;
+
dependency_list =
(struct partial_symtab **)
alloca ((dependencies_allocated *= 2)
struct partial_symbol **static_syms)
{
struct partial_symtab *result =
- start_psymtab_common (objfile, objfile->section_offsets,
- filename, textlow, global_syms, static_syms);
+ start_psymtab_common (objfile, objfile->section_offsets,
+ filename, textlow, global_syms, static_syms);
- result->read_symtab_private = (char *)
- obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc));
+ result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
+ sizeof (struct symloc));
LDSYMOFF (result) = ldsymoff;
result->read_symtab = dbx_psymtab_to_symtab;
SYMBOL_SIZE (result) = symbol_size;
for (i = 0; i < num_includes; i++)
{
struct partial_symtab *subpst =
- allocate_psymtab (include_list[i], objfile);
+ allocate_psymtab (include_list[i], objfile);
/* Copy the sesction_offsets array from the main psymtab. */
subpst->section_offsets = pst->section_offsets;
subpst->read_symtab_private =
- (char *) obstack_alloc (&objfile->objfile_obstack,
- sizeof (struct symloc));
+ obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc));
LDSYMOFF (subpst) =
LDSYMLEN (subpst) =
subpst->textlow =
sort_pst_symbols (pst);
- /* If there is already a psymtab or symtab for a file of this name, remove it.
- (If there is a symtab, more drastic things also happen.)
- This happens in VxWorks. */
- free_named_symtabs (pst->filename);
-
if (num_includes == 0
&& number_dependencies == 0
&& pst->n_global_syms == 0
if (DBX_STAB_SECTION (pst->objfile))
{
stabs_data
- = symfile_relocate_debug_section (pst->objfile->obfd,
+ = symfile_relocate_debug_section (pst->objfile,
DBX_STAB_SECTION (pst->objfile),
NULL);
+
if (stabs_data)
back_to = make_cleanup (free_current_contents,
(void *) &stabs_data);
#endif
}
else if (type & N_EXT || type == (unsigned char) N_TEXT
- || type == (unsigned char) N_NBTEXT
- )
+ || type == (unsigned char) N_NBTEXT)
{
/* Global symbol: see if we came across a dbx defintion for
a corresponding symbol. If so, store the value. Remove
if (sline_found_in_function)
{
CORE_ADDR addr = last_function_start + valu;
+
record_line (current_subfile, 0,
gdbarch_addr_bits_remove (gdbarch, addr));
}
{
CORE_ADDR addr = processing_gcc_compilation == 2 ?
last_function_start : valu;
+
record_line (current_subfile, desc,
gdbarch_addr_bits_remove (gdbarch, addr));
sline_found_in_function = 1;
{
int deftype;
char *colon_pos = strchr (name, ':');
+
if (colon_pos == NULL)
deftype = '\0';
else
symbuf_read = 0;
symbuf_left = bfd_section_size (objfile->obfd, stabsect);
- stabs_data = symfile_relocate_debug_section (objfile->obfd, stabsect, NULL);
+ stabs_data = symfile_relocate_debug_section (objfile, stabsect, NULL);
if (stabs_data)
back_to = make_cleanup (free_current_contents, (void *) &stabs_data);
default_symfile_segments, /* sym_segments: Get segment information from
a file. */
NULL, /* sym_read_linetable */
+ default_symfile_relocate, /* sym_relocate: Relocate a debug section. */
+ &psym_functions,
NULL /* next: pointer to next struct sym_fns */
};