Index: gdb/mdebugread.c |
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c |
index d1b91779088a4950350fa139e2e3aa62822f0c47..bbeea12f74b30ef9d40aee6c8307f8025a35e849 100644 |
--- a/gdb/mdebugread.c |
+++ b/gdb/mdebugread.c |
@@ -1,7 +1,6 @@ |
/* Read a symbol table in ECOFF format (Third-Eye). |
- Copyright (C) 1986-1987, 1989-2004, 2007-2012 Free Software |
- Foundation, Inc. |
+ Copyright (C) 1986-2013 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 |
@@ -56,9 +55,10 @@ |
#include "block.h" |
#include "dictionary.h" |
#include "mdebugread.h" |
-#include "gdb_stat.h" |
-#include "gdb_string.h" |
+#include <sys/stat.h> |
+#include <string.h> |
#include "psympriv.h" |
+#include "source.h" |
#include "bfd.h" |
@@ -255,7 +255,8 @@ static void sort_blocks (struct symtab *); |
static struct partial_symtab *new_psymtab (char *, struct objfile *); |
-static void psymtab_to_symtab_1 (struct partial_symtab *, const char *); |
+static void psymtab_to_symtab_1 (struct objfile *objfile, |
+ struct partial_symtab *, const char *); |
static void add_block (struct block *, struct symtab *); |
@@ -270,30 +271,27 @@ static void handle_psymbol_enumerators (struct objfile *, FDR *, int, |
static char *mdebug_next_symbol_text (struct objfile *); |
-/* Exported procedure: Builds a symtab from the PST partial one. |
- Restores the environment in effect when PST was created, delegates |
+/* Exported procedure: Builds a symtab from the partial symtab SELF. |
+ Restores the environment in effect when SELF was created, delegates |
most of the work to an ancillary procedure, and sorts |
- and reorders the symtab list at the end. */ |
+ and reorders the symtab list at the end. SELF is not NULL. */ |
static void |
-mdebug_psymtab_to_symtab (struct partial_symtab *pst) |
+mdebug_read_symtab (struct partial_symtab *self, struct objfile *objfile) |
{ |
- if (!pst) |
- return; |
- |
if (info_verbose) |
{ |
- printf_filtered (_("Reading in symbols for %s..."), pst->filename); |
+ printf_filtered (_("Reading in symbols for %s..."), self->filename); |
gdb_flush (gdb_stdout); |
} |
next_symbol_text_func = mdebug_next_symbol_text; |
- psymtab_to_symtab_1 (pst, pst->filename); |
+ psymtab_to_symtab_1 (objfile, self, self->filename); |
/* Match with global symbols. This only needs to be done once, |
after all of the symtabs and dependencies have been read in. */ |
- scan_file_globals (pst->objfile); |
+ scan_file_globals (objfile); |
if (info_verbose) |
printf_filtered (_("done.\n")); |
@@ -479,12 +477,10 @@ struct mdebug_pending |
}; |
-/* The pending information is kept for an entire object file, and used |
- to be in the deprecated_sym_private field. I took it out when I |
- split mdebugread from mipsread, because this might not be the only |
- type of symbols read from an object file. Instead, we allocate the |
- pending information table when we create the partial symbols, and |
- we store a pointer to the single table in each psymtab. */ |
+/* The pending information is kept for an entire object file. We |
+ allocate the pending information table when we create the partial |
+ symbols, and we store a pointer to the single table in each |
+ psymtab. */ |
static struct mdebug_pending **pending_list; |
@@ -546,6 +542,11 @@ static const struct symbol_register_ops mdebug_register_funcs = { |
mdebug_reg_to_regnum |
}; |
+/* The "aclass" indices for computed symbols. */ |
+ |
+static int mdebug_register_index; |
+static int mdebug_regparm_index; |
+ |
static int |
parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
struct section_offsets *section_offsets, struct objfile *objfile) |
@@ -630,16 +631,13 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
s = new_symbol (name); |
SYMBOL_VALUE (s) = svalue; |
if (sh->sc == scRegister) |
- { |
- class = LOC_REGISTER; |
- SYMBOL_REGISTER_OPS (s) = &mdebug_register_funcs; |
- } |
+ class = mdebug_register_index; |
else |
class = LOC_LOCAL; |
data: /* Common code for symbols describing data. */ |
SYMBOL_DOMAIN (s) = VAR_DOMAIN; |
- SYMBOL_CLASS (s) = class; |
+ SYMBOL_ACLASS_INDEX (s) = class; |
add_symbol (s, top_stack->cur_st, b); |
/* Type could be missing if file is compiled without debugging info. */ |
@@ -668,21 +666,19 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
{ |
case scRegister: |
/* Pass by value in register. */ |
- SYMBOL_CLASS (s) = LOC_REGISTER; |
- SYMBOL_REGISTER_OPS (s) = &mdebug_register_funcs; |
+ SYMBOL_ACLASS_INDEX (s) = mdebug_register_index; |
break; |
case scVar: |
/* Pass by reference on stack. */ |
- SYMBOL_CLASS (s) = LOC_REF_ARG; |
+ SYMBOL_ACLASS_INDEX (s) = LOC_REF_ARG; |
break; |
case scVarRegister: |
/* Pass by reference in register. */ |
- SYMBOL_CLASS (s) = LOC_REGPARM_ADDR; |
- SYMBOL_REGISTER_OPS (s) = &mdebug_register_funcs; |
+ SYMBOL_ACLASS_INDEX (s) = mdebug_regparm_index; |
break; |
default: |
/* Pass by value on stack. */ |
- SYMBOL_CLASS (s) = LOC_ARG; |
+ SYMBOL_ACLASS_INDEX (s) = LOC_ARG; |
break; |
} |
SYMBOL_VALUE (s) = svalue; |
@@ -693,7 +689,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
case stLabel: /* label, goes into current block. */ |
s = new_symbol (name); |
SYMBOL_DOMAIN (s) = VAR_DOMAIN; /* So that it can be used */ |
- SYMBOL_CLASS (s) = LOC_LABEL; /* but not misused. */ |
+ SYMBOL_ACLASS_INDEX (s) = LOC_LABEL; /* but not misused. */ |
SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value; |
SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_int; |
add_symbol (s, top_stack->cur_st, top_stack->cur_block); |
@@ -735,7 +731,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
} |
s = new_symbol (name); |
SYMBOL_DOMAIN (s) = VAR_DOMAIN; |
- SYMBOL_CLASS (s) = LOC_BLOCK; |
+ SYMBOL_ACLASS_INDEX (s) = LOC_BLOCK; |
/* Type of the return value. */ |
if (SC_IS_UNDEF (sh->sc) || sh->sc == scNil) |
t = objfile_type (objfile)->builtin_int; |
@@ -1052,14 +1048,12 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss; |
FIELD_BITSIZE (*f) = 0; |
- enum_sym = ((struct symbol *) |
- obstack_alloc (&mdebugread_objfile->objfile_obstack, |
- sizeof (struct symbol))); |
- memset (enum_sym, 0, sizeof (struct symbol)); |
+ enum_sym = allocate_symbol (mdebugread_objfile); |
SYMBOL_SET_LINKAGE_NAME |
- (enum_sym, obsavestring (f->name, strlen (f->name), |
- &mdebugread_objfile->objfile_obstack)); |
- SYMBOL_CLASS (enum_sym) = LOC_CONST; |
+ (enum_sym, |
+ obstack_copy0 (&mdebugread_objfile->objfile_obstack, |
+ f->name, strlen (f->name))); |
+ SYMBOL_ACLASS_INDEX (enum_sym) = LOC_CONST; |
SYMBOL_TYPE (enum_sym) = t; |
SYMBOL_DOMAIN (enum_sym) = VAR_DOMAIN; |
SYMBOL_VALUE (enum_sym) = tsym.value; |
@@ -1092,7 +1086,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
s = new_symbol (name); |
SYMBOL_DOMAIN (s) = STRUCT_DOMAIN; |
- SYMBOL_CLASS (s) = LOC_TYPEDEF; |
+ SYMBOL_ACLASS_INDEX (s) = LOC_TYPEDEF; |
SYMBOL_VALUE (s) = 0; |
SYMBOL_TYPE (s) = t; |
add_symbol (s, top_stack->cur_st, top_stack->cur_block); |
@@ -1148,7 +1142,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
/* Make up special symbol to contain procedure specific info. */ |
s = new_symbol (MDEBUG_EFI_SYMBOL_NAME); |
SYMBOL_DOMAIN (s) = LABEL_DOMAIN; |
- SYMBOL_CLASS (s) = LOC_CONST; |
+ SYMBOL_ACLASS_INDEX (s) = LOC_CONST; |
SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->builtin_void; |
e = ((struct mdebug_extra_func_info *) |
obstack_alloc (&mdebugread_objfile->objfile_obstack, |
@@ -1288,7 +1282,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, |
break; |
s = new_symbol (name); |
SYMBOL_DOMAIN (s) = VAR_DOMAIN; |
- SYMBOL_CLASS (s) = LOC_TYPEDEF; |
+ SYMBOL_ACLASS_INDEX (s) = LOC_TYPEDEF; |
SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block; |
SYMBOL_TYPE (s) = t; |
add_symbol (s, top_stack->cur_st, top_stack->cur_block); |
@@ -1702,8 +1696,8 @@ parse_type (int fd, union aux_ext *ax, unsigned int aux_index, int *bs, |
else if (TYPE_TAG_NAME (tp) == NULL |
|| strcmp (TYPE_TAG_NAME (tp), name) != 0) |
TYPE_TAG_NAME (tp) |
- = obsavestring (name, strlen (name), |
- &mdebugread_objfile->objfile_obstack); |
+ = obstack_copy0 (&mdebugread_objfile->objfile_obstack, |
+ name, strlen (name)); |
} |
} |
@@ -1738,8 +1732,9 @@ parse_type (int fd, union aux_ext *ax, unsigned int aux_index, int *bs, |
} |
if (TYPE_NAME (tp) == NULL |
|| strcmp (TYPE_NAME (tp), name) != 0) |
- TYPE_NAME (tp) = obsavestring (name, strlen (name), |
- &mdebugread_objfile->objfile_obstack); |
+ TYPE_NAME (tp) |
+ = obstack_copy0 (&mdebugread_objfile->objfile_obstack, |
+ name, strlen (name)); |
} |
} |
if (t->bt == btTypedef) |
@@ -2071,7 +2066,7 @@ parse_procedure (PDR *pr, struct symtab *search_symtab, |
if (processing_gcc_compilation == 0 |
&& found_ecoff_debugging_info == 0 |
&& TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (s))) == TYPE_CODE_VOID) |
- SYMBOL_TYPE (s) = objfile_type (pst->objfile)->nodebug_text_symbol; |
+ SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->nodebug_text_symbol; |
} |
/* Parse the external symbol ES. Just call parse_symbol() after |
@@ -2261,74 +2256,59 @@ record_minimal_symbol (const char *name, const CORE_ADDR address, |
struct objfile *objfile) |
{ |
int section; |
- asection *bfd_section; |
switch (storage_class) |
{ |
case scText: |
section = SECT_OFF_TEXT (objfile); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".text"); |
break; |
case scData: |
section = SECT_OFF_DATA (objfile); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".data"); |
break; |
case scBss: |
section = SECT_OFF_BSS (objfile); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".bss"); |
break; |
case scSData: |
section = get_section_index (objfile, ".sdata"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".sdata"); |
break; |
case scSBss: |
section = get_section_index (objfile, ".sbss"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".sbss"); |
break; |
case scRData: |
section = get_section_index (objfile, ".rdata"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".rdata"); |
break; |
case scInit: |
section = get_section_index (objfile, ".init"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".init"); |
break; |
case scXData: |
section = get_section_index (objfile, ".xdata"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".xdata"); |
break; |
case scPData: |
section = get_section_index (objfile, ".pdata"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".pdata"); |
break; |
case scFini: |
section = get_section_index (objfile, ".fini"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".fini"); |
break; |
case scRConst: |
section = get_section_index (objfile, ".rconst"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".rconst"); |
break; |
#ifdef scTlsData |
case scTlsData: |
section = get_section_index (objfile, ".tlsdata"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".tlsdata"); |
break; |
#endif |
#ifdef scTlsBss |
case scTlsBss: |
section = get_section_index (objfile, ".tlsbss"); |
- bfd_section = bfd_get_section_by_name (cur_bfd, ".tlsbss"); |
break; |
#endif |
default: |
/* This kind of symbol is not associated to a section. */ |
section = -1; |
- bfd_section = NULL; |
} |
prim_record_minimal_symbol_and_info (name, address, ms_type, |
- section, bfd_section, objfile); |
+ section, objfile); |
} |
/* Master parsing procedure for first-pass reading of file symbols |
@@ -2399,7 +2379,7 @@ parse_partial_symbols (struct objfile *objfile) |
(struct partial_symtab **) alloca (dependencies_allocated * |
sizeof (struct partial_symtab *)); |
- last_source_file = NULL; |
+ set_last_source_file (NULL); |
/* |
* Big plan: |
@@ -2701,7 +2681,7 @@ parse_partial_symbols (struct objfile *objfile) |
PENDING_LIST (pst) = pending_list; |
/* The way to turn this into a symtab is to call... */ |
- pst->read_symtab = mdebug_psymtab_to_symtab; |
+ pst->read_symtab = mdebug_read_symtab; |
/* Set up language for the pst. |
The language from the FDR is used if it is unambigious (e.g. cfront |
@@ -3515,7 +3495,7 @@ parse_partial_symbols (struct objfile *objfile) |
prim_record_minimal_symbol_and_info (name, sh.value, |
mst_file_text, |
SECT_OFF_TEXT (objfile), |
- NULL, objfile); |
+ objfile); |
/* FALLTHROUGH */ |
@@ -3601,13 +3581,11 @@ parse_partial_symbols (struct objfile *objfile) |
prim_record_minimal_symbol_and_info (name, sh.value, |
mst_file_data, |
SECT_OFF_DATA (objfile), |
- NULL, |
objfile); |
else |
prim_record_minimal_symbol_and_info (name, sh.value, |
mst_file_bss, |
SECT_OFF_BSS (objfile), |
- NULL, |
objfile); |
class = LOC_STATIC; |
break; |
@@ -3770,7 +3748,7 @@ parse_partial_symbols (struct objfile *objfile) |
/* Link pst to FDR. end_psymtab returns NULL if the psymtab was |
empty and put on the free list. */ |
- fdr_to_pst[f_idx].pst = end_psymtab (save_pst, |
+ fdr_to_pst[f_idx].pst = end_psymtab (objfile, save_pst, |
psymtab_include_list, includes_used, |
-1, save_pst->texthigh, |
dependency_list, dependencies_used, textlow_not_set); |
@@ -3959,7 +3937,8 @@ mdebug_next_symbol_text (struct objfile *objfile) |
The flow of control and even the memory allocation differs. FIXME. */ |
static void |
-psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
+psymtab_to_symtab_1 (struct objfile *objfile, |
+ struct partial_symtab *pst, const char *filename) |
{ |
bfd_size_type external_sym_size; |
bfd_size_type external_pdr_size; |
@@ -3996,7 +3975,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
gdb_flush (gdb_stdout); |
} |
/* We only pass the filename for debug purposes. */ |
- psymtab_to_symtab_1 (pst->dependencies[i], |
+ psymtab_to_symtab_1 (objfile, pst->dependencies[i], |
pst->dependencies[i]->filename); |
} |
@@ -4016,7 +3995,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
external_pdr_size = debug_swap->external_pdr_size; |
swap_sym_in = debug_swap->swap_sym_in; |
swap_pdr_in = debug_swap->swap_pdr_in; |
- mdebugread_objfile = pst->objfile; |
+ mdebugread_objfile = objfile; |
cur_fd = FDR_IDX (pst); |
fh = ((cur_fd == -1) |
? (FDR *) NULL |
@@ -4044,7 +4023,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
if (processing_gcc_compilation != 0) |
{ |
- struct gdbarch *gdbarch = get_objfile_arch (pst->objfile); |
+ struct gdbarch *gdbarch = get_objfile_arch (objfile); |
/* This symbol table contains stabs-in-ecoff entries. */ |
@@ -4083,15 +4062,15 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
would otherwise be ended twice, once in |
process_one_symbol, and once after this loop. */ |
if (type_code == N_SO |
- && last_source_file |
+ && get_last_source_file () |
&& previous_stab_code != (unsigned char) N_SO |
&& *name == '\000') |
{ |
valu += ANOFFSET (pst->section_offsets, |
- SECT_OFF_TEXT (pst->objfile)); |
+ SECT_OFF_TEXT (objfile)); |
previous_stab_code = N_SO; |
- st = end_symtab (valu, pst->objfile, |
- SECT_OFF_TEXT (pst->objfile)); |
+ st = end_symtab (valu, objfile, |
+ SECT_OFF_TEXT (objfile)); |
end_stabs (); |
last_symtab_ended = 1; |
} |
@@ -4099,14 +4078,14 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
{ |
last_symtab_ended = 0; |
process_one_symbol (type_code, 0, valu, name, |
- pst->section_offsets, pst->objfile); |
+ pst->section_offsets, objfile); |
} |
} |
/* Similarly a hack. */ |
else if (name[0] == '#') |
{ |
process_one_symbol (N_SLINE, 0, valu, name, |
- pst->section_offsets, pst->objfile); |
+ pst->section_offsets, objfile); |
} |
if (type_code == N_FUN) |
{ |
@@ -4120,8 +4099,8 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
memset (e, 0, sizeof (struct mdebug_extra_func_info)); |
SYMBOL_DOMAIN (s) = LABEL_DOMAIN; |
- SYMBOL_CLASS (s) = LOC_CONST; |
- SYMBOL_TYPE (s) = objfile_type (pst->objfile)->builtin_void; |
+ SYMBOL_ACLASS_INDEX (s) = LOC_CONST; |
+ SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_void; |
SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e; |
e->pdr.framereg = -1; |
add_symbol_to_list (s, &local_symbols); |
@@ -4139,7 +4118,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
{ |
/* Handle encoded stab line number. */ |
valu += ANOFFSET (pst->section_offsets, |
- SECT_OFF_TEXT (pst->objfile)); |
+ SECT_OFF_TEXT (objfile)); |
record_line (current_subfile, sh.index, |
gdbarch_addr_bits_remove (gdbarch, valu)); |
} |
@@ -4155,8 +4134,8 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
if (! last_symtab_ended) |
{ |
- st = end_symtab (pst->texthigh, pst->objfile, |
- SECT_OFF_TEXT (pst->objfile)); |
+ st = end_symtab (pst->texthigh, objfile, |
+ SECT_OFF_TEXT (objfile)); |
end_stabs (); |
} |
@@ -4215,12 +4194,12 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
if (fh == 0) |
{ |
maxlines = 0; |
- st = new_symtab ("unknown", 0, pst->objfile); |
+ st = new_symtab ("unknown", 0, objfile); |
} |
else |
{ |
maxlines = 2 * fh->cline; |
- st = new_symtab (pst->filename, maxlines, pst->objfile); |
+ st = new_symtab (pst->filename, maxlines, objfile); |
/* The proper language was already determined when building |
the psymtab, use it. */ |
@@ -4263,7 +4242,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
c = parse_symbol (&sh, |
debug_info->external_aux + fh->iauxBase, |
sym_ptr, fh->fBigendian, |
- pst->section_offsets, pst->objfile); |
+ pst->section_offsets, objfile); |
sym_ptr += c * external_sym_size; |
} |
@@ -4337,7 +4316,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
ext_ptr = PST_PRIVATE (pst)->extern_tab; |
for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++) |
parse_external (ext_ptr, fh->fBigendian, |
- pst->section_offsets, pst->objfile); |
+ pst->section_offsets, objfile); |
/* If there are undefined symbols, tell the user. |
The alpha has an undefined symbol for every symbol that is |
@@ -4345,7 +4324,8 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
if (info_verbose && n_undef_symbols) |
{ |
printf_filtered (_("File %s contains %d unresolved references:"), |
- st->filename, n_undef_symbols); |
+ symtab_to_filename_for_display (st), |
+ n_undef_symbols); |
printf_filtered ("\n\t%4d variables\n\t%4d " |
"procedures\n\t%4d labels\n", |
n_undef_vars, n_undef_procs, n_undef_labels); |
@@ -4354,7 +4334,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, const char *filename) |
} |
pop_parse_stack (); |
- st->primary = 1; |
+ set_symtab_primary (st, 1); |
sort_blocks (st); |
} |
@@ -4800,7 +4780,7 @@ new_psymtab (char *name, struct objfile *objfile) |
PENDING_LIST (psymtab) = pending_list; |
/* The way to turn this into a symtab is to call... */ |
- psymtab->read_symtab = mdebug_psymtab_to_symtab; |
+ psymtab->read_symtab = mdebug_read_symtab; |
return (psymtab); |
} |
@@ -4879,12 +4859,10 @@ new_block (enum block_type type) |
static struct symbol * |
new_symbol (char *name) |
{ |
- struct symbol *s = ((struct symbol *) |
- obstack_alloc (&mdebugread_objfile->objfile_obstack, |
- sizeof (struct symbol))); |
+ struct symbol *s = allocate_symbol (mdebugread_objfile); |
- memset (s, 0, sizeof (*s)); |
- SYMBOL_SET_LANGUAGE (s, psymtab_language); |
+ SYMBOL_SET_LANGUAGE (s, psymtab_language, |
+ &mdebugread_objfile->objfile_obstack); |
SYMBOL_SET_NAMES (s, name, strlen (name), 1, mdebugread_objfile); |
return s; |
} |
@@ -4940,4 +4918,9 @@ void |
_initialize_mdebugread (void) |
{ |
basic_type_data = register_objfile_data (); |
+ |
+ mdebug_register_index |
+ = register_symbol_register_impl (LOC_REGISTER, &mdebug_register_funcs); |
+ mdebug_regparm_index |
+ = register_symbol_register_impl (LOC_REGPARM_ADDR, &mdebug_register_funcs); |
} |