Add code to detect and either handle or issue an error message for binaries

created by the DEC ALPHA compilers.
This commit is contained in:
Nick Clifton
2005-07-14 07:07:46 +00:00
parent 1d9c9cd779
commit 15ac1d4f68
5 changed files with 34 additions and 6 deletions

View File

@@ -1,3 +1,12 @@
2005-07-14 Daniel Marques <marques@cs.cornell.edu>
Nick Clifton <nickc@redhat.com>
* coff-alpha.c (alpha_ecoff_bad_format_hook): Detect compressed
Alpha binaries and issue a helpful error message.
(alpha_ecoff_swap_reloc_out): Increase maximum allowed internal
symbol index to 15 to allow for binaries produced by DEC
compilers.
2005-07-13 Steve Ellcey <sje@cup.hp.com>
* bfd.m4 (BFD_NEED_DECLARATION): Remove.

View File

@@ -481,10 +481,16 @@ alpha_ecoff_bad_format_hook (abfd, filehdr)
{
struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
if (ALPHA_ECOFF_BADMAG (*internal_f))
return FALSE;
if (! ALPHA_ECOFF_BADMAG (*internal_f))
return TRUE;
return TRUE;
if (ALPHA_ECOFF_COMPRESSEDMAG (*internal_f))
(*_bfd_error_handler)
(_("%B: Cannot handle compressed Alpha binaries.\n"
" Use compiler flags, or objZ, to generate uncompressed binaries."),
abfd);
return FALSE;
}
/* This is a hook called by coff_real_object_p to create any backend
@@ -603,8 +609,11 @@ alpha_ecoff_swap_reloc_out (abfd, intern, dst)
size = intern->r_size;
}
/* XXX FIXME: The maximum symndx value used to be 14 but this
fails with object files prodiced by DEC's C++ compiler.
Where does the value 14 (or 15) come from anyway ? */
BFD_ASSERT (intern->r_extern
|| (intern->r_symndx >= 0 && intern->r_symndx <= 14));
|| (intern->r_symndx >= 0 && intern->r_symndx <= 15));
H_PUT_64 (abfd, intern->r_vaddr, ext->r_vaddr);
H_PUT_32 (abfd, symndx, ext->r_symndx);

View File

@@ -1,3 +1,8 @@
2005-07-14 Daniel Marques <marques@cs.cornell.edu>
* alpha.h (ALPHA_ECOFF_COMPRESSEDMAG): Define.
* ecoff.h (ALPHA_MAGIC_COMPRESSED): Define.
2005-05-10 Nick Clifton <nickc@redhat.com>
* Update the address and phone number of the FSF organization in

View File

@@ -1,7 +1,7 @@
/* ECOFF support on Alpha machines.
coff/ecoff.h must be included before this file.
Copyright 2001 Free Software Foundation, Inc.
Copyright 2001, 2005 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -34,6 +34,9 @@ struct external_filehdr
#define ALPHA_ECOFF_BADMAG(x) \
((x).f_magic != ALPHA_MAGIC && (x).f_magic != ALPHA_MAGIC_BSD)
#define ALPHA_ECOFF_COMPRESSEDMAG(x) \
((x).f_magic == ALPHA_MAGIC_COMPRESSED)
/* The object type is encoded in the f_flags. */
#define F_ALPHA_OBJECT_TYPE_MASK 0x3000
#define F_ALPHA_NO_SHARED 0x1000

View File

@@ -2,7 +2,7 @@
This does not include symbol information, found in sym.h and
symconst.h.
Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -41,6 +41,8 @@
/* Alpha magic numbers used in filehdr. */
#define ALPHA_MAGIC 0x183
#define ALPHA_MAGIC_BSD 0x185
/* A compressed version of an ALPHA_MAGIC file created by DEC's tools. */
#define ALPHA_MAGIC_COMPRESSED 0x188
/* Magic numbers used in a.out header. */
#define ECOFF_AOUT_OMAGIC 0407 /* not demand paged (ld -N). */