/* Read a symbol table in ECOFF format (Third-Eye).
- Copyright (C) 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009, 2010,
- 2011 Free Software Foundation, Inc.
+ Copyright (C) 1986-1987, 1989-2004, 2007-2012 Free Software
+ Foundation, Inc.
Original version contributed by Alessandro Forin (af@cs.cmu.edu) at
CMU. Major work by Per Bothner, John Gilmore and Ian Lance Taylor
#include "stabsread.h"
#include "complaints.h"
#include "demangle.h"
+#include "gdb-demangle.h"
#include "gdb_assert.h"
#include "block.h"
#include "dictionary.h"
/* The objfile we are currently reading. */
-static struct objfile *current_objfile;
+static struct objfile *mdebugread_objfile;
\f
if (!p)
{
p = ((struct mdebug_pending *)
- obstack_alloc (¤t_objfile->objfile_obstack,
+ obstack_alloc (&mdebugread_objfile->objfile_obstack,
sizeof (struct mdebug_pending)));
p->s = sh;
p->t = t;
if (sh->iss == 0 || name[0] == '.' || name[0] == '\0')
TYPE_TAG_NAME (t) = NULL;
else
- TYPE_TAG_NAME (t) = obconcat (¤t_objfile->objfile_obstack,
+ TYPE_TAG_NAME (t) = obconcat (&mdebugread_objfile->objfile_obstack,
name, (char *) NULL);
TYPE_CODE (t) = type_code;
FIELD_BITSIZE (*f) = 0;
enum_sym = ((struct symbol *)
- obstack_alloc (¤t_objfile->objfile_obstack,
+ obstack_alloc (&mdebugread_objfile->objfile_obstack,
sizeof (struct symbol)));
memset (enum_sym, 0, sizeof (struct symbol));
SYMBOL_SET_LINKAGE_NAME
(enum_sym, obsavestring (f->name, strlen (f->name),
- ¤t_objfile->objfile_obstack));
+ &mdebugread_objfile->objfile_obstack));
SYMBOL_CLASS (enum_sym) = LOC_CONST;
SYMBOL_TYPE (enum_sym) = t;
SYMBOL_DOMAIN (enum_sym) = VAR_DOMAIN;
s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
SYMBOL_CLASS (s) = LOC_CONST;
- SYMBOL_TYPE (s) = objfile_type (current_objfile)->builtin_void;
+ SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->builtin_void;
e = ((struct mdebug_extra_func_info *)
- obstack_alloc (¤t_objfile->objfile_obstack,
+ obstack_alloc (&mdebugread_objfile->objfile_obstack,
sizeof (struct mdebug_extra_func_info)));
memset (e, 0, sizeof (struct mdebug_extra_func_info));
SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
/* Handle undefined types, they have indexNil. */
if (aux_index == indexNil)
- return basic_type (btInt, current_objfile);
+ return basic_type (btInt, mdebugread_objfile);
/* Handle corrupt aux indices. */
if (aux_index >= (debug_info->fdr + fd)->caux)
{
index_complaint (sym_name);
- return basic_type (btInt, current_objfile);
+ return basic_type (btInt, mdebugread_objfile);
}
ax += aux_index;
/* Use aux as a type information record, map its basic type. */
(*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
- tp = basic_type (t->bt, current_objfile);
+ tp = basic_type (t->bt, mdebugread_objfile);
if (tp == NULL)
{
/* Cannot use builtin types -- build our own. */
break;
default:
basic_type_complaint (t->bt, sym_name);
- return basic_type (btInt, current_objfile);
+ return basic_type (btInt, mdebugread_objfile);
}
}
as short and unsigned short types with a field width of 8.
Enum types also have a field width which we ignore for now. */
if (t->bt == btShort && width == 8)
- tp = basic_type (btChar, current_objfile);
+ tp = basic_type (btChar, mdebugread_objfile);
else if (t->bt == btUShort && width == 8)
- tp = basic_type (btUChar, current_objfile);
+ tp = basic_type (btUChar, mdebugread_objfile);
else if (t->bt == btEnum)
;
else
{
complaint (&symfile_complaints,
_("unable to cross ref btIndirect for %s"), sym_name);
- return basic_type (btInt, current_objfile);
+ return basic_type (btInt, mdebugread_objfile);
}
xref_fh = get_rfd (fd, rf);
xref_fd = xref_fh - debug_info->fdr;
/* Try to cross reference this type, build new type on failure. */
ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
if (tp == (struct type *) NULL)
- tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
+ tp = init_type (type_code, 0, 0, (char *) NULL, mdebugread_objfile);
/* DEC c89 produces cross references to qualified aggregate types,
dereference them. */
|| strcmp (TYPE_TAG_NAME (tp), name) != 0)
TYPE_TAG_NAME (tp)
= obsavestring (name, strlen (name),
- ¤t_objfile->objfile_obstack);
+ &mdebugread_objfile->objfile_obstack);
}
}
/* Try to cross reference this type, build new type on failure. */
ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
if (tp == (struct type *) NULL)
- tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
+ tp = init_type (type_code, 0, 0, (char *) NULL, mdebugread_objfile);
/* Make sure that TYPE_CODE(tp) has an expected type code.
Any type may be returned from cross_ref if file indirect entries
if (TYPE_NAME (tp) == NULL
|| strcmp (TYPE_NAME (tp), name) != 0)
TYPE_NAME (tp) = obsavestring (name, strlen (name),
- ¤t_objfile->objfile_obstack);
+ &mdebugread_objfile->objfile_obstack);
}
}
if (t->bt == btTypedef)
{
complaint (&symfile_complaints,
_("unable to cross ref btTypedef for %s"), sym_name);
- tp = basic_type (btInt, current_objfile);
+ tp = basic_type (btInt, mdebugread_objfile);
}
}
complaint (&symfile_complaints,
_("illegal array index type for %s, assuming int"),
sym_name);
- indx = objfile_type (current_objfile)->builtin_int;
+ indx = objfile_type (mdebugread_objfile)->builtin_int;
}
/* Get the bounds, and create the array type. */
int past_first_source_file = 0;
/* List of current psymtab's include files. */
- char **psymtab_include_list;
+ const char **psymtab_include_list;
int includes_allocated;
int includes_used;
EXTR *extern_tab;
includes_allocated = 30;
includes_used = 0;
- psymtab_include_list = (char **) alloca (includes_allocated *
- sizeof (char *));
+ psymtab_include_list = (const char **) alloca (includes_allocated *
+ sizeof (const char *));
next_symbol_text_func = mdebug_next_symbol_text;
dependencies_allocated = 30;
for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
{
int type_code;
- char *namestring;
+ const char *namestring;
(*swap_sym_in) (cur_bfd,
(((char *) debug_info->external_sym)
psymtab_include_list[includes_used++] = namestring;
if (includes_used >= includes_allocated)
{
- char **orig = psymtab_include_list;
+ const char **orig = psymtab_include_list;
- psymtab_include_list = (char **)
+ psymtab_include_list = (const char **)
alloca ((includes_allocated *= 2) *
- sizeof (char *));
+ sizeof (const char *));
memcpy (psymtab_include_list, orig,
- includes_used * sizeof (char *));
+ includes_used * sizeof (const char *));
}
continue;
}
external_pdr_size = debug_swap->external_pdr_size;
swap_sym_in = debug_swap->swap_sym_in;
swap_pdr_in = debug_swap->swap_pdr_in;
- current_objfile = pst->objfile;
+ mdebugread_objfile = pst->objfile;
cur_fd = FDR_IDX (pst);
fh = ((cur_fd == -1)
? (FDR *) NULL
if (fh->csym <= 2) /* FIXME, this blows psymtab->symtab ptr. */
{
- current_objfile = NULL;
+ mdebugread_objfile = NULL;
return;
}
for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
procedure specific info. */
struct mdebug_extra_func_info *e =
((struct mdebug_extra_func_info *)
- obstack_alloc (¤t_objfile->objfile_obstack,
+ obstack_alloc (&mdebugread_objfile->objfile_obstack,
sizeof (struct mdebug_extra_func_info)));
struct symbol *s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
size = lines->nitems;
if (size > 1)
--size;
- LINETABLE (st) = obstack_copy (¤t_objfile->objfile_obstack,
+ LINETABLE (st) = obstack_copy (&mdebugread_objfile->objfile_obstack,
lines,
(sizeof (struct linetable)
+ size * sizeof (lines->item)));
/* Now link the psymtab and the symtab. */
pst->symtab = st;
- current_objfile = NULL;
+ mdebugread_objfile = NULL;
}
\f
/* Ancillary parsing procedures. */
{
*pname = "<undefined>";
*tpp = init_type (type_code, 0, TYPE_FLAG_STUB,
- (char *) NULL, current_objfile);
+ (char *) NULL, mdebugread_objfile);
return result;
}
{
case btVoid:
*tpp = init_type (type_code, 0, 0, (char *) NULL,
- current_objfile);
+ mdebugread_objfile);
*pname = "<undefined>";
break;
_("illegal bt %d in forward typedef for %s"), tir.bt,
sym_name);
*tpp = init_type (type_code, 0, 0, (char *) NULL,
- current_objfile);
+ mdebugread_objfile);
break;
}
return result;
has not been parsed yet.
Initialize the type only, it will be filled in when
it's definition is parsed. */
- *tpp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
+ *tpp = init_type (type_code, 0, 0, (char *) NULL, mdebugread_objfile);
}
add_pending (fh, esh, *tpp);
}
{
struct blockvector *bv = BLOCKVECTOR (s);
- if (BLOCKVECTOR_NBLOCKS (bv) <= 2)
+ if (BLOCKVECTOR_NBLOCKS (bv) <= FIRST_LOCAL_BLOCK)
{
/* Cosmetic */
if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
* are very different. It would be nice to find a reliable test
* to detect -O3 images in advance.
*/
- if (BLOCKVECTOR_NBLOCKS (bv) > 3)
+ if (BLOCKVECTOR_NBLOCKS (bv) > FIRST_LOCAL_BLOCK + 1)
qsort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
BLOCKVECTOR_NBLOCKS (bv) - FIRST_LOCAL_BLOCK,
sizeof (struct block *),
new_symbol (char *name)
{
struct symbol *s = ((struct symbol *)
- obstack_alloc (¤t_objfile->objfile_obstack,
+ obstack_alloc (&mdebugread_objfile->objfile_obstack,
sizeof (struct symbol)));
memset (s, 0, sizeof (*s));
SYMBOL_SET_LANGUAGE (s, psymtab_language);
- SYMBOL_SET_NAMES (s, name, strlen (name), 1, current_objfile);
+ SYMBOL_SET_NAMES (s, name, strlen (name), 1, mdebugread_objfile);
return s;
}
{
struct type *t;
- t = alloc_type (current_objfile);
+ t = alloc_type (mdebugread_objfile);
TYPE_NAME (t) = name;
INIT_CPLUS_SPECIFIC (t);
return t;