diff options
-rw-r--r-- | gdb/elfread.c | 19 | ||||
-rw-r--r-- | gdb/symfile.c | 17 | ||||
-rw-r--r-- | gdb/symfile.h | 5 |
3 files changed, 32 insertions, 9 deletions
diff --git a/gdb/elfread.c b/gdb/elfread.c index 5577149..0305bf21 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -1232,10 +1232,12 @@ elf_symfile_read_dwarf2 (struct objfile *objfile, if (!debugfile.empty ()) { - gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ())); + gdb_bfd_ref_ptr debug_bfd + (symfile_bfd_open_no_error (debugfile.c_str ())); - symbol_file_add_separate (debug_bfd, debugfile.c_str (), - symfile_flags, objfile); + if (debug_bfd != nullptr) + symbol_file_add_separate (debug_bfd, debugfile.c_str (), + symfile_flags, objfile); } else { @@ -1255,13 +1257,12 @@ elf_symfile_read_dwarf2 (struct objfile *objfile, if (fd.get () >= 0) { /* File successfully retrieved from server. */ - gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (symfile_path.get ())); + gdb_bfd_ref_ptr debug_bfd + (symfile_bfd_open_no_error (symfile_path.get ())); - if (debug_bfd == nullptr) - warning (_("File \"%s\" from debuginfod cannot be opened as bfd"), - filename); - else if (build_id_verify (debug_bfd.get (), build_id->size, - build_id->data)) + if (debug_bfd != nullptr + && build_id_verify (debug_bfd.get (), build_id->size, + build_id->data)) { symbol_file_add_separate (debug_bfd, symfile_path.get (), symfile_flags, objfile); diff --git a/gdb/symfile.c b/gdb/symfile.c index bb9981a..8ae2177 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -1769,6 +1769,23 @@ symfile_bfd_open (const char *name) return sym_bfd; } +/* See symfile.h. */ + +gdb_bfd_ref_ptr +symfile_bfd_open_no_error (const char *name) noexcept +{ + try + { + return symfile_bfd_open (name); + } + catch (const gdb_exception_error &err) + { + warning ("%s", err.what ()); + } + + return nullptr; +} + /* Return the section index for SECTION_NAME on OBJFILE. Return -1 if the section was not found. */ diff --git a/gdb/symfile.h b/gdb/symfile.h index b433e2b..7c800ea 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -276,6 +276,11 @@ extern void set_initial_language (void); extern gdb_bfd_ref_ptr symfile_bfd_open (const char *); +/* Like symfile_bfd_open, but will not throw an exception on error. + Instead, it issues a warning and returns nullptr. */ + +extern gdb_bfd_ref_ptr symfile_bfd_open_no_error (const char *) noexcept; + extern int get_section_index (struct objfile *, const char *); extern int print_symbol_loading_p (int from_tty, int mainline, int full); |