From 6317728958287f0876f04941267de5d87eefa578 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 27 Jun 2018 13:06:33 -0600 Subject: [PATCH] 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. --- gdb/ChangeLog | 4 ++++ gdb/machoread.c | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index be45bc31fa..a125b72e42 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 4c1d4f0bfa..07e1cdaf4f 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); -- 2.34.1