* bfd-in.h (bfd_elf32_arm_set_target_relocs): Add "bfd *"
	argument and extra last argument.
	* bfd-in2.h: Regenerate.
	* elf32-arm.c (elf32_arm_obj_tdata): Add no_enum_size_warning
	member.
	(bfd_elf32_arm_set_target_relocs): Add "bfd *" argument and
	extra last argument.  Set no_enum_size_warning appropriately.
	(elf32_arm_merge_eabi_attributes): Improve enum sizes
	diagnostic, suppressing it when no_enum_size_warning dictates.

	ld/
	* ld.texinfo: Document --no-enum-size-warning.
	* emultempl/armelf.em (no_enum_size_warning): New.
	(arm_elf_create_output_section_statements): Correct typo
	in comment.  Pass no_enum_size_warning to
	bfd_elf32_arm_set_target_relocs.
	(PARSE_AND_LIST_PROLOGUE): Define OPTION_NO_ENUM_SIZE_WARNING.
	(PARSE_AND_LIST_OPTIONS): Document --no-enum-size-warning.
	(PARSE_AND_LIST_ARGS_CASES): Add OPTION_NO_ENUM_SIZE_WARNING
	case.
This commit is contained in:
Mark Shinwell 2007-03-20 14:24:57 +00:00
parent cb2eed6375
commit bf21ed7807
7 changed files with 65 additions and 9 deletions

View File

@ -1,3 +1,15 @@
2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
* bfd-in.h (bfd_elf32_arm_set_target_relocs): Add "bfd *"
argument and extra last argument.
* bfd-in2.h: Regenerate.
* elf32-arm.c (elf32_arm_obj_tdata): Add no_enum_size_warning
member.
(bfd_elf32_arm_set_target_relocs): Add "bfd *" argument and
extra last argument. Set no_enum_size_warning appropriately.
(elf32_arm_merge_eabi_attributes): Improve enum sizes
diagnostic, suppressing it when no_enum_size_warning dictates.
2007-03-20 Nick Clifton <nickc@redhat.com>
PR binutils/3535

View File

@ -902,7 +902,8 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation
(bfd *, struct bfd_link_info *);
void bfd_elf32_arm_set_target_relocs
(struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix);
(bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);

View File

@ -909,7 +909,8 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation
(bfd *, struct bfd_link_info *);
void bfd_elf32_arm_set_target_relocs
(struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix);
(bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
int);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);

View File

@ -2064,6 +2064,9 @@ struct elf32_arm_obj_tdata
aeabi_attribute known_eabi_attributes[NUM_KNOWN_ATTRIBUTES];
aeabi_attribute_list *other_eabi_attributes;
/* Zero to warn when linking objects with incompatible enum sizes. */
int no_enum_size_warning;
};
#define elf32_arm_tdata(abfd) \
@ -3858,12 +3861,14 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd,
/* Set target relocation values needed during linking. */
void
bfd_elf32_arm_set_target_relocs (struct bfd_link_info *link_info,
bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
struct bfd_link_info *link_info,
int target1_is_rel,
char * target2_type,
int fix_v4bx,
int use_blx,
bfd_arm_vfp11_fix vfp11_fix)
bfd_arm_vfp11_fix vfp11_fix,
int no_enum_warn)
{
struct elf32_arm_link_hash_table *globals;
@ -3884,6 +3889,8 @@ bfd_elf32_arm_set_target_relocs (struct bfd_link_info *link_info,
globals->fix_v4bx = fix_v4bx;
globals->use_blx |= use_blx;
globals->vfp11_fix = vfp11_fix;
elf32_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
}
/* The thumb form of a long branch is a bit finicky, because the offset
@ -7193,10 +7200,15 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
out_attr[i].i = in_attr[i].i;
}
else if (in_attr[i].i != AEABI_enum_forced_wide
&& out_attr[i].i != in_attr[i].i)
&& out_attr[i].i != in_attr[i].i
&& !elf32_arm_tdata (obfd)->no_enum_size_warning)
{
const char *aeabi_enum_names[] =
{ "", "variable-size", "32-bit", "" };
_bfd_error_handler
(_("ERROR: %B: Conflicting enum sizes"), ibfd);
(_("warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"),
ibfd, aeabi_enum_names[in_attr[i].i],
aeabi_enum_names[out_attr[i].i]);
}
}
break;

View File

@ -1,3 +1,15 @@
2007-03-18 Mark Shinwell <shinwell@codesourcery.com>
* ld.texinfo: Document --no-enum-size-warning.
* emultempl/armelf.em (no_enum_size_warning): New.
(arm_elf_create_output_section_statements): Correct typo
in comment. Pass no_enum_size_warning to
bfd_elf32_arm_set_target_relocs.
(PARSE_AND_LIST_PROLOGUE): Define OPTION_NO_ENUM_SIZE_WARNING.
(PARSE_AND_LIST_OPTIONS): Document --no-enum-size-warning.
(PARSE_AND_LIST_ARGS_CASES): Add OPTION_NO_ENUM_SIZE_WARNING
case.
2007-03-19 Bernd Schmidt <bernd.schmidt@analog.com>
* configure.tgt (bfin-*-elf, bfin-*-uclinux*): Add targ_extra_libpath.

View File

@ -36,6 +36,7 @@ static char *target2_type = "${TARGET2_TYPE}";
static int fix_v4bx = 0;
static int use_blx = 0;
static bfd_arm_vfp11_fix vfp11_denorm_fix = BFD_ARM_VFP11_FIX_DEFAULT;
static int no_enum_size_warning = 0;
static void
gld${EMULATION_NAME}_before_parse (void)
@ -233,13 +234,14 @@ arm_elf_finish (void)
thumb_entry_symbol);
}
/* This is a convenitent point to tell BFD about target specific flags.
/* This is a convenient point to tell BFD about target specific flags.
After the output has been created, but before inputs are read. */
static void
arm_elf_create_output_section_statements (void)
{
bfd_elf32_arm_set_target_relocs (&link_info, target1_is_rel, target2_type,
fix_v4bx, use_blx, vfp11_denorm_fix);
bfd_elf32_arm_set_target_relocs (output_bfd, &link_info, target1_is_rel,
target2_type, fix_v4bx, use_blx,
vfp11_denorm_fix, no_enum_size_warning);
}
EOF
@ -256,6 +258,7 @@ PARSE_AND_LIST_PROLOGUE='
#define OPTION_FIX_V4BX 306
#define OPTION_USE_BLX 307
#define OPTION_VFP11_DENORM_FIX 308
#define OPTION_NO_ENUM_SIZE_WARNING 309
'
PARSE_AND_LIST_SHORTOPTS=p
@ -270,6 +273,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "fix-v4bx", no_argument, NULL, OPTION_FIX_V4BX},
{ "use-blx", no_argument, NULL, OPTION_USE_BLX},
{ "vfp11-denorm-fix", required_argument, NULL, OPTION_VFP11_DENORM_FIX},
{ "no-enum-size-warning", no_argument, NULL, OPTION_NO_ENUM_SIZE_WARNING},
'
PARSE_AND_LIST_OPTIONS='
@ -281,6 +285,7 @@ PARSE_AND_LIST_OPTIONS='
fprintf (file, _(" --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n"));
fprintf (file, _(" --use-blx Enable use of BLX instructions\n"));
fprintf (file, _(" --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"));
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible enum sizes\n"));
'
PARSE_AND_LIST_ARGS_CASES='
@ -326,6 +331,10 @@ PARSE_AND_LIST_ARGS_CASES='
else
einfo (_("Unrecognized VFP11 fix type '\''%s'\''.\n"), optarg);
break;
case OPTION_NO_ENUM_SIZE_WARNING:
no_enum_size_warning = 1;
break;
'
# We have our own after_open and before_allocation functions, but they call

View File

@ -5519,6 +5519,15 @@ instruction. The original instruction is then replaced with a branch to
the veneer. The extra cycles required to call and return from the veneer
are sufficient to avoid the erratum in both the scalar and vector cases.
@cindex NO_ENUM_SIZE_WARNING
@kindex --no-enum-size-warning
The @samp{--no-enum-size-warning} switch prevents the linker from
warning when linking object files that specify incompatible EABI
enumeration size attributes. For example, with this switch enabled,
linking of an object file using 32-bit enumeration values with another
using enumeration values fitted into the smallest possible space will
not be diagnosed.
@ifclear GENERIC
@lowersections
@end ifclear