This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Check return value of bfd_init


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4d5d104997da3b7beaaf7920caee40dcff8a78d9

commit 4d5d104997da3b7beaaf7920caee40dcff8a78d9
Author: Tom Tromey <tom@tromey.com>
Date:   Thu Oct 25 09:00:52 2018 -0600

    Check return value of bfd_init
    
    Alan recently added a way for BFD library users to check whether they
    were in fact loading a compatible version of BFD:
    
    https://sourceware.org/ml/binutils/2018-10/msg00198.html
    
    It seemed reasonable to me that gdb should do this check as well, in
    case someone is dynamically linking against BFD.
    
    Simon pointed out that an earlier version of the patch would cause a
    gdb crash if the test failed.  This version works around this by
    lowering the call to bfd_init and adding a comment explaining where
    'error' can safely be called in captured_main_1.
    
    gdb/ChangeLog
    2018-10-30  Tom Tromey  <tom@tromey.com>
    
    	* main.c (captured_main_1): Check return value of bfd_init.

Diff:
---
 gdb/ChangeLog | 4 ++++
 gdb/main.c    | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0207bec..940300f 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2018-10-30  Tom Tromey  <tom@tromey.com>
+
+	* main.c (captured_main_1): Check return value of bfd_init.
+
 2018-10-29  Sergio Durigan Junior  <sergiodj@redhat.com>
 
 	* common/offset-type.h (DEFINE_OFFSET_REL_OP): Delete.
diff --git a/gdb/main.c b/gdb/main.c
index 8709357..c71d5b5 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -506,7 +506,6 @@ captured_main_1 (struct captured_main_args *context)
   textdomain (PACKAGE);
 #endif
 
-  bfd_init ();
   notice_open_fds ();
 
   saved_command_line = (char *) xstrdup ("");
@@ -517,12 +516,17 @@ captured_main_1 (struct captured_main_args *context)
   setvbuf (stderr, NULL, _IONBF, BUFSIZ);
 #endif
 
+  /* Note: `error' cannot be called before this point, because the
+     caller will crash when trying to print the exception.  */
   main_ui = new ui (stdin, stdout, stderr);
   current_ui = main_ui;
 
   gdb_stdtargerr = gdb_stderr;	/* for moment */
   gdb_stdtargin = gdb_stdin;	/* for moment */
 
+  if (bfd_init () != BFD_INIT_MAGIC)
+    error (_("fatal error: libbfd ABI mismatch"));
+
 #ifdef __MINGW32__
   /* On Windows, argv[0] is not necessarily set to absolute form when
      GDB is found along PATH, without which relocation doesn't work.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]