aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-10-15 16:10:27 +1030
committerAlan Modra <amodra@gmail.com>2018-10-15 22:11:58 +1030
commitbf2dd8d7cf4114b8a60dbb83b340f76b9b2474d1 (patch)
tree0ba71a654d503cc47523f3bf878d9e1d9c2c2d58 /binutils
parentdc86962bf15e7b8dfdcebc17d83b9b48be0bd9cb (diff)
downloadfsf-binutils-gdb-bf2dd8d7cf4114b8a60dbb83b340f76b9b2474d1.zip
fsf-binutils-gdb-bf2dd8d7cf4114b8a60dbb83b340f76b9b2474d1.tar.gz
fsf-binutils-gdb-bf2dd8d7cf4114b8a60dbb83b340f76b9b2474d1.tar.bz2
BFD_INIT_MAGIC
This patch performs a run-time test that a shared libbfd.so has been compiled with the same size bfd_vma as that of apps using the library. On a 32-bit host it is easily possible to have one libbfd.so compiled to support 64-bit targets (or configured with --enable-64-bit-bfd) while another only supports 32-bit targets. The two libraries will have differently sized bfd_vma types, and if the wrong one is loaded all sorts of weird behaviour might be seen. bfd/ PR 23534 * init.c (BFD_INIT_MAGIC): Define. (bfd_init): Return BFD_INIT_MAGIC. bfd-in2.h: Regenerate. binutils/ PR 23534 * addr2line.c (main): Exit with fatal error if bfd_init returns an unexpected value. * ar.c (main): Likewise. * dlltool.c (identify_dll_for_implib): Likewise. * nm.c (main): Likewise. * objcopy.c (main): Likewise. * objdump.c (main): Likewise. * size.c (main): Likewise. * strings.c (main): Likewise. * windmc.c (main): Likewise. * windres.c (main): Likewise. gas/ PR 23534 * as.c (main): Exit with fatal error if bfd_init returns an unexpected value. ld/ PR 23534 * ldmain.c (main): Exit with fatal error if bfd_init returns an unexpected value.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog15
-rw-r--r--binutils/addr2line.c3
-rw-r--r--binutils/ar.c3
-rw-r--r--binutils/dlltool.c3
-rw-r--r--binutils/nm.c3
-rw-r--r--binutils/objcopy.c3
-rw-r--r--binutils/objdump.c3
-rw-r--r--binutils/size.c3
-rw-r--r--binutils/strings.c3
-rw-r--r--binutils/windmc.c3
-rw-r--r--binutils/windres.c3
11 files changed, 35 insertions, 10 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 8b84df5..d41894f 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,18 @@
+2018-10-15 Alan Modra <amodra@gmail.com>
+
+ PR 23534
+ * addr2line.c (main): Exit with fatal error if bfd_init
+ returns an unexpected value.
+ * ar.c (main): Likewise.
+ * dlltool.c (identify_dll_for_implib): Likewise.
+ * nm.c (main): Likewise.
+ * objcopy.c (main): Likewise.
+ * objdump.c (main): Likewise.
+ * size.c (main): Likewise.
+ * strings.c (main): Likewise.
+ * windmc.c (main): Likewise.
+ * windres.c (main): Likewise.
+
2018-10-11 Jordan Rupprecht <rupprecht@google.com>
Nick Clifton <nickc@redhat.com>
diff --git a/binutils/addr2line.c b/binutils/addr2line.c
index 64454f5..008e620 100644
--- a/binutils/addr2line.c
+++ b/binutils/addr2line.c
@@ -435,7 +435,8 @@ main (int argc, char **argv)
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
file_name = NULL;
diff --git a/binutils/ar.c b/binutils/ar.c
index 28a6789..b09efa0 100644
--- a/binutils/ar.c
+++ b/binutils/ar.c
@@ -718,7 +718,8 @@ main (int argc, char **argv)
START_PROGRESS (program_name, 0);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
xatexit (remove_output);
diff --git a/binutils/dlltool.c b/binutils/dlltool.c
index 21c95ef..2c75124 100644
--- a/binutils/dlltool.c
+++ b/binutils/dlltool.c
@@ -3504,7 +3504,8 @@ identify_dll_for_implib (void)
search_data.symname = "__NULL_IMPORT_DESCRIPTOR";
search_data.found = FALSE;
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
abfd = bfd_openr (identify_imp_name, 0);
if (abfd == NULL)
diff --git a/binutils/nm.c b/binutils/nm.c
index e46fffc..bc4fccb 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -1654,7 +1654,8 @@ main (int argc, char **argv)
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
while ((c = getopt_long (argc, argv, "aABCDef:gHhlnopPrSst:uvVvX:",
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index d8ae1f9..1d29059 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -5659,7 +5659,8 @@ main (int argc, char *argv[])
strip_symbols = STRIP_UNDEF;
discard_locals = LOCALS_UNDEF;
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
if (is_strip < 0)
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 4368fc0..9c3bce8 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -3842,7 +3842,8 @@ main (int argc, char **argv)
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
while ((c = getopt_long (argc, argv,
diff --git a/binutils/size.c b/binutils/size.c
index 47f14fc..3c72e48 100644
--- a/binutils/size.c
+++ b/binutils/size.c
@@ -137,7 +137,8 @@ main (int argc, char **argv)
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
while ((c = getopt_long (argc, argv, "ABHhVvdfotx", long_options,
diff --git a/binutils/strings.c b/binutils/strings.c
index 7655ab6..74545db 100644
--- a/binutils/strings.c
+++ b/binutils/strings.c
@@ -287,7 +287,8 @@ main (int argc, char **argv)
usage (stderr, 1);
}
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
if (optind >= argc)
diff --git a/binutils/windmc.c b/binutils/windmc.c
index f6171e4..c8771cd 100644
--- a/binutils/windmc.c
+++ b/binutils/windmc.c
@@ -956,7 +956,8 @@ main (int argc, char **argv)
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
target = NULL;
diff --git a/binutils/windres.c b/binutils/windres.c
index 7655848..9f4555b 100644
--- a/binutils/windres.c
+++ b/binutils/windres.c
@@ -812,7 +812,8 @@ main (int argc, char **argv)
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
res_init ();