static int
init_lineno PARAMS ((bfd *, file_ptr, int));
+static void
+free_linetab PARAMS ((void));
+
static void
find_linenos PARAMS ((bfd *, sec_ptr, PTR));
/* Give a line table with function entries are marked, arrange its functions
in assending order and strip off function entry markers and return it in
a newly created table. If the old one is good enough, return the old one. */
+/* FIXME: I think all this stuff can be replaced by just passing
+ sort_linevec = 1 to end_symtab. */
static struct linetable *
arrange_linetable (oldLineTb)
if (inclLength == 0) {
inclTable = (InclTable*)
xmalloc (sizeof (InclTable) * INITIAL_INCLUDE_TABLE_LENGTH);
- bzero (inclTable, sizeof (InclTable) * INITIAL_INCLUDE_TABLE_LENGTH);
+ memset (inclTable, '\0', sizeof (InclTable) * INITIAL_INCLUDE_TABLE_LENGTH);
inclLength = INITIAL_INCLUDE_TABLE_LENGTH;
inclIndx = 0;
}
inclLength += INITIAL_INCLUDE_TABLE_LENGTH;
inclTable = (InclTable*)
xrealloc (inclTable, sizeof (InclTable) * inclLength);
- bzero (inclTable+inclLength-INITIAL_INCLUDE_TABLE_LENGTH,
- sizeof (InclTable)*INITIAL_INCLUDE_TABLE_LENGTH);
+ memset (inclTable+inclLength-INITIAL_INCLUDE_TABLE_LENGTH,
+ '\0', sizeof (InclTable)*INITIAL_INCLUDE_TABLE_LENGTH);
}
inclTable [inclIndx].name = cs->c_name;
if (!(offset = first_fun_line_offset))
goto return_after_cleanup;
- bzero (&main_subfile, sizeof (main_subfile));
+ memset (&main_subfile, '\0', sizeof (main_subfile));
first_fun_line_offset = 0;
if (inclIndx == 0)
tmpSubfile = inclTable[ii].subfile = (struct subfile*)
xmalloc (sizeof (struct subfile));
- bzero (tmpSubfile, sizeof (struct subfile));
+ memset (tmpSubfile, '\0', sizeof (struct subfile));
firstLine = &(inclTable[ii].funStartLine);
/* enter include file's lines now. */
inclIndx = 0;
/* start with a fresh subfile structure for the next file. */
- bzero (&main_subfile, sizeof (struct subfile));
+ memset (&main_subfile, '\0', sizeof (struct subfile));
}
void
int functionstart = cs->c_value - textsec->vma;
- bzero (&tbInfo, sizeof (tbInfo));
+ memset (&tbInfo, '\0', sizeof (tbInfo));
/* keep reading blocks of data from the text section, until finding a zero
word and a traceback table. */
if (name[0] == '.')
++name;
- bzero (sym, sizeof (struct symbol));
+ memset (sym, '\0', sizeof (struct symbol));
/* default assumptions */
SYMBOL_VALUE (sym) = cs->c_value;
/* FIXME: I believe this is to avoid a Sun-specific hack somewhere.
Needs more investigation. */
- if (*name == ':' || (pp = (char *) index (name, ':')) == NULL)
+ if (*name == ':' || (pp = (char *) strchr(name, ':')) == NULL)
return NULL;
++pp;
{
int val;
+ free_linetab ();
+
if (bfd_seek(abfd, offset, L_SET) < 0)
return -1;
linetab_offset = offset;
linetab_size = size;
- make_cleanup (free, linetab); /* Be sure it gets de-allocated. */
return 0;
}
+
+static void
+free_linetab ()
+{
+ if (linetab)
+ free (linetab);
+ linetab = NULL;
+}
\f
/* dbx allows the text of a symbol name to be continued into the
next symbol name! When such a continuation is encountered
if (strtbl == NULL)
return -1;
- bcopy(&length, strtbl, sizeof length);
+ memcpy(strtbl, &length, sizeof length);
if (length == sizeof length)
return 0;
bfd *abfd;
struct coff_symfile_info *info;
char *name;
+ struct cleanup *back_to = make_cleanup (null_cleanup, 0);
info = (struct coff_symfile_info *) objfile -> sym_private;
symfile_bfd = abfd = objfile->obfd;
&& info->max_lineno_offset > info->min_lineno_offset) {
/* only read in the line # table if one exists */
+ make_cleanup (free_linetab, 0);
val = init_lineno(abfd, info->min_lineno_offset,
(int) (info->max_lineno_offset - info->min_lineno_offset));
minimal symbols for this objfile. */
install_minimal_symbols (objfile);
+
+ do_cleanups (back_to);
}
/* XCOFF-specific parsing routine for section offsets. */