From: Tom Tromey Date: Wed, 27 Jun 2018 19:06:33 +0000 (-0600) Subject: Fix crash in machoread.c X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6317728958287f0876f04941267de5d87eefa578;p=binutils-gdb.git Fix crash in machoread.c "./gdb ./gdb" was crashing for me on macOS. Investigating showed that macho_symfile_read was crashing because "symbol_table" was being freed too soon. This was introduced by my earlier patch to change macho_symfile_read to use a std::vector. Tested on macOS 10.13.5 using "./gdb ./gdb". This should un-break various already existing tests (testsuite/gdb.gdb at least), so no new test case. I'm checking this in as obvious. gdb/ChangeLog 2018-06-27 Tom Tromey * machoread.c (macho_symfile_read): Define "symbol_table" earlier. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index be45bc31fa2..a125b72e420 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2018-06-27 Tom Tromey + + * machoread.c (macho_symfile_read): Define "symbol_table" earlier. + 2018-06-27 Simon Marchi * gdb-gdb.py.in: Format using autopep8. diff --git a/gdb/machoread.c b/gdb/machoread.c index 4c1d4f0bfa7..07e1cdaf4f8 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -793,6 +793,9 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) bfd *abfd = objfile->obfd; long storage_needed; std::vector oso_vector; + /* We have to hold on to the symbol table until the call to + macho_symfile_read_all_oso at the end of this function. */ + gdb::def_vector symbol_table; /* Get symbols from the symbol table only if the file is an executable. The symbol table of object files is not relocated and is expected to @@ -812,8 +815,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) { long symcount; - gdb::def_vector symbol_table (storage_needed - / sizeof (asymbol *)); + symbol_table.resize (storage_needed / sizeof (asymbol *)); minimal_symbol_reader reader (objfile);