diff options
author | Alan Modra <amodra@gmail.com> | 2018-10-15 16:10:27 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-10-15 22:11:58 +1030 |
commit | bf2dd8d7cf4114b8a60dbb83b340f76b9b2474d1 (patch) | |
tree | 0ba71a654d503cc47523f3bf878d9e1d9c2c2d58 /binutils | |
parent | dc86962bf15e7b8dfdcebc17d83b9b48be0bd9cb (diff) | |
download | binutils-bf2dd8d7cf4114b8a60dbb83b340f76b9b2474d1.zip binutils-bf2dd8d7cf4114b8a60dbb83b340f76b9b2474d1.tar.gz binutils-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/ChangeLog | 15 | ||||
-rw-r--r-- | binutils/addr2line.c | 3 | ||||
-rw-r--r-- | binutils/ar.c | 3 | ||||
-rw-r--r-- | binutils/dlltool.c | 3 | ||||
-rw-r--r-- | binutils/nm.c | 3 | ||||
-rw-r--r-- | binutils/objcopy.c | 3 | ||||
-rw-r--r-- | binutils/objdump.c | 3 | ||||
-rw-r--r-- | binutils/size.c | 3 | ||||
-rw-r--r-- | binutils/strings.c | 3 | ||||
-rw-r--r-- | binutils/windmc.c | 3 | ||||
-rw-r--r-- | binutils/windres.c | 3 |
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 (); |