diff options
Diffstat (limited to 'gdb/mipsread.c')
-rw-r--r-- | gdb/mipsread.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gdb/mipsread.c b/gdb/mipsread.c index 1a1c668..3564821 100644 --- a/gdb/mipsread.c +++ b/gdb/mipsread.c @@ -1,5 +1,5 @@ /* Read a symbol table in MIPS' format (Third-Eye). - Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 1998 + Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 1998, 2001 Free Software Foundation, Inc. Contributed by Alessandro Forin (af@cs.cmu.edu) at CMU. Major work by Per Bothner, John Gilmore and Ian Lance Taylor at Cygnus Support. @@ -243,6 +243,7 @@ read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets, int got_entry_size = 8; int dt_mips_local_gotno = -1; int dt_mips_gotsym = -1; + struct cleanup *cleanups; /* We currently only know how to handle alpha dynamic symbols. */ @@ -262,10 +263,14 @@ read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets, str_secsize = bfd_get_section_size_before_reloc (si.str_sect); dyninfo_secsize = bfd_get_section_size_before_reloc (si.dyninfo_sect); got_secsize = bfd_get_section_size_before_reloc (si.got_sect); - sym_secptr = alloca (sym_secsize); - str_secptr = alloca (str_secsize); - dyninfo_secptr = alloca (dyninfo_secsize); - got_secptr = alloca (got_secsize); + sym_secptr = xmalloc (sym_secsize); + cleanups = make_cleanup (free, sym_secptr); + str_secptr = xmalloc (str_secsize); + make_cleanup (free, str_secptr); + dyninfo_secptr = xmalloc (dyninfo_secsize); + make_cleanup (free, dyninfo_secptr); + got_secptr = xmalloc (got_secsize); + make_cleanup (free, got_secptr); if (!bfd_get_section_contents (abfd, si.sym_sect, sym_secptr, (file_ptr) 0, sym_secsize)) @@ -418,6 +423,8 @@ read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets, prim_record_minimal_symbol (name, sym_value, ms_type, objfile); } + + do_cleanups (cleanups); } /* Initialization */ |