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.
This commit is contained in:
Alan Modra
2018-10-15 16:10:27 +10:30
parent dc86962bf1
commit bf2dd8d7cf
18 changed files with 72 additions and 15 deletions

View File

@ -38,17 +38,24 @@ FUNCTION
bfd_init
SYNOPSIS
void bfd_init (void);
size_t bfd_init (void);
DESCRIPTION
This routine must be called before any other BFD function to
initialize magical internal data structures.
Returns a magic number, which may be used to check
that the bfd library is configured as expected by users.
.
.{* Value returned by bfd_init. *}
.
.#define BFD_INIT_MAGIC (sizeof (struct bfd_section))
*/
/* Actually, there is currently nothing for this function to do.
However, someday it may be needed, so keep it around. */
void
size_t
bfd_init (void)
{
return BFD_INIT_MAGIC;
}