* somread.c (som_symtab_read): Avoid using alloca for potentially
large buffers.
This commit is contained in:
parent
d0a0254a41
commit
f31b375174
2 changed files with 16 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2006-10-04 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* somread.c (som_symtab_read): Avoid using alloca for potentially
|
||||||
|
large buffers.
|
||||||
|
|
||||||
2006-10-04 Daniel Jacobowitz <dan@codesourcery.com>
|
2006-10-04 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
* arch-utils.h (gdbarch_info_fill): Remove duplicate prototype.
|
* arch-utils.h (gdbarch_info_fill): Remove duplicate prototype.
|
||||||
|
|
|
@ -88,15 +88,22 @@ som_symtab_read (bfd *abfd, struct objfile *objfile,
|
||||||
|
|
||||||
number_of_symbols = bfd_get_symcount (abfd);
|
number_of_symbols = bfd_get_symcount (abfd);
|
||||||
|
|
||||||
/* FIXME (alloca): could be quite large. */
|
/* Allocate a buffer to read in the debug info.
|
||||||
buf = alloca (symsize * number_of_symbols);
|
We avoid using alloca because the memory size could be so large
|
||||||
|
that we could hit the stack size limit. */
|
||||||
|
buf = xmalloc (symsize * number_of_symbols);
|
||||||
|
make_cleanup (xfree, buf);
|
||||||
bfd_seek (abfd, obj_som_sym_filepos (abfd), SEEK_SET);
|
bfd_seek (abfd, obj_som_sym_filepos (abfd), SEEK_SET);
|
||||||
val = bfd_bread (buf, symsize * number_of_symbols, abfd);
|
val = bfd_bread (buf, symsize * number_of_symbols, abfd);
|
||||||
if (val != symsize * number_of_symbols)
|
if (val != symsize * number_of_symbols)
|
||||||
error (_("Couldn't read symbol dictionary!"));
|
error (_("Couldn't read symbol dictionary!"));
|
||||||
|
|
||||||
/* FIXME (alloca): could be quite large. */
|
/* Allocate a buffer to read in the som stringtab section of
|
||||||
stringtab = alloca (obj_som_stringtab_size (abfd));
|
the debugging info. Again, we avoid using alloca because
|
||||||
|
the data could be so large that we could potentially hit
|
||||||
|
the stack size limitat. */
|
||||||
|
stringtab = xmalloc (obj_som_stringtab_size (abfd));
|
||||||
|
make_cleanup (xfree, stringtab);
|
||||||
bfd_seek (abfd, obj_som_str_filepos (abfd), SEEK_SET);
|
bfd_seek (abfd, obj_som_str_filepos (abfd), SEEK_SET);
|
||||||
val = bfd_bread (stringtab, obj_som_stringtab_size (abfd), abfd);
|
val = bfd_bread (stringtab, obj_som_stringtab_size (abfd), abfd);
|
||||||
if (val != obj_som_stringtab_size (abfd))
|
if (val != obj_som_stringtab_size (abfd))
|
||||||
|
|
Loading…
Add table
Reference in a new issue